commit 3d59b1440583824e009289f256c1663b2f532280 Author: Niels Nübel Date: Fri Dec 4 11:11:35 2020 +0100 init diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..517400a --- /dev/null +++ b/.babelrc @@ -0,0 +1,15 @@ +{ + "presets": [ + [ + "@babel/preset-env", { + "corejs": "3", + "useBuiltIns": "usage", + "debug": false + }] + ], + "plugins": [ + "@babel/plugin-syntax-dynamic-import", + "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-object-rest-spread" + ] +} diff --git a/.bashrc b/.bashrc new file mode 100755 index 0000000..716cede --- /dev/null +++ b/.bashrc @@ -0,0 +1,2 @@ +# Launch Zsh +exec zsh diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000..0da72d5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false + +[*.php] +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25e3d21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +### WebStorm/IntelliJ ### +/.idea + +# Dependency directories +/node_modules + +# Build generated +/dist +/archives +/sourcefiles +/releasefiles +/package diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..15a0605 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Joomla Boilerplate +Boilerplate files for Joomla! extensions. + +# Installation +The boilerplates can be installed as-is using the Extension Manager. However, the component, module and plugin will be called Foo :) + +To create installable zip packages, you only need to zip the folder with the files and it is ready to be installed. + +# Customizing +To customize the boilerplates using your own name you need to take the following steps: + +1. Do a **case-sensitive** replace on the following strings and replace them with your own name: + * joomlaboilerplate + * JoomlaBoilerplate + * JOOMLABOILERPLATE +2. Do a **case-sensitive** replace on the following tags with their actual information: + * [DATE] + * [PROJECT_NAME] + * [AUTHOR] + * [AUTHOR_EMAIL] + * [AUTHOR_URL] + * [COPYRIGHT] + * [PACKAGE_NAME] diff --git a/gulpfile.babel.js/config.js b/gulpfile.babel.js/config.js new file mode 100644 index 0000000..f2ca745 --- /dev/null +++ b/gulpfile.babel.js/config.js @@ -0,0 +1,154 @@ +export const pjson = require('../package.json'); + +export const config = { + browserSyncConfig: { + ghostMode: { + clicks: true, + scroll: true, + links: true, + forms: true + }, + server: { + baseDir: ['/dist/'] + }, + proxy: pjson.buildconfigs.proxy, + https: false, + open: false, + debugInfo: false, + watchTask: false, + notify: { + styles: [ + 'padding: 8px 16px;', + 'position: fixed;', + 'font-size: 12px;', + 'font-weight: bold', + 'z-index: 9999;', + 'top: inherit', + 'border-radius: 0', + 'right: 0;', + 'top: 0;', + 'color: #f4f8f9;', + 'background-color: #026277;', + 'text-transform: uppercase' + ] + } + }, + paths: { + src: './src/', + dest: './dist/', + copy: { + src: ['src/structure/**/**', 'src/structure/**/.*', '!src/structure/**/*.{php,html,xml,ini,less,json,js,css}', '!src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], + replacesrc: ['src/structure/**/**.{php,html,xml,ini,less,json,js,css}', 'src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], + dest: 'dist/', + watch: ['src/structure/**/*.{php,html,xml,ini,less,json,js,css}'], + }, + copyrelease: { + src: ['src/structure/**/**', 'src/structure/**/.*', '!src/structure/**/*.{php,html,xml,ini,less,json,js,css}', '!src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], + replacesrc: ['src/structure/**/**.{php,html,xml,ini,less,json,js,css}', 'src/structure/**/.*.{php,html,xml,ini,less,json,js,css}'], + dest: 'releasefiles/' + }, + cleaner: { + releasefiles: 'releasefiles/', + sourcefiles: 'sourcefiles/', + archives: 'archives/', + packages: 'package/' + }, + }, + packagefiles: [ + { + src: './releasefiles/components/com_kickboilerplate/**/**', + dest: 'sourcefiles/com_kickboilerplate/site' + }, + { + src: './releasefiles/administrator/components/com_kickboilerplate/**/**', + dest: 'sourcefiles/com_kickboilerplate/admin' + }, + { + src: './releasefiles/administrator/components/com_kickboilerplate/kickboilerplate.xml', + dest: 'sourcefiles/com_kickboilerplate/' + }, + { + src: './releasefiles/administrator/components/com_kickboilerplate/script.php', + dest: 'sourcefiles/com_kickboilerplate/' + }, + { + src: './releasefiles/media/com_kickboilerplate/**/**', + dest: 'sourcefiles/com_kickboilerplate/media' + }, + { + src: './releasefiles/plugins/system/kickboilerplate/**/**', + dest: 'sourcefiles/plg_system_kickboilerplate' + } + ], + package: [ + { + destination : 'archives/', + name: 'pkg_kickytp', + types: [ + { + extension: '.zip', + type: 'zip' + } + ], + folders: [ + 'package' + ], + files: [ + ] + } + ], + archiver: [ + { + destination : 'package/packages/', + name: 'plg_system_kickboilerplate', + suffixversion: false, + types: [ + { + extension: '.zip', + type: 'zip', + options: { + zlib: { 'level': 9 } + } + } + ], + folders: [ + 'sourcefiles/plg_system_kickboilerplate' + ], + files: [ + ] + }, + { + destination : 'package/packages/', + name: 'com_kickboilerplate', + suffixversion: false, + types: [ + { + extension: '.zip', + type: 'zip', + options: { + zlib: { 'level': 9 } + } + } + ], + folders: [ + 'sourcefiles/com_kickboilerplate' + ], + files: [ + ] + } + ] +}; + +export const isProd = process.env.NODE_ENV === 'production'; + +export const stringsreplace = extend({}, {"[VERSION]": pjson.version} , pjson.placeholder); + +function extend(target) { + var sources = [].slice.call(arguments, 1); + sources.forEach(function (source) { + for (var prop in source) { + target[prop] = source[prop]; + } + }); + return target; +} diff --git a/gulpfile.babel.js/index.js b/gulpfile.babel.js/index.js new file mode 100644 index 0000000..033afff --- /dev/null +++ b/gulpfile.babel.js/index.js @@ -0,0 +1,28 @@ +/* + * @title gulpfile.babel.js + * @description A directory file loader to include all the gulp tasks + * + */ + +// Dependencies +import gulp from 'gulp'; + +import { boilerplate } from './tasks/boilerplate'; +import { watch } from './tasks/watch'; +import { build } from './tasks/build'; +import { copy } from './tasks/copy'; +import { copyRelease } from './tasks/copy-release'; +import { cleaner } from './tasks/clean'; +import { copyPackageFiles } from './tasks/copy-packagefiles'; +import { buildArchives } from './tasks/archives'; +import { release } from './tasks/release'; + +exports.boilerplate = boilerplate; +exports.watch = watch; +exports.build = build; +exports.copyFiles = copy; +exports.copyRelease = copyRelease; +exports.cleaner = cleaner; +exports.copyPackageFiles = copyPackageFiles; +exports.archiver = buildArchives; +exports.release = release; diff --git a/gulpfile.babel.js/tasks/archives.js b/gulpfile.babel.js/tasks/archives.js new file mode 100644 index 0000000..4d29935 --- /dev/null +++ b/gulpfile.babel.js/tasks/archives.js @@ -0,0 +1,83 @@ +/* + * @title Package Files + * @description A task to copy images + */ + +// Dependencies +import fs from 'fs' +import archiver from 'archiver' + +// Config +import { config, pjson } from '../config'; + +// Task +export function buildArchives(cb) { + + const builder = async () => { + for (const archivesetup of config.archiver) { + await build(archivesetup) + }; + }; + + builder().then(() => { + cb() + }); +} + +const build = archivesetup => { + return new Promise((resolve, reject) => { + if (!fs.existsSync(archivesetup.destination)){ + fs.mkdirSync(archivesetup.destination, { recursive: true }); + } + + let finisher = 0; + + let forEach = archivesetup.types.forEach( function(item) { + let extensionname = archivesetup.destination + archivesetup.name + item.extension + if (archivesetup.suffixversion) { + extensionname = archivesetup.destination + archivesetup.name + '_' + pjson.version + item.extension; + } + let output = fs.createWriteStream(extensionname); + const archive = archiver((item.type).toString(), item.options); + output.on('close', function() { + finisher++; + console.log(archive.pointer() + ' total bytes'); + console.log('archiver has been finalized and the output file ('+archivesetup.name+') descriptor has closed.'); + + if(finisher == archivesetup.types.length) { + resolve() + } + }); + + // This event is fired when the data source is drained no matter what was the data source. + // It is not part of this library but rather from the NodeJS Stream API. + // @see: https://nodejs.org/api/stream.html#stream_event_end + output.on('end', function() { + console.log('Data has been drained'); + }); + + // good practice to catch warnings (ie stat failures and other non-blocking errors) + archive.on('warning', function(err) { + if (err.code === 'ENOENT') { + // log warning + } else { + // throw error + throw err; + } + }); + + archive.on('error', function(err) { + throw err; + }); + + archive.pipe(output); + + archivesetup.folders.forEach(function (folder) { + archive.directory(folder, false); + }) + + archive.finalize(); + }); + + }); +} diff --git a/gulpfile.babel.js/tasks/boilerplate.js b/gulpfile.babel.js/tasks/boilerplate.js new file mode 100644 index 0000000..c425fc7 --- /dev/null +++ b/gulpfile.babel.js/tasks/boilerplate.js @@ -0,0 +1,15 @@ +/** + * Automatic Release + * + * @description: Deploy Task for an automated Build Process + */ + +import { series } from 'gulp' + +import { copyBoilerplate } from './copy-boilerplate' +import { cleanBoilerplate } from './clean-boilerplate'; + +export const boilerplate = series( + cleanBoilerplate, + copyBoilerplate +); diff --git a/gulpfile.babel.js/tasks/build.js b/gulpfile.babel.js/tasks/build.js new file mode 100644 index 0000000..acad5fd --- /dev/null +++ b/gulpfile.babel.js/tasks/build.js @@ -0,0 +1,13 @@ +/** + * Automatic Deploy + * + * @description: Deploy Task for an automated Build Process + */ + +import { series } from 'gulp' + +import { copy } from './copy' + +export const build = series( + copy +); diff --git a/gulpfile.babel.js/tasks/clean-boilerplate.js b/gulpfile.babel.js/tasks/clean-boilerplate.js new file mode 100644 index 0000000..18a160f --- /dev/null +++ b/gulpfile.babel.js/tasks/clean-boilerplate.js @@ -0,0 +1,23 @@ +/* + * @title Copy + * @description A task to copy files to the output directory + */ + +// Dependencies +import { src } from 'gulp'; +import mergeStream from 'merge-stream'; +import plumber from "gulp-plumber"; +import errorHandler from "../util/errorHandler"; +import clean from "gulp-clean"; + +// Config +import { pjson } from '../config'; + +// Task +export function cleanBoilerplate() { + return mergeStream(pjson.boilerplate.files.map(function(item) { + return src(item.dest, {allowEmpty: true}) + .pipe(plumber({errorHandler})) + .pipe(clean({force: true})) + })) +} diff --git a/gulpfile.babel.js/tasks/clean.js b/gulpfile.babel.js/tasks/clean.js new file mode 100644 index 0000000..ed560d9 --- /dev/null +++ b/gulpfile.babel.js/tasks/clean.js @@ -0,0 +1,41 @@ +/* + * @title Scripts + * @description A task to concatenate and compress js files via webpack + */ + +// Dependencies +import { src, series } from 'gulp'; +import plumber from 'gulp-plumber'; +import clean from 'gulp-clean'; +import errorHandler from '../util/errorHandler.js'; + +// Config +import { config } from '../config'; + +// Task +export function deleteReleasefilesFolder() { + return src(config.paths.cleaner.releasefiles, {allowEmpty: true}) + .pipe(plumber({errorHandler})) + .pipe(clean({force: true})) +} + + +export function deleteSourcefilesFolder() { + return src(config.paths.cleaner.sourcefiles, {allowEmpty: true}) + .pipe(plumber({errorHandler})) + .pipe(clean({force: true})) +} + +export function deleteArchivesFolder() { + return src(config.paths.cleaner.archives, {allowEmpty: true}) + .pipe(plumber({errorHandler})) + .pipe(clean({force: true})) +} + +export function deletePackageFolder() { + return src(config.paths.cleaner.packages, {allowEmpty: true}) + .pipe(plumber({errorHandler})) + .pipe(clean({force: true})) +} + +export const cleaner = series(deleteReleasefilesFolder, deleteSourcefilesFolder, deleteArchivesFolder, deletePackageFolder); diff --git a/gulpfile.babel.js/tasks/copy-boilerplate.js b/gulpfile.babel.js/tasks/copy-boilerplate.js new file mode 100644 index 0000000..ece1189 --- /dev/null +++ b/gulpfile.babel.js/tasks/copy-boilerplate.js @@ -0,0 +1,52 @@ +/* + * @title Package Files + * @description A task to copy images + */ + +// Dependencies +import {src, dest, series} from 'gulp'; +import plumber from 'gulp-plumber'; +import changed from 'gulp-changed'; +import rename from 'gulp-rename'; +import mergeStream from 'merge-stream' +import errorHandler from '../util/errorHandler.js'; +import replaceStrings from '../util/replaceStrings.js'; + + +// Config +import { isProd, pjson } from '../config'; +import gulpif from "gulp-if"; + +// Task +function cleancopy() { + return mergeStream(pjson.boilerplate.files.map(function(item) { + return src(item.src) + .pipe(rename(function (path) { + path.dirname = path.dirname.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate); + path.basename = path.basename.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate); + })) + .pipe(plumber({errorHandler})) + .pipe(gulpif(!isProd, changed(item.dest))) + .pipe(dest(item.dest.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate))) + })) +} + +function replacecopy() { + return mergeStream(pjson.boilerplate.files.map(function(item) { + return src(item.replacesrc) + .pipe(rename(function (path) { + path.dirname = path.dirname.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate); + path.basename = path.basename.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate); + })) + .pipe(replaceStrings(pjson.casesensitive)) + .pipe(plumber({errorHandler})) + .pipe(gulpif(!isProd, changed(item.dest))) + .pipe(dest(item.dest.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate))) + })) +} + + +export const copyBoilerplate = series( + cleancopy, + replacecopy +); diff --git a/gulpfile.babel.js/tasks/copy-packagefiles.js b/gulpfile.babel.js/tasks/copy-packagefiles.js new file mode 100644 index 0000000..450a4af --- /dev/null +++ b/gulpfile.babel.js/tasks/copy-packagefiles.js @@ -0,0 +1,25 @@ +/* + * @title Package Files + * @description A task to copy images + */ + +// Dependencies +import { src, dest } from 'gulp'; +import plumber from 'gulp-plumber'; +import changed from 'gulp-changed'; +import mergeStream from 'merge-stream' +import errorHandler from '../util/errorHandler.js'; + +// Config +import {config, isProd} from '../config'; +import gulpif from "gulp-if"; + +// Task +export function copyPackageFiles() { + return mergeStream(config.packagefiles.map(function(item) { + return src([item.src]) + .pipe(plumber({errorHandler})) + .pipe(gulpif(!isProd, changed(item.dest))) + .pipe(dest(item.dest)) + })) +} diff --git a/gulpfile.babel.js/tasks/copy-release.js b/gulpfile.babel.js/tasks/copy-release.js new file mode 100644 index 0000000..ab1f33e --- /dev/null +++ b/gulpfile.babel.js/tasks/copy-release.js @@ -0,0 +1,33 @@ +/* + * @title Copy + * @description A task to copy files to the output directory + */ + +// Dependencies +import {src, dest, series} from 'gulp'; +import changed from 'gulp-changed'; +import replacestrings from '../util/replaceStrings.js'; +import gulpif from 'gulp-if'; + +// Config +import {config, isProd, stringsreplace} from '../config'; + +function cleancopy() { + return src(config.paths.copyrelease.src) + .pipe(gulpif(!isProd, changed(config.paths.copyrelease.dest))) + .pipe(dest(config.paths.copyrelease.dest)); +} + +function replacecopy() { + return src(config.paths.copyrelease.replacesrc) + .pipe(replacestrings(stringsreplace)) + .pipe(gulpif(!isProd, changed(config.paths.copyrelease.dest))) + .pipe(dest(config.paths.copyrelease.dest)); +} + +export const copyRelease = series( + cleancopy, + replacecopy +); + + diff --git a/gulpfile.babel.js/tasks/copy.js b/gulpfile.babel.js/tasks/copy.js new file mode 100644 index 0000000..cc60225 --- /dev/null +++ b/gulpfile.babel.js/tasks/copy.js @@ -0,0 +1,33 @@ +/* + * @title Copy + * @description A task to copy files to the output directory + */ + +// Dependencies +import {src, dest, series} from 'gulp'; +import changed from 'gulp-changed'; +import replacestrings from '../util/replaceStrings.js'; +import gulpif from 'gulp-if'; + +// Config +import {config, isProd, stringsreplace} from '../config'; + +function cleancopy() { + return src(config.paths.copy.src) + .pipe(gulpif(!isProd, changed(config.paths.copy.dest))) + .pipe(dest(config.paths.copy.dest)); +} + +function replacecopy() { + return src(config.paths.copy.replacesrc) + .pipe(replacestrings(stringsreplace)) + .pipe(gulpif(!isProd, changed(config.paths.copy.dest))) + .pipe(dest(config.paths.copy.dest)); +} + +export const copy = series( + cleancopy, + replacecopy +); + + diff --git a/gulpfile.babel.js/tasks/release.js b/gulpfile.babel.js/tasks/release.js new file mode 100644 index 0000000..0306a6b --- /dev/null +++ b/gulpfile.babel.js/tasks/release.js @@ -0,0 +1,22 @@ +/** + * Automatic Release + * + * @description: Deploy Task for an automated Build Process + */ + +import { series, parallel } from 'gulp' + +import { copyRelease } from './copy-release' +import { copyPackageFiles } from './copy-packagefiles' +import { buildArchives } from './archives' +import { cleaner, deleteReleasefilesFolder } from './clean'; + +// Config +import { config } from '../config'; + +export const release = series( + cleaner, + copyRelease, + copyPackageFiles, + buildArchives +); diff --git a/gulpfile.babel.js/tasks/server.js b/gulpfile.babel.js/tasks/server.js new file mode 100755 index 0000000..590146d --- /dev/null +++ b/gulpfile.babel.js/tasks/server.js @@ -0,0 +1,55 @@ +/* + * @title serve + * @description A task to initialise browser-sync + * either via proxy or serving the files directly + * depending on your settings + */ + +// Dependencies +import browserSync from 'browser-sync'; +import gulp from 'gulp'; + +// Config +import {config} from '../config'; + +// Task +// const server = browserSync.create(); + +export function serve(cb) { + // Build a condition when Proxy is active + let bsProxy; + let bsServer; + + // Condition for Proxy + if (config.browserSyncConfig.proxy != '') { + bsProxy = { + target: config.browserSyncConfig.proxy, + ws: true + }; + bsServer = false; + } else { + bsProxy = false; + bsServer = { + baseDir: [config.paths.dest] + }; + } + + browserSync.init({ + server: bsServer, + proxy: bsProxy, + notify: config.browserSyncConfig.notify, + open: config.browserSyncConfig.open, + https: config.browserSyncConfig.https, + ghostMode: config.browserSyncConfig.ghostMode, + debugInfo: config.browserSyncConfig.debugInfo, + watchTask: config.browserSyncConfig.watchTask, + }); + cb(); +} + +gulp.task('browser-sync', serve); + +export function reload(cb) { + browserSync.reload(); + cb(); +} diff --git a/gulpfile.babel.js/tasks/watch.js b/gulpfile.babel.js/tasks/watch.js new file mode 100755 index 0000000..9004b31 --- /dev/null +++ b/gulpfile.babel.js/tasks/watch.js @@ -0,0 +1,24 @@ +/* + * @title Watch + * @description A task to start the server and watch for changes. + */ + +// Dependencies +import gulp from 'gulp'; +import { series } from 'gulp'; + +// Tasks +import { reload, serve } from './server'; +import { copy } from './copy'; + +// Config +import { config } from '../config'; + +function watchFiles() { + gulp.watch(config.paths.copy.watch, series(copy, reload)); +} + +export const watch = series( + serve, + watchFiles +); diff --git a/gulpfile.babel.js/util/errorHandler.js b/gulpfile.babel.js/util/errorHandler.js new file mode 100755 index 0000000..f9e8559 --- /dev/null +++ b/gulpfile.babel.js/util/errorHandler.js @@ -0,0 +1,17 @@ +/* + * @title Error Handler + */ + +import notifier from "node-notifier"; + +function errorHandler(error) { + notifier.notify({ + title: 'Gulp Error', + message: error.message, + timeout: 3 + }); + console.error('\x1b[31m', error.message ,'\x1b[0m'); + this.emit('end'); +} + +export default errorHandler; diff --git a/gulpfile.babel.js/util/replaceStrings.js b/gulpfile.babel.js/util/replaceStrings.js new file mode 100644 index 0000000..e27d7a3 --- /dev/null +++ b/gulpfile.babel.js/util/replaceStrings.js @@ -0,0 +1,47 @@ +'use strict'; + +var through2 = require('through2'); +var gutil = require('gulp-util'); + +var PLUGIN_NAME = 'gulp-replace-task'; + +// plugin + +module.exports = function (opts) { + + return through2.obj(function (file, enc, cb) { + + if (file.isNull()) { + this.push(file); + return cb(); + } + + if (file.isStream()) { + this.emit('error', new gutil.PluginError(PLUGIN_NAME, + 'Streaming not supported')); + return cb(); + } + + var options = opts || {}; + var contents = file.contents.toString(); + + for (const [key, value] of Object.entries(opts)) { + key = key.replace('[','\\['); + key = key.replace(']','\\]'); + var re = new RegExp(key, 'g'); + contents = contents.replace(re, value); + } + + var result = contents; + if (result !== false) { + file.contents = new Buffer.from(result); + } else { + // preserve original file + } + + this.push(file); + cb(); + + }); + +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9e441c5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7374 @@ +{ + "name": "kicktemp-joomla-boilerplate", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.0.tgz", + "integrity": "sha512-jAbCtMANC9ptXxbSVXIqV/3H0bkh7iyyv6JS5lu10av45bcc2QmDNJXkASZCFwbBt75Q0AEq/BB+bNa3x1QgYQ==", + "dev": true + }, + "@babel/core": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.0.tgz", + "integrity": "sha512-iV7Gwg0DePKvdDZZWRTkj4MW+6/AbVWd4ZCg+zk8H1RVt5xBpUZS6vLQWwb3pyLg4BFTaGiQCPoJ4Ibmbne4fA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.0", + "@babel/helper-module-transforms": "^7.12.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.12.0", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.0.tgz", + "integrity": "sha512-NbDFJNjDgxE7IkrHp5gq2+Tr8bEdCLKYN90YDQEjMiTMUAFAcShNkaH8kydcmU0mEQTiQY0Ydy/+1xfS2OCEnw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.0", + "@babel/helper-validator-option": "^7.12.0", + "browserslist": "^4.12.0", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.0.tgz", + "integrity": "sha512-9tD1r9RK928vxvxcoNK8/7uwT7Q2DJZP1dnJmyMAJPwOF0yr8PPwqdpyw33lUpCfrJ765bOs5XNa4KSfUDWFSw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.0", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.0", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.0.tgz", + "integrity": "sha512-YBqH+3wLcom+tko8/JLgRcG8DMqORgmjqNRNI751gTioJSZHWFybO1mRoLtJtWIlYSHY+zT9LqqnbbK1c3KIVQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.0.tgz", + "integrity": "sha512-I0d/bgzgzgLsJMk7UZ0TN2KV3OGjC/t/9Saz8PKb9jrcEAXhgjGysOgp4PDKydIKjUv/gj2St4ae+ov8l+T9Xg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.0.tgz", + "integrity": "sha512-1ZTMoCiLSzTJLbq7mSaTHki4oIrBIf/dUbzdhwTrvtMU3ZNVKwQmGae3gSiqppo7G8HAgnXmc43rfEaD8yYLLQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.0", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.0.tgz", + "integrity": "sha512-9kycFdq2c9e7PXZOr2z/ZqTFF9OzFu287iFwYS+CiDVPuoTCfY8hoTsIqNQNetQjlqoRsRyJFrMG1uhGAR4EEw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.0", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.0.tgz", + "integrity": "sha512-NRfKaAQw/JCMsTFUdJI6cp4MoJGGVBRQTRSiW1nwlGldNqzjB9jqWI0SZqQksC724dJoKqwG+QqfS9ib7SoVsw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.0.tgz", + "integrity": "sha512-ao43U2ptSe+mIZAQo2nBV5Wx2Ie3i2XbLt8jCXZpv+bvLY1Twv0lak4YZ1Ps5OwbeLMAl3iOVScgGMOImBae1g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.0.tgz", + "integrity": "sha512-dssjXHzdMQal4q6GCSwDTVPEbyBLdd9+7aSlzAkQbrGEKq5xG8pvhQ7u2ktUrCLRmzQphZnSzILBL5ta4xSRlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.0.tgz", + "integrity": "sha512-JpNWix2VP2ue31r72fKytTE13nPX1fxl1mudfTaTwcDhl3iExz5NZjQBq012b/BQ6URWoc/onI73pZdYlAfihg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.0.tgz", + "integrity": "sha512-iON65YmIy/IpEgteYJ4HfO2q30SLdIxiyjNNlsSjSl0tUxLhSH9PljE5r6sczwdW64ZZzznYNcezdcROB+rDDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.0.tgz", + "integrity": "sha512-CXu9aw32FH/MksqdKvhpiH8pSvxnXJ33E7I7BGNE9VzNRpWgpNzvPpds/tW9E0pjmX9+D1zAHRyHbtyeTboo2g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.0.tgz", + "integrity": "sha512-h2fDMnwRwBiNMmTGAWqUo404Z3oLbrPE6hyATecyIbsEsrbM5gjLbfKQLb6hjiouMlGHH+yliYBbc4NPgWKE/g==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.0", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.0.tgz", + "integrity": "sha512-jSIHvHSuF+hBUIrvA2/61yIzhH+ceLOXGLTH1nwPvQlso/lNxXsoE/nvrCzY5M77KRzhKegB1CvdhWPZmYDZ5A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.0", + "@babel/helper-compilation-targets": "^7.12.0", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.0", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.12.0", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.0", + "@babel/plugin-proposal-numeric-separator": "^7.12.0", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.12.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.12.0", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/register": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.12.0.tgz", + "integrity": "sha512-2F2v0qYSAwrGyK9mZ8lIoUluHRzLTgkJ2oRXlLV9GVe/ze/sTFBiOocLRMSJYDB2lLiABlVC+pZHlZ8qihO1Xg==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.19", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "@babel/runtime": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.0.tgz", + "integrity": "sha512-lS4QLXQ2Vbw2ubfQjeQcn+BZgZ5+ROHW9f+DWjEp5Y+NHYmkRGKqHSJ1tuhbUauKu2nhZNTBIvsIQ8dXfY5Gjw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "applause": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/applause/-/applause-1.1.0.tgz", + "integrity": "sha1-0uoOGTxE8JEm1eRrnmp7wUWA7hM=", + "dev": true, + "requires": { + "cson-parser": "^1.1.0", + "js-yaml": "^3.3.0", + "lodash": "^3.10.0" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "archiver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-sync": { + "version": "2.26.12", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.12.tgz", + "integrity": "sha512-1GjAe+EpZQJgtKhWsxklEjpaMV0DrRylpHRvZWgOphDQt+bfLZjfynl/j1WjSFIx8ozj9j78g6Yk4TqD3gKaMA==", + "dev": true, + "requires": { + "browser-sync-client": "^2.26.12", + "browser-sync-ui": "^2.26.12", + "bs-recipes": "1.3.4", + "bs-snippet-injector": "^2.0.1", + "chokidar": "^3.4.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.0", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.1.1", + "ua-parser-js": "^0.7.18", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "browser-sync-client": { + "version": "2.26.12", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.12.tgz", + "integrity": "sha512-bEBDRkufKxrIfjOsIB1FN9itUEXr2oLtz1AySgSSr80K2AWzmtoYnxtVASx/i40qFrSdeI31pNvdCjHivihLVA==", + "dev": true, + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3", + "rxjs": "^5.5.6" + } + }, + "browser-sync-ui": { + "version": "2.26.12", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.12.tgz", + "integrity": "sha512-PkAJNf/TfCFTCkQUfXplR2Kp/+/lbCWFO9lrgLZsmxIhvMLx2pYZFBbTBIaem8qjXhld9ZcESUC8EdU5VWFJgQ==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^2.0.4", + "stream-throttle": "^0.1.3" + } + }, + "browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bs-snippet-injector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", + "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "dev": true + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compress-commons": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", + "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "dev": true, + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", + "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cson-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz", + "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=", + "dev": true, + "requires": { + "coffee-script": "^1.10.0" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "^3.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.581", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.581.tgz", + "integrity": "sha512-ALORbI23YkYJoVJWusSdmTq8vXH3TLFzniILE47uZkZOim135ZhoTCM7QlIuvmK78As5kLdANfy7kDIQvJ+iPw==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", + "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.4", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "fork-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", + "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + } + } + }, + "gulp-changed": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp-changed/-/gulp-changed-4.0.2.tgz", + "integrity": "sha512-rAvQt+ByaqrMuJLwucvxC+MC02Vh8ksiJ16hoQlk4xnmlHiLJMque2aXXQMmyocQac3RIjNRcyr7iG1TNH15GA==", + "dev": true, + "requires": { + "make-dir": "^3.0.0", + "plugin-error": "^1.0.1", + "replace-ext": "^1.0.0", + "through2": "^3.0.1", + "touch": "^3.1.0" + }, + "dependencies": { + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "gulp-clean": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.4.0.tgz", + "integrity": "sha512-DARK8rNMo4lHOFLGTiHEJdf19GuoBDHqGUaypz+fOhrvOs3iFO7ntdYtdpNxv+AzSJBx/JfypF0yEj9ks1IStQ==", + "dev": true, + "requires": { + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2", + "rimraf": "^2.6.2", + "through2": "^2.0.3", + "vinyl": "^2.1.0" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "gulp-if": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz", + "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==", + "dev": true, + "requires": { + "gulp-match": "^1.1.0", + "ternary-stream": "^3.0.0", + "through2": "^3.0.1" + }, + "dependencies": { + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "gulp-match": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", + "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.3" + } + }, + "gulp-plumber": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.1.tgz", + "integrity": "sha512-mctAi9msEAG7XzW5ytDVZ9PxWMzzi1pS2rBH7lA095DhMa6KEXjm+St0GOCc567pJKJ/oCvosVAZEpAey0q2eQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2", + "through2": "^2.0.3" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "gulp-rename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", + "dev": true + }, + "gulp-replace-task": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/gulp-replace-task/-/gulp-replace-task-0.11.0.tgz", + "integrity": "sha1-O/XE87DydFet7esQdHy7ZrJGP90=", + "dev": true, + "requires": { + "applause": "1.1.0", + "gulp-util": "^3.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "localtunnel": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.0.tgz", + "integrity": "sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg==", + "dev": true, + "requires": { + "axios": "0.19.0", + "debug": "4.1.1", + "openurl": "1.1.1", + "yargs": "13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "1.1.63", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", + "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==", + "dev": true + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.3", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.0" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true + }, + "socket.io-client": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.1.tgz", + "integrity": "sha512-YXmXn3pA8abPOY//JtYxou95Ihvzmg8U6kQyolArkIyLd0pgVhrfor/iMsox8cn07WCOOvvuJ6XKegzIucPutQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "indexof": "0.0.1", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", + "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", + "dev": true, + "requires": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "ternary-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz", + "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==", + "dev": true, + "requires": { + "duplexify": "^4.1.1", + "fork-stream": "^0.0.4", + "merge-stream": "^2.0.0", + "through2": "^3.0.1" + }, + "dependencies": { + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "object-path": "^0.9.0" + } + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "dev": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "dev": true + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "5.0.0-security.0" + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "zip-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", + "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f9e082e --- /dev/null +++ b/package.json @@ -0,0 +1,138 @@ +{ + "name": "sportsmanager", + "description": "", + "version": "0.0.1", + "scripts": { + "boilerplate": "cross-env NODE_ENV=development gulp boilerplate", + "build": "cross-env NODE_ENV=production gulp build", + "watch": "cross-env NODE_ENV=development gulp watch", + "cleaner": "cross-env NODE_ENV=production gulp cleaner", + "package": "cross-env NODE_ENV=production gulp copyPackageFiles", + "copy": "cross-env NODE_ENV=production gulp copyFiles", + "copyrelease": "cross-env NODE_ENV=production gulp copyRelease", + "archiver": "cross-env NODE_ENV=production gulp archiver", + "release": "cross-env NODE_ENV=production gulp release", + "download:joomla": "sh ./scripts/joomla.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nielsnuebel/com_sportsmanager.git" + }, + "keywords": [], + "author": { + "name": "Kicktemp GmbH", + "email": "hello@kicktemp.com", + "url": "https://kicktemp.com" + }, + "contributors": [ + { + "name": "Niels Nübel", + "email": "niels@kicktemp.com" + } + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/nielsnuebel/com_sportsmanager/issues" + }, + "homepage": "https://github.com/nielsnuebel/com_sportsmanager#readme", + "buildconfigs": { + "proxy": "http://com_sportsmanager.kick" + }, + "placeholder": { + "[UPDATEURL]": "https://kicktemp.shop/download?e=[PACKAGE_NAME]&v=[VERSION]", + "[PACKAGE_NAME]": "com_sportsmanager", + "[PROJECT_NAME]": "com_sportsmanager", + "[PRODUCT_NAME]": "SportsManager", + "[AUTHOR]": "Kicktemp GmbH", + "[AUTHOR_EMAIL]": "hello@kicktemp.com", + "[COPYRIGHT]": "Copyright © 2020 Kicktemp GmbH. All rights reserved.", + "[AUTHOR_URL]": "https://kicktemp.com", + "[DATE]": "17.07.2020", + "[PLUGINTYPE]": "system" + }, + "casesensitive": { + "joomlaboilerplate": "kickboilerplate", + "JoomlaBoilerplate": "KickBoilerPlate", + "JOOMLABOILERPLATE": "KICKBOILERPLATE" + }, + "boilerplate": { + "files": [ + { + "src": [ + "./boilerplates/plugin/system/**/**", + "./boilerplates/plugin/system/**/.*", + "!./boilerplates/plugin/system/**/*.{php,html,xml,ini,less,json,js,css}", + "!./boilerplates/plugin/system/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "replacesrc": [ + "./boilerplates/plugin/system/**/**.{php,html,xml,ini,less,json,js,css}", + "./boilerplates/plugin/system/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "dest": "src/structure/plugins/system/kickboilerplate" + }, + { + "src": [ + "./boilerplates/component/administrator/**/**", + "./boilerplates/component/administrator/**/.*", + "!./boilerplates/component/administrator/**/*.{php,html,xml,ini,less,json,js,css}", + "!./boilerplates/component/administrator/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "replacesrc": [ + "./boilerplates/component/administrator/**/**.{php,html,xml,ini,less,json,js,css}", + "./boilerplates/component/administrator/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "dest": "src/structure/administrator" + }, + { + "src": [ + "./boilerplates/component/components/**/**", + "./boilerplates/component/components/**/.*", + "!./boilerplates/component/components/**/*.{php,html,xml,ini,less,json,js,css}", + "!./boilerplates/component/components/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "replacesrc": [ + "./boilerplates/component/components/**/**.{php,html,xml,ini,less,json,js,css}", + "./boilerplates/component/components/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "dest": "src/structure/components" + }, + { + "src": [ + "./boilerplates/component/media/**/**", + "./boilerplates/component/media/**/.*", + "!./boilerplates/component/media/**/*.{php,html,xml,ini,less,json,js,css}", + "!./boilerplates/component/media/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "replacesrc": [ + "./boilerplates/component/media/**/**.{php,html,xml,ini,less,json,js,css}", + "./boilerplates/component/media/**/.*.{php,html,xml,ini,less,json,js,css}" + ], + "dest": "src/structure/media" + } + ] + }, + "devDependencies": { + "@babel/core": "^7.12.0", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/preset-env": "^7.12.0", + "@babel/register": "^7.12.0", + "archiver": "^5.0.2", + "browser-sync": "^2.26.12", + "core-js": "^3.6.5", + "cross-env": "^7.0.2", + "fs": "0.0.1-security", + "gulp": "^4.0.2", + "gulp-changed": "^4.0.2", + "gulp-clean": "^0.4.0", + "gulp-if": "^3.0.0", + "gulp-plumber": "^1.2.1", + "gulp-rename": "^2.0.0", + "gulp-replace-task": "^0.11.0", + "gulp-util": "^3.0.8", + "merge-stream": "^2.0.0", + "node-notifier": "^8.0.0", + "through2": "^4.0.2" + } +} diff --git a/scripts/joomla.sh b/scripts/joomla.sh new file mode 100644 index 0000000..260a84e --- /dev/null +++ b/scripts/joomla.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" +INSTALLDIR=$SCRIPTPATH/../dist/ + +if [ ! -d INSTALLDIR ]; then + mkdir -p ${INSTALLDIR} +fi + +current="$(curl -fsSL 'https://downloads.joomla.org/api/v1/latest/cms' | jq -r '.branches[3].version')" + +curl -o ${INSTALLDIR}joomla.tar.bz2 -SL https://github.com/joomla/joomla-cms/releases/download/${current}/Joomla_${current}-Stable-Full_Package.tar.bz2 +tar xfvj ${INSTALLDIR}joomla.tar.bz2 -C ${INSTALLDIR} +rm -f ${INSTALLDIR}joomla.tar.bz2 diff --git a/src/structure/administrator/components/com_sportsmanager/access.xml b/src/structure/administrator/components/com_sportsmanager/access.xml new file mode 100644 index 0000000..881e240 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/access.xml @@ -0,0 +1,10 @@ + + +
+ + + + + +
+
\ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/admin.sportsmanager.php b/src/structure/administrator/components/com_sportsmanager/admin.sportsmanager.php new file mode 100644 index 0000000..1bf68df --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/admin.sportsmanager.php @@ -0,0 +1,23 @@ +execute( JRequest::getVar('task')); + +// Redirect if set by the controller +//$controller->redirect(); + +?> diff --git a/src/structure/administrator/components/com_sportsmanager/controller.php b/src/structure/administrator/components/com_sportsmanager/controller.php new file mode 100644 index 0000000..6706eb1 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/controller.php @@ -0,0 +1,31 @@ +input; + $input->set('view', $input->getCmd('view', 'SportsManager')); + + // call parent behavior + parent::display($cachable); + } +} diff --git a/src/structure/administrator/components/com_sportsmanager/index.html b/src/structure/administrator/components/com_sportsmanager/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/install.php b/src/structure/administrator/components/com_sportsmanager/install.php new file mode 100644 index 0000000..b57b259 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/install.php @@ -0,0 +1,1603 @@ +database_exists()) { + $this->create_database(); + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'spieler', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'mannschaften', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'mannschaftsmitglieder', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'vereine', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'import', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'export', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'termine', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'terminsymbole', 0777)) + echo '

Error: Image directory cannot be created!

'; + + if (!JFolder::create(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'mannschaftswettbewerbe', 0777)) + echo '

Error: Image directory cannot be created!

'; + + $pfad = JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'termine'.DIRECTORY_SEPARATOR.'.htaccess'; + $inhalt = "# Dokumente der Terminverwaltung\n" + . "Deny from all\n"; + if (file_put_contents($pfad, $inhalt) === FALSE) + echo '

Fehler: Anlegen der .htaccess-Datei im Termineverzeichnis ist gescheitert!

'; + + if (!bildKopierenAngepasst(JPATH_ROOT.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_sportsmanager'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'spieler-m.png', JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'spieler'.DIRECTORY_SEPARATOR.'m.png', 180, 240, 1)) + die('Das Bild konnte nicht an die Zielposition kopiert werden.'); + + if (!bildKopierenAngepasst(JPATH_ROOT.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_sportsmanager'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'spieler-w.png', JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'spieler'.DIRECTORY_SEPARATOR.'w.png', 180, 240, 1)) + die('Das Bild konnte nicht an die Zielposition kopiert werden.'); + } + $parent->getParent()->setRedirectURL('index.php?option=com_sportsmanager'); + } + + function uninstall($parent) + { + $this->remove_database(); + + if (!JFolder::delete(JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager')) + echo '

Warning: Image directory could not be deleted!

'; + echo '

Sports Manager was successfully removed from Joomla.

'; + //echo '

' . JText::_('COM_SPORTSMANAGER_UNINSTALL_TEXT') . '

'; + } + + function update($parent) + { + // echo '

' . JText::sprintf('COM_SPORTSMANAGER_UPDATE_TEXT', $parent->get('manifest')->version) . '

'; + } + + function preflight($type, $parent) + { + // echo '

' . JText::_('COM_SPORTSMANAGER_PREFLIGHT_' . $type . '_TEXT') . '

'; + } + + function postflight($type, $parent) + { + // echo '

' . JText::_('COM_SPORTSMANAGER_POSTFLIGHT_' . $type . '_TEXT') . '

'; + } + + private function database_exists() { + $db =& JFactory::getDBO(); + + $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "sportsmanager_einstellungen' || name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + return count($rows) > 0; + } + + private function create_database() { + $db =& JFactory::getDBO(); + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_saison` (" + . "\n `saison_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saisonbezeichnung` varchar(30) DEFAULT NULL," + . "\n PRIMARY KEY (`saison_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_begegnung` (" + . "\n `begegnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `heim_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `gast_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spielort_id` int(11) DEFAULT NULL," + . "\n `tisch` tinytext DEFAULT NULL," + . "\n `zeitpunkt` datetime DEFAULT NULL," + . "\n `spieltag` smallint(6) DEFAULT NULL," + . "\n `heim_punkte` smallint(6) DEFAULT NULL," + . "\n `gast_punkte` smallint(6) DEFAULT NULL," + . "\n `heim_spielpunkte` smallint(6) DEFAULT NULL," + . "\n `gast_spielpunkte` smallint(6) DEFAULT NULL," + . "\n `nichtraucherschutz` tinyint(4) DEFAULT '0'," + . "\n PRIMARY KEY (`begegnung_id`)," + . "\n KEY `heim_team_id` (`heim_team_id`)," + . "\n KEY `gast_team_id` (`gast_team_id`)," + . "\n KEY `spielort_id` (`spielort_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_begegnung_historie` (" + . "\n `begegnung_historie_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `begegnung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `aktion` tinyint(4) DEFAULT '0'," + . "\n `zeitpunkt` datetime DEFAULT NULL," + . "\n `user_id` int(11) DEFAULT NULL," + . "\n `team_id` int(11) DEFAULT NULL," + . "\n `verantwortlich_team_id` int(11) DEFAULT NULL," + . "\n `kommentar` varchar(255) DEFAULT NULL," + . "\n `eingetragen` datetime DEFAULT NULL," + . "\n PRIMARY KEY (`begegnung_historie_id`)," + . "\n KEY `begegnung_id` (`begegnung_id`)," + . "\n KEY `user_id` (`user_id`)," + . "\n KEY `team_id` (`team_id`)," + . "\n KEY `verantwortlich_team_id` (`verantwortlich_team_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_individualwettbewerb` (" + . "\n `berechtigt_fuer_individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_individualwettbewerb_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_individualwettbewerb_id` (`berechtigt_individualwettbewerb_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_team` (" + . "\n `berechtigt_fuer_team_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_team_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_team_id` (`berechtigt_team_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_turnier` (" + . "\n `berechtigt_fuer_turnier_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_turnier_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_turnier_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_turnier_id` (`berechtigt_turnier_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_veranstalter` (" + . "\n `berechtigt_fuer_veranstalter_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_veranstalter_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_veranstalter_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_veranstalter_id` (`berechtigt_veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_veranstaltung` (" + . "\n `berechtigt_fuer_veranstaltung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_veranstaltung_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_veranstaltung_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_veranstaltung_id` (`berechtigt_veranstaltung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_verein` (" + . "\n `berechtigt_fuer_verein_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_verein_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_verein_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_verein_id` (`berechtigt_verein_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_einstellungen` (" + . "\n `name` char(64) NOT NULL DEFAULT ''," + . "\n `wert` char(255) DEFAULT NULL," + . "\n PRIMARY KEY (`name`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechnung` (" + . "\n `berechnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `session_id` datetime NOT NULL," + . "\n `typ` char(64) NOT NULL DEFAULT ''," + . "\n `parameter` char(255) DEFAULT NULL," + . "\n `id` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`berechnung_id`)," + . "\n KEY `session_id` (`session_id`)," + . "\n KEY `typ` (`typ`)," + . "\n KEY `id` (`typ`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_einstufung` (" + . "\n `einstufung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `prioritaet` tinyint(4) DEFAULT NULL," + . "\n `elo_min` smallint(6) DEFAULT NULL," + . "\n `elo_max` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`einstufung_id`)," + . "\n KEY `prioritaet` (`prioritaet`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_einstufung_rangliste` (" + . "\n `einstufung_rangliste_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `einstufung_id` int(11) NOT NULL," + . "\n `rangliste_id` int(11) NOT NULL," + . "\n `platz_min` smallint(6) DEFAULT NULL," + . "\n `platz_max` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`einstufung_rangliste_id`)," + . "\n KEY `einstufung_id` (`einstufung_id`)," + . "\n KEY `rangliste_id` (`rangliste_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_elo_cache` (" + . "\n `cache_datum` date NOT NULL," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `elo_einzel` smallint(6) DEFAULT NULL," + . "\n `elo_einzel_spiele` smallint(6) DEFAULT NULL," + . "\n `elo_doppel` smallint(6) DEFAULT NULL," + . "\n `elo_doppel_spiele` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`spieler_id`, `cache_datum`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb` (" + . "\n `individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstalter_id` int(11) NOT NULL DEFAULT '0'," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n `saetze` tinyint(4) DEFAULT NULL," + . "\n `tore` tinyint(4) DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`individualwettbewerb_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_spiel` (" + . "\n `individualwettbewerb_spiel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `zeitpunkt` datetime DEFAULT NULL," + . "\n `heim_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `heim_spieler_2_id` int(11) DEFAULT NULL," + . "\n `gast_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `gast_spieler_2_id` int(11) DEFAULT NULL," + . "\n `ergebnis` tinyint(4) DEFAULT NULL," + . "\n `ergebnis_detailliert` tinytext DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_spiel_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `zeitpunkt` (`zeitpunkt`)," + . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`)," + . "\n KEY `heim_spieler_2_id` (`heim_spieler_2_id`)," + . "\n KEY `gast_spieler_1_id` (`gast_spieler_1_id`)," + . "\n KEY `gast_spieler_2_id` (`gast_spieler_2_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_platzierung` (" + . "\n `individualwettbewerb_platzierung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_platzierung_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `platz` (`platz`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_ausgangsplatzierung` (" + . "\n `individualwettbewerb_ausgangsplatzierung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_ausgangsplatzierung_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `platz` (`platz`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_kategorie` (" + . "\n `kategorie_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `nummer` tinyint(4) DEFAULT NULL," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n PRIMARY KEY (`kategorie_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_team` (" + . "\n `mitglied_von_team_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `erster_spieltag` smallint(6) DEFAULT NULL," + . "\n `letzter_spieltag` smallint(6) DEFAULT NULL," + . "\n `ausgetreten` tinyint(1) DEFAULT '0'," + . "\n PRIMARY KEY (`mitglied_von_team_id`)," + . "\n KEY `spieler_id` (`spieler_id`)," + . "\n KEY `team_id` (`team_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_mitglied_von_verein` (" + . "\n `mitglied_von_verein_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `verein_id` int(11) NOT NULL DEFAULT '0'," + . "\n `mitgliedsstatus` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `ausgetreten` tinyint(1) DEFAULT '0'," + . "\n PRIMARY KEY (`mitglied_von_verein_id`)," + . "\n KEY `spieler_id` (`spieler_id`)," + . "\n KEY `verein_id` (`verein_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_moderator` (" + . "\n `moderator_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `moderator_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`moderator_id`)," + . "\n KEY `moderator_user_id` (`moderator_user_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_moderator_zugriff` (" + . "\n `moderator_zugriff_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `moderator_id` int(11) NOT NULL," + . "\n `zugriff` varchar(64) NOT NULL," + . "\n `zusatz` text," + . "\n PRIMARY KEY (`moderator_zugriff_id`)," + . "\n KEY `moderator_id` (`moderator_id`)," + . "\n KEY `zugriff` (`zugriff`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste` (" + . "\n `rangliste_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `system_id` int(11) NOT NULL DEFAULT '0'," + . "\n `streichergebnisse` tinyint(4) DEFAULT NULL," + . "\n `geschlecht` tinyint(4) DEFAULT NULL," + . "\n `minalter` tinyint(4) DEFAULT NULL," + . "\n `maxalter` tinyint(4) DEFAULT NULL," + . "\n `ohnealter` bool DEFAULT '0'," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `letzter_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`rangliste_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `system_id` (`system_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_punkte` (" + . "\n `rangliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n `punkte` smallint(6) DEFAULT NULL," + . "\n `teilnahmen` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`rangliste_id`, `spieler_id`)," + . "\n KEY `rangliste_platz` (`rangliste_id`, `platz`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_turnierdisziplin_punkte` (" + . "\n `rangliste_id` int(11) NOT NULL," + . "\n `spieler_id` int(11) NOT NULL," + . "\n `turnierdisziplin_id` int(11) NOT NULL," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n `punkte` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`rangliste_id`, `spieler_id`, `turnierdisziplin_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_system` (" + . "\n `rangliste_system_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `systembezeichnung` varchar(50) DEFAULT NULL," + . "\n `funktion` TEXT DEFAULT NULL," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`rangliste_system_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_system_punkte` (" + . "\n `rangliste_system_punkte_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `system_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz_min` smallint(6) DEFAULT NULL," + . "\n `platz_max` smallint(6) DEFAULT NULL," + . "\n `teilnehmer_min` smallint(6) DEFAULT NULL," + . "\n `teilnehmer_max` smallint(6) DEFAULT NULL," + . "\n `punkte` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`rangliste_system_punkte_id`)," + . "\n KEY `system_id` (`system_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_turnierdisziplin` (" + . "\n `rangliste_turnierdisziplin_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `rangliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `turnierdisziplin_id` int(11) NOT NULL DEFAULT '0'," + . "\n `system_id` int(11) DEFAULT NULL," + . "\n `wertung` float(4,2) DEFAULT '1'," + . "\n `doppel_teilwertung` float(4,2) DEFAULT '1'," + . "\n PRIMARY KEY (`rangliste_turnierdisziplin_id`)," + . "\n KEY `rangliste_id` (`rangliste_id`)," + . "\n KEY `turnierdisziplin_id` (`turnierdisziplin_id`)," + . "\n KEY `system_id` (`system_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste` (" + . "\n `bestenliste_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `letzter_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`bestenliste_id`)," + . "\n KEY `saison_id` (`saison_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_punkte` (" + . "\n `bestenliste_punkte_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_2_id` int(11) DEFAULT NULL," + . "\n `siege` smallint(6) DEFAULT NULL," + . "\n `unentschieden` smallint(6) DEFAULT NULL," + . "\n `niederlagen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_verloren` smallint(6) DEFAULT NULL," + . "\n `saetze_gewonnen` smallint(6) DEFAULT NULL," + . "\n `saetze_unentschieden` smallint(6) DEFAULT NULL," + . "\n `saetze_verloren` smallint(6) DEFAULT NULL," + . "\n `punkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `punkte_verloren` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`bestenliste_punkte_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `spieler_id` (`spieler_id`)," + . "\n KEY `spieler_2_id` (`spieler_2_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_veranstaltung` (" + . "\n `bestenliste_veranstaltung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`bestenliste_veranstaltung_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `veranstaltung_id` (`veranstaltung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_individualwettbewerb` (" + . "\n `bestenliste_individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`bestenliste_individualwettbewerb_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rechnung` (" + . "\n `rechnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `notiz` TEXT NOT NULL," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `verein_id` int(11) DEFAULT NULL," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `mitgliedsstatus` tinyint(4) NOT NULL," + . "\n `wertungskategorie` tinyint(4) NOT NULL," + . "\n PRIMARY KEY (`rechnung_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `verein_id` (`verein_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rechnung_spieler` (" + . "\n `rechnung_spieler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `rechnung_id` int(11) NOT NULL," + . "\n `spieler_id` int(11) NOT NULL," + . "\n PRIMARY KEY (`rechnung_spieler_id`)," + . "\n KEY `rechnung_id` (`rechnung_id`)," + . "\n KEY `spieler_id` (`spieler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_spieler` (" + . "\n `spieler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `nachname` varchar(30) DEFAULT NULL," + . "\n `vorname` varchar(30) NOT NULL DEFAULT ''," + . "\n `geschlecht` char(1) DEFAULT NULL," + . "\n `geburtsdatum` date DEFAULT NULL," + . "\n `geburtsjahr` smallint(5) unsigned DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(6) DEFAULT NULL," + . "\n `ort` varchar(30) DEFAULT NULL," + . "\n `landeskennung` varchar(10) DEFAULT NULL," + . "\n `telefon` varchar(25) DEFAULT NULL," + . "\n `mobil` varchar(25) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `spielernr` varchar(20) DEFAULT NULL," + . "\n `lizenznr` varchar(50) DEFAULT NULL," + . "\n `erstmals_gespielt` date DEFAULT NULL," + . "\n `zuletzt_gespielt` date DEFAULT NULL," + . "\n `pseudonym` varchar(30) DEFAULT NULL," + . "\n `bild_ausblenden` tinyint(1) DEFAULT '0'," + . "\n `einstufung_allgemein_id` int(11) DEFAULT NULL," + . "\n `einstufung_einzel_id` int(11) DEFAULT NULL," + . "\n `einstufung_doppel_id` int(11) DEFAULT NULL," + . "\n `aktueller_verein_id` int(11) DEFAULT NULL," + . "\n `elo_einzel_startwert` smallint(6) DEFAULT NULL," + . "\n `elo_einzel` smallint(6) DEFAULT NULL," + . "\n `elo_einzel_spiele` smallint(6) DEFAULT NULL," + . "\n `elo_doppel_startwert` smallint(6) DEFAULT NULL," + . "\n `elo_doppel` smallint(6) DEFAULT NULL," + . "\n `elo_doppel_spiele` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`spieler_id`)," + . "\n KEY `nachname` (`nachname`)," + . "\n KEY `vorname` (`vorname`)," + . "\n KEY `spielernr` (`spielernr`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_spieler_import` (" + . "\n `spieler_import_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `session_id` datetime NOT NULL," + . "\n `nachname` varchar(30) DEFAULT NULL," + . "\n `vorname` varchar(30) DEFAULT NULL," + . "\n `geschlecht` char(1) DEFAULT NULL," + . "\n `geburtsdatum` date DEFAULT NULL," + . "\n `geburtsjahr` smallint(5) unsigned DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(6) DEFAULT NULL," + . "\n `ort` varchar(30) DEFAULT NULL," + . "\n `landeskennung` varchar(10) DEFAULT NULL," + . "\n `telefon` varchar(25) DEFAULT NULL," + . "\n `mobil` varchar(25) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `spielernr` varchar(20) DEFAULT NULL," + . "\n `spielernr_alt` varchar(20) DEFAULT NULL," + . "\n `lizenznr` varchar(20) DEFAULT NULL," + . "\n `pseudonym` varchar(30) DEFAULT NULL," + . "\n `vereinsname` varchar(50) DEFAULT NULL," + . "\n `vereinssitz` varchar(30) DEFAULT NULL," + . "\n `veranstalterbezeichnung` varchar(50) DEFAULT NULL," + . "\n `mitgliedsstatus` tinyint(4) DEFAULT NULL," + . "\n PRIMARY KEY (`spieler_import_id`)," + . "\n KEY `spielernr` (`spielernr`)," + . "\n KEY `session_id` (`session_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_spielort` (" + . "\n `spielort_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `name` varchar(40) DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(10) DEFAULT NULL," + . "\n `ortsname` varchar(30) DEFAULT NULL," + . "\n `ortsteil` varchar(30) DEFAULT NULL," + . "\n `url` varchar(150) DEFAULT NULL," + . "\n `beschreibung` varchar(500) DEFAULT NULL," + . "\n `status` tinyint(1) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`spielort_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_team` (" + . "\n `team_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `teamgruppe_id` int(11) DEFAULT NULL," + . "\n `verein_id` int(11) DEFAULT NULL," + . "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `teamname` varchar(50) NOT NULL," + . "\n `tischtyp` varchar(200) DEFAULT NULL," + . "\n `tischeigenschaften` varchar(200) DEFAULT NULL," + . "\n `zusatzpunkte` float(6,2) DEFAULT NULL," + . "\n `pin` varchar(20) DEFAULT NULL," + . "\n `heimspiel_wochentag` tinyint(4) DEFAULT NULL," + . "\n `heimspiel_uhrzeit` smallint(6) DEFAULT NULL," + . "\n `heimspielort_id` int(11) DEFAULT NULL," + . "\n `nichtraucherschutz` tinyint(4) DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n `gesamtpunkte` float(6,2) DEFAULT NULL," + . "\n `begegnungspunkte` smallint(6) DEFAULT NULL," + . "\n `siege` smallint(6) DEFAULT NULL," + . "\n `unentschieden` smallint(6) DEFAULT NULL," + . "\n `niederlagen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_verloren` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_differenz` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_quotient` float(8,2) DEFAULT NULL," + . "\n `punkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `punkte_verloren` smallint(6) DEFAULT NULL," + . "\n `punkte_differenz` smallint(6) DEFAULT NULL," + . "\n `punkte_quotient` float(8,2) DEFAULT NULL," + . "\n `buchholz1` smallint(6) DEFAULT NULL," + . "\n `buchholz2` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`team_id`)," + . "\n KEY `heimspielort_id` (`heimspielort_id`)," + . "\n KEY `verein_id` (`verein_id`)," + . "\n KEY `teamgruppe_id` (`teamgruppe_id`)," + . "\n KEY `veranstaltung_id` (`veranstaltung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamansprechpartner` (" + . "\n `kontaktperson_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `nachname` varchar(30) DEFAULT NULL," + . "\n `vorname` varchar(30) NOT NULL DEFAULT ''," + . "\n `geschlecht` tinyint(4) DEFAULT NULL," + . "\n `geburtsdatum` date DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(6) DEFAULT NULL," + . "\n `ort` varchar(30) DEFAULT NULL," + . "\n `telefon` varchar(25) DEFAULT NULL," + . "\n `mobil` varchar(25) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `url` varchar(150) DEFAULT NULL," + . "\n `pseudonym` varchar(30) DEFAULT NULL," + . "\n PRIMARY KEY (`kontaktperson_id`)," + . "\n KEY `team_id` (`team_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamspiel` (" + . "\n `teamspiel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `begegnung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `teamspiel_nummer` smallint(6) DEFAULT NULL," + . "\n `heim_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `heim_spieler_2_id` int(11) DEFAULT NULL," + . "\n `gast_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `gast_spieler_2_id` int(11) DEFAULT NULL," + . "\n `teamspiel_heim_punkte` smallint(6) DEFAULT NULL," + . "\n `teamspiel_gast_punkte` smallint(6) DEFAULT NULL," + . "\n `teamspiel_heim_spielpunkte` smallint(6) DEFAULT NULL," + . "\n `teamspiel_gast_spielpunkte` smallint(6) DEFAULT NULL," + . "\n `ergebnis_detailliert` tinytext DEFAULT NULL," + . "\n PRIMARY KEY (`teamspiel_id`)," + . "\n KEY `begegnung_id` (`begegnung_id`)," + . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`)," + . "\n KEY `heim_spieler_2_id` (`heim_spieler_2_id`)," + . "\n KEY `gast_spieler_1_id` (`gast_spieler_1_id`)," + . "\n KEY `gast_spieler_2_id` (`gast_spieler_2_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamspiel_modus` (" + . "\n `teamspiel_modus_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` varchar(50) NOT NULL DEFAULT ''," + . "\n `punktetyp` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `punkte_sieg_einzel` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `punkte_sieg_doppel` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `spielpunkte_wertung_einzel` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `spielpunkte_wertung_doppel` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `spielpunkte_bedingung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `spielernamen` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `heimtausch` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `modus` varchar(200) NOT NULL DEFAULT ''," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`teamspiel_modus_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_teamwechsel` (" + . "\n `teamwechsel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `von_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `zu_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `datum` date NOT NULL DEFAULT '0000-00-00'," + . "\n PRIMARY KEY (`teamwechsel_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin` (" + . "\n `termin_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_bezug_id` int(11) NOT NULL," + . "\n `erster_tag` date NOT NULL," + . "\n `letzter_tag` date NOT NULL," + . "\n `bezeichnung` text NOT NULL," + . "\n `beschreibung` text NOT NULL," + . "\n `ort` text NOT NULL," + . "\n `land` text NOT NULL," + . "\n `url` text NOT NULL," + . "\n `email` text NOT NULL," + . "\n `ergebnisse_url` text NOT NULL," + . "\n `ergebnisse_live` bool default '0'," + . "\n `bestaetigt` tinyint(1) NOT NULL," + . "\n PRIMARY KEY (`termin_id`)," + . "\n KEY `termin_bezug_id` (`termin_bezug_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_symbolanzeige` (" + . "\n `termin_symbolanzeige_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_symbol_id` int(11) NOT NULL," + . "\n `termin_id` int(11) NOT NULL," + . "\n PRIMARY KEY (`termin_symbolanzeige_id`)," + . "\n KEY `termin_symbol_id` (`termin_symbol_id`)," + . "\n KEY `termin_id` (`termin_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_symbol` (" + . "\n `termin_symbol_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `symboltitel` text NOT NULL," + . "\n `status` tinyint(1) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`termin_symbol_id`)," + . "\n KEY `status` (`status`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_aktion` (" + . "\n `termin_aktion_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_id` int(11) NOT NULL," + . "\n `typ` tinyint(4) NOT NULL," + . "\n `benachrichtigung_email` text NOT NULL," + . "\n `aktion_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `aktion_zeitpunkt` datetime NOT NULL," + . "\n `aktion_kommentar` text NOT NULL," + . "\n `moderation_user_id` int(11) DEFAULT '0'," + . "\n `moderation_zeitpunkt` datetime," + . "\n `moderation_kommentar` text NOT NULL," + . "\n `status` tinyint(4) NOT NULL," + . "\n PRIMARY KEY (`termin_aktion_id`)," + . "\n KEY `termin_id` (`termin_id`)," + . "\n KEY `typ` (`typ`)," + . "\n KEY `status` (`status`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_zusatz` (" + . "\n `termin_zusatz_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_id` int(11) NOT NULL," + . "\n `zusatz` text NOT NULL," + . "\n PRIMARY KEY (`termin_zusatz_id`)," + . "\n KEY `termin_id` (`termin_id`)," + . "\n KEY `ix_length_zusatz` (`zusatz`(16))" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bezeichnungszusatz` (" + . "\n `termin_bezeichnungszusatz_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnungszusatz` text NOT NULL," + . "\n `titel` text NOT NULL," + . "\n PRIMARY KEY (`termin_bezeichnungszusatz_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bezeichnung` (" + . "\n `termin_bezeichnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` text NOT NULL," + . "\n PRIMARY KEY (`termin_bezeichnung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bundesland` (" + . "\n `termin_bundesland_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bundesland` text NOT NULL," + . "\n PRIMARY KEY (`termin_bundesland_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_land` (" + . "\n `termin_land_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `land` text NOT NULL," + . "\n PRIMARY KEY (`termin_land_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turnier` (" + . "\n `turnier_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `turnierbezeichnung` varchar(50) DEFAULT NULL," + . "\n `turnierort` varchar(50) DEFAULT NULL," + . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `letzter_tag` date DEFAULT NULL," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`turnier_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turnierdisziplin` (" + . "\n `turnierdisziplin_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turnier_id` int(11) NOT NULL DEFAULT '0'," + . "\n `disziplin` varchar(50) DEFAULT NULL," + . "\n `kuerzel` varchar(20) DEFAULT NULL," + . "\n `beginn` datetime DEFAULT NULL," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `voranmeldung` datetime DEFAULT NULL," + . "\n `voranmeldungen_rangliste_id` int(11) DEFAULT NULL," + . "\n `voranmeldungen_reihenfolge` tinyint(4) DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`turnierdisziplin_id`)," + . "\n KEY `turnier_id` (`turnier_id`)," + . "\n KEY `voranmeldungen_rangliste_id` (`voranmeldungen_rangliste_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turniermeldung` (" + . "\n `turniermeldung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turnierdisziplin_id` int(11) NOT NULL DEFAULT '0'," + . "\n `meldungsgruppe_id` int(11) DEFAULT NULL," + . "\n `rundenstufe` tinyint(4) DEFAULT NULL," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`turniermeldung_id`)," + . "\n KEY `turnierdisziplin_id` (`turnierdisziplin_id`)," + . "\n KEY `turnierdisziplin_rundenstufe_platz` (`turnierdisziplin_id`, `rundenstufe`, `platz`)," + . "\n KEY `meldungsgruppe_id` (`meldungsgruppe_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turniermeldung_spieler` (" + . "\n `turniermeldung_spieler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turniermeldung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`turniermeldung_spieler_id`)," + . "\n KEY `turniermeldung_id` (`turniermeldung_id`)," + . "\n KEY `spieler_id` (`spieler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turniermeldung_spieler_name` (" + . "\n `turniermeldung_spieler_name_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turniermeldung_spieler_id` int(11) NOT NULL," + . "\n `nachname` varchar(30) DEFAULT NULL," + . "\n `vorname` varchar(30) NOT NULL," + . "\n `vereinsname` varchar(50) DEFAULT NULL," + . "\n PRIMARY KEY (`turniermeldung_spieler_name_id`)," + . "\n KEY `turniermeldung_spieler_id` (`turniermeldung_spieler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turnierspiel` (" + . "\n `turnierspiel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turnierdisziplin_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spiel_nummer` smallint(6) DEFAULT NULL," + . "\n `runde` smallint(6) DEFAULT NULL," + . "\n `rundenstufe` tinyint(4) DEFAULT NULL," + . "\n `heim_meldung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `gast_meldung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `ergebnis` tinyint(4) DEFAULT NULL," + . "\n `ergebnis_detailliert` tinytext DEFAULT NULL," + . "\n PRIMARY KEY (`turnierspiel_id`)," + . "\n KEY `turnierdisziplin_id` (`turnierdisziplin_id`)," + . "\n KEY `heim_meldung_id` (`heim_meldung_id`)," + . "\n KEY `gast_meldung_id` (`gast_meldung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turnier_rundenstufe` (" + . "\n `turnier_rundenstufe_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turnierdisziplin_id` int(11) NOT NULL DEFAULT '0'," + . "\n `rundenstufe` tinyint(4) DEFAULT NULL," + . "\n `bezeichnung` tinytext DEFAULT NULL," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `runden` tinyint(4) DEFAULT NULL," + . "\n `saetze` tinyint(4) DEFAULT NULL," + . "\n `tore` tinyint(4) DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) DEFAULT NULL," + . "\n `spielfelder` text DEFAULT NULL," + . "\n PRIMARY KEY (`turnier_rundenstufe_id`)," + . "\n KEY `turnierdisziplin_id` (`turnierdisziplin_id`)," + . "\n KEY `rundenstufe` (`rundenstufe`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_unbestaetigtes_ergebnis` (" + . "\n `unbestaetigtes_ergebnis_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `begegnung_id` int(11) NOT NULL DEFAULT '0'," + . "\n `vorschlagendes_team_id` int(11) NOT NULL DEFAULT '0'," + . "\n `zwischenergebnis` bool DEFAULT '0'," + . "\n `kommentar` varchar(255) DEFAULT NULL," + . "\n `vorgeschlagen` datetime DEFAULT NULL," + . "\n PRIMARY KEY (`unbestaetigtes_ergebnis_id`)," + . "\n KEY `begegnung_id` (`begegnung_id`)," + . "\n KEY `vorschlagendes_team_id` (`vorschlagendes_team_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_veranstalter` (" + . "\n `veranstalter_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalterbezeichnung` varchar(50) DEFAULT NULL," + . "\n `veranstalterkuerzel` varchar(20) DEFAULT NULL," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_veranstaltung` (" + . "\n `veranstaltung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstalter_id` int(11) NOT NULL DEFAULT '0'," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n `modus_id` int(11) NOT NULL DEFAULT '0'," + . "\n `verschieberegel_id` int(11) NOT NULL DEFAULT '0'," + . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `unterteilung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `letzter_tag` date DEFAULT NULL," + . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `logo_url` TINYTEXT NOT NULL," + . "\n `ticker_logo_url` TINYTEXT NOT NULL," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`veranstaltung_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)," + . "\n KEY `modus_id` (`modus_id`)," + . "\n KEY `verschieberegel_id` (`verschieberegel_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verein` (" + . "\n `verein_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n `vereinsname` varchar(50) NOT NULL," + . "\n `vereinssitz` varchar(30) DEFAULT NULL," + . "\n `vereinssitz_ortsteil` varchar(30) DEFAULT NULL," + . "\n `url` varchar(150) DEFAULT NULL," + . "\n `beschreibung` varchar(500) DEFAULT NULL," + . "\n `ausgetreten` tinyint(1) DEFAULT '0'," + . "\n PRIMARY KEY (`verein_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_vereinsansprechpartner` (" + . "\n `vereinsansprechpartner_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `verein_id` int(11) NOT NULL DEFAULT '0'," + . "\n `nachname` varchar(30) DEFAULT NULL," + . "\n `vorname` varchar(30) NOT NULL DEFAULT ''," + . "\n `geschlecht` tinyint(4) DEFAULT NULL," + . "\n `geburtsdatum` date DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(6) DEFAULT NULL," + . "\n `ort` varchar(30) DEFAULT NULL," + . "\n `telefon` varchar(25) DEFAULT NULL," + . "\n `mobil` varchar(25) DEFAULT NULL," + . "\n `email` varchar(64) DEFAULT NULL," + . "\n `url` varchar(150) DEFAULT NULL," + . "\n `pseudonym` varchar(30) DEFAULT NULL," + . "\n PRIMARY KEY (`vereinsansprechpartner_id`)," + . "\n KEY `verein_id` (`verein_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verschieberegel` (" + . "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` varchar(50) NOT NULL DEFAULT ''," + . "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `vorlaufzeit_tage` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `termine_minimal` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `termine_maximal` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `ablehnen` tinyint(1) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`verschieberegel_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verteiler` (" + . "\n `verteiler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `verteiler` TEXT NOT NULL," + . "\n PRIMARY KEY (`verteiler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'datenbank_version', wert = '101';"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'basis_spielernr', wert = '';"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'spielerliste_elo', wert = '0';"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ansprechpartner_ausblenden', wert = '0';"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT IGNORE #__sportsmanager_einstellungen SET name = 'ansprechpartner_spielerdaten', wert = '1';"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen)" + . "\n VALUES ('Beliebig', '0', '0', '0', '1', '3', '0');"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann/Wahle (1 Punkt für letzten Platz)'," + . "\n status = '1'," + // . "\n funktion = 'MAX(ROUND(IF(m >= 0, m, 1 / -m) * ROUND((((POW(n * 10, 0.7) - 1) * (-LN(p / n) * (1 - (p / n)))) / (-LN(1 / n) * (1 - (1 / n)))) + 1)), 1)'"; + . "\n funktion = 'VERTEILUNG(POW(n * 10, 0.7), p, n, m)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann (1 Punkt ab Platz 129)'," + . "\n status = '1'," + . "\n funktion = 'MAX(ROUND(m * ROUND((((n / 100) * 0.5) + 0.7) * (100 + ((-20.45) * LN(p))))), 1)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann (1 Punkt ab Platz 50)'," + . "\n status = '1'," + . "\n funktion = 'MAX(ROUND(m * ROUND((((n / 100) * 0.5) + 0.7) * (100 + ((-25.3) * LN(p))))), 1)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Challenger'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Meeting'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF Master'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF Pro'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF WCS'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Frauen-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Frauen-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Junioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Junioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Senioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Senioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Sonstiges'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Deutsche Meisterschaft'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'OD'," + . "\n titel = 'Offenes Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'OE'," + . "\n titel = 'Offenes Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'HD'," + . "\n titel = 'Herren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'HE'," + . "\n titel = 'Herren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'DD'," + . "\n titel = 'Damen Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'DE'," + . "\n titel = 'Damen Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'JD'," + . "\n titel = 'Junioren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'JE'," + . "\n titel = 'Junioren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'SD'," + . "\n titel = 'Senioren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'SE'," + . "\n titel = 'Senioren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Baden-Württemberg'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Bayern'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Berlin'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Bremen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Hamburg'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Hessen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Niedersachsen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Nordrhein-Westfalen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Rheinland-Pfalz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Saarland'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Sachsen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Sachsen-Anhalt'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Schleswig-Holstein'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Schweiz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Thüringen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + + private function remove_database() { + $db =& JFactory::getDBO(); + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_saison`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_begegnung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_begegnung_historie`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_individualwettbewerb`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_team`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_turnier`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_verein`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_veranstalter`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechtigt_fuer_veranstaltung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_bestenliste`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_bestenliste_punkte`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_bestenliste_veranstaltung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_bestenliste_individualwettbewerb`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_berechnung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_einstellungen`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_einstufung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_einstufung_rangliste`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_elo_cache`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_individualwettbewerb`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_individualwettbewerb_spiel`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_kategorie`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_team`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_mitglied_von_verein`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_moderator`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_moderator_zugriff`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rangliste`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_symbol`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_symbolanzeige`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_aktion`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_zusatz`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_bezeichnungszusatz`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_bezeichnung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_bundesland`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_termin_land`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rangliste_punkte`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rangliste_system`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rangliste_system_punkte`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rangliste_turnierdisziplin`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rechnung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_rechnung_spieler`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_spieler`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_spieler_import`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_spielort`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_team`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_teamansprechpartner`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_teamspiel`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_teamspiel_modus`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_teamwechsel`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnierdisziplin`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turniermeldung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turniermeldung_spieler`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turniermeldung_spieler_name`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnierspiel`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_turnier_rundenstufe`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_unbestaetigtes_ergebnis`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_veranstalter`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_veranstaltung`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_verein`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_vereinsansprechpartner`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_verschieberegel`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_verteiler`;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } +} + +?> diff --git a/src/structure/administrator/components/com_sportsmanager/install.sql b/src/structure/administrator/components/com_sportsmanager/install.sql new file mode 100644 index 0000000..e69de29 diff --git a/src/structure/administrator/components/com_sportsmanager/sportsmanager.php b/src/structure/administrator/components/com_sportsmanager/sportsmanager.php new file mode 100644 index 0000000..c3048a8 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/sportsmanager.php @@ -0,0 +1,19 @@ +input; +$task = $jinput->get('task', "", 'STR' ); + +// Perform the Request task +$controller->execute($task); + +// Redirect if set by the controller +$controller->redirect(); diff --git a/src/structure/administrator/components/com_sportsmanager/sportsmanager.xml b/src/structure/administrator/components/com_sportsmanager/sportsmanager.xml new file mode 100644 index 0000000..4425fa7 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/sportsmanager.xml @@ -0,0 +1,58 @@ + + + + Sports manager + 2020-09-30 + Sven Nickel + sven.nickel@gmail.com + All rights reserved + GNU/GPL + 1.7.1 + Verwaltung von Spielern und Vereinen in Mannschafts- und Individualwettbewerben + + index.html + admin.php + api.php + controller.php + database.php + sportsmanager.php + mathparser.php + tools.php + js/jquery.min.js + images + models + views + + + language/en-GB/en-GB.com_sportsmanager.ini + + language/de-DE/de-DE.com_sportsmanager.ini + + language/nl-NL/nl-NL.com_sportsmanager.ini + + + install.php + + + access.xml + sportsmanager.php + controller.php + index.html + views + + + language/en-GB/en-GB.com_sportsmanager.ini + + language/en-GB/en-GB.com_sportsmanager.sys.ini + + language/de-DE/de-DE.com_sportsmanager.ini + + language/de-DE/de-DE.com_sportsmanager.sys.ini + + language/nl-NL/nl-NL.com_sportsmanager.ini + + language/nl-NL/nl-NL.com_sportsmanager.sys.ini + + + + diff --git a/src/structure/administrator/components/com_sportsmanager/uninstall.sql b/src/structure/administrator/components/com_sportsmanager/uninstall.sql new file mode 100644 index 0000000..e69de29 diff --git a/src/structure/administrator/components/com_sportsmanager/views/desktop.ini b/src/structure/administrator/components/com_sportsmanager/views/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/views/index.html b/src/structure/administrator/components/com_sportsmanager/views/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/desktop.ini b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/index.html b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/tmpl/default.php b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/tmpl/default.php new file mode 100644 index 0000000..f351f9e --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/tmpl/default.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/view.html.php new file mode 100644 index 0000000..12d239c --- /dev/null +++ b/src/structure/administrator/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -0,0 +1,49 @@ + +

Copyright © 2006 – 2014 Sven Nickel

+ get('Items'); + $pagination = $this->get('Pagination'); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode('
', $errors)); + return false; + } + // Assign data to the view + $this->items = $items; + $this->pagination = $pagination; + */ + + // Display the template + parent::display($tpl); + } +} + diff --git a/src/structure/components/com_sportsmanager/admin.php b/src/structure/components/com_sportsmanager/admin.php new file mode 100644 index 0000000..edf3910 --- /dev/null +++ b/src/structure/components/com_sportsmanager/admin.php @@ -0,0 +1,19417 @@ +input; + + if (!benutzerModerator() && !benutzerVeranstaltungModerator() && !benutzerTurnierModerator() && !benutzerIndividualwettbewerbModerator()) + keinZugriff(true); + + $unabhaengige_ansicht = empty($content) || $content == "administration"; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = false; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = true; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_veranstaltungen) { + $query = "SELECT t1.*, t2.veranstalterbezeichnung, t2.veranstalterkuerzel," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_team AS tt1 WHERE tt1.veranstaltung_id = t1.veranstaltung_id) AS teams," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_team AS tt2 ON tt1.heim_team_id = tt2.team_id WHERE tt2.veranstaltung_id = t1.veranstaltung_id) AS begegnungen" + . "\n FROM #__sportsmanager_veranstaltung AS t1" + . "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 ON t1.veranstalter_id = t2.veranstalter_id" + . "\n WHERE " . veranstaltungFilter("t1.veranstaltung_id IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; + } + else { + $query = "SELECT t1.*, t2.veranstalterbezeichnung, t2.veranstalterkuerzel," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_team AS tt1 WHERE tt1.veranstaltung_id = t1.veranstaltung_id) AS teams," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_team AS tt2 ON tt1.heim_team_id = tt2.team_id WHERE tt2.veranstaltung_id = t1.veranstaltung_id) AS begegnungen" + . "\n FROM #__sportsmanager_veranstaltung AS t1" + . "\n LEFT JOIN #__sportsmanager_veranstalter AS t2 ON t1.veranstalter_id = t2.veranstalter_id" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_veranstaltung AS t2 WHERE t1.bestenliste_id = t2.bestenliste_id) + (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_individualwettbewerb AS t2 WHERE t1.bestenliste_id = t2.bestenliste_id) AS veranstaltungen" + . "\n FROM #__sportsmanager_bestenliste AS t1" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + + $beschraenkter_zugriff_turniere = benutzerZugriff("turniere_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_turniere) { + $query = "SELECT #__sportsmanager_turnier.*, veranstalterbezeichnung, veranstalterkuerzel, GROUP_CONCAT(disziplintitel ORDER BY disziplintitel SEPARATOR ', ') AS disziplinen, COUNT(turnierdisziplin_id) AS disziplinen_anzahl, COALESCE(SUM(meldung_vorhanden), 0) AS disziplinen_mit_meldung_anzahl" + . "\n FROM #__sportsmanager_turnier" + . "\n LEFT JOIN ((SELECT turnier_id, turnierdisziplin_id, status, IF(COALESCE(kuerzel, '') <> '', kuerzel, disziplin) AS disziplintitel, IF(EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id), 1, 0) AS meldung_vorhanden FROM #__sportsmanager_turnierdisziplin) AS turnierdisziplin) USING (turnier_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE " . turnierFilter("#__sportsmanager_turnier.turnier_id IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n GROUP BY turnier_id" + . "\n ORDER BY erster_tag DESC, turnierbezeichnung"; + } + else { + $query = "SELECT #__sportsmanager_turnier.*, veranstalterbezeichnung, veranstalterkuerzel, GROUP_CONCAT(disziplintitel ORDER BY disziplintitel SEPARATOR ', ') AS disziplinen, COUNT(turnierdisziplin_id) AS disziplinen_anzahl, COALESCE(SUM(meldung_vorhanden), 0) AS disziplinen_mit_meldung_anzahl" + . "\n FROM #__sportsmanager_turnier" + . "\n LEFT JOIN ((SELECT turnier_id, turnierdisziplin_id, status, IF(COALESCE(kuerzel, '') <> '', kuerzel, disziplin) AS disziplintitel, IF(EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id), 1, 0) AS meldung_vorhanden FROM #__sportsmanager_turnierdisziplin) AS turnierdisziplin) USING (turnier_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n GROUP BY turnier_id" + . "\n ORDER BY erster_tag DESC, turnierbezeichnung"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turniere = $db->loadObjectList(); + + $beschraenkter_zugriff_individualwettbewerbe = benutzerZugriff("individualwettbewerbe_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_individualwettbewerbe) { + $query = "SELECT #__sportsmanager_individualwettbewerb.*, veranstalterbezeichnung, veranstalterkuerzel," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id) AS spiele" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE " . individualwettbewerbFilter("individualwettbewerb_id IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + } + else { + $query = "SELECT #__sportsmanager_individualwettbewerb.*, veranstalterbezeichnung, veranstalterkuerzel," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id) AS spiele" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_rangliste_turnierdisziplin AS t2 WHERE t1.rangliste_id = t2.rangliste_id) AS turnierdisziplinen" + . "\n FROM #__sportsmanager_rangliste AS t1" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, t1.bezeichnung, t1.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + $statistik = array(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_saison), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["saisons"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel_modus), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["teamspielmodi"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstalter), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["veranstalter"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste_system), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["ranglistensysteme"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnierdisziplin), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["turnierdisziplinen"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["individualwettbewerbe"] = $db->loadResult(); + + HTML_sportsmanager_admin::adminUebersicht($veranstaltungen, $spielerstatistiken, $turniere, $ranglisten, $individualwettbewerbe, $statistik, $saisons, $filter_saison_id, $unabhaengige_ansicht, isExternalDatabase()); +} + +function adminVerteiler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verteiler_aendern") && !benutzerZugriff("verteiler_lesen")) + keinZugriff(true); + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = false; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = true; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_verteiler" + . "\n ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verteiler = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $organisationen = $db->loadObjectList(); + + $organisationen_mailverteiler = array(); + foreach ($organisationen as $organisation) { + $query = "SELECT vorname, nachname, email" + . "\n FROM #__sportsmanager_vereinsansprechpartner" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE " . ($organisation->veranstalter_id != null ? "veranstalter_id = $organisation->veranstalter_id" : "ISNULL(veranstalter_id)") + . " AND NOT ausgetreten AND email != ''" + . "\n ORDER BY vorname, nachname, email"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $organisationen_mailverteiler[$organisation->veranstalter_id] = ""; + $organisationen_mailverteiler[$organisation->veranstalter_id . "p"] = ""; + foreach ($rows as $row) { + $organisationen_mailverteiler[$organisation->veranstalter_id] .= (!empty($organisationen_mailverteiler[$organisation->veranstalter_id]) ? "; " : "") . $row->email; + $organisationen_mailverteiler[$organisation->veranstalter_id . "p"] .= (!empty($organisationen_mailverteiler[$organisation->veranstalter_id . "p"]) ? "; " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; + } + } + + $query = "SELECT t1.*, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung AS t1" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . ($filter_saison_id != 0 ? "\n WHERE saison_id = $filter_saison_id" : "") + . "\n ORDER BY t1.reihenfolge, t1.letzter_tag DESC, bezeichnung, t1.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $veranstaltungen_mailverteiler = array(); + foreach ($veranstaltungen as $veranstaltung) { + $query = "SELECT vorname, nachname, email" + . "\n FROM #__sportsmanager_teamansprechpartner, #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND #__sportsmanager_teamansprechpartner.team_id = #__sportsmanager_team.team_id AND email != ''" + . "\n ORDER BY vorname, nachname, email"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id] = ""; + $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"] = ""; + foreach ($rows as $row) { + $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id] .= (!empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id]) ? "; " : "") . $row->email; + $veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"] .= (!empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"]) ? "; " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; + } + } + + HTML_sportsmanager_admin::adminVerteiler($verteiler, $organisationen, $organisationen_mailverteiler, $veranstaltungen, $veranstaltungen_mailverteiler, $saisons, $filter_saison_id, benutzerZugriff("verteiler_aendern")); +} + +function adminEditVerteiler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verteiler_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == null) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_verteiler WHERE verteiler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditVerteiler($row); +} + +function adminSaveVerteiler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verteiler_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verteiler'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $verteiler = $db->escape(trim($jinput->get('verteiler', '', 'RAW'))); + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_verteiler (bezeichnung, verteiler) VALUES ('$bezeichnung', '$verteiler');"; + else { + $query = "UPDATE #__sportsmanager_verteiler" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n verteiler = '$verteiler'" + . "\n WHERE verteiler_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_verteiler'); +} + +function adminRemoveVerteiler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verteiler_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_verteiler WHERE verteiler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verteiler'); +} + +function adminRechnungen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("rechnungen_aendern")) + keinZugriff(true); + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) == 0) + die("Wrong id!"); + + $gefunden = false; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $filter_saison = $saison; + $gefunden = true; + break; + } + } + if (!$gefunden) { + $filter_saison_id = $saisons[0]->saison_id; + $saison = $saisons[0]; + } + + $query = "SELECT #__sportsmanager_rechnung.*, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," + . " (SELECT COUNT(*) FROM #__sportsmanager_rechnung_spieler WHERE #__sportsmanager_rechnung_spieler.rechnung_id = #__sportsmanager_rechnung.rechnung_id) AS mitglieder" + . "\n FROM #__sportsmanager_rechnung" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" + . "\n WHERE saison_id = $filter_saison_id" + . "\n ORDER BY bezeichnung, zuordnungbezeichnung, notiz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rechnungen = $db->loadObjectList(); + + $query = "SELECT DISTINCT IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalter_id, #__sportsmanager_verein.verein_id) AS zuordnung_id, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," + . " IF(ISNULL(#__sportsmanager_verein.verein_id), IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 0," + . "\n (SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_veranstalter AS va1" + . "\n LEFT JOIN #__sportsmanager_verein AS ve1 USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" + . "\n WHERE va1.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT ve1.ausgetreten AND NOT mve1.ausgetreten AND mve1.spieler_id NOT IN (SELECT DISTINCT spieler_id FROM #__sportsmanager_rechnung AS re1 INNER JOIN #__sportsmanager_rechnung_spieler AS res1 ON re1.rechnung_id = res1.rechnung_id WHERE saison_id = $filter_saison_id))" + . ")," + . "\n (SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_verein AS ve1" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" + . "\n WHERE ve1.verein_id = #__sportsmanager_verein.verein_id AND NOT ve1.ausgetreten AND NOT mve1.ausgetreten AND mve1.spieler_id NOT IN (SELECT DISTINCT spieler_id FROM #__sportsmanager_rechnung AS re1 INNER JOIN #__sportsmanager_rechnung_spieler AS res1 ON re1.rechnung_id = res1.rechnung_id WHERE saison_id = $filter_saison_id))" + . ") AS neuzugaenge" +// . " (SELECT COUNT(*) FROM #__sportsmanager_rechnung_spieler WHERE #__sportsmanager_rechnung_spieler.rechnung_id = #__sportsmanager_rechnung.rechnung_id) AS mitglieder" + . "\n FROM #__sportsmanager_rechnung" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" + . "\n WHERE saison_id = $filter_saison_id" + . "\n HAVING neuzugaenge > 0" + . "\n ORDER BY zuordnungbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $neuzugaenge = $db->loadObjectList(); + + $query = "SELECT DISTINCT IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalter_id, #__sportsmanager_verein.verein_id) AS zuordnung_id, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung," + . " IF(ISNULL(#__sportsmanager_verein.verein_id), IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 0," + . "\n (SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_veranstalter AS va1" + . "\n INNER JOIN #__sportsmanager_verein AS ve1 USING (veranstalter_id)" + . "\n INNER JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" + . "\n INNER JOIN #__sportsmanager_rechnung_spieler USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_rechnung USING (rechnung_id)" + . "\n WHERE #__sportsmanager_rechnung.saison_id = $filter_saison_id AND #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id)" + . ")," + . "\n (SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_verein AS ve1" + . "\n INNER JOIN #__sportsmanager_mitglied_von_verein AS mve1 USING (verein_id)" + . "\n INNER JOIN #__sportsmanager_rechnung_spieler USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_rechnung USING (rechnung_id)" + . "\n WHERE #__sportsmanager_rechnung.saison_id = $filter_saison_id AND #__sportsmanager_rechnung.verein_id = #__sportsmanager_verein.verein_id)" + . ") AS mitglieder" +// . " (SELECT COUNT(*) FROM #__sportsmanager_rechnung_spieler WHERE #__sportsmanager_rechnung_spieler.rechnung_id = #__sportsmanager_rechnung.rechnung_id) AS mitglieder" + . "\n FROM #__sportsmanager_rechnung" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" + . "\n WHERE saison_id = $filter_saison_id" + . "\n ORDER BY zuordnungbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aufsummierung = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminRechnungen($rechnungen, $neuzugaenge, $aufsummierung, $saisons, $filter_saison_id, $saison); +} + +function adminEditRechnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("rechnungen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == null) + $row = null; + else { + $query = "SELECT #__sportsmanager_rechnung.*, IF(ISNULL(#__sportsmanager_verein.verein_id), #__sportsmanager_veranstalter.veranstalterbezeichnung, #__sportsmanager_verein.vereinsname) AS zuordnungbezeichnung" + . "\n FROM #__sportsmanager_rechnung" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_rechnung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" + . "\n WHERE rechnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + $query = "SELECT #__sportsmanager_verein.verein_id, #__sportsmanager_verein.veranstalter_id, vereinsname, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten" + . "\n ORDER BY veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditRechnung($row, $veranstalter, $vereine); +} + +function adminSaveRechnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("rechnungen_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_rechnungen'); + + return; + } + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = false; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = true; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + if ($filter_saison_id == 0) + die ("Wrong id"); + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $notiz = $db->escape(trim($jinput->get('notiz', '', 'RAW'))); + $veranstalterid = $db->escape($jinput->get('veranstalterid', 0, 'RAW')); + $mitgliedsstatus = $jinput->get('mitgliedsstatus', 0, 'INT'); + $wertungskategorie = $jinput->get('wertungskategorie', 0, 'INT'); + if ($id == 0) { + $filter_mitgliedsstatus = ""; + for ($i = 1; $i <= 3; $i++) { + if (pow(2, $i) & $mitgliedsstatus) { + if (!empty($filter_mitgliedsstatus)) + $filter_mitgliedsstatus .= " OR "; + $filter_mitgliedsstatus .= "mitgliedsstatus = " . $i; + } + } + if (!empty($filter_mitgliedsstatus)) + $filter_mitgliedsstatus = " AND (" . $filter_mitgliedsstatus . ")"; + $filter_kategorie = ""; + if ($wertungskategorie != 15) { + $kategorien = array(); + foreach (array(1 => "H", 2 => "D", 4 => "J", 8 => "S") as $b => $wert) { + if ($b & $wertungskategorie) + array_push($kategorien, "\"" . $wert . "\""); + } + $jahr = date("Y"); + if (!empty($kategorien)) + $filter_kategorie = " AND IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) IN (" . implode(", ", $kategorien) . ")"; + else + $filter_kategorie = " AND FALSE"; + } + if (strlen($veranstalterid) > 1 && $veranstalterid[0] == "v") { + $verein_id = substr($veranstalterid, 1); + $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, verein_id, mitgliedsstatus, wertungskategorie) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$verein_id', '$mitgliedsstatus', '$wertungskategorie');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" + . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_id" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if (strlen($veranstalterid) > 1 && $veranstalterid[0] == "a") { + $veranstalter_id = substr($veranstalterid, 1); + $query = "SELECT verein_id, (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE veranstalter_id = $veranstalter_id AND not ausgetreten" + . "\n ORDER BY mitglieder, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + foreach ($veranstalter as $row) { + $verein_id = $row->verein_id; + $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, verein_id, mitgliedsstatus) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$verein_id', '$mitgliedsstatus');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" + . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_id" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else if ($veranstalterid == "0") { + $query = "SELECT veranstalter_id, (SELECT COUNT(*) FROM #__sportsmanager_verein LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id) WHERE #__sportsmanager_verein.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY mitglieder, veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + foreach ($veranstalter as $row) { + $veranstalterid = $row->veranstalter_id; + $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, veranstalter_id, mitgliedsstatus) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$veranstalterid', '$mitgliedsstatus');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" + . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" + . "\n FROM #__sportsmanager_veranstalter" + . "\n LEFT JOIN #__sportsmanager_verein USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE #__sportsmanager_veranstalter.veranstalter_id = $veranstalterid AND NOT #__sportsmanager_verein.ausgetreten" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + $query = "INSERT INTO #__sportsmanager_rechnung (saison_id, bezeichnung, notiz, veranstalter_id, mitgliedsstatus) VALUES ('$filter_saison_id', '$bezeichnung', '$notiz', '$veranstalterid', '$mitgliedsstatus');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + $query = "INSERT INTO #__sportsmanager_rechnung_spieler (spieler_id, rechnung_id)" + . "\n SELECT DISTINCT #__sportsmanager_mitglied_von_verein.spieler_id, '$id'" + . "\n FROM #__sportsmanager_veranstalter" + . "\n LEFT JOIN #__sportsmanager_verein USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE #__sportsmanager_veranstalter.veranstalter_id = $veranstalterid AND NOT #__sportsmanager_verein.ausgetreten" . $filter_mitgliedsstatus . $filter_kategorie . " AND spieler_id NOT IN (SELECT DISTINCT #__sportsmanager_rechnung_spieler.spieler_id FROM #__sportsmanager_rechnung INNER JOIN #__sportsmanager_rechnung_spieler ON #__sportsmanager_rechnung.rechnung_id = #__sportsmanager_rechnung_spieler.rechnung_id WHERE saison_id = $filter_saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + $query = "UPDATE #__sportsmanager_rechnung" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n notiz = '$notiz'" + . "\n WHERE rechnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + redirectSportsManagerURL('&task=admin_rechnungen'); +} + +function adminRemoveRechnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("rechnungen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_rechnung WRITE, #__sportsmanager_rechnung_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rechnung_spieler WHERE rechnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rechnung WHERE rechnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_rechnungen'); +} + +function adminEinstellungen() { + $db =& getDatabase(); + + if (!benutzerZugriff("basiseinstellungen_aendern")) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_einstellungen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $einstellungen = array(); + foreach ($rows as $row) + $einstellungen[$row->name] = $row->wert; + + HTML_sportsmanager_admin::adminEinstellungen($einstellungen); +} + +function adminSaveEinstellungen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("basiseinstellungen_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $basis_spielernr = $db->escape(trim($jinput->get('basis_spielernr', '', 'RAW'))); + $ansprechpartner_ausblenden = $jinput->get('ansprechpartner_ausblenden', 0, 'INT'); + $ansprechpartner_spielerdaten = $jinput->get('ansprechpartner_spielerdaten', 0, 'INT'); + $ansprechpartner_importieren = $jinput->get('ansprechpartner_importieren', 0, 'INT'); + $ansprechpartner_exportieren = $jinput->get('ansprechpartner_exportieren', 0, 'INT'); + $spielerliste_elo = $jinput->get('spielerliste_elo', 0, 'INT'); + $termine_beantragen = $jinput->get('termine_beantragen', 0, 'INT'); + $spielerimport_persoenliche_daten_vorauswahl = $jinput->get('spielerimport_persoenliche_daten_vorauswahl', 0, 'INT'); + + $api_push_key = $jinput->get('api_push_key', '', 'RAW'); + + /* + $twitter_benutzername = $db->escape(trim( $jinput->get('twitter_benutzername', '', 'RAW') )); + $twitter_kennwort = !empty($twitter_benutzername) ? $db->escape(trim( $jinput->get('twitter_kennwort', '', 'RAW') )) : ""; + */ + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'basis_spielernr'" + . ", wert = '$basis_spielernr'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'termine_beantragen'" + . ", wert = '$termine_beantragen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'spielerliste_elo'" + . ", wert = '$spielerliste_elo'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_ausblenden'" + . ", wert = '$ansprechpartner_ausblenden'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_spielerdaten'" + . ", wert = '$ansprechpartner_spielerdaten'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_importieren'" + . ", wert = '$ansprechpartner_importieren'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_exportieren'" + . ", wert = '$ansprechpartner_exportieren'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'spielerimport_persoenliche_daten_vorauswahl'" + . ", wert = '$spielerimport_persoenliche_daten_vorauswahl'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen SET name = 'api_push_key', wert = '$api_push_key'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + /* + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'twitter_benutzername'" + . ", wert = '$twitter_benutzername'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + if (empty($twitter_benutzername) || !empty($twitter_kennwort)) { + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'twitter_kennwort'" + . ", wert = '$twitter_kennwort'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + */ + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminDatenbank() { + $db =& getDatabase(true); + + if (!benutzerZugriff("basiseinstellungen_aendern")) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_einstellungen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $einstellungen = array(); + foreach ($rows as $row) + $einstellungen[$row->name] = $row->wert; + + HTML_sportsmanager_admin::adminDatenbank($einstellungen); +} + +function adminSaveDatenbank() { + $db =& getDatabase(true); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("basiseinstellungen_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $database_driver = $db->escape(trim($jinput->get('database_driver', '', 'RAW'))); + $database_host = $db->escape(trim($jinput->get('database_host', '', 'RAW'))); + $database_user = $db->escape(trim($jinput->get('database_user', '', 'RAW'))); + $database_password = $db->escape(trim($jinput->get('database_password', '', 'RAW'))); + $database_database = $db->escape(trim($jinput->get('database_database', '', 'RAW'))); + $database_prefix = $db->escape(trim($jinput->get('database_prefix', '', 'RAW'))); + $joomla_path = $db->escape(trim($jinput->get('joomla_path', '', 'RAW'))); + $joomla_path = $joomla_path == "/" && $joomla_path != "\\" ? $joomla_path : rtrim(rtrim($joomla_path, "\\"), "/"); + $joomla_url = $db->escape(trim($jinput->get('joomla_url', '', 'RAW'))); + if (strlen($joomla_url) > 0 && substr($joomla_url, strlen($joomla_url) - 1, 1) != "/") + $joomla_url .= "/"; + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_driver'" + . ", wert = '$database_driver'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_host'" + . ", wert = '$database_host'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_user'" + . ", wert = '$database_user'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_password'" + . ", wert = '$database_password'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_database'" + . ", wert = '$database_database'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'database_prefix'" + . ", wert = '$database_prefix'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'joomla_path'" + . ", wert = '$joomla_path'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "REPLACE #__sportsmanager_einstellungen" + . "\n SET name = 'joomla_url'" + . ", wert = '$joomla_url'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminSpieler($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); + $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); + $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); + $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; + $ansprechpartner_bilder_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; + else if (benutzerVereinModerator()) + $beschraenkter_zugriff = 2; + else + keinZugriff(true); + + $filter = $jinput->get('filter', '', 'RAW'); + if (empty($filter)) + $filter = $jinput->get('spezialfilter', '', 'RAW'); + + $anzahlSpieler = array(); + $query = "SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_spieler"; + if ($beschraenkter_zugriff == 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($beschraenkter_zugriff == 1) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 1 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["aktiv"] = $db->loadResult(); + $jahr = date("Y"); + $db->setQuery($query . "\n WHERE " . ($jahr - 18) . " <= geburtsjahr"); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["J aktiv"] = $db->loadResult(); + $db->setQuery($query . "\n WHERE " . ($jahr - 50) . " > geburtsjahr"); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["S aktiv"] = $db->loadResult(); + $db->setQuery($query . "\n WHERE geschlecht = 'M' AND (ISNULL(geburtsjahr) OR (" . ($jahr - 18) . " > geburtsjahr AND " . ($jahr - 50) . " <= geburtsjahr))"); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["H aktiv"] = $db->loadResult(); + $db->setQuery($query . "\n WHERE geschlecht <> 'M' AND (ISNULL(geburtsjahr) OR (" . ($jahr - 18) . " > geburtsjahr AND " . ($jahr - 50) . " <= geburtsjahr))"); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["D aktiv"] = $db->loadResult(); + + $query = "SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_spieler"; + if ($beschraenkter_zugriff == 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($beschraenkter_zugriff == 1) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 2 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["eingeschraenkt"] = $db->loadResult(); + + $query = "SELECT COUNT(DISTINCT spieler_id)" + . "\n FROM #__sportsmanager_spieler"; + if ($beschraenkter_zugriff == 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($beschraenkter_zugriff == 1) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND mitgliedsstatus = 3 AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahlSpieler["passiv"] = $db->loadResult(); + + $search = stripslashes($filter); + if ($beschraenkter_zugriff == 0 && $search == "_____DOPPELT") { + $jahr = date("Y"); + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," + . "\n vereinsname" + . "\n FROM (SELECT COUNT(*) AS identische_namen, nachname, vorname" + . "\n FROM #__sportsmanager_spieler" + . "\n GROUP BY nachname, vorname" + . "\n HAVING identische_namen > 1) AS identische_namen" + . "\n INNER JOIN #__sportsmanager_spieler USING (nachname, vorname)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + } + else if ($beschraenkter_zugriff == 0 && $search == "_____DOPPELT_JAHR") { + $jahr = date("Y"); + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," + . "\n vereinsname" + . "\n FROM (SELECT COUNT(*) AS identische_namen, nachname, vorname, geburtsjahr" + . "\n FROM #__sportsmanager_spieler" + . "\n GROUP BY nachname, vorname, geburtsjahr" + . "\n HAVING identische_namen > 1) AS identische_namen" + . "\n INNER JOIN #__sportsmanager_spieler USING (nachname, vorname, geburtsjahr)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n ORDER BY nachname, vorname, geburtsjahr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + } + else if ($beschraenkter_zugriff == 0 && $search == "_____KEINE_SPIELERNR") { + $jahr = date("Y"); + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," + . "\n IF (ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," + . "\n vereinsname" + . "\n FROM #__sportsmanager_spieler" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n WHERE #__sportsmanager_spieler.spielernr = ''" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + } + else if (isset($search) && $search != "" && ($beschraenkter_zugriff == 0 || $ansprechpartner_spielerdaten_bearbeiten)) { + $searchEscapedWildcards = strpos($search, "*") !== false ? ($db->escape(trim(mb_strtolower(str_replace("*", "%", $search), 'UTF-8')))) : ("%" . $db->escape(trim(mb_strtolower($search, 'UTF-8'))) . "%"); + $searchEscaped = $db->escape(trim($search)); + + $jahr = date("Y"); + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," + . "\n vereinsname" + . "\n FROM #__sportsmanager_spieler"; + if ($beschraenkter_zugriff == 1) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else + $query .= "\n LEFT JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"; + $query .= "\n WHERE (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; + $query .= "\n ORDER BY nachname, vorname LIMIT 101"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 100) { + redirectSportsManagerURL('&task=admin_spieler', "Mehr als 100 Spieler gefunden, bitte genaueren Filter verwenden."); + + return; + } + } + else if ($anzahlSpieler["aktiv"] <= 100 && ($beschraenkter_zugriff == 0 || $ansprechpartner_spielerdaten_bearbeiten)) { + $jahr = date("Y"); + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, aktueller_verein_id, spielernr, lizenznr, geburtsjahr," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teamspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS turniermeldungen," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_mitglied_von_team.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS teammitgliedschaften," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = #__sportsmanager_spieler.spieler_id OR heim_spieler_2_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_1_id = #__sportsmanager_spieler.spieler_id OR gast_spieler_2_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbspiele," + . "\n IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE #__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id = #__sportsmanager_spieler.spieler_id), 1, 0) AS individualwettbewerbausgangsplatzierungen," + . "\n vereinsname" + . "\n FROM #__sportsmanager_spieler"; + if ($beschraenkter_zugriff == 1) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . vereinFilter("#__sportsmanager_verein.verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else + $query .= "\n LEFT JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id"; + $query .= "\n ORDER BY nachname, vorname LIMIT 101"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 100) + $rows = null; + } + else + $rows = null; + + $statistik = array(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(spielernr) AND spielernr <> ''), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["spielernr_national"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(lizenznr) AND lizenznr <> ''), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["spielernr_international"] = $db->loadResult(); + + HTML_sportsmanager_admin::adminSpieler($filter, $rows, $anzahlSpieler, $admin_uebersicht, $beschraenkter_zugriff, $ansprechpartner_importieren, $ansprechpartner_exportieren, $ansprechpartner_spielerdaten_bearbeiten, $ansprechpartner_bilder_bearbeiten, $statistik); +} + +function adminEditSpieler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); + $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_spielerdaten_bearbeiten) + $beschraenkter_zugriff = 1; + else if (benutzerVereinModerator() && $ansprechpartner_spielerdaten_bearbeiten) + $beschraenkter_zugriff = 2; + else + keinZugriff(true); + + $filter = $jinput->get('filter', '', 'RAW'); + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + $spieler = null; + else { + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $spieler = $rows[0]; + else + $spieler = null; + } + + if ($beschraenkter_zugriff != 0) { + if ($id == 0) + keinZugriff(true); + if ($beschraenkter_zugriff == 1) + $query = "SELECT IF(EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; + else // $beschraenkter_zugriff == 2 + $query = "SELECT IF(EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . vereinFilter("#__sportsmanager_verein.verein_id IN") . "AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n == 0) + keinZugriff(true); + } + + // Vereine ermitteln + $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, ausgetreten AS verein_ausgetreten, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n ORDER BY veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + $vereinsmitgliedschaften = null; + if (!empty($id)) { + $query = "SELECT DISTINCT verein_id, mitgliedsstatus" + . "\n FROM #__sportsmanager_verein" + . "\n INNER JOIN (SELECT verein_id, mitgliedsstatus FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id) AS mitgliedschaft USING (verein_id)" + . "\n ORDER BY IF(mitgliedsstatus <> 0, 0, 1), mitgliedsstatus, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereinsmitgliedschaften = $db->loadObjectList(); + } + + // Nächste Spieler-Nr. ermitteln + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'basis_spielernr'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + die("Fehler: Inkonsistenz in den MySQL-Tabellen!"); + $naechste_spielernr = $rows[0]->wert; + if (empty($naechste_spielernr)) + $naechste_spielernr = "1"; + + for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { + if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') + break; + } + $spielernr_praefix = substr($naechste_spielernr, 0, $i + 1); + + $query = "SELECT spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE Left(spielernr, " . strlen($spielernr_praefix) . ") = '" . $db->escape($spielernr_praefix) . "'" + . "\n ORDER BY LENGTH(spielernr) DESC, spielernr DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) { + $naechste_spielernr = $rows[0]->spielernr; + for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { + if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { + $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); + break; + } + if ($naechste_spielernr[$i] <= '8') { + $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; + break; + } + // $naechste_spielernr[$i] == '9' + $naechste_spielernr[$i] = '0'; + } + if ($i < 0) + $naechste_spielernr = "1" . $naechste_spielernr; + } + + HTML_sportsmanager_admin::adminEditSpieler($spieler, $naechste_spielernr, $filter, $vereine, $vereinsmitgliedschaften, $beschraenkter_zugriff, $ansprechpartner_spielerdaten); +} + +function adminSaveSpieler() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_spielerdaten = einstellungswert("ansprechpartner_spielerdaten"); + $ansprechpartner_spielerdaten_bearbeiten = $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2" || $ansprechpartner_spielerdaten == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_spielerdaten_bearbeiten) + $beschraenkter_zugriff = 1; + else if (benutzerVereinModerator() && $ansprechpartner_spielerdaten_bearbeiten) + $beschraenkter_zugriff = 2; + else + keinZugriff(); + + $filter = $jinput->get('filter', '', 'RAW'); + $id = $jinput->get('id', 0, 'INT'); + $vorname = $db->escape(trim($jinput->get('vorname', '', 'RAW'))); + $nachname = $db->escape(trim($jinput->get('nachname', '', 'RAW'))); + $pseudonym = $db->escape(trim($jinput->get('pseudonym', '', 'RAW'))); + $geschlecht = $db->escape(trim($jinput->get('geschlecht', 'M', 'RAW'))); + $geburtsdatum = normalisiertesDatum($jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('datum_jahr', 0, 'INT'), $jinput->get('datum_monat', 0, 'INT'), $jinput->get('datum_tag', 0, 'INT'))); + $geburtsjahr = $jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%d", $jinput->get('datum_jahr', 0, 'INT')); + $strasse = $db->escape(trim($jinput->get('strasse', '', 'RAW'))); + $plz = $db->escape(trim($jinput->get('plz', '', 'RAW'))); + $ort = $db->escape(trim($jinput->get('ort', '', 'RAW'))); + $landeskennung = $db->escape(trim($jinput->get('landeskennung', '', 'RAW'))); + $telefon = $db->escape(trim($jinput->get('telefon', '', 'RAW'))); + $mobil = $db->escape(trim($jinput->get('mobil', '', 'RAW'))); + $email = $db->escape(trim($jinput->get('email', '', 'RAW'))); + $spielernr = $db->escape(trim($jinput->get('spielernr', '', 'RAW'))); + $lizenznr = $db->escape(trim($jinput->get('lizenznr', '', 'RAW'))); + $bild_ausblenden = $jinput->get('bild_ausblenden', 0, 'INT'); + $bildbeibehalten = $jinput->get('bildbeibehalten', 0, 'INT'); + $elo_startwert_einzel = max(min($jinput->get('elo_startwert_einzel', 0, 'INT'), 9999), 0); + $elo_startwert_doppel = max(min($jinput->get('elo_startwert_doppel', 0, 'INT'), 9999), 0); + $vereinsauswahl_anzahl = $jinput->get('vereinsauswahl_anzahl', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $id); + + return; + } + + $vereinsmitgliedschaften = array(); + $verein_mitgliedsstatus = array(); + for ($i = 0; $i < $vereinsauswahl_anzahl; $i++) { + $verein_id = $jinput->get('verein_id_' . $i, 0, 'INT'); + if (empty($verein_id)) + continue; + array_push($vereinsmitgliedschaften, $verein_id); + array_push($verein_mitgliedsstatus, $jinput->get('verein_mitgliedsstatus_' . $i, 0, 'INT')); + } + + if ($beschraenkter_zugriff != 0) { + if ($id == 0) + keinZugriff(true); + if ($beschraenkter_zugriff == 1) + $query = "SELECT IF(EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . veranstalterFilter("#__sportsmanager_verein.veranstalter_id IN") . "AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; + else // $beschraenkter_zugriff == 2 + $query = "SELECT IF(EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND " . vereinFilter("#__sportsmanager_verein.verein_id IN") . "AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n == 0) + keinZugriff(); + } + + $query = "LOCK TABLES #__sportsmanager_spieler WRITE, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_verein READ, #__sportsmanager_berechtigt_fuer_verein READ, #__sportsmanager_berechtigt_fuer_veranstalter READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (strlen($spielernr) > 0) { + $query = "SELECT COUNT(*) FROM #__sportsmanager_spieler WHERE spielernr = '$spielernr' AND spieler_id != $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_PLAYER_NO_USED')); + + return; + } + } + + $rangliste_aktualisieren = false; + $elo_aktualisieren = false; + // Vereinsmitgliedschaften prüfen und ggf. aktualisieren + if ($id != 0 && !$beschraenkter_zugriff) { + $query = "SELECT verein_id, #__sportsmanager_mitglied_von_verein.ausgetreten, mitgliedsstatus" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n INNER JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bestehende_vereinsmitgliedschaften = $db->loadObjectList(); + + foreach ($bestehende_vereinsmitgliedschaften as $bestehende_vereinsmitgliedschaft) { + $ist_mitglied = false; + foreach ($vereinsmitgliedschaften as $verein_id) { + if ($bestehende_vereinsmitgliedschaft->verein_id == $verein_id) { + $ist_mitglied = true; + break; + } + } + if (!$ist_mitglied) { + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $bestehende_vereinsmitgliedschaft->verein_id AND spieler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + //if ($id != 0) + // $rangliste_und_elo_aktualisieren = TRUE; + } + } + + foreach ($vereinsmitgliedschaften as $index => $verein_id) { + $ist_mitglied = false; + foreach ($bestehende_vereinsmitgliedschaften as $bestehende_vereinsmitgliedschaft) { + if ($bestehende_vereinsmitgliedschaft->verein_id == $verein_id) { + $ist_mitglied = true; + $mitgliedsstatus = $bestehende_vereinsmitgliedschaft->mitgliedsstatus; + break; + } + } + if (!$ist_mitglied) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE verein_id = $verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n > 0) { + $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$id', '$verein_id', '" . ($verein_mitgliedsstatus[$index]) . "', " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + // if ($id != 0) + // $rangliste_und_elo_aktualisieren = TRUE; + } + } + else if ($mitgliedsstatus != $verein_mitgliedsstatus[$index]) { + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET mitgliedsstatus = '" . ($verein_mitgliedsstatus[$index]) . "'," + . "\n ausgetreten = " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") + . "\n WHERE verein_id = $verein_id AND spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + // if ($id != 0) + // $rangliste_und_elo_aktualisieren = TRUE; + } + } + } + + if ($id == 0 && !$beschraenkter_zugriff) { + $query = "INSERT INTO #__sportsmanager_spieler " + . "(vorname, nachname, pseudonym, geschlecht, geburtsdatum, geburtsjahr, strasse, plz, ort, landeskennung, telefon, mobil, email, spielernr, lizenznr, elo_einzel_startwert, elo_doppel_startwert, bild_ausblenden) " + . "VALUES ('$vorname', " + . "'$nachname', " + . "'$pseudonym', " + . "'$geschlecht', " + . ($geburtsdatum == null ? "NULL" : "'$geburtsdatum'") . ", " + . ($geburtsjahr == null ? "NULL" : "'$geburtsjahr'") . ", " + . "'$strasse', " + . "'$plz', " + . "'$ort', " + . "'$landeskennung', " + . "'$telefon', " + . "'$mobil', " + . "'$email', " + . "'$spielernr', " + . "'$lizenznr', " + . "'$elo_startwert_einzel', " + . "'$elo_startwert_doppel', " + . ($bild_ausblenden ? "TRUE" : "FALSE") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + // Vereinsmitgliedschaften erzeugen + foreach ($vereinsmitgliedschaften as $index => $verein_id) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE verein_id = $verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n > 0) { + $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$id', '$verein_id', '" . ($verein_mitgliedsstatus[$index]) . "', " . ($verein_mitgliedsstatus[$index] == 0 ? "TRUE" : "FALSE") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + if ($id != 0 && (!$beschraenkter_zugriff || $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "2")) { + + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + redirectSportsManagerURL('&task=admin_spieler', "Der Spieler existiert nicht mehr!"); + + return; + } + $spieler = $rows[0]; + + if ($spieler->elo_einzel_startwert != $elo_startwert_einzel || $spieler->elo_doppel_startwert != $elo_startwert_doppel) + $elo_aktualisieren = true; + + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET pseudonym = '$pseudonym'," + . "\n strasse = '$strasse'," + . "\n plz = '$plz'," + . "\n ort = '$ort'," + . "\n landeskennung = '$landeskennung'," + . "\n telefon = '$telefon'," + . "\n mobil = '$mobil'," + . "\n bild_ausblenden = " . ($bild_ausblenden ? "TRUE" : "FALSE") . ","; + if (!$beschraenkter_zugriff) { + $query .= "\n vorname = '$vorname'," + . "\n nachname = '$nachname'," + . "\n geschlecht = '$geschlecht'," + . "\n geburtsdatum = " . ($geburtsdatum == null ? "NULL" : "'$geburtsdatum'") . "," + . "\n geburtsjahr = " . ($geburtsjahr == null ? "NULL" : "'$geburtsjahr'") . "," + . "\n spielernr = '$spielernr'," + . "\n lizenznr = '$lizenznr'," + . "\n elo_einzel_startwert = " . ($elo_startwert_einzel == null ? "NULL" : "'$elo_startwert_einzel'") . "," + . "\n elo_doppel_startwert = " . ($elo_startwert_doppel == null ? "NULL" : "'$elo_startwert_doppel'") . ","; + } + $query .= "\n email = '$email'" + . "\n WHERE spieler_id = $id"; + + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($geburtsjahr != $spieler->geburtsjahr || $geschlecht != $spieler->geschlecht) + $rangliste_aktualisieren = true; + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($elo_aktualisieren) + eloAktualisieren($spieler->erstmals_gespielt); + + if ($bildbeibehalten == 0 && (!$beschraenkter_zugriff || $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "3")) { + bildLoeschen('spieler', $id); + + if (!empty($_FILES["bild"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { + $size = getimagesize($_FILES["bild"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_PLAYER_WRONG_IMAGE_FORMAT')); + + return; + } + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; + if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 180, 240, 1)) { + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_IMAGE_COULD_NOT_COPIED')); + + return; + } + } + } + } + + aktuellerVereinAktualisieren($id); + if ($rangliste_aktualisieren) { + ranglisteAktualisieren(0, 0, $id); + einstufungAktualisieren(); + } + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $id); +} + +function adminRemoveSpieler() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(true); + + $filter = $jinput->get('filter', '', 'RAW'); + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_teamspiel READ, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_individualwettbewerb_spiel WRITE, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE, #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_teamspiel WHERE heim_spieler_1_id = $id OR heim_spieler_2_id = $id OR gast_spieler_1_id = $id OR gast_spieler_2_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung_spieler WHERE spieler_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_team WHERE spieler_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE heim_spieler_1_id = $id OR heim_spieler_2_id = $id OR gast_spieler_1_id = $id OR gast_spieler_2_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE spieler_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("spieler", $id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren(); + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); +} + +function adminGroomingMehrfacheMitgliedschaften() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(true); + + $query = "SELECT spieler_id, COUNT(*) AS mehrfach" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n GROUP BY spieler_id, verein_id" + . "\n HAVING mehrfach > 1" + . "\n ORDER BY spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $mitglieder = $db->loadObjectList(); + + foreach ($mitglieder as $mitglied) { + $query = "SELECT mitglied_von_verein_id, verein_id" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n WHERE spieler_id = $mitglied->spieler_id" + . "\n ORDER BY verein_id, ausgetreten, mitgliedsstatus"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $mitglied_verein_id = -1; + foreach ($rows as $row) { + if ($mitglied_verein_id != $row->verein_id) { + $mitglied_verein_id = $row->verein_id; + continue; + } + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = '$row->mitglied_von_verein_id';"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminSpielerZusammenlegenForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(true); + + $filter = $jinput->get('filter', '', 'RAW'); + + $query = "SELECT spieler_id, vorname, nachname, spielernr, aktueller_verein_id" + . "\n FROM #__sportsmanager_spieler" + . "\n ORDER BY nachname, vorname, spielernr, aktueller_verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielerZusammenlegen($spieler, $filter); +} + +function adminSpielerZusammenlegen() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(); + + $spieler_beizubehalten_id = $jinput->get('spieler_beizubehalten_id', 0, 'INT'); + $spieler_zu_entfernen_id = $jinput->get('spieler_zu_entfernen_id', 0, 'INT'); + $filter = $jinput->get('filter', '', 'RAW'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); + + return; + } + + if ($spieler_beizubehalten_id == $spieler_zu_entfernen_id) { + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Spieler gewählt werden"); + + return; + } + + if (!ini_get('safe_mode')) + set_time_limit(300); + + $query = "LOCK TABLES #__sportsmanager_spieler WRITE, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_rangliste_punkte WRITE, #__sportsmanager_rangliste_turnierdisziplin_punkte WRITE, #__sportsmanager_individualwettbewerb_spiel WRITE, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_beizubehalten_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter), "Beizubehaltender Spieler existiert nicht."); + } + $spieler_beizubehalten = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id, "Zu entfernender Spieler existiert nicht."); + } + $spieler_zu_entfernen = $rows[0]; + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin_punkte" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_punkte" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turniermeldung_spieler" + . "\n SET spieler_id = $spieler_beizubehalten_id" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET heim_spieler_1_id = $spieler_beizubehalten_id" + . "\n WHERE heim_spieler_1_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET heim_spieler_2_id = $spieler_beizubehalten_id" + . "\n WHERE heim_spieler_2_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET gast_spieler_1_id = $spieler_beizubehalten_id" + . "\n WHERE gast_spieler_1_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET gast_spieler_2_id = $spieler_beizubehalten_id" + . "\n WHERE gast_spieler_2_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" + . "\n SET heim_spieler_1_id = $spieler_beizubehalten_id" + . "\n WHERE heim_spieler_1_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" + . "\n SET heim_spieler_2_id = $spieler_beizubehalten_id" + . "\n WHERE heim_spieler_2_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" + . "\n SET gast_spieler_1_id = $spieler_beizubehalten_id" + . "\n WHERE gast_spieler_1_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" + . "\n SET gast_spieler_2_id = $spieler_beizubehalten_id" + . "\n WHERE gast_spieler_2_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT DISTINCT individualwettbewerb_id" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + foreach ($individualwettbewerbe as $individualwettbewerb) { + $individualwettbewerbid = $individualwettbewerb->individualwettbewerb_id; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + + $platzierungen = array(); + foreach ($ausgangsplatzierungen as $ausgangsplatzierung) + array_push($platzierungen, $ausgangsplatzierung->spieler_id); + + $spieler_beizubehalten_platzierung = array_search($spieler_beizubehalten_id, $platzierungen); + $spieler_zu_entfernen_platzierung = array_search($spieler_zu_entfernen_id, $platzierungen); + if ($spieler_beizubehalten_platzierung !== false && $spieler_zu_entfernen_platzierung !== false) + array_splice($platzierungen, $spieler_zu_entfernen_platzierung, 1); + else if ($spieler_beizubehalten_platzierung === false) + array_splice($platzierungen, $spieler_zu_entfernen_platzierung, 1, $spieler_beizubehalten_id); + + $platzierungen_uebrig = $platzierungen; + foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { + $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); + if ($index !== false) { + $platz = $index + 1; + if ($platzierung_vorhanden->platz != $platz) { + $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET platz = '$platz'" + . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); + unset($platzierungen_uebrig[$index_uebrig]); + } + else { + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + foreach ($platzierungen_uebrig as $platzierung_uebrig) { + $index = array_search($platzierung_uebrig, $platzierungen); + $platz = $index + 1; + $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET individualwettbewerb_id = '$individualwettbewerbid'," + . "\n spieler_id = '$platzierung_uebrig'," + . "\n platz = '$platz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UPDATE #__sportsmanager_mitglied_von_team" + . "\n SET spieler_id = $spieler_beizubehalten_id" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT mitglied_von_verein_id, verein_id" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n WHERE spieler_id = $spieler_beizubehalten_id OR spieler_id = $spieler_zu_entfernen_id" + . "\n ORDER BY verein_id, ausgetreten, IF(spieler_id = $spieler_beizubehalten_id, 0, 1), mitgliedsstatus"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $mitglied_verein_id = -1; + foreach ($rows as $row) { + if ($mitglied_verein_id != $row->verein_id) { + $mitglied_verein_id = $row->verein_id; + continue; + } + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = '$row->mitglied_von_verein_id';"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET spieler_id = $spieler_beizubehalten_id" + . "\n WHERE spieler_id = $spieler_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $spieler_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; + $neues_bild_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $spieler_beizubehalten_id . '.'; + + if (!JFile::exists($neues_bild_pfad . 'png') && !JFile::exists($neues_bild_pfad . 'jpg')) { + $altes_bild_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $spieler_zu_entfernen_id . '.'; + + if (JFile::exists($altes_bild_pfad . 'png')) + JFile::copy($altes_bild_pfad . 'png', $neues_bild_pfad . 'png'); + else if (JFile::exists($altes_bild_pfad . 'jpg')) + JFile::copy($altes_bild_pfad . 'jpg', $neues_bild_pfad . 'jpg'); + } + + bildLoeschen("spieler", $spieler_zu_entfernen_id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!empty($spieler_zu_entfernen->erstmals_gespielt)) { + wannGespieltAktualisieren(); + individualwettbewerbTabelleAktualisieren(); + eloAktualisieren($spieler_zu_entfernen->erstmals_gespielt); + } + spielerstatistikAktualisieren(); + aktuellerVereinAktualisieren($spieler_beizubehalten_id); + ranglisteAktualisieren(); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id); +} + +function adminRemoveInaktiveSpielerForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(true); + + $filter = $jinput->get('filter', '', 'RAW'); + + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, spielernr, lizenznr" + . "\n FROM #__sportsmanager_spieler" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_ausgangsplatzierung USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel1 ON #__sportsmanager_spieler.spieler_id = teamspiel1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel2 ON #__sportsmanager_spieler.spieler_id = teamspiel2.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel3 ON #__sportsmanager_spieler.spieler_id = teamspiel3.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel4 ON #__sportsmanager_spieler.spieler_id = teamspiel4.gast_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel1 ON #__sportsmanager_spieler.spieler_id = individualspiel1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel2 ON #__sportsmanager_spieler.spieler_id = individualspiel2.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel3 ON #__sportsmanager_spieler.spieler_id = individualspiel3.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel4 ON #__sportsmanager_spieler.spieler_id = individualspiel4.gast_spieler_2_id" + . "\n WHERE ISNULL(aktueller_verein_id)" + . "\n AND ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id)" + . "\n AND ISNULL(#__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id)" + . "\n AND ISNULL(#__sportsmanager_mitglied_von_team.team_id)" + . "\n AND ISNULL(teamspiel1.heim_spieler_1_id)" + . "\n AND ISNULL(teamspiel2.heim_spieler_2_id)" + . "\n AND ISNULL(teamspiel3.gast_spieler_1_id)" + . "\n AND ISNULL(teamspiel4.gast_spieler_2_id)" + . "\n AND ISNULL(individualspiel1.heim_spieler_1_id)" + . "\n AND ISNULL(individualspiel2.heim_spieler_2_id)" + . "\n AND ISNULL(individualspiel3.gast_spieler_1_id)" + . "\n AND ISNULL(individualspiel4.gast_spieler_2_id)" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminRemoveInaktiveSpieler($spieler, $filter); +} + +function adminRemoveInaktiveSpieler() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(); + + $spieler_beizubehalten_ids = $jinput->get('spielerids', array(), 'ARRAY'); + $filter = $jinput->get('filter', '', 'RAW'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter)); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_teamspiel AS teamspiel1 READ, #__sportsmanager_teamspiel AS teamspiel2 READ, #__sportsmanager_teamspiel AS teamspiel3 READ, #__sportsmanager_teamspiel AS teamspiel4 READ, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_individualwettbewerb_spiel AS individualspiel1 WRITE, #__sportsmanager_individualwettbewerb_spiel AS individualspiel2 WRITE, #__sportsmanager_individualwettbewerb_spiel AS individualspiel3 WRITE, #__sportsmanager_individualwettbewerb_spiel AS individualspiel4 WRITE, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE, #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_spieler.spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_ausgangsplatzierung USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel1 ON #__sportsmanager_spieler.spieler_id = teamspiel1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel2 ON #__sportsmanager_spieler.spieler_id = teamspiel2.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel3 ON #__sportsmanager_spieler.spieler_id = teamspiel3.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel AS teamspiel4 ON #__sportsmanager_spieler.spieler_id = teamspiel4.gast_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel1 ON #__sportsmanager_spieler.spieler_id = individualspiel1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel2 ON #__sportsmanager_spieler.spieler_id = individualspiel2.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel3 ON #__sportsmanager_spieler.spieler_id = individualspiel3.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb_spiel AS individualspiel4 ON #__sportsmanager_spieler.spieler_id = individualspiel4.gast_spieler_2_id" + . "\n WHERE ISNULL(aktueller_verein_id)" + . "\n AND ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id)" + . "\n AND ISNULL(#__sportsmanager_individualwettbewerb_ausgangsplatzierung.spieler_id)" + . "\n AND ISNULL(#__sportsmanager_mitglied_von_team.team_id)" + . "\n AND ISNULL(teamspiel1.heim_spieler_1_id)" + . "\n AND ISNULL(teamspiel2.heim_spieler_2_id)" + . "\n AND ISNULL(teamspiel3.gast_spieler_1_id)" + . "\n AND ISNULL(teamspiel4.gast_spieler_2_id)" + . "\n AND ISNULL(individualspiel1.heim_spieler_1_id)" + . "\n AND ISNULL(individualspiel2.heim_spieler_2_id)" + . "\n AND ISNULL(individualspiel3.gast_spieler_1_id)" + . "\n AND ISNULL(individualspiel4.gast_spieler_2_id)" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + $bilder_spieler_ids = array(); + + foreach ($spieler AS $s) { + $id = $s->spieler_id; + + if (in_array($id, $spieler_beizubehalten_ids)) + continue; + + array_push($bilder_spieler_ids, $id); + + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE spieler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spieler WHERE spieler_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren(); + + foreach ($bilder_spieler_ids AS $id) + bildLoeschen("spieler", $id); + + redirectSportsManagerURL('&task=admin_spieler&filter=' . urlencode($filter) . '#id' . $spieler_beizubehalten_id); +} + +function adminImportSpielerForm() { + $db =& getDatabase(); + + $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(true); + + HTML_sportsmanager_admin::adminImportSpieler(); +} + +function adminImportSpielerDetailsForm() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + $query = "SELECT DISTINCT session_id" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id < SUBTIME(NOW(), '00:05:00')"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "DELETE FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '$row->session_id'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if (empty($_FILES["daten"]["tmp_name"]) || !is_uploaded_file($_FILES["daten"]["tmp_name"])) { + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_NO_FILE_SPECIFIED')); + + return; + } + + $handle = fopen($_FILES["daten"]["tmp_name"], "r"); + if (!$handle) { + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_COULD_NOT_OPEN_FILE')); + + return; + } + if (feof($handle)) { + redirectSportsManagerURL('&task=admin_spieler', JText::_('COM_SPORTSMANAGER_FILE_IS_EMPTY')); + + return; + } + + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + if (substr($titelzeile, 0, 4) == "sep=") { + $trennzeichen = substr($titelzeile, 4); + if ($trennzeichen == "") // TAB am Ende wird aus irgendwelchen Gründen weggekürzt + $trennzeichen = "\t"; + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + } + else if ($titelzeile == "NAME#VORNAME#GESCHLECHT#VEREIN#STRASSE#PLZ/ORT#TELEFON#FAX#MOBILE#EMAIL#BEMERKUNG#SPIELERPASS#GEBURTSDATUM") + $trennzeichen = "#"; + else if (strpos($titelzeile, "\t") !== false) + $trennzeichen = "\t"; + else if (strpos($titelzeile, ";") !== false) + $trennzeichen = ";"; + else + $trennzeichen = ","; + + $spalte = array(); + + if (substr($titelzeile, 0, 14) == ";All licensees" || substr($titelzeile, 0, 24) == ";All validated licensees") { + // ITSF-Export + $lizenz_import = true; + $buffer = $titelzeile; + while (!feof($handle) && strpos($buffer, "Profession") === false) + $buffer = chop(utf8_encode(fgets($handle, 4096))); + $spalte["nachname"] = 3; + $spalte["vorname"] = 2; + $spalte["geschlecht"] = 1; + $spalte["spielernr"] = 6; + $spalte["lizenznr"] = 0; + $spalte["geburtsjahr"] = 5; + } + else { + $lizenz_import = false; + $titel = explode($trennzeichen, strtolower($titelzeile)); + + foreach ($titel as $index => $bezeichnung) { + $bezeichnung = trim($bezeichnung); + $len = strlen($bezeichnung); + if ($len >= 2 && $bezeichnung[0] == '"' && $bezeichnung[$len - 1] == '"') + $bezeichnung = trim(str_replace('""', '"', substr($bezeichnung, 1, $len - 2))); + + if ($bezeichnung == "name" || $bezeichnung == "nachname") + $spalte["nachname"] = $index; + else if ($bezeichnung == "vorname") + $spalte["vorname"] = $index; + else if ($bezeichnung == "name, vorname" || $bezeichnung == "name,vorname") + $spalte["name,vorname"] = $index; + else if ($bezeichnung == "pseudonym") + $spalte["pseudonym"] = $index; + else if ($bezeichnung == "geschlecht" || $bezeichnung == "anrede") + $spalte["geschlecht"] = $index; + else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr." || $bezeichnung == "spielerpass") + $spalte["spielernr"] = $index; + else if ($bezeichnung == "spielernr alt" || $bezeichnung == "spielernr. alt" || $bezeichnung == "spielernr_alt") + $spalte["spielernr_alt"] = $index; + else if ($bezeichnung == "lizenznr" || $bezeichnung == "lizenznr.") + $spalte["lizenznr"] = $index; + else if ($bezeichnung == "organisation") + $spalte["organisation"] = $index; + else if ($bezeichnung == "vereinssitz") + $spalte["vereinssitz"] = $index; + else if ($bezeichnung == "vereinsname" || $bezeichnung == "verein") + $spalte["vereinsname"] = $index; + else if ($bezeichnung == "mannschaft" || $bezeichnung == "teamname") + $spalte["teamname"] = $index; + else if ($bezeichnung == "geburtsdatum") + $spalte["geburtsdatum"] = $index; + else if ($bezeichnung == "geburtsjahr") + $spalte["geburtsjahr"] = $index; + else if ($bezeichnung == "email" || $bezeichnung == "e-mail") + $spalte["email"] = $index; + else if (substr($bezeichnung, 0, 4) == "stra") + $spalte["strasse"] = $index; + else if ($bezeichnung == "plz/ort") + $spalte["plz/ort"] = $index; + else if ($bezeichnung == "plz") + $spalte["plz"] = $index; + else if ($bezeichnung == "ort") + $spalte["ort"] = $index; + else if ($bezeichnung == "landeskennung") + $spalte["landeskennung"] = $index; + else if ($bezeichnung == "telefon") + $spalte["telefon"] = $index; + else if ($bezeichnung == "mobil") + $spalte["mobil"] = $index; + else if ($bezeichnung == "beruf") + $spalte["beruf"] = $index; + else if ($bezeichnung == "austritt" || $bezeichnung == "ausgetreten") + $spalte["ausgetreten"] = $index; + else if ($bezeichnung == "mitgliedsstatus") + $spalte["mitgliedsstatus"] = $index; + } + + if (((!isset($spalte["nachname"]) || !isset($spalte["vorname"])) && !isset($spalte["name,vorname"])) || !isset($spalte["spielernr"])) { + redirectSportsManagerURL('&task=admin_spieler', "Die übergebene Datei ist keine Spielerdatei."); + + return; + } + } + + $session_id = date('Y-m-d H:i:s'); + +// $veranstalter_import = array(); + + while (!feof($handle)) { + $buffer = chop(utf8_encode(fgets($handle, 4096))); + $daten = explode($trennzeichen, $buffer); + + foreach ($daten as $index => $wert) { + $wert = trim($wert); + $len = strlen($wert); + if ($len < 2 || $wert[$len - 1] != '"' || !($wert[0] == '"' || ($wert[0] == '=' && $wert[1] == '"'))) + $daten[$index] = $wert; + else if ($wert[0] == '"') + $daten[$index] = trim(str_replace('""', '"', substr($wert, 1, $len - 2))); + else + $daten[$index] = trim(str_replace('""', '"', substr($wert, 2, $len - 3))); + } + + if (isset($spalte["vorname"]) && isset($spalte["nachname"]) && isset($daten[$spalte["vorname"]]) && isset($daten[$spalte["nachname"]])) { + $nachname = $daten[$spalte["nachname"]]; + $vorname = $daten[$spalte["vorname"]]; + } + else if (isset($spalte["name,vorname"]) && isset($daten[$spalte["name,vorname"]])) { + $pos = strpos($daten[$spalte["name,vorname"]], ","); + if ($pos === false) + continue; + $nachname = trim(substr($daten[$spalte["name,vorname"]], 0, $pos)); + $vorname = trim(substr($daten[$spalte["name,vorname"]], $pos + 1)); + } + else + continue; + + if ($vorname == "" || $nachname == "") + continue; + + $mitgliedsstatus = 1; + if (isset($spalte["mitgliedsstatus"]) && isset($daten[$spalte["mitgliedsstatus"]]) && !empty($daten[$spalte["mitgliedsstatus"]])) { + $s = strtolower($daten[$spalte["mitgliedsstatus"]]); + if ($s == "ausgetreten") + $mitgliedsstatus = 0; + else if ($s == "passiv") + $mitgliedsstatus = 3; + else if (substr($s, 0, 9) == "eingeschr") + $mitgliedsstatus = 2; + } + else if (isset($spalte["ausgetreten"]) && isset($daten[$spalte["ausgetreten"]]) && !empty($daten[$spalte["ausgetreten"]])) { + if (strtolower($daten[$spalte["ausgetreten"]]) == "ja") + $mitgliedsstatus = 0; + } + + if ($mitgliedsstatus == 0) + continue; + + $geschlecht = isset($spalte["geschlecht"]) && isset($daten[$spalte["geschlecht"]]) ? (($daten[$spalte["geschlecht"]][0] == "M" || $daten[$spalte["geschlecht"]][0] == "m" || $daten[$spalte["geschlecht"]][0] == "H" || $daten[$spalte["geschlecht"]][0] == "h") ? "M" : "W") : "M"; + $spielernr = isset($spalte["spielernr"]) && isset($daten[$spalte["spielernr"]]) ? trim($daten[$spalte["spielernr"]]) : ""; + if (!empty($spielernr) && !ctype_digit(substr($spielernr, strlen($spielernr) - 1, 1))) + $spielernr = ""; + $spielernr_alt = isset($spalte["spielernr_alt"]) && isset($daten[$spalte["spielernr_alt"]]) ? trim($daten[$spalte["spielernr_alt"]]) : ""; + $lizenznr = isset($spalte["lizenznr"]) && isset($daten[$spalte["lizenznr"]]) ? $daten[$spalte["lizenznr"]] : ""; + if (!empty($lizenznr) && !ctype_digit(substr($lizenznr, strlen($lizenznr) - 1, 1))) + $lizenznr = ""; + $pseudonym = isset($spalte["pseudonym"]) && isset($daten[$spalte["pseudonym"]]) ? $daten[$spalte["pseudonym"]] : ""; + $organisation = isset($spalte["organisation"]) && isset($daten[$spalte["organisation"]]) ? $daten[$spalte["organisation"]] : ""; + $vereinssitz = isset($spalte["vereinssitz"]) && isset($daten[$spalte["vereinssitz"]]) ? $daten[$spalte["vereinssitz"]] : ""; + $vereinsname = isset($spalte["vereinsname"]) && isset($daten[$spalte["vereinsname"]]) ? $daten[$spalte["vereinsname"]] : ""; + $geburtsdatum = isset($spalte["geburtsdatum"]) && isset($daten[$spalte["geburtsdatum"]]) ? normalisiertesDatum($daten[$spalte["geburtsdatum"]]) : null; + $geburtsjahr = isset($spalte["geburtsjahr"]) && isset($daten[$spalte["geburtsjahr"]]) ? $daten[$spalte["geburtsjahr"]] : null; + if (empty($geburtsjahr) || !ctype_digit($geburtsjahr) || $geburtsjahr < 1800) + $geburtsjahr = null; + $email = isset($spalte["email"]) && isset($daten[$spalte["email"]]) ? $daten[$spalte["email"]] : ""; + $strasse = isset($spalte["strasse"]) && isset($daten[$spalte["strasse"]]) ? $daten[$spalte["strasse"]] : ""; + if (isset($spalte["plz/ort"]) && isset($daten[$spalte["plz/ort"]])) { + $pos = strpos($daten[$spalte["plz/ort"]], ' '); + if ($pos == false) { + $plz = ""; + $ort = ""; + } + else { + $plz = substr($daten[$spalte["plz/ort"]], 0, $pos); + $ort = substr($daten[$spalte["plz/ort"]], $pos + 1); + } + } + else { + $plz = ""; + $ort = ""; + } + if (isset($spalte["plz"])) + $plz = isset($daten[$spalte["plz"]]) ? $daten[$spalte["plz"]] : ""; + if (isset($spalte["ort"])) + $ort = isset($daten[$spalte["ort"]]) ? $daten[$spalte["ort"]] : ""; + $landeskennung = isset($spalte["landeskennung"]) && isset($daten[$spalte["landeskennung"]]) ? $daten[$spalte["landeskennung"]] : ""; + $telefon = isset($spalte["telefon"]) && isset($daten[$spalte["telefon"]]) ? $daten[$spalte["telefon"]] : ""; + $mobil = isset($spalte["mobil"]) && isset($daten[$spalte["mobil"]]) ? $daten[$spalte["mobil"]] : ""; + $beruf = isset($spalte["beruf"]) && isset($daten[$spalte["beruf"]]) ? $daten[$spalte["beruf"]] : ""; + + $query = "INSERT #__sportsmanager_spieler_import" + . "\n SET session_id = '" . $db->escape($session_id) . "'," + . "\n vorname = '" . $db->escape($vorname) . "'," + . "\n nachname = '" . $db->escape($nachname) . "'"; + if (isset($spalte["spielernr"])) + $query .= ",\n spielernr = '" . $db->escape($spielernr) . "'"; + if (isset($spalte["spielernr_alt"])) + $query .= ",\n spielernr_alt = '" . $db->escape($spielernr_alt) . "'"; + if (isset($spalte["lizenznr"])) + $query .= ",\n lizenznr = '" . $db->escape($lizenznr) . "'"; + if (isset($spalte["pseudonym"])) + $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'"; + $query .= ",\n geschlecht = '" . $db->escape($geschlecht) . "'"; + if (isset($spalte["geburtsdatum"])) + $query .= ",\n geburtsdatum = " . ($geburtsdatum == null ? "NULL" : ("'" . $db->escape($geburtsdatum) . "'")); + if (isset($spalte["geburtsjahr"]) || isset($spalte["geburtsdatum"])) + $query .= ",\n geburtsjahr = " . ($geburtsjahr == null ? ($geburtsdatum == null ? "NULL" : ("YEAR('" . $db->escape($geburtsdatum) . "')")) : ("'" . $db->escape($geburtsjahr) . "'")); + if (isset($spalte["strasse"])) + $query .= ",\n strasse = '" . $db->escape($strasse) . "'"; + if (isset($spalte["plz"])) + $query .= ",\n plz = '" . $db->escape($plz) . "'"; + if (isset($spalte["ort"])) + $query .= ",\n ort = '" . $db->escape($ort) . "'"; + if (isset($spalte["landeskennung"])) + $query .= ",\n landeskennung = '" . $db->escape($landeskennung) . "'"; + if (isset($spalte["telefon"])) + $query .= ",\n telefon = '" . $db->escape($telefon) . "'"; + if (isset($spalte["mobil"])) + $query .= ",\n mobil = '" . $db->escape($mobil) . "'"; + if (isset($spalte["email"])) + $query .= ",\n email = '" . $db->escape($email) . "'"; + if (isset($spalte["vereinsname"])) + $query .= ",\n vereinsname = '" . $db->escape($vereinsname) . "'"; + if (isset($spalte["vereinssitz"])) + $query .= ",\n vereinssitz = '" . $db->escape($vereinssitz) . "'"; + if (isset($spalte["organisation"])) + $query .= ",\n veranstalterbezeichnung = '" . $db->escape($organisation) . "'"; + $query .= ",\n mitgliedsstatus = '" . $mitgliedsstatus . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + +// if (!isset($veranstalter_import[$organisation])) +// $veranstalter_import[$organisation] = TRUE; + } + fclose($handle); + + if ($lizenz_import) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_spieler_import" + . "\n INNER JOIN #__sportsmanager_spieler USING (spielernr)" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr <> '' AND #__sportsmanager_spieler_import.lizenznr <> ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $lizenzen_aktualisiert = $db->loadResult(); + + $query = "UPDATE #__sportsmanager_spieler_import" + . "\n INNER JOIN #__sportsmanager_spieler USING (spielernr)" + . "\n SET #__sportsmanager_spieler.lizenznr = #__sportsmanager_spieler_import.lizenznr" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr <> '' AND #__sportsmanager_spieler_import.lizenznr <> ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + HTML_sportsmanager_admin::adminImportSpielerBericht($lizenzen_aktualisiert, array(), 0, array(), array(), array(), false, redirectSessionIdEmpty() ? null : redirectSessionIdSetzen()); + + return; + } + + $spalten = array(); + if (isset($spalte["pseudonym"])) + array_push($spalten, "pseudonym"); + if (isset($spalte["geschlecht"])) + array_push($spalten, "geschlecht"); + if (isset($spalte["spielernr"])) + array_push($spalten, "spielernr"); + if (isset($spalte["spielernr_alt"])) + array_push($spalten, "spielernr_alt"); + if (isset($spalte["lizenznr"])) + array_push($spalten, "lizenznr"); + if (isset($spalte["organisation"])) + array_push($spalten, "organisation"); + if (isset($spalte["vereinssitz"])) + array_push($spalten, "vereinssitz"); + if (isset($spalte["vereinsname"])) + array_push($spalten, "vereinsname"); + if (isset($spalte["geburtsdatum"])) + array_push($spalten, "geburtsdatum"); + if (isset($spalte["geburtsjahr"]) || isset($spalte["geburtsdatum"])) + array_push($spalten, "geburtsjahr"); + if (isset($spalte["email"])) + array_push($spalten, "email"); + if (isset($spalte["strasse"])) + array_push($spalten, "strasse"); + if (isset($spalte["strasse"])) + array_push($spalten, "strasse"); + if (isset($spalte["plz/ort"]) || isset($spalte["plz"])) + array_push($spalten, "plz"); + if (isset($spalte["plz/ort"]) || isset($spalte["ort"])) + array_push($spalten, "ort"); + if (isset($spalte["landeskennung"])) + array_push($spalten, "landeskennung"); + if (isset($spalte["telefon"])) + array_push($spalten, "telefon"); + if (isset($spalte["mobil"])) + array_push($spalten, "mobil"); + array_push($spalten, "mitgliedsstatus"); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter"; + if ($beschraenkter_zugriff) + $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); + $query .= "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + $query = "SELECT DISTINCT veranstalterbezeichnung" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter_import = $db->loadObjectList(); + + $veranstalter_zugehoerigkeit = array(); + foreach ($veranstalter_import as $v) { + $query = "SELECT #__sportsmanager_veranstalter.veranstalter_id, COUNT(*) AS spieler" + . "\n FROM #__sportsmanager_spieler_import" + . "\n INNER JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" + . "\n INNER JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_verein USING (verein_id)" + . "\n INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND #__sportsmanager_spieler_import.spielernr != '' AND " . (empty($v->veranstalterbezeichnung) ? "ISNULL(#__sportsmanager_spieler_import.veranstalterbezeichnung)" : ("#__sportsmanager_spieler_import.veranstalterbezeichnung = '" . $db->escape($v->veranstalterbezeichnung) . "'")) . " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" + . "\n GROUP BY #__sportsmanager_veranstalter.veranstalter_id" + . "\n ORDER BY spieler DESC" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) + $veranstalter_zugehoerigkeit[$v->veranstalterbezeichnung] = $rows[0]->veranstalter_id; + } + + $query = "SELECT DISTINCT vereinsname, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine_import = $db->loadObjectList(); + $vereine_import_anzahl = count($vereine_import); + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_verein"; + if ($beschraenkter_zugriff) + $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine_aktuell_anzahl = $db->loadResult(); + + if (!$beschraenkter_zugriff && count($vereine_import) == 1) { + $verein_import = $vereine_import[0]->vereinsname; + $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten" + . "\n ORDER BY veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + } + else { + $verein_import = ""; + $vereine = array(); + } + + HTML_sportsmanager_admin::adminImportSpielerDetails($beschraenkter_zugriff, $ansprechpartner_importieren, $veranstalter, $veranstalter_import, $veranstalter_zugehoerigkeit, $session_id, implode(",", $spalten), $verein_import, $vereine, einstellungswert("spielerimport_persoenliche_daten_vorauswahl"), $vereine_import_anzahl, $vereine_aktuell_anzahl); +} + +function adminImportSpielerVorschau() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + if (!ini_get('safe_mode')) + set_time_limit(300); + + $session_id = $jinput->get('session_id', '', 'RAW'); + + $query = "SELECT DISTINCT veranstalterbezeichnung" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter_import = $db->loadObjectList(); + + $spalten = array(); + foreach (explode(",", $jinput->get('spalten', '', 'RAW')) as $s) + $spalten[$s] = true; + $veranstalter = array(); + $n = 1; + foreach ($veranstalter_import as $v) { + $veranstalter_id = $jinput->get('veranstalter_' . $n . '_id', '', 'INT'); + if (!$beschraenkter_zugriff || (!empty($veranstalter_id) && benutzerVeranstalterModerator($veranstalter_id))) + $veranstalter[$v->veranstalterbezeichnung] = $veranstalter_id; + else + $veranstalter[$v->veranstalterbezeichnung] = ""; + $n++; + } + + $spielernr_aendern = false; + if (isset($spalten["spielernr_alt"])) { + $query = "SELECT nachname, vorname, spielernr, spielernr_alt" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != ''" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielervergleich = $db->loadObjectList(); + + if (count($spielervergleich) > 0) { + $spielernr_aendern = true; + $s1 = $spielervergleich[0]; + $query = "SELECT nachname, vorname, spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE spielernr = '$s1->spielernr'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + if (count($spieler) > 0) { + $s2 = $spieler[0]; + if ($s1->vorname == $s2->vorname && $s1->nachname == $s1->nachname) { + $query = "UPDATE #__sportsmanager_spieler_import" + . "\n SET spielernr_alt = NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielernr_aendern = false; + } + } + + if ($spielernr_aendern) { + $query = "SELECT nachname, vorname" + . "\n FROM" + . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '') AS import" + . "\n INNER JOIN" + . "\n (SELECT spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n ) AS bestand" + . "\n ON bestand.spielernr = import.spielernr" + . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_spieler_import WHERE spielernr_alt = bestand.spielernr AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '')" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $konflikte = $db->loadObjectList(); + + if (count($konflikte) > 0) { + HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte); + + return; + } + } + } + } + + $query = "SELECT #__sportsmanager_spieler_import.*, #__sportsmanager_spieler.spieler_id, IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL) AS nachname_alt, IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL) AS vorname_alt," + . "\n IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS t1 WHERE (#__sportsmanager_spieler_import.vorname = t1.vorname AND #__sportsmanager_spieler_import.nachname = t1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(t1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = t1.geburtsjahr))), 0) AS namensgleich" + . "\n FROM #__sportsmanager_spieler_import" + . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND " . ($spielernr_aendern ? "IF(NOT ISNULL(#__sportsmanager_spieler_import.spielernr_alt) AND #__sportsmanager_spieler_import.spielernr_alt != '', #__sportsmanager_spieler_import.spielernr_alt = #__sportsmanager_spieler.spielernr, #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr)" : "#__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr") + . "\n WHERE session_id = '" . $db->escape($session_id) . "'" + . "\n HAVING namensgleich > 0 OR NOT ISNULL(nachname_alt) OR NOT ISNULL(vorname_alt)" + // "namensgleich" kann in der "ORDER"-Anweisung" nicht verwendet werden, da MySQL 5.0.x dies nicht akzeptiert + . "\n ORDER BY IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS t1 WHERE (#__sportsmanager_spieler_import.vorname = t1.vorname AND #__sportsmanager_spieler_import.nachname = t1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(t1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = t1.geburtsjahr))), 0) > 0 DESC, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler_import = $db->loadObjectList(); + + $import_verweigern = false; + if ($beschraenkter_zugriff) { + $eintraege_zugeordnet = 0; + $eintraege_nicht_zugeordnet = 0; + foreach ($spieler_import as $s) { + if ($s->namensgleich > 0) { + $import_verweigern = true; + break; + } + $p1 = $p2 = 100; + if ($s->nachname_alt != null) + similar_text($s->nachname, $s->nachname_alt, $p1); + if ($s->vorname_alt != null) + similar_text($s->vorname, $s->vorname_alt, $p2); + if (floor($p1) < 75 && floor($p2) < 75) { + $p1 = $p2 = 100; + if ($s->nachname_alt != null) + similar_text($s->vorname, $s->nachname_alt, $p1); + if ($s->vorname_alt != null) + similar_text($s->nachname, $s->vorname_alt, $p2); + if (floor($p1) < 75 && floor($p2) < 75) { + $import_verweigern = true; + break; + } + } + } + if (!$import_verweigern) { + $query = "SELECT SUM(IF(ISNULL(spieler_id), 0, 1)) AS zugeordnet, SUM(IF(ISNULL(spieler_id), 1, 0)) AS nicht_zugeordnet" + . "\n FROM #__sportsmanager_spieler_import" + . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND " . ($spielernr_aendern ? "IF(NOT ISNULL(#__sportsmanager_spieler_import.spielernr_alt) AND #__sportsmanager_spieler_import.spielernr_alt != '', #__sportsmanager_spieler_import.spielernr_alt = #__sportsmanager_spieler.spielernr, #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr)" : "#__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr") + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler_zugeordnet = $db->loadObjectList(); + + if (count($spieler_zugeordnet) > 0 && $spieler_zugeordnet[0]->nicht_zugeordnet > ($spieler_zugeordnet[0]->zugeordnet / 2)) + $import_verweigern = true; + } + } + + if ($import_verweigern) { + $query = "DELETE FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + HTML_sportsmanager_admin::adminImportSpielerVorschau($import_verweigern, $spieler_import, $veranstalter, $session_id, $jinput->get('persoenliche_daten', 0, 'INT'), $jinput->get('lizenznr_beibehalten', 0, 'INT'), $jinput->get('spalten', '', 'RAW')); +} + +function adminImportSpieler() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_importieren = einstellungswert("ansprechpartner_importieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_importieren == 1 || $ansprechpartner_importieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + if (!ini_get('safe_mode')) + set_time_limit(300); + + + if (!$beschraenkter_zugriff || $ansprechpartner_importieren != 1) + $persoenliche_daten = $jinput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" + else + $persoenliche_daten = 0; + $lizenznr_beibehalten = $jinput->get('lizenznr_beibehalten', 0, 'INT'); + + $session_id = $jinput->get('session_id', '', 'RAW'); + $query = "SELECT DISTINCT veranstalterbezeichnung" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter_import = $db->loadObjectList(); + + $spalten = array(); + foreach (explode(",", $jinput->get('spalten', '', 'RAW')) as $s) + $spalten[$s] = true; + $veranstalter = array(); + $n = 1; + $verein_explizit = 0; + foreach ($veranstalter_import as $v) { + if (isset($_POST["veranstalter_" . $n . "_id"])) { + $veranstalter_id = $jinput->get('veranstalter_' . $n . '_id', '', 'INT'); + if (!$beschraenkter_zugriff || (!empty($veranstalter_id) && benutzerVeranstalterModerator($veranstalter_id))) { + if ($veranstalter_id == "") + $veranstalter_id = -1; + else if ($veranstalter_id < 0) { + $verein_explizit = abs($veranstalter_id); + break; + } + else + $veranstalter_id = intval($veranstalter_id); + $veranstalter[$v->veranstalterbezeichnung] = $veranstalter_id; + } + else { + $veranstalter[$v->veranstalterbezeichnung] = -1; + } + } + $n++; + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen READ, #__sportsmanager_spieler WRITE, #__sportsmanager_spieler AS tt1 READ, #__sportsmanager_spieler AS tt2 READ, #__sportsmanager_spieler_import WRITE, #__sportsmanager_spieler_import AS it1 READ, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_mitglied_von_verein AS t1 READ, #__sportsmanager_verein WRITE, #__sportsmanager_veranstalter READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + /* + // TODO: Importinhalt um Spielernummern ergänzen, dann UPDATE aller gegebenen Spalten. So kein Vorgehen Spieler für Spieler erforderlich. + + Immer Spieler neu hinzufügen, wenn Spieler über Spielernr. nicht gefunden werden konnte, d.h. + wenn keine Spielernr. vorhanden, dann Spielernr. generieren + sonst Spielernr. übernehmen + +*/ + + if (isset($spalten["spielernr_alt"])) { + $query = "SELECT nachname, vorname" + . "\n FROM" + . "\n (SELECT nachname, vorname, spielernr, spielernr_alt" + . "\n FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '') AS import" + . "\n INNER JOIN" + . "\n (SELECT spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n ) AS bestand" + . "\n ON bestand.spielernr = import.spielernr" + . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_spieler_import AS it1 WHERE spielernr_alt = bestand.spielernr AND spielernr != spielernr_alt AND NOT ISNULL(spielernr) AND NOT ISNULL(spielernr_alt) AND spielernr != '' AND spielernr_alt != '')" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $konflikte = $db->loadObjectList(); + + if (count($konflikte) > 0) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + HTML_sportsmanager_admin::adminImportSpielerFehler($konflikte); + + return; + } + + $query = "UPDATE #__sportsmanager_spieler" + . "\n INNER JOIN #__sportsmanager_spieler_import ON NOT ISNULL(spielernr_alt) AND spielernr_alt != '' AND spielernr_alt = #__sportsmanager_spieler.spielernr" + . "\n SET #__sportsmanager_spieler.spielernr = #__sportsmanager_spieler_import.spielernr" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND mitgliedsstatus <> 0 AND #__sportsmanager_spieler.spielernr = #__sportsmanager_spieler_import.spielernr_alt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT IF(EXISTS(" + . "\n SELECT * FROM #__sportsmanager_spieler" + . "\n INNER JOIN #__sportsmanager_spieler_import ON NOT ISNULL(#__sportsmanager_spieler_import.spielernr) AND #__sportsmanager_spieler_import.spielernr != '' AND #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" + . "\n WHERE #__sportsmanager_spieler_import.geschlecht != #__sportsmanager_spieler.geschlecht OR #__sportsmanager_spieler_import.geburtsjahr != #__sportsmanager_spieler.geburtsjahr" + . "\n), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $kategorie_potentiell_geaendert = $db->loadResult(); + + $query = "SELECT #__sportsmanager_spieler_import.*, #__sportsmanager_spieler.spieler_id, IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL) AS nachname_alt, IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL) AS vorname_alt," + . "\n IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS tt1 WHERE (#__sportsmanager_spieler_import.vorname = tt1.vorname AND #__sportsmanager_spieler_import.nachname = tt1.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(tt1.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = tt1.geburtsjahr))), 0) AS namensgleich" + . "\n FROM #__sportsmanager_spieler_import" + . "\n LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_spieler_import.spielernr != '' AND #__sportsmanager_spieler_import.spielernr = #__sportsmanager_spieler.spielernr" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND 1 = 1" + // "namensgleich", "nachname_alt", "vorname_alt" kann in der "ORDER"-Anweisung" nicht verwendet werden, da MySQL 5.0.x dies nicht akzeptiert + // . "\n ORDER BY IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS tt2 WHERE (#__sportsmanager_spieler_import.vorname = tt2.vorname AND #__sportsmanager_spieler_import.nachname = tt2.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(tt2.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = tt2.geburtsjahr))), 0) > 0 DESC, IF(NOT ISNULL(nachname_alt) OR NOT ISNULL(vorname_alt), 0, 1), nachname, vorname"; + . "\n ORDER BY IF(#__sportsmanager_spieler_import.spielernr = '', (SELECT COUNT(*) FROM #__sportsmanager_spieler AS tt2 WHERE (#__sportsmanager_spieler_import.vorname = tt2.vorname AND #__sportsmanager_spieler_import.nachname = tt2.nachname AND ((ISNULL(#__sportsmanager_spieler_import.geburtsjahr) AND ISNULL(tt2.geburtsjahr)) OR #__sportsmanager_spieler_import.geburtsjahr = tt2.geburtsjahr))), 0) > 0 DESC, IF(NOT ISNULL(IF(#__sportsmanager_spieler.nachname != #__sportsmanager_spieler_import.nachname, #__sportsmanager_spieler.nachname, NULL)) OR NOT ISNULL(IF(#__sportsmanager_spieler.vorname != #__sportsmanager_spieler_import.vorname, #__sportsmanager_spieler.vorname, NULL)), 0, 1), nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler_import = $db->loadObjectList(); + + if (empty($verein_explizit)) { + // Alle Vereinsmitgliedschaften des Verbandes vorsorglich beenden, damit diese beim Import ggf. wieder aktiviert werden können + foreach ($veranstalter as $v => $veranstalterid) { + if ($veranstalterid != -1) { + $query = "UPDATE #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id)" + . "\n SET mitgliedsstatus = 0," + . "\n #__sportsmanager_mitglied_von_verein.ausgetreten = TRUE" + . "\n WHERE " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + else if ($verein_explizit != -1) { + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + + // Alle Vereinsmitgliedschaften des Vereins vorsorglich beenden, damit diese beim Import ggf. wieder aktiviert werden können + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET mitgliedsstatus = 0," + . "\n ausgetreten = TRUE" + . "\n WHERE verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "INSERT INTO #__sportsmanager_verein (vereinsname, vereinssitz, vereinssitz_ortsteil, veranstalter_id, url, beschreibung, ausgetreten)" + . "\n VALUES ('$vereinsname', '$vereinssitz', '$vereinssitz_ortsteil', " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ", '$url', '$beschreibung', " . ($ausgetreten ? "TRUE" : "FALSE") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + + // Nächste Spieler-Nr. ermitteln + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'basis_spielernr'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + die("Fehler: Inkonsistenz in den MySQL-Tabellen!"); + $naechste_spielernr = $rows[0]->wert; + if (empty($naechste_spielernr)) + $naechste_spielernr = "1"; + + for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { + if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') + break; + } + $spielernr_praefix = substr($naechste_spielernr, 0, $i + 1); + + $query = "SELECT spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE Left(spielernr, " . strlen($spielernr_praefix) . ") = '" . $db->escape($spielernr_praefix) . "'" + . "\n ORDER BY LENGTH(spielernr) DESC, spielernr DESC" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) { + $naechste_spielernr = $rows[0]->spielernr; + for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { + if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { + $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); + break; + } + if ($naechste_spielernr[$i] <= '8') { + $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; + break; + } + // $naechste_spielernr[$i] == '9' + $naechste_spielernr[$i] = '0'; + } + if ($i < 0) + $naechste_spielernr = "1" . $naechste_spielernr; + } + + $aktualisierungen = 0; + $spielerHinzugefuegt = array(); + $vereineHinzugefuegt = 0; + $vereineManuell = array(); + $spielerIdsHinzugefuegt = array(); + + $organisation = -1; + $veranstalterid = -1; + foreach ($spieler_import as $t) { + // wenn der Spieler ausgetreten ist, dann nicht prüfen + $mitgliedsstatus = $t->mitgliedsstatus; + if ($mitgliedsstatus == 0) + continue; + + if (empty($verein_explizit)) { + if ($organisation != $t->veranstalterbezeichnung) { + $organisation = $t->veranstalterbezeichnung; + $veranstalterid = isset($veranstalter[$organisation]) ? $veranstalter[$organisation] : -1; + } + if ($veranstalterid == -1) + continue; + } + + $spieler_id = $t->spieler_id; + $nachname = $t->nachname; + $vorname = $t->vorname; + $name = $t->vorname . " " . $t->nachname; + $geschlecht = $t->geschlecht; + $spielernr = $t->spielernr; + $lizenznr = $t->lizenznr; + $pseudonym = $t->pseudonym; + $vereinsname = $t->vereinsname; + $geburtsdatum = $t->geburtsdatum; + $geburtsjahr = $t->geburtsjahr; + $email = $t->email; + $strasse = $t->strasse; + $plz = $t->plz; + $ort = $t->ort; + $landeskennung = $t->landeskennung; + $telefon = $t->telefon; + $mobil = $t->mobil; + $spielernr = $t->spielernr; + + if ($spieler_id == null && !empty($spielernr) && isset($spielerIdsHinzugefuegt[$spielernr])) + $spieler_id = $spielerIdsHinzugefuegt[$spielernr]; // Wenn Spieler schon hinzugefügt wurde, dann vorhandenen Eintrag verwenden; verhindert doppeltes Hinterlegen von Spielernr. + + // Wenn kein Vereinsname angegeben ist, aber eine Organisation gewählt wurde, dann Spieler nicht ergänzen + if ($spieler_id == null && empty($vereinsname) && empty($verein_explizit)) + continue; + + // Spieler aktualisieren bzw. ergänzen + if ($spieler_id != null) { // Spieler aktualisieren + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET vorname = '" . $db->escape($vorname) . "'," + . "\n nachname = '" . $db->escape($nachname) . "'," + . "\n spielernr = '" . $db->escape($spielernr) . "'"; + if (isset($spalten["lizenznr"]) && ($lizenznr_beibehalten == 0 || !empty($lizenznr))) + $query .= ",\n lizenznr = '" . $db->escape($lizenznr) . "'"; + if (isset($spalten["pseudonym"])) + $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'"; + if (isset($spalten["geschlecht"])) + $query .= ",\n geschlecht = '" . $db->escape($geschlecht) . "'"; + if (isset($spalten["geburtsdatum"]) || isset($spalten["geburtsjahr"])) + $query .= ",\n geburtsjahr = " . ($geburtsjahr == null ? "NULL" : ("'" . $db->escape($geburtsjahr) . "'")); + if (($persoenliche_daten == 1 || $persoenliche_daten == 2) && isset($spalten["geburtsdatum"])) + $query .= ",\n geburtsdatum = " . ($geburtsdatum == null ? "NULL" : ("'" . $db->escape($geburtsdatum) . "'")); + if ($persoenliche_daten == 2) { + if (isset($spalten["strasse"])) + $query .= ",\n strasse = '" . $db->escape($strasse) . "'"; + if (isset($spalten["plz"])) + $query .= ",\n plz = '" . $db->escape($plz) . "'"; + if (isset($spalten["ort"])) + $query .= ",\n ort = '" . $db->escape($ort) . "'"; + if (isset($spalten["landeskennung"])) + $query .= ",\n landeskennung = '" . $db->escape($landeskennung) . "'"; + if (isset($spalten["telefon"])) + $query .= ",\n telefon = '" . $db->escape($telefon) . "'"; + if (isset($spalten["mobil"])) + $query .= ",\n mobil = '" . $db->escape($mobil) . "'"; + if (isset($spalten["email"])) + $query .= ",\n email = '" . $db->escape($email) . "'"; + } + $query .= "\n WHERE spieler_id = $spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + // $bearbeitungsVerlauf .= "-> Spielerdaten aktualisiert "; + + $aktualisierungen++; + } + else { // Spieler ergänzen + // Neuen Spieler anlegen + $query = "INSERT #__sportsmanager_spieler" + . "\n SET vorname = '" . $db->escape($vorname) . "'" + . ",\n nachname = '" . $db->escape($nachname) . "'" + . ",\n spielernr = '" . $db->escape(!empty($spielernr) ? $spielernr : $naechste_spielernr) . "'" + . ",\n lizenznr = '" . $db->escape($lizenznr) . "'" + . ",\n geschlecht = '" . $db->escape($geschlecht) . "'" + . ",\n geburtsjahr = " . ($geburtsjahr == null ? "NULL" : ("'" . $db->escape($geburtsjahr) . "'")); + if ($persoenliche_daten == 1 || $persoenliche_daten == 2) + $query .= ",\n geburtsdatum = " . ($geburtsdatum == null ? "NULL" : ("'" . $db->escape($geburtsdatum) . "'")); + if ($persoenliche_daten == 2) + $query .= ",\n pseudonym = '" . $db->escape($pseudonym) . "'" + . ",\n strasse = '" . $db->escape($strasse) . "'" + . ",\n plz = '" . $db->escape($plz) . "'" + . ",\n ort = '" . $db->escape($ort) . "'" + . ",\n landeskennung = '" . $db->escape($landeskennung) . "'" + . ",\n telefon = '" . $db->escape($telefon) . "'" + . ",\n mobil = '" . $db->escape($mobil) . "'" + . ",\n email = '" . $db->escape($email) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler_id = $db->insertid(); + + array_push($spielerHinzugefuegt, array($nachname, $vorname, !empty($spielernr) ? $spielernr : $naechste_spielernr)); + $spielerIdsHinzugefuegt[!empty($spielernr) ? $spielernr : $naechste_spielernr] = $spieler_id; + + if (empty($spielernr)) { + do { + for ($i = strlen($naechste_spielernr) - 1; $i >= 0; $i--) { + if ($naechste_spielernr[$i] < '0' || $naechste_spielernr[$i] > '9') { + $naechste_spielernr = substr($naechste_spielernr, 0, $i + 1) . "1" . substr($naechste_spielernr, $i + 1); + break; + } + if ($naechste_spielernr[$i] <= '8') { + $naechste_spielernr[$i] = $naechste_spielernr[$i] + 1; + break; + } + // $naechste_spielernr[$i] == '9' + $naechste_spielernr[$i] = '0'; + } + if ($i < 0) + $naechste_spielernr = "1" . $naechste_spielernr; + } while (isset($spielerIdsHinzugefuegt[$naechste_spielernr])); + } + } + + // Wenn nicht ausgetreten und Vereisname angegeben, dann Vereinsmitgliedschaft herstellen + if (!empty($vereinsname) || !empty($verein_explizit)) { + // Prüfen, ob Vereinsmitgliedschaft besteht + if (!empty($verein_explizit)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n WHERE spieler_id = $spieler_id AND #__sportsmanager_mitglied_von_verein.verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) { + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET mitgliedsstatus = '$mitgliedsstatus'," + . "\n ausgetreten = FALSE" + . "\n WHERE spieler_id = $spieler_id AND verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + // Vereinsmitgliedschaft besteht nicht, deshalb prüfen, ob Verein überhaupt existiert + $query = "SELECT verein_id" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + // Wenn Verein existiert, dann Mitgliedschaft ergänzen + if (count($rows) > 0) { + $query = "INSERT #__sportsmanager_mitglied_von_verein" + . "\n SET spieler_id = $spieler_id, verein_id = $verein_explizit, mitgliedsstatus = '$mitgliedsstatus', ausgetreten = FALSE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + else { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" + . "\n WHERE spieler_id = $spieler_id AND vereinsname = '" . $db->escape($vereinsname) . "' AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" + . " AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) { + $query = "UPDATE #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" + . "\n SET mitgliedsstatus = '$mitgliedsstatus', #__sportsmanager_mitglied_von_verein.ausgetreten = FALSE" + . "\n WHERE spieler_id = $spieler_id AND vereinsname = '" . $db->escape($vereinsname) . "' AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" + . " AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + // Vereinsmitgliedschaft besteht nicht, deshalb prüfen, ob Verein überhaupt existiert + $query = "SELECT verein_id" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE vereinsname = '" . $db->escape($vereinsname) . "'" + . " AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + // Wenn mehrere Vereine existieren, dann Aktualisierung auslassen + if (count($rows) > 1) { + array_push($vereineManuell, $name); + // $bearbeitungsVerlauf .= "-> Vereinsaktualiesierung übersprungen, da mehrere Vereine mit Namen existieren"; + // echo "(" . $name . ", " . $spielernr . ") " . $bearbeitungsVerlauf . "
"; + continue; + } + // Wenn Verein nicht existiert, dann ergänzen + if (count($rows) == 0) { + $query = "INSERT #__sportsmanager_verein" + . "\n SET vereinsname = '" . $db->escape($vereinsname) . "'"; + if (!empty($vereinssitz)) + $query .= ",\n vereinssitz = '" . $db->escape($vereinssitz) . "'"; + $query .= ",\n veranstalter_id = " . ($veranstalterid == 0 ? "NULL" : "$veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verein_id = $db->insertid(); + $vereineHinzugefuegt++; + // $bearbeitungsVerlauf .= "-> Verein ergänzt "; + } + // Sonst Verein merken + else { + $verein_id = $rows[0]->verein_id; + // $bearbeitungsVerlauf .= "-> Verein gefunden "; + } + + // Vereinsmitgliedschaft setzen + $query = "INSERT #__sportsmanager_mitglied_von_verein" + . "\n SET spieler_id = $spieler_id, verein_id = $verein_id, mitgliedsstatus = '$mitgliedsstatus', ausgetreten = FALSE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + // $bearbeitungsVerlauf .= "-> Vereinsmitgliedschaft ergänzt "; + } + } + } + // echo "(" . $name . ", " . $spielernr . ") " . $bearbeitungsVerlauf . "
"; + } + + $ausgetreteneVereineMitAktivenMitgliedern = array(); + /* + if ($verein_explizit != 0) { + // Alle Spieler austreten lassen, die nicht aktives Mitglied irgendeines Vereins sind, aber Mitglied des importierten Vereins waren + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET ausgetreten = TRUE" + . "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_explizit AND #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id) > 0" + . " AND (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND NOT t1.ausgetreten) = 0" + . " AND NOT ausgetreten"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + else { + // Alle Spieler austreten lassen, die nicht aktives Mitglied irgendeines Vereins sind, aber Mitglied in einem Verein des Verbandes waren oder sind + foreach ($veranstalter as $v => $veranstalterid) { + if ($veranstalterid != -1) { + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET ausgetreten = TRUE" + . "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid") . ") > 0" + . " AND (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND NOT t1.ausgetreten) = 0" + . " AND NOT ausgetreten"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + } + */ + + if ($verein_explizit == 0) { + // Vereine der Organisation als ausgetreten notieren, die keine aktiven Mitglieder haben + foreach ($veranstalter as $v => $veranstalterid) { + if ($veranstalterid != -1) { + $query = "UPDATE #__sportsmanager_verein" + . "\n SET ausgetreten = TRUE" + . "\n WHERE NOT EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND NOT ausgetreten AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + // Vereine der Organisation aus nicht ausgetreten notieren, die aktive Mitglieder haben, aber als ausgetreten notiert sind + foreach ($veranstalter as $v => $veranstalterid) { + if ($veranstalterid != -1) { + $query = "SELECT vereinsname" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND ausgetreten AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $query = "UPDATE #__sportsmanager_verein" + . "\n SET ausgetreten = FALSE" + . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AND ausgetreten AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + foreach ($rows as $row) + array_push($ausgetreteneVereineMitAktivenMitgliedern, $row->vereinsname); + + $query = "SELECT DISTINCT verein_id, #__sportsmanager_spieler_import.vereinsname, #__sportsmanager_spieler_import.vereinssitz" + . "\n FROM #__sportsmanager_spieler_import" + . "\n INNER JOIN #__sportsmanager_verein ON #__sportsmanager_verein.vereinsname = #__sportsmanager_spieler_import.vereinsname" + . "\n WHERE session_id = '" . $db->escape($session_id) . "' AND " . ($v == null ? "ISNULL(#__sportsmanager_spieler_import.veranstalterbezeichnung)" : ("#__sportsmanager_spieler_import.veranstalterbezeichnung = '" . $db->escape($v) . "'")) . " AND #__sportsmanager_spieler_import.vereinsname != '' AND #__sportsmanager_spieler_import.vereinssitz != '' AND (ISNULL(#__sportsmanager_verein.vereinssitz) OR #__sportsmanager_verein.vereinssitz != #__sportsmanager_spieler_import.vereinssitz) AND NOT #__sportsmanager_verein.ausgetreten AND " . ($veranstalterid == 0 ? "ISNULL(veranstalter_id)" : "veranstalter_id = $veranstalterid"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "UPDATE #__sportsmanager_verein" + . "\n SET vereinssitz = '" . $db->escape($row->vereinssitz) . "'" + . "\n WHERE verein_id = $row->verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + + $query = "DELETE FROM #__sportsmanager_spieler_import" + . "\n WHERE session_id = '" . $db->escape($session_id) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + sort($vereineManuell); + sort($ausgetreteneVereineMitAktivenMitgliedern); + + aktuellerVereinAktualisieren(); + if ($kategorie_potentiell_geaendert) { + ranglisteAktualisieren(); + einstufungAktualisieren(); + } + + HTML_sportsmanager_admin::adminImportSpielerBericht($aktualisierungen, $spielerHinzugefuegt, $vereineHinzugefuegt, $spieler_import, $vereineManuell, $ausgetreteneVereineMitAktivenMitgliedern, $kategorie_potentiell_geaendert, redirectSessionIdEmpty() ? null : redirectSessionIdSetzen()); +} + +function adminExportSpielerInternationalForm() { + $db =& getDatabase(); + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(true); + + HTML_sportsmanager_admin::adminExportSpielerInternational(); +} + +function csvFilter($value, $decode = true) { + if ($value === null) + return ""; + if ($decode) + $value = utf8_decode($value); + $value = str_replace('"', '""', $value); + /* + $value = str_replace("\t", ' ', $value); + $value = str_replace("\r", '', $value); + $value = str_replace("\n", ' ', $value); + */ + + // escape tab characters + $value = preg_replace("/\t/", "\\t", $value); + + // escape new lines + $value = preg_replace("/\r?\n/", "\\n", $value); + + /* + // convert 't' and 'f' to boolean values + if($str == 't') $str = 'TRUE'; + if($str == 'f') $str = 'FALSE'; + */ + + // force certain number/date formats to be imported as strings + /* + if (preg_match("/^0/", $value) || preg_match("/^\+?\d{8,}$/", $value) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $value)) + $value = "'$value"; + */ + + /* + // escape fields that include double quotes + if(strstr($value, '"')) $value = '"' . str_replace('"', '""', $value) . '"'; + */ + $value = '="' . $value . '"'; + + return $value; +} + +function adminExportSpielerInternational() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spieler_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + $persoenliche_daten = $jinput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" + $landeskennung = $db->escape(trim($jinput->get('landeskennung', '', 'RAW'))); + + $jahr = date("Y"); + $query = "SELECT lizenznr, vorname, nachname, spielernr, geschlecht, geburtsjahr"; + if ($persoenliche_daten == 1) + $query .= ",\n email, strasse, plz, ort, landeskennung, telefon, mobil, pseudonym"; + $query .= "\n FROM #__sportsmanager_spieler"// . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterid AND NOT t1.ausgetreten AND NOT t2.ausgetreten)" + . "\n WHERE NOT ISNULL(aktueller_verein_id)" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) { + redirectSportsManagerURL('&task=admin_spieler_export_international_form', "Zu dieser Auswahl sind keine Spielerdaten vorhanden!"); + + return; + } + + $dateiname = "Spieler international " . date('Y-m-d') . ".csv"; + $dateiname = bereinigterDateiname($dateiname); + + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + + $trennzeichen = "\t"; + + $header = "ITSF Number\tGender\tFirst Name\tLAST NAME\tNationality\tYear of birth\tNational Code\tPlayer in wheelchair ?\tE-mail\tCountry of residence\tAddress\tZip/Postal Code\tCity\tPhone\tProfession"; + echo "sep=" . $trennzeichen . "\n" . $header . "\n"; + foreach ($rows as $row) { + echo csvFilter($row->lizenznr) . $trennzeichen + . csvFilter($row->geschlecht == "M" ? "M" : "F") . $trennzeichen + . csvFilter($row->vorname) . $trennzeichen + . csvFilter($row->nachname) . $trennzeichen + . csvFilter($landeskennung) . $trennzeichen + . csvFilter($row->geburtsjahr) . $trennzeichen + . csvFilter($row->spielernr) . $trennzeichen + . "N" . $trennzeichen; + if ($persoenliche_daten == 1) { + echo csvFilter($row->email) . $trennzeichen + . csvFilter($row->landeskennung) . $trennzeichen + . csvFilter($row->strasse) . $trennzeichen + . csvFilter($row->plz) . $trennzeichen + . csvFilter($row->ort) . $trennzeichen + . csvFilter($row->telefon) . $trennzeichen + . "\n"; + } + else { + echo $trennzeichen + . $trennzeichen + . $trennzeichen + . $trennzeichen + . $trennzeichen + . $trennzeichen + . "\n"; + } + } + die(); +} + +function adminExportSpielerForm() { + $db =& getDatabase(); + + $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_exportieren == 1 || $ansprechpartner_exportieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE #__sportsmanager_verein.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)"; + if ($beschraenkter_zugriff) + $query .= " AND" . veranstalterFilter("veranstalter_id IN"); + $query .= "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + if (!$beschraenkter_zugriff) { + $query = "SELECT #__sportsmanager_verein.verein_id, vereinsname, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten AND EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = #__sportsmanager_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)" + . "\n ORDER BY veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + } + else { + $vereine = array(); + } + + HTML_sportsmanager_admin::adminExportSpieler($beschraenkter_zugriff, $ansprechpartner_exportieren, $veranstalter, $vereine); +} + +function adminExportSpieler() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_exportieren = einstellungswert("ansprechpartner_exportieren"); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (($ansprechpartner_exportieren == 1 || $ansprechpartner_exportieren == 2) && benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + $verein_explizit = 0; + if ($beschraenkter_zugriff) { + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + if (!benutzerVeranstalterModerator($veranstalterid)) + $veranstalterid = 0; + $verein_explizit = 0; + $ausgetretene = 0; + if ($ansprechpartner_exportieren != 1) + $persoenliche_daten = $jinput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" + else + $persoenliche_daten = 0; + $organisatorische_daten = 0; + $statistische_daten = 1; + } + else { + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $verein_explizit = $veranstalterid < 0 ? abs($veranstalterid) : 0; + + $ausgetretene = $jinput->get('ausgetretene', 0, 'INT'); // "Nein", "Ja" + $persoenliche_daten = $jinput->get('persoenliche_daten', 0, 'INT'); // 0: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr.", 1: "Vor- und Nachname, Geschlecht, Spielernr., Lizenznr., Geburtsdatum", "Alle" + $organisatorische_daten = $jinput->get('organisatorische_daten', 0, 'INT'); // 0: "Verein, Vereinssitz, Wettbewerb, Mannschaft, Ausgetreten", 1: "Ausgetreten" + $statistische_daten = $jinput->get('statistische_daten', 0, 'INT'); // 0: "Elo-Werte, Kategorie, Zuletzt gespielt", 1: "Kategorie", 2: "Keine" + } + + if ($verein_explizit != 0) { + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $verein_explizit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $verein = $rows[0]; + } + else if ($veranstalterid != 0) { + $query = "SELECT * FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalterid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $veranstalter = $rows[0]; + } + + $jahr = date("Y"); + $query = "SELECT nachname, vorname, spielernr, lizenznr, geschlecht"; + if ($statistische_daten != 2) + $query .= ",\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie"; + if ($organisatorische_daten != 2) + $query .= ",\n vereinsname as verein, vereinssitz, veranstalterbezeichnung as organisation, IF(mitgliedsstatus = 1, 'Aktiv', IF(mitgliedsstatus = 0, 'Ausgetreten', IF(mitgliedsstatus = 2, 'Eingeschränkt', 'Passiv'))) AS mitgliedsstatus"; + else if ($ausgetretene != 0) + $query .= ", IF(ISNULL(aktueller_verein_id), 'Ausgetreten', 'Aktiv') as mitgliedsstatus"; + if ($persoenliche_daten == 0) + $query .= ",\n geburtsjahr"; + if ($persoenliche_daten != 0) + $query .= ",\n geburtsjahr, geburtsdatum"; + if ($persoenliche_daten == 2) + $query .= ",\n email, strasse, plz, ort, landeskennung, telefon, mobil, pseudonym"; + if ($organisatorische_daten == 1) + $query .= ",\n (SELECT bezeichnung FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS wettbewerb," + . "\n (SELECT teamname FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS mannschaft"; + if ($statistische_daten == 0) + $query .= ",\n zuletzt_gespielt, elo_einzel, elo_einzel_spiele, elo_doppel, elo_doppel_spiele"; + $query .= "\n FROM #__sportsmanager_spieler"; + if ($organisatorische_daten != 2) { + $query .= "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)"; + } + if ($beschraenkter_zugriff == 2) + $query .= "\n WHERE " . vereinFilter("#__sportsmanager_verein.verein_id IN") . "AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"; + else if ($verein_explizit != 0) { + if ($ausgetretene != 0) + $query .= "\n WHERE #__sportsmanager_verein.verein_id = $verein_explizit"; + else + $query .= "\n WHERE #__sportsmanager_verein.verein_id = $verein_explizit AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten"; + } + else if ($veranstalterid != 0) { + if ($ausgetretene != 0) { + if ($organisatorische_daten == 0) + $query .= "\n WHERE #__sportsmanager_verein.veranstalter_id = $veranstalterid"; + else + $query .= "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterid) > 0"; + } + else { + if ($organisatorische_daten == 0) + $query .= "\n WHERE #__sportsmanager_verein.veranstalter_id = $veranstalterid AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten"; + else + $query .= "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_verein AS t2 USING (verein_id) WHERE t1.spieler_id = #__sportsmanager_spieler.spieler_id AND t2.veranstalter_id = $veranstalterid AND NOT t1.ausgetreten AND NOT t2.ausgetreten)"; + } + } + else if ($ausgetretene == 0) { + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if ($organisatorische_daten == 0) + $query .= " AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten"; + } + if ($organisatorische_daten == 0) + $query .= "\n ORDER BY nachname, vorname, IF(ISNULL(IF(ISNULL(aktueller_verein_id), #__sportsmanager_mitglied_von_verein.ausgetreten, NULL)), 1, 0), IF(ISNULL(aktueller_verein_id), #__sportsmanager_mitglied_von_verein.ausgetreten, NULL), verein"; + else + $query .= "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) { + redirectSportsManagerURL('&task=admin_spieler_export_form', "Zu dieser Auswahl sind keine Spielerdaten vorhanden!"); + + return; + } + + $dateiname = "Spieler"; + if ($verein_explizit != 0) + $dateiname .= " " . utf8_decode($verein->vereinsname); + else if ($veranstalterid != 0) + $dateiname .= " " . utf8_decode($veranstalter->veranstalterbezeichnung); + $dateiname .= " " . date('Y-m-d') . ".csv"; + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + + $trennzeichen = "\t"; + + $header = ""; + foreach ($rows[0] as $field => $value) + $header .= $field . $trennzeichen; + + $data = ""; + foreach ($rows as $row) { + $line = ''; + foreach ($row as $value) { + if ((!isset($value)) OR ($value == "")) { + $value = $trennzeichen; + } + else { + $value = str_replace('"', '""', $value); + $value = str_replace("\t", ' ', $value); + $value = str_replace("\r", '', $value); + $value = str_replace("\n", ' ', $value); + $value = '="' . $value . '"' . $trennzeichen; + } + $line .= $value; + } + $data .= trim($line) . "\n"; + } + $data = str_replace("\r", "", $data); + + echo "sep=" . $trennzeichen . "\n" . $header . "\n" . utf8_decode($data); + + die(); +} + +function adminExportSpielerSport() { + $db =& getDatabase(); + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator()) + $beschraenkter_zugriff = 1; +// else if (benutzerVereinModerator()) +// $beschraenkter_zugriff = 2; + else + keinZugriff(true); + + $jahr = date("Y"); + $query = "SELECT *," + . " IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie, vereinsname" +// . " (SELECT veranstalterbezeichnung FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein, #__sportsmanager_veranstalter WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_verein.spieler_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_verein.veranstalter_id ORDER BY #__sportsmanager_verein.verein_id DESC LIMIT 1) AS veranstalterbezeichnung" +// . "\n (SELECT bezeichnung FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS wettbewerb," +// . "\n (SELECT teamname FROM #__sportsmanager_mitglied_von_team, #__sportsmanager_team, #__sportsmanager_veranstaltung WHERE #__sportsmanager_spieler.spieler_id = #__sportsmanager_mitglied_von_team.spieler_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten AND #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND #__sportsmanager_veranstaltung.status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag ORDER BY YEAR(#__sportsmanager_veranstaltung.letzter_tag) DESC, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie LIMIT 1) AS mannschaft" + . "\n FROM #__sportsmanager_spieler"; + + if ($beschraenkter_zugriff == 2) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND" . vereinFilter("verein_id IN") . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + else + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n INNER JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $dateiname = "Spieler " . date('Y-m-d') . ".csv"; + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv; charset=utf-8;"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + echo "NAME#VORNAME#GESCHLECHT#VEREIN#STRASSE#PLZ/ORT#TELEFON#FAX#MOBILE#EMAIL#BEMERKUNG#SPIELERPASS#GEBURTSDATUM\r\n"; + + $wiederholung_zaehler = 0; + foreach ($rows as $index => $row) { + $spielernr = $row->spielernr != null && $row->spielernr != "" ? $row->spielernr : "N/A"; + $lizenznr = $row->lizenznr != null && $row->lizenznr != "" ? $row->lizenznr : "N/A"; + $kategorie = array("H" => "Herren", "D" => "Damen", "J" => "Junioren", "S" => "Senioren"); + $kommentar = $kategorie[$row->kategorie]; + if ($lizenznr != null && $row->lizenznr != "") + $kommentar .= " / " . $lizenznr; + /* + echo $row->nachname . "#" . $row->vorname . "#" . ($row->geschlecht == 'M' ? "M" : "F") . "#" + . ($row->vereinsname != NULL ? ($row->vereinsname . ($row->veranstalterbezeichnung != NULL ? (" (" . $row->veranstalterbezeichnung . ")") : "")) : "Keiner") . "#" . $row->strasse . "#" . trim($row->plz . " " . $row->ort) . "#" . $row->telefon . "#" + . "" . "#" . $row->mobil . "#" . $row->email . "#" . $kommentar . "#" . $spielernr . "#" . $row->geburtsdatum . "\r\n"; + */ + $vorname = $row->vorname; + $nachname = $row->nachname; + $naechster_name = isset($rows[$index + 1]) ? ($rows[$index + 1]->nachname . ", " . $rows[$index + 1]->vorname) : null; + $name = $nachname . ", " . $vorname; + if ($name == $naechster_name || $wiederholung_zaehler > 0) // Sports Manager macht einen case sensitive-Vergleich + $vorname .= " (" . ($wiederholung_zaehler + 1) . ")"; + if ($name == $naechster_name) + $wiederholung_zaehler++; + else + $wiederholung_zaehler = 0; + echo utf8_decode($nachname . "#" . $vorname . "#" . ($row->geschlecht == 'M' ? "M" : "F") . "#" + . ($row->vereinsname != null ? $row->vereinsname : "Keiner") . "#######" . $kommentar . "#" . $spielernr . "#\r\n"); + } + die(); +} + +function adminVereine() { + $db =& getDatabase(); + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $organisationAnzeigen = $db->loadResult() > 1; + + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten) AS mitglieder" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, ausgetreten, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVereine($vereine, $organisationAnzeigen); +} + +function adminEditVerein() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if ($id == null) { + $row = null; + $berechtigt_fuer_verein = null; + $vereinsansprechpartner = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + + $query = "SELECT t1.* FROM #__sportsmanager_berechtigt_fuer_verein AS t1, #__users AS t2 WHERE t1.berechtigt_user_id = t2.id AND berechtigt_verein_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_verein = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $id ORDER BY vereinsansprechpartner_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereinsansprechpartner = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditVerein($row, $users, $veranstalter, $berechtigt_fuer_verein, $vereinsansprechpartner); +} + +function adminSaveVerein() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $vereinsname = $db->escape(trim($jinput->get('vereinsname', '', 'RAW'))); + $vereinssitz = $db->escape(trim($jinput->get('vereinssitz', '', 'RAW'))); + $vereinssitz_ortsteil = $db->escape(trim($jinput->get('vereinssitz_ortsteil', '', 'RAW'))); + $veranstalter_id = $jinput->get('veranstalter_id', 0, 'INT'); + $url = $db->escape(trim($jinput->get('url', '', 'RAW'))); + $beschreibung = $db->escape(trim($jinput->get('beschreibung', '', 'RAW'))); + $ausgetreten = $jinput->get('ausgetreten', 0, 'INT'); + $bildbeibehalten = $jinput->get('bildbeibehalten', 0, 'INT'); + + $berechtigt_fuer_verein_user_ids = array($jinput->get('berechtigt_fuer_verein_user_1_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_verein_user_2_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_verein_user_3_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_verein_user_4_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_verein_user_5_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_verein_user_6_id', 0, 'INT')); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_vereine#id' . $id); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_verein WRITE, #__sportsmanager_berechtigt_fuer_verein WRITE, #__sportsmanager_vereinsansprechpartner WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_verein (vereinsname, vereinssitz, vereinssitz_ortsteil, veranstalter_id, url, beschreibung, ausgetreten)" + . "\n VALUES ('$vereinsname', '$vereinssitz', '$vereinssitz_ortsteil', " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . ", '$url', '$beschreibung', " . ($ausgetreten ? "TRUE" : "FALSE") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_verein" + . "\n SET vereinsname = '$vereinsname'," + . "\n vereinssitz = '$vereinssitz'," + . "\n vereinssitz_ortsteil = '$vereinssitz_ortsteil'," + . "\n veranstalter_id = " . ($veranstalter_id != 0 ? "'$veranstalter_id'" : "NULL") . "," + . "\n url = '$url'," + . "\n beschreibung = '$beschreibung'," + . "\n ausgetreten = " . ($ausgetreten ? "TRUE" : "FALSE") + . "\n WHERE verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Vereinsvertreter speichern + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_verein_user_ids[5];"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + for ($nummer = 0; $nummer <= 5; $nummer++) { + $berechtigt_user_id = $berechtigt_fuer_verein_user_ids[$nummer]; + if ($berechtigt_user_id != 0) { + $gefunden = false; + foreach ($rows as $row) { + if ($row->berechtigt_user_id == $berechtigt_user_id) + $gefunden = true; + } + if (!$gefunden) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_verein (berechtigt_user_id, berechtigt_verein_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Ansprechpartner speichern + + for ($nummer = 1; $nummer <= 3; $nummer++) { + $vereinsansprechpartner_id = $jinput->get('vereinsansprechpartner_' . $nummer . '_id', 0, 'INT'); + $vereinsansprechpartner_vorname = trim($jinput->get('vereinsansprechpartner_' . $nummer . '_vorname', '', 'RAW')); + $vereinsansprechpartner_nachname = trim($jinput->get('vereinsansprechpartner_' . $nummer . '_nachname', '', 'RAW')); + $vereinsansprechpartner_telefon = trim($jinput->get('vereinsansprechpartner_' . $nummer . '_telefon', '', 'RAW')); + $vereinsansprechpartner_mobil = trim($jinput->get('vereinsansprechpartner_' . $nummer . '_mobil', '', 'RAW')); + $vereinsansprechpartner_email = trim($jinput->get('vereinsansprechpartner_' . $nummer . '_email', '', 'RAW')); + + if ($vereinsansprechpartner_id == 0) { + if (strlen($vereinsansprechpartner_vorname) > 0 || strlen($vereinsansprechpartner_nachname) > 0) { + $query = "INSERT INTO #__sportsmanager_vereinsansprechpartner (verein_id, vorname, nachname, telefon, mobil, email) VALUES ('$id', '$vereinsansprechpartner_vorname', '$vereinsansprechpartner_nachname', '$vereinsansprechpartner_telefon', '$vereinsansprechpartner_mobil', '$vereinsansprechpartner_email');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (strlen($vereinsansprechpartner_vorname) > 0 || strlen($vereinsansprechpartner_nachname) > 0) { + $query = "UPDATE #__sportsmanager_vereinsansprechpartner" + . "\n SET vorname = '$vereinsansprechpartner_vorname'," + . "\n nachname = '$vereinsansprechpartner_nachname'," + . "\n telefon = '$vereinsansprechpartner_telefon'," + . "\n mobil = '$vereinsansprechpartner_mobil'," + . "\n email = '$vereinsansprechpartner_email'" + . "\n WHERE vereinsansprechpartner_id = $vereinsansprechpartner_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE vereinsansprechpartner_id = $vereinsansprechpartner_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($bildbeibehalten == 0) { + bildLoeschen("vereine", $id); + + if (!empty($_FILES["bild"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { + $size = getimagesize($_FILES["bild"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { + redirectSportsManagerURL('&task=admin_vereine', "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt."); + + return; + } + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine'; + if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 240, 240, 0)) { + redirectSportsManagerURL('&task=admin_vereine', "Das Bild konnte nicht an die Zielposition kopiert werden."); + + return; + } + } + } + } + + aktuellerVereinAktualisieren(); + + redirectSportsManagerURL('&task=admin_vereine#id' . $id); +} + +function adminRemoveVerein() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_team WRITE, #__sportsmanager_rechnung WRITE, #__sportsmanager_berechtigt_fuer_verein WRITE, #__sportsmanager_vereinsansprechpartner WRITE, #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_team SET verein_id = NULL WHERE verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rechnung SET verein_id = NULL WHERE verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_verein WHERE verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("vereine", $id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + aktuellerVereinAktualisieren(); + + redirectSportsManagerURL('&task=admin_vereine'); +} + +function adminVereineZusammenlegenForm() { + $db =& getDatabase(); + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $query = "SELECT verein_id, vereinsname, veranstalterbezeichnung, ausgetreten" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n ORDER BY veranstalterbezeichnung, vereinsname, ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVereineZusammenlegen($vereine); +} + +function adminVereineZusammenlegen() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_vereine'); + + return; + } + + $verein_beizubehalten_id = $jinput->get('verein_beizubehalten_id', 0, 'INT'); + $verein_zu_entfernen_id = $jinput->get('verein_zu_entfernen_id', 0, 'INT'); + + if ($verein_beizubehalten_id == $verein_zu_entfernen_id) { + redirectSportsManagerURL('&task=admin_vereine#id' . $verein_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Vereine gewählt werden"); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_verein WRITE, #__sportsmanager_mitglied_von_verein WRITE, #__sportsmanager_rechnung WRITE, #__sportsmanager_mitglied_von_verein AS t1 WRITE, #__sportsmanager_vereinsansprechpartner WRITE, #__sportsmanager_berechtigt_fuer_verein WRITE, #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET verein_id = $verein_beizubehalten_id" + . "\n WHERE verein_id = $verein_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT mitglied_von_verein_id, ausgetreten, spieler_id" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein_beizubehalten_id" + . "\n ORDER BY spieler_id, IF(ausgetreten, 1, 0), ausgetreten DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $spieler_id = null; + foreach ($rows as $row) { + if ($row->spieler_id == $spieler_id) { + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = $row->mitglied_von_verein_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else + $spieler_id = $row->spieler_id; + } + + + $query = "UPDATE #__sportsmanager_team" + . "\n SET verein_id = $verein_beizubehalten_id" + . "\n WHERE verein_id = $verein_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rechnung" + . "\n SET verein_id = $verein_beizubehalten_id" + . "\n WHERE verein_id = $verein_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE verein_id = $verein_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $verein_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_verein WHERE berechtigt_verein_id = $verein_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_verein WHERE verein_id = $verein_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("vereine", $verein_zu_entfernen_id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + aktuellerVereinAktualisieren(); + + redirectSportsManagerURL('&task=admin_vereine#id' . $verein_beizubehalten_id); +} + +function adminVereinsmitglieder() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $vereinid = $jinput->get('vereinid', 0, 'INT'); + if ($vereinid == 0) die ("Wrong id!"); + + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $vereinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + if (count($vereine) < 1) die ("Wrong id"); + $verein = $vereine[0]; + + $berechtigt_spieler_aendern = benutzerZugriff("spieler_aendern"); + + $query = "SELECT mitglied_von_verein_id, mitgliedsstatus, vorname, nachname, spielernr, #__sportsmanager_spieler.spieler_id" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $vereinid" + . "\n ORDER BY IF(mitgliedsstatus <> 0, 0, 1), mitgliedsstatus, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereinsmitglieder = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVereinsmitglieder($verein, $vereinsmitglieder, $berechtigt_spieler_aendern); +} + +function adminEditVereinsmitglied() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $vereinid = $jinput->get('vereinid', 0, 'INT'); + + if ($id == 0) + $row = null; + else { + $query = "SELECT t1.*, t2.vorname, t2.nachname FROM #__sportsmanager_mitglied_von_verein AS t1 LEFT JOIN #__sportsmanager_spieler AS t2 ON t1.spieler_id = t2.spieler_id WHERE mitglied_von_verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $vereinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + if (count($vereine) < 1) die ("Wrong id"); + $verein = $vereine[0]; + + $query = "SELECT spieler_id, vorname, nachname, spielernr FROM #__sportsmanager_spieler ORDER BY nachname, vorname, spielernr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditVereinsmitglied($row, $verein, $spieler); +} + +function adminSaveVereinsmitglied() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $spielerid = $jinput->get('spielerid', 0, 'INT'); + $vereinid = $jinput->get('vereinid', 0, 'INT'); + $mitgliedsstatus = $jinput->get('mitgliedsstatus', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinid); + + return; + } + + if (empty($id)) { + $query = "INSERT INTO #__sportsmanager_mitglied_von_verein (spieler_id, verein_id, mitgliedsstatus, ausgetreten) VALUES ('$spielerid', '$vereinid', '1', FALSE);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET mitgliedsstatus = '" . $mitgliedsstatus . "'," + . "\n ausgetreten = " . ($mitgliedsstatus == 0 ? "TRUE" : "FALSE") + . "\n WHERE mitglied_von_verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + aktuellerVereinAktualisieren($spielerid); + + redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinid); +} + +function adminRemoveVereinsmitglied() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $vereinid = $jinput->get('vereinid', 0, 'INT'); + $query = "DELETE FROM #__sportsmanager_mitglied_von_verein WHERE mitglied_von_verein_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + aktuellerVereinAktualisieren(); + + redirectSportsManagerURL('&task=admin_vereinsmitglieder&vereinid=' . $vereinid); +} + +function adminSpielorte() { + $db =& getDatabase(); + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielorte($spielorte); +} + +function adminEditSpielort() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if ($id == null) { + $row = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_spielort WHERE spielort_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditSpielort($row); +} + +function adminSaveSpielort() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $name = $db->escape(trim($jinput->get('name', '', 'RAW'))); + $strasse = $db->escape(trim($jinput->get('strasse', '', 'RAW'))); + $plz = $db->escape(trim($jinput->get('plz', '', 'RAW'))); + $ortsname = $db->escape(trim($jinput->get('ortsname', '', 'RAW'))); + $ortsteil = $db->escape(trim($jinput->get('ortsteil', '', 'RAW'))); + $url = $db->escape(trim($jinput->get('url', '', 'RAW'))); + $beschreibung = $db->escape(trim($jinput->get('beschreibung', '', 'RAW'))); + $status = $jinput->get('status', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spielorte#id' . $id); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_spielort WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_spielort (name, strasse, plz, ortsname, ortsteil, url, beschreibung, status)" + . "\n VALUES ('$name', '$strasse', '$plz', '$ortsname', '$ortsteil', '$url', '$beschreibung', '$status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_spielort" + . "\n SET name = '$name'," + . "\n strasse = '$strasse'," + . "\n plz = '$plz'," + . "\n ortsname = '$ortsname'," + . "\n ortsteil = '$ortsteil'," + . "\n url = '$url'," + . "\n beschreibung = '$beschreibung'," + . "\n status = '$status'" + . "\n WHERE spielort_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spielorte#id' . $id); +} + +function adminRemoveSpielort() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_spielort WRITE, #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_team SET heimspielort_id = NULL WHERE heimspielort_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_begegnung SET spielort_id = NULL WHERE spielort_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spielort WHERE spielort_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spielorte'); +} + +function adminSpielorteZusammenlegenForm() { + $db =& getDatabase(); + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielorteZusammenlegen($spielorte); +} + +function adminSpielorteZusammenlegen() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielorte_aendern")) + keinZugriff(true); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spielorte'); + + return; + } + + $spielort_beizubehalten_id = $jinput->get('spielort_beizubehalten_id', 0, 'INT'); + $spielort_zu_entfernen_id = $jinput->get('spielort_zu_entfernen_id', 0, 'INT'); + + if ($spielort_beizubehalten_id == $spielort_zu_entfernen_id) { + redirectSportsManagerURL('&task=admin_spielorte#id' . $spielort_beizubehalten_id, "Zum Zusammanlegen müssen zwei unterschiedliche Spielorte gewählt werden"); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_spielort WRITE, #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_team" + . "\n SET heimspielort_id = $spielort_beizubehalten_id" + . "\n WHERE heimspielort_id = $spielort_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET spielort_id = $spielort_beizubehalten_id" + . "\n WHERE spielort_id = $spielort_zu_entfernen_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_spielort WHERE spielort_id = $spielort_zu_entfernen_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_spielorte#id' . $spielort_beizubehalten_id); +} + +function adminEinstufungen() { + $db =& getDatabase(); + + if (!benutzerZugriff("einstufungen_aendern")) + keinZugriff(true); + + $query = "SELECT *, (SELECT COUNT(*) FROM #__sportsmanager_einstufung_rangliste WHERE #__sportsmanager_einstufung.einstufung_id = #__sportsmanager_einstufung_rangliste.einstufung_id) AS ranglisten" + . "\n FROM #__sportsmanager_einstufung" + . "\n ORDER BY typ, prioritaet, bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $einstufungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEinstufungen($einstufungen); +} + +function adminEditEinstufung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("einstufungen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if ($id == null) { + $row = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_einstufung WHERE einstufung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + } + + // Ranglisten ermitteln + if ($id == 0) { + $query = "SELECT #__sportsmanager_rangliste.rangliste_id, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + } + else { + $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, ranglisten.einstufung_rangliste_id, ranglisten.platz_min, ranglisten.platz_max, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT rangliste_id, einstufung_rangliste_id, platz_min, platz_max FROM #__sportsmanager_einstufung_rangliste WHERE einstufung_id = $id) AS ranglisten USING (rangliste_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditEinstufung($row, $ranglisten); +} + +function adminSaveEinstufung() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("einstufungen_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $prioritaet = $jinput->get('prioritaet', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'INT'); + $elo_min = $jinput->get('elo_min', 0, 'INT'); + $elo_max = $jinput->get('elo_max', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_einstufungen#id' . $id); + + return; + } + + $ranglisten_beruecksichtigt = array(); + $ranglisten_beruecksichtigt_platz_min = array(); + $ranglisten_beruecksichtigt_platz_max = array(); + $i = 0; + $rangliste_id = $jinput->get('rangliste_id_' . $i, 0, 'INT'); + $rangliste_platz_min = $jinput->get('rangliste_platz_min_' . $i, 0, 'INT'); + $rangliste_platz_max = $jinput->get('rangliste_platz_max_' . $i, 0, 'INT'); + while ($rangliste_id != 0 && !in_array($rangliste_id, $ranglisten_beruecksichtigt)) { + array_push($ranglisten_beruecksichtigt, $rangliste_id); + array_push($ranglisten_beruecksichtigt_platz_min, $rangliste_platz_min); + array_push($ranglisten_beruecksichtigt_platz_max, $rangliste_platz_max); + $i++; + $rangliste_id = $jinput->get('rangliste_id_' . $i, 0, 'INT'); + $rangliste_platz_min = $jinput->get('rangliste_platz_min_' . $i, 0, 'INT'); + $rangliste_platz_max = $jinput->get('rangliste_platz_max_' . $i, 0, 'INT'); + } + + $query = "LOCK TABLES #__sportsmanager_einstufung WRITE, #__sportsmanager_einstufung_rangliste WRITE, #__sportsmanager_rangliste READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_einstufung (bezeichnung, prioritaet, typ, elo_min, elo_max)" + . "\n VALUES ('$bezeichnung', '$prioritaet', '$typ', '$elo_min', '$elo_max');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_einstufung" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n prioritaet = '$prioritaet'," + . "\n typ = '$typ'," + . "\n elo_min = '$elo_min'," + . "\n elo_max = '$elo_max'" + . "\n WHERE einstufung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Berücksichtige Ranglisten prüfen und ggf. aktualisieren + $query = "SELECT *" + . "\n FROM #__sportsmanager_einstufung_rangliste" + . "\n WHERE einstufung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bestehende_ranglisten_beruecksichtigt = $db->loadObjectList(); + + $einstufungen_aktualisieren = false; + foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { + $ist_beruecksichtigt = false; + foreach ($ranglisten_beruecksichtigt as $rangliste_id) { + if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { + $ist_beruecksichtigt = true; + break; + } + } + if (!$ist_beruecksichtigt) { + $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE rangliste_id = $bestehende_rangliste_beruecksichtigt->rangliste_id AND einstufung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + foreach ($ranglisten_beruecksichtigt as $index => $rangliste_id) { + $ist_beruecksichtigt = false; + foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { + if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { + $ist_beruecksichtigt = true; + $bestehende_rangliste_platz_min = $bestehende_rangliste_beruecksichtigt->platz_min; + $bestehende_rangliste_platz_min = $bestehende_rangliste_beruecksichtigt->platz_max; + break; + } + } + $platz_min = $ranglisten_beruecksichtigt_platz_min[$index]; + $platz_max = $ranglisten_beruecksichtigt_platz_max[$index]; + if (!$ist_beruecksichtigt) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n > 0) { + $query = "INSERT INTO #__sportsmanager_einstufung_rangliste (einstufung_id, rangliste_id, platz_min, platz_max) VALUES ('$id', '$rangliste_id', '$platz_min', '$platz_max');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else if ($platz_min != $bestehende_rangliste_platz_min || $platz_max != $bestehende_rangliste_platz_max) { + $query = "UPDATE #__sportsmanager_einstufung_rangliste" + . "\n SET platz_min = '$platz_min'," + . "\n platz_max = '$platz_max'" + . "\n WHERE einstufung_id = $id AND rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_einstufungen#id' . $id); +} + +function adminRemoveEinstufung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("einstufungen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_einstufung WRITE, #__sportsmanager_einstufung_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE einstufung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_einstufung WHERE einstufung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_einstufungen'); +} + +function einstufungAktualisieren($berechnungen_auswerten = false) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $query = "LOCK TABLES #__sportsmanager_berechnung WRITE, #__sportsmanager_rangliste_punkte READ, #__sportsmanager_spieler WRITE, #__sportsmanager_einstufung READ, #__sportsmanager_einstufung_rangliste READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($berechnungen_auswerten) { + $session_id = redirectRequestGetSessionId(); + + $query = "SELECT IF(EXISTS(" + . "\n SELECT *" + . "\n FROM #__sportsmanager_berechnung" + . "\n WHERE typ = 'einstufung' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")) + . "\n ), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechnungen = $db->loadResult();; + + if (empty($berechnungen) || laufzeit() >= 5) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + return; + } + } + else if (!redirectSessionIdEmpty() || laufzeit() >= 5) { + $session_id = redirectSessionIdSetzen(); + + $query = "INSERT INTO #__sportsmanager_berechnung (session_id, typ, id) VALUES ('$session_id', 'einstufung', NULL);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + return; + } + + $query = "SELECT einstufung_id, prioritaet, typ, elo_min, elo_max" + . "\n FROM #__sportsmanager_einstufung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $einstufung_prioritaet = array(); + $einstufung_typ = array(); + foreach ($rows as $row) { + $einstufung_prioritaet[$row->einstufung_id] = $row->prioritaet; + $einstufung_typ[$row->einstufung_id] = $row->typ; + } + + $spieler_einstufung_allgemein = array(); + $spieler_einstufung_einzel = array(); + $spieler_einstufung_doppel = array(); + $query = "SELECT rangliste_id, einstufung_id, platz_min, platz_max" + . "\n FROM #__sportsmanager_einstufung_rangliste" + . "\n ORDER BY rangliste_id, platz_min, platz_max"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $einstufung_ranglisten = $db->loadObjectList(); + + $einstufungen_per_ranglisten = array(); + foreach ($einstufung_ranglisten as $einstufung_rangliste) { + $platz_min = $einstufung_rangliste->platz_min; + $platz_max = $einstufung_rangliste->platz_max; + if (empty($platz_min) && empty($platz_max)) + continue; + if (!isset($einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id])) + $einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id] = array(); + array_push($einstufungen_per_ranglisten[$einstufung_rangliste->rangliste_id], array($einstufung_rangliste->einstufung_id, $platz_min, $platz_max)); + } + + foreach ($einstufungen_per_ranglisten as $rangliste_id => $einstufung) { + $query = "SELECT spieler_id, platz" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n WHERE rangliste_id = $rangliste_id" + . "\n ORDER BY platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rangliste_punkte = $db->loadObjectList(); + + foreach ($rangliste_punkte as $punkte) { + foreach ($einstufung as $einstufung_platzierung) { + $platz_min = $einstufung_platzierung[1]; + $platz_max = $einstufung_platzierung[2]; + if (($punkte->platz >= $platz_min || $platz_min == 0) && ($punkte->platz <= $platz_max || $platz_max == 0)) { + $einstufung_id = $einstufung_platzierung[0]; + if ($einstufung_typ[$einstufung_id] == 0) { + if (!isset($spieler_einstufung_allgemein[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_allgemein[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) + $spieler_einstufung_allgemein[$punkte->spieler_id] = $einstufung_id; + } + else if ($einstufung->typ == 1) { + if (!isset($spieler_einstufung_einzel[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_einzel[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) + $spieler_einstufung_einzel[$punkte->spieler_id] = $einstufung_id; + } + else { + if (!isset($spieler_einstufung_doppel[$punkte->spieler_id]) || ($einstufung_prioritaet[$spieler_einstufung_doppel[$punkte->spieler_id]] > $einstufung_prioritaet[$einstufung_id])) + $spieler_einstufung_doppel[$punkte->spieler_id] = $einstufung_id; + } + } + } + } + } + + $query = "SELECT spieler_id, elo_einzel, elo_doppel" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(elo_einzel) OR NOT ISNULL(elo_doppel) OR elo_einzel > 0 OR elo_doppel > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + foreach ($spieler as $s) { + $spieler_id = $s->spieler_id; + $elo_einzel = $s->elo_einzel; + $elo_doppel = $s->elo_doppel; + foreach ($rows as $einstufung) { + $einstufung_id = $einstufung->einstufung_id; + $elo_min = $einstufung->elo_min; + $elo_max = $einstufung->elo_max; + if (empty($elo_min) && empty($elo_max)) + continue; + if ($einstufung_typ[$einstufung_id] == 0) { + if (($elo_einzel > 0 && ($elo_einzel >= $elo_min || empty($elo_min)) && ($elo_einzel <= $elo_max || empty($elo_max))) + || ($elo_doppel > 0 && ($elo_doppel >= $elo_min || empty($elo_min)) && ($elo_doppel <= $elo_max || empty($elo_max)))) { + if (!isset($spieler_einstufung_allgemein[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_allgemein[$spieler_id]])) + $spieler_einstufung_allgemein[$spieler_id] = $einstufung_id; + } + } + else if ($einstufung->typ == 1) { + if ($elo_einzel > 0 && ($elo_einzel >= $elo_min || empty($elo_min)) && ($elo_einzel <= $elo_max || empty($elo_max))) { + if (!isset($spieler_einstufung_einzel[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_einzel[$spieler_id]])) + $spieler_einstufung_einzel[$spieler_id] = $einstufung_id; + } + } + else { + if ($elo_doppel > 0 && ($elo_doppel >= $elo_min || empty($elo_min)) && ($elo_doppel <= $elo_max || empty($elo_max))) { + if (!isset($spieler_einstufung_doppel[$spieler_id]) || ($einstufung_prioritaet[$einstufung_id] > $einstufung_prioritaet[$spieler_einstufung_doppel[$spieler_id]])) + $spieler_einstufung_doppel[$spieler_id] = $einstufung_id; + } + } + } + } + + $db->transactionStart(); + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET einstufung_allgemein_id = NULL," + . "\n einstufung_einzel_id = NULL," + . "\n einstufung_doppel_id = NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $spieler_ids = array_keys($spieler_einstufung_allgemein) + array_keys($spieler_einstufung_einzel) + array_keys($spieler_einstufung_doppel); + foreach ($spieler_ids as $spieler_id) { + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET einstufung_allgemein_id = " . (isset($spieler_einstufung_allgemein[$spieler_id]) ? $spieler_einstufung_allgemein[$spieler_id] : "NULL") . "," + . "\n einstufung_einzel_id = " . (isset($spieler_einstufung_einzel[$spieler_id]) ? $spieler_einstufung_einzel[$spieler_id] : "NULL") . "," + . "\n einstufung_doppel_id = " . (isset($spieler_einstufung_doppel[$spieler_id]) ? $spieler_einstufung_doppel[$spieler_id] : "NULL"); + $query .= "\n WHERE spieler_id = $spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + $db->transactionCommit(); + + if ($berechnungen_auswerten) { + $query = "DELETE FROM #__sportsmanager_berechnung WHERE typ = 'einstufung' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } +} + +function adminTeamspielmodi() { + $db =& getDatabase(); + + if (!benutzerZugriff("mannschaftsspielplaene_aendern")) + keinZugriff(true); + + $query = "SELECT *, IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE teamspiel_modus_id = modus_id), 1, 0) AS veranstaltungen" + . "\n FROM #__sportsmanager_teamspiel_modus" + . "\n ORDER BY status DESC, bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTeamspielmodi($rows); +} + +function adminEditTeamspielmodus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftsspielplaene_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == null) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTeamspielmodus($row); +} + +function adminSaveTeamspielmodus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftsspielplaene_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $punktetyp = $jinput->get('punktetyp', 0, 'INT'); + $punkte_sieg_einzel = $jinput->get('punkte_sieg_einzel', 0, 'INT'); + $punkte_sieg_doppel_separat = $jinput->get('punkte_sieg_doppel_separat', 0, 'INT'); + $punkte_sieg_doppel = $punkte_sieg_doppel_separat ? $jinput->get('punkte_sieg_doppel', 0, 'INT') : $punkte_sieg_einzel; + $heimtausch = $jinput->get('heimtausch', 0, 'INT'); + $status = $jinput->get('status', 0, 'INT'); + $spielpunkte_wertung_einzel = $jinput->get('spielpunkte_wertung_einzel', 0, 'INT'); + $spielpunkte_wertung_doppel_separat = $jinput->get('spielpunkte_wertung_doppel_separat', 0, 'INT'); + $spielpunkte_wertung_doppel = $spielpunkte_wertung_doppel_separat ? $jinput->get('spielpunkte_wertung_doppel', 0, 'INT') : $spielpunkte_wertung_einzel; + $spielpunkte_bedingung = $jinput->get('spielpunkte_bedingung', 0, 'INT'); + $spielernamen = $jinput->get('spielernamen', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_teamspiel_modi'); + + return; + } + + $modus = ""; + $spiel_nr = 1; + do { + $spiel_heim = $jinput->get('spiel_' . $spiel_nr . '_heim', '', 'RAW'); + $spiel_gast = $jinput->get('spiel_' . $spiel_nr . '_gast', '', 'RAW'); + $spiel_auflage = $jinput->get('spiel_' . $spiel_nr . '_auflage', '', 'RAW'); + if (strlen($spiel_heim) != 0 && strlen($spiel_gast) != 0 && ($spiel_auflage == "" || $spiel_auflage == "H" || $spiel_auflage == "G")) { + if (strlen($modus) != 0) + $modus .= ","; + $modus .= $spiel_heim . $spiel_gast . $spiel_auflage; + } + $spiel_nr++; + } while (strlen($spiel_heim) != 0 && strlen($spiel_gast) != 0); + + $verknuepfungen = ""; + $verknuepfung_nr = 1; + for (; ;) { + $verknuepfung_doppel = $jinput->get('verknuepfung_' . $verknuepfung_nr . '_doppel', '', 'RAW'); + $verknuepfung_einzel1 = $jinput->get('verknuepfung_' . $verknuepfung_nr . '_einzel1', '', 'RAW'); + $verknuepfung_einzel2 = $jinput->get('verknuepfung_' . $verknuepfung_nr . '_einzel2', '', 'RAW'); + if (strlen($verknuepfung_doppel) == 0 || strlen($verknuepfung_einzel1) == 0 || strlen($verknuepfung_einzel2) == 0) + break; + if (strpos($verknuepfungen, $verknuepfung_doppel) !== false || strpos($verknuepfungen, $verknuepfung_einzel1) !== false || strpos($verknuepfungen, $verknuepfung_einzel2) !== false || + $verknuepfung_einzel1 == $verknuepfung_einzel2) + break; + if (strlen($verknuepfungen) != 0) + $verknuepfungen .= ","; + $verknuepfungen .= $verknuepfung_doppel . $verknuepfung_einzel1 . $verknuepfung_einzel2; + $verknuepfung_nr++; + } + + if (strlen($verknuepfungen) > 0) + $modus .= "|" . $verknuepfungen; + $modus = $db->escape($modus); + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_teamspiel_modus (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, spielpunkte_bedingung, spielernamen, heimtausch, modus, status) VALUES ('$bezeichnung', '$punktetyp', '$punkte_sieg_einzel', '$punkte_sieg_doppel', '$spielpunkte_wertung_einzel', '$spielpunkte_wertung_doppel', '$spielpunkte_bedingung', '$spielernamen', '$heimtausch', '$modus', '$status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_teamspiel_modus" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n punktetyp = '$punktetyp'," + . "\n punkte_sieg_einzel = '$punkte_sieg_einzel'," + . "\n punkte_sieg_doppel = '$punkte_sieg_doppel'," + . "\n spielpunkte_wertung_einzel = '$spielpunkte_wertung_einzel'," + . "\n spielpunkte_wertung_doppel = '$spielpunkte_wertung_doppel'," + . "\n spielpunkte_bedingung = '$spielpunkte_bedingung'," + . "\n spielernamen = '$spielernamen'," + . "\n heimtausch = '$heimtausch'," + . "\n modus = '$modus'," + . "\n status = '$status'" + . "\n WHERE teamspiel_modus_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + begegnungenAktualisieren(0, $id); + teamstatistikAktualisieren(0, $id); + spielerstatistikAktualisieren(0, 0, 0, $id); + + redirectSportsManagerURL('&task=admin_teamspiel_modi'); +} + +function adminRemoveTeamspielmodus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftsspielplaene_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_veranstaltung WRITE, #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE modus_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_teamspiel_modi'); +} + +function adminKopierenTeamspielmodus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftsspielplaene_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $teamspiel_modus = $rows[0]; + + $query = "INSERT INTO #__sportsmanager_teamspiel_modus (bezeichnung, punktetyp, punkte_sieg_einzel, punkte_sieg_doppel, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, spielpunkte_bedingung, spielernamen, heimtausch, modus, status) VALUES ('" . $db->escape($teamspiel_modus->bezeichnung) . " (Kopie)', '$teamspiel_modus->punktetyp', '$teamspiel_modus->punkte_sieg_einzel', '$teamspiel_modus->punkte_sieg_doppel', '$teamspiel_modus->spielpunkte_wertung_einzel', '$teamspiel_modus->spielpunkte_wertung_doppel', '$teamspiel_modus->spielpunkte_bedingung', '$teamspiel_modus->spielernamen', '$teamspiel_modus->heimtausch', '$teamspiel_modus->modus', '$teamspiel_modus->status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + redirectSportsManagerURL('&task=admin_teamspiel_modi'); +} + +function adminVerschiebenModi() { + $db =& getDatabase(); + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $query = "SELECT *, IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.verschieberegel_id = #__sportsmanager_verschieberegel.verschieberegel_id), 1, 0) AS veranstaltungen" + . "\n FROM #__sportsmanager_verschieberegel" + . "\n ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVerschiebenModi($rows); +} + +function adminEditVerschiebenModus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == null) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditVerschiebenModus($row); +} + +function adminSaveVerschiebenModus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_verschieben_modi'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $initial_ohne_termin = $jinput->get('initial_ohne_termin', 0, 'INT'); + $keine_gegenvorschlaege = $jinput->get('keine_gegenvorschlaege', 0, 'INT'); + $vorlaufzeit_tage = $jinput->get('vorlaufzeit_tage', 0, 'INT'); + $termine_minimal = $jinput->get('termine_minimal', 1, 'INT'); + $termine_maximal = $jinput->get('termine_maximal', 3, 'INT'); + $ablehnen = $jinput->get('ablehnen', 0, 'INT'); + + if ($termine_minimal > 0 && $termine_maximal > 0 && $termine_minimal > $termine_maximal) { + $t = $termine_minimal; + $termine_minimal = $termine_maximal; + $termine_maximal = $t; + } + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen) VALUES ('$bezeichnung', '$initial_ohne_termin', '$keine_gegenvorschlaege', '$vorlaufzeit_tage', '$termine_minimal', '$termine_maximal', '$ablehnen');"; + else { + $query = "UPDATE #__sportsmanager_verschieberegel" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n initial_ohne_termin = '$initial_ohne_termin'," + . "\n keine_gegenvorschlaege = '$keine_gegenvorschlaege'," + . "\n vorlaufzeit_tage = '$vorlaufzeit_tage'," + . "\n termine_minimal = '$termine_minimal'," + . "\n termine_maximal = '$termine_maximal'," + . "\n ablehnen = '$ablehnen'" + . "\n WHERE verschieberegel_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verschieben_modi'); +} + +function adminRemoveVerschiebenModus() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("verschieberegeln_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_veranstaltung WRITE, #__sportsmanager_verschieberegel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE verschieberegel_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_verschieberegel WHERE verschieberegel_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_verschieben_modi'); +} + +function adminKategorien() { + $db =& getDatabase(); + + if (!benutzerZugriff("kategorien_aendern")) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $kategorien = array(); + $kategorien[1] = array(); + $kategorien[2] = array(); + $kategorien[3] = array(); + $kategorien[4] = array(); + + foreach ($rows as $row) + $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; + + HTML_sportsmanager_admin::adminKategorien($kategorien); +} + +function adminSaveKategorien() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("kategorien_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_kategorie WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $kategorien = array(); + $kategorien[1] = array(); + $kategorien[2] = array(); + $kategorien[3] = array(); + $kategorien[4] = array(); + $kategorien[5] = array(); + $kategorien[6] = array(); + + foreach ($rows as $row) + $kategorien[$row->typ][$row->nummer] = $row->bezeichnung; + + for ($typ = 1; $typ <= 6; $typ++) { + for ($nummer = 1; $nummer <= 30; $nummer++) { + $bezeichnung = $db->escape($jinput->get('bezeichnung_' . $typ . '_' . $nummer, '', 'RAW')); + if (empty($bezeichnung)) { + if (isset($kategorien[$typ][$nummer])) { + $query = "DELETE FROM #__sportsmanager_kategorie WHERE typ = $typ AND nummer = $nummer;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (isset($kategorien[$typ][$nummer])) { + $query = "UPDATE #__sportsmanager_kategorie" + . "\n SET bezeichnung = '$bezeichnung'" + . "\n WHERE typ = $typ AND nummer = $nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "INSERT INTO #__sportsmanager_kategorie (typ, nummer, bezeichnung) VALUES ('$typ', '$nummer', '$bezeichnung');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRanglistensysteme() { + $db =& getDatabase(); + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(true); + + $query = "SELECT *, (SELECT COUNT(*) FROM #__sportsmanager_rangliste WHERE rangliste_system_id = system_id) AS ranglisten, (SELECT COUNT(*) FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_system_id = system_id) AS ranglistenturnierdisziplinen FROM #__sportsmanager_rangliste_system ORDER BY status DESC, systembezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $error_level = error_reporting(E_ERROR); + $math = new MathParserSM; + $math->setVariable('n', 100); + $math->setVariable('m', 1); + $math->setVariable('p', 5); + $pruefung = array(); + foreach ($rows as $row) { + $korrekt = true; + $pruefung[$row->rangliste_system_id] = $korrekt; + if (!empty($row->funktion)) { + try { + $math->setExpression($row->funktion); + $n = $math->getValue(); + } + catch (Exception $e) { + $korrekt = false; + } + } + $pruefung[$row->rangliste_system_id] = $korrekt; + } + error_reporting($error_level); + + HTML_sportsmanager_admin::adminRanglistensysteme($rows, $pruefung); +} + +function adminEditRanglistensystem() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(true); + + $row = null; + $punkte = null; + + $id = $jinput->get('id', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'INT'); + if ($id != null) { + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id ORDER BY rangliste_system_punkte_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $punkte = $db->loadObjectList(); + } + + HTML_sportsmanager_admin::adminEditRanglistensystem($row, $punkte, $row != null ? ($row->funktion != null) : $typ); +} + +function adminSaveRanglistensystem() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ranglistensysteme'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $status = $jinput->get('status', 0, 'INT'); + $funktion = $db->escape(trim($jinput->get('funktion', '', 'RAW'))); + $typ = $jinput->get('typ', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_rangliste_system WRITE, #__sportsmanager_rangliste_system_punkte WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + if ($typ != 1) + $query = "INSERT INTO #__sportsmanager_rangliste_system (systembezeichnung, status) VALUES ('$bezeichnung', '$status');"; + else + $query = "INSERT INTO #__sportsmanager_rangliste_system (systembezeichnung, status, funktion) VALUES ('$bezeichnung', '$status', '$funktion');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = '$bezeichnung'," + . "\n status = '$status'"; + if ($typ == 1) + $query .= ",\n funktion = '$funktion'"; + $query .= "\n WHERE rangliste_system_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "DELETE FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($typ != 1) { + for ($punkte_nr = 1; $punkte_nr <= 50; $punkte_nr++) { + $platz_min = $jinput->get('punkte_' . $punkte_nr . '_platz_min', 0, 'INT'); + $platz_max = $jinput->get('punkte_' . $punkte_nr . '_platz_max', 0, 'INT'); + $teilnehmer_min = $jinput->get('punkte_' . $punkte_nr . '_teilnehmer_min', 0, 'INT'); + $teilnehmer_max = $jinput->get('punkte_' . $punkte_nr . '_teilnehmer_max', 0, 'INT'); + $punkte = $jinput->get('punkte_' . $punkte_nr . '_punkte', 0, 'INT'); + + if ($punkte != 0) { + $query = "INSERT INTO #__sportsmanager_rangliste_system_punkte (system_id, platz_min, platz_max, teilnehmer_min, teilnehmer_max, punkte) VALUES ('$id', '$platz_min', '$platz_max', '$teilnehmer_min', '$teilnehmer_max', '$punkte');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren(); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_ranglistensysteme'); +} + +function adminRanglistensystemAuswertung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(true); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ranglistensysteme'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $teilnehmer = $jinput->get('teilnehmer', 100, 'INT'); + $multiplikator = $jinput->get('multiplikator', 1, 'FLOAT'); + + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $system = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id ORDER BY rangliste_system_punkte_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systempunkte = $db->loadObjectList(); + + if ($system->funktion != NULL) { + $math = new MathParserSM; + try { + $math->setVariable('n', $teilnehmer); + $math->setVariable('m', $multiplikator); + $math->setExpression($system->funktion); + } catch (Exception $e) { + } + } + + $teilnehmerpunkte = array(); + for ($platz = 1; $platz <= $teilnehmer; $platz++) { + $p = 0; + if ($system->funktion == NULL) { + foreach ($systempunkte as $sp) { + if (($sp->platz_min == 0 || $sp->platz_min <= $platz) && ($sp->platz_max == 0 || $platz <= $sp->platz_max) && ($sp->teilnehmer_min == 0 || $sp->teilnehmer_min <= $teilnehmer) && ($sp->teilnehmer_max == 0 || $teilnehmer <= $sp->teilnehmer_max)) { + $p = round($sp->punkte * $multiplikator); + break; + } + } + } else { + try { + $math->setVariable('p', $platz); + $p = round($math->getValue()); + } catch (Exception $e) { + } + } + $teilnehmerpunkte[$platz] = $p; + } + + HTML_sportsmanager_admin::adminRanglistensystemAuswertung($system, $teilnehmer, $multiplikator, $teilnehmerpunkte); +} + +function adminRanglistensystemAuswertungOLd() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(true); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_ranglistensysteme'); + + return; + } + + $row = null; + $punkte = null; + + $id = $jinput->get('id', 0, 'INT'); + $teilnehmer = $jinput->get('teilnehmer', 100, 'INT'); + $multiplikator = $jinput->get('multiplikator', 1, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $system = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id ORDER BY rangliste_system_punkte_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systempunkte = $db->loadObjectList(); + + $teilnehmerpunkte = array(); + $math = new MathParserSM; + for ($platz = 1; $platz <= $teilnehmer; $platz++) { + $p = 0; + if ($id != 0 && $system->funktion == NULL) { + foreach ($systempunkte as $sp) { + if (($sp->platz_min == 0 || $sp->platz_min <= $platz) && ($sp->platz_max == 0 || $platz <= $sp->platz_max) && ($sp->teilnehmer_min == 0 || $sp->teilnehmer_min <= $teilnehmer) && ($sp->teilnehmer_max == 0 || $teilnehmer <= $sp->teilnehmer_max)) { + $p = round($sp->punkte * $wertung_multiplikator_normal); + break; + } + } + } else { + $math->setVariable('p', $turnierplatzierung->platz); + $math->setVariable('m', $wertung_multiplikator_normal); + $math->setExpression($system->funktion); + try { + $p = round($math->getValue()); + } catch (Exception $e) { + + } + } + $teilnehmerpunkte[$platz] = $p; + } + + HTML_sportsmanager_admin::adminRanglistensystemAuswertung($row, $teilnehmer, $multiplikator, $teilnehmerpunkte); +} + +function adminRemoveRanglistensystem() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglistenwertungen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_rangliste_system WRITE, #__sportsmanager_rangliste_system_punkte WRITE, #__sportsmanager_rangliste READ, #__sportsmanager_rangliste_turnierdisziplin READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste WHERE system_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE system_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_ranglistensysteme'); +} + +function adminEditRangliste() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + $rangliste = null; + else { + $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $rangliste = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE status > 0 " . ($id != 0 ? "OR rangliste_system_id = $rangliste->system_id " : "") . "ORDER BY systembezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systeme = $db->loadObjectList(); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 4 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + HTML_sportsmanager_admin::adminEditRangliste($rangliste, $systeme, $kategorien, $saisons); +} + +function adminSaveRangliste() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $saison_id = $jinput->get('saison_id', 0, 'INT'); + $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('erster_tag_jahr', 2000, 'INT'), $jinput->get('erster_tag_monat', 1, 'INT'), $jinput->get('erster_tag_tag', 1, 'INT'))); + $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('letzter_tag_jahr', 2000, 'INT'), $jinput->get('letzter_tag_monat', 1, 'INT'), $jinput->get('letzter_tag_tag', 1, 'INT'))); + $system_id = $jinput->get('system_id', 0, 'INT'); + $maximal_gewertet_typ = $jinput->get('maximal_gewertet_typ', 0, 'INT'); + if ($maximal_gewertet_typ == 0) + $maximal_gewertet_zahl = 0; + else if ($maximal_gewertet_typ == 1) + $maximal_gewertet_zahl = -$jinput->get('maximal_gewertet_zahl', 0, 'INT'); + else + $maximal_gewertet_zahl = max(0, 100 - $jinput->get('maximal_gewertet_zahl', 0, 'INT')); + $minalter = $jinput->get('minalter', 0, 'INT'); + $maxalter = $jinput->get('maxalter', 0, 'INT'); + $ohnealter = $jinput->get('ohnealter', 0, 'INT'); + $geschlecht = $jinput->get('geschlecht', 0, 'INT'); + $status = $jinput->get('status', 0, 'INT'); + $reihenfolge = $jinput->get('reihenfolge', 0, 'INT'); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_rangliste (bezeichnung, saison_id, erster_tag, " . ($letzter_tag != null ? "letzter_tag, " : "") . "system_id, streichergebnisse, geschlecht, minalter, maxalter, ohnealter, status, reihenfolge, kategorie) VALUES ('$bezeichnung', '$saison_id', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$system_id', '$maximal_gewertet_zahl', " . ($geschlecht == null ? "null" : "'$geschlecht'") . ", " . ($minalter == null ? "null" : "'$minalter'") . ", " . ($maxalter == null ? "null" : "'$maxalter'") . ", '$ohnealter', '$status', '$reihenfolge', '$kategorie');"; + else { + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n erster_tag = '$erster_tag'," + . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") + . "\n system_id = '$system_id'," + . "\n streichergebnisse = '$maximal_gewertet_zahl'," + . "\n geschlecht = " . ($geschlecht != null ? "'$geschlecht'," : "NULL,") + . "\n minalter = " . ($minalter != null ? "'$minalter'," : "NULL,") + . "\n maxalter = " . ($maxalter != null ? "'$maxalter'," : "NULL,") + . "\n ohnealter = '$ohnealter'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'" + . "\n WHERE rangliste_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + if ($id == 0) + $id = $db->insertid(); + + ranglisteAktualisieren($id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRemoveRangliste() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_rangliste_punkte WRITE, #__sportsmanager_rangliste_turnierdisziplin_punkte WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE, #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_rangliste WRITE, #__sportsmanager_einstufung_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_einstufung_rangliste WHERE rangliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin_punkte WHERE rangliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turnierdisziplin" + . "\n SET voranmeldungen_rangliste_id = NULL" + . "\n WHERE voranmeldungen_rangliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste WHERE rangliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren($id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminKopierenRangliste() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_rangliste WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $rangliste = $rows[0]; + + $query = "INSERT INTO #__sportsmanager_rangliste (saison_id, system_id, streichergebnisse, geschlecht, minalter, maxalter, ohnealter, bezeichnung, erster_tag, letzter_tag, status, reihenfolge, kategorie)" + . "\n VALUES ('$rangliste->saison_id', " . ($rangliste->system_id == null ? "null" : "'$rangliste->system_id'") . ", '" . $db->escape($rangliste->streichergebnisse) . "', " . ($rangliste->geschlecht == null ? "null" : "'$rangliste->geschlecht'") . ", " . ($rangliste->minalter == null ? "null" : "'$rangliste->minalter'") . ", " . ($rangliste->maxalter == null ? "null" : "'$rangliste->maxalter'") . ", '$rangliste->ohnealter', '" . $db->escape($rangliste->bezeichnung . " (Kopie)") . "', '" . $db->escape($rangliste->erster_tag) . "', '" . $db->escape($rangliste->letzter_tag) . "', '0', '" . $db->escape($rangliste->reihenfolge) . "', '" . $db->escape($rangliste->kategorie) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_rangliste_id = $db->insertid(); + + // Disziplinen kopieren + + $query = "SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung)" + . "\n VALUES ($ziel_rangliste_id, '$row->turnierdisziplin_id', " . ($row->system_id == null ? "null" : "'$row->system_id'") . ", '$row->wertung', '$row->doppel_teilwertung');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRanglisteTurnierdisziplinen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + if ($rangliste_id == 0) die ("Wrong id!"); + + $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + if (count($ranglisten) < 1) die ("Wrong id"); + $rangliste = $ranglisten[0]; + + $query = "SELECT #__sportsmanager_rangliste_turnierdisziplin.*, disziplin, turnierbezeichnung, turnierort, systembezeichnung, beginn" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n LEFT JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n LEFT JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n LEFT JOIN #__sportsmanager_rangliste_system ON system_id = rangliste_system_id" + . "\n WHERE rangliste_id = $rangliste_id" + . "\n ORDER BY #__sportsmanager_turnier.erster_tag DESC, disziplin"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierdisziplinen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminRanglisteTurnierdisziplinen($rangliste, $turnierdisziplinen); +} + +function adminEditRanglisteTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + + if ($id == 0) + $ranglisteTurnierdisziplin = null; + else { + $query = "SELECT * FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $ranglisteTurnierdisziplin = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_rangliste WHERE rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + if (count($ranglisten) < 1) die ("Wrong id"); + $rangliste = $ranglisten[0]; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierdisziplin, #__sportsmanager_turnier" + . "\n WHERE #__sportsmanager_turnierdisziplin.turnier_id = #__sportsmanager_turnier.turnier_id"; + if ($rangliste->erster_tag != null) + $query .= " AND (ISNULL(erster_tag) OR DATEDIFF(erster_tag, '$rangliste->erster_tag') >= -1096" . ($ranglisteTurnierdisziplin != null ? " OR $ranglisteTurnierdisziplin->turnierdisziplin_id = turnierdisziplin_id" : "") . ")"; + if ($rangliste->letzter_tag != null) + $query .= " AND (ISNULL(erster_tag) OR DATEDIFF('$rangliste->letzter_tag', letzter_Tag) >= -366" . ($ranglisteTurnierdisziplin != null ? " OR $ranglisteTurnierdisziplin->turnierdisziplin_id = turnierdisziplin_id" : "") . ")"; + $query .= "\n ORDER BY erster_tag DESC, turnierbezeichnung, reihenfolge, disziplin"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierdisziplinen = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE status != 0 " . ($id != 0 && $ranglisteTurnierdisziplin->system_id != null ? "OR rangliste_system_id = $ranglisteTurnierdisziplin->system_id " : "") . "ORDER BY systembezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systeme = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditRanglisteTurnierdisziplin($rangliste, $ranglisteTurnierdisziplin, $turnierdisziplinen, $systeme); +} + +function adminSaveRanglisteTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + $turnierdisziplin_id = $db->escape($jinput->get('turnierdisziplin_id', 0, 'INT')); + $system_id = $jinput->get('system_id', 0, 'INT'); + $wertung = $jinput->get('wertung', 0, 'RAW'); + $doppel_teilwertung = $jinput->get('doppel_teilwertung', 0, 'RAW'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); + + return; + } + + $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET rangliste_id = '$rangliste_id'," + . "\n turnierdisziplin_id = '$turnierdisziplin_id'," + . "\n system_id = " . ($system_id != 0 ? "'$system_id'" : "NULL") . "," + . "\n wertung = '" . $db->escape($wertung) . "'," + . "\n doppel_teilwertung = '" . $db->escape($doppel_teilwertung) . "'"; + if ($id != 0) + $query .= "\n WHERE rangliste_turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren($rangliste_id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); +} + +function adminRemoveRanglisteTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren($rangliste_id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); +} + +function adminRanglisteDisziplinenEntfernen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $rangliste_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren($rangliste_id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); +} + +function adminRanglisteSystemZuruecksetzen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("ranglisten_aendern")) + keinZugriff(true); + + $rangliste_id = $jinput->get('rangliste_id', 0, 'INT'); + + $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET system_id = NULL," + . "\n wertung = 1" + . "\n WHERE rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren($rangliste_id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_rangliste_turnierdisziplinen&rangliste_id=' . $rangliste_id); +} + +function adminEditSpielerstatistik() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + $spielerstatistik = null; + else { + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $spielerstatistik = $rows[0]; + } + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 5 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditSpielerstatistik($spielerstatistik, $kategorien, $saisons); +} + +function adminSaveSpielerstatistik() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $saison_id = $jinput->get('saison_id', 0, 'INT'); + $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('erster_tag_jahr', 2000, 'INT'), $jinput->get('erster_tag_monat', 1, 'INT'), $jinput->get('erster_tag_tag', 1, 'INT'))); + $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('letzter_tag_jahr', 2000, 'INT'), $jinput->get('letzter_tag_monat', 1, 'INT'), $jinput->get('letzter_tag_tag', 1, 'INT'))); + $tabellenwertung = $jinput->get('tabellenwertung', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'INT'); + $status = $jinput->get('status', 0, 'INT'); + $reihenfolge = $jinput->get('reihenfolge', 0, 'INT'); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_bestenliste (bezeichnung, saison_id, erster_tag, " . ($letzter_tag != null ? "letzter_tag, " : "") . "tabellenwertung, typ, status, reihenfolge, kategorie) VALUES ('$bezeichnung', '$saison_id', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$tabellenwertung', '$typ', '$status', '$reihenfolge', '$kategorie');"; + $spielerstatistik_aktualisieren = false; + } + else { + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $spielerstatistik = $rows[0]; + + $query = "UPDATE #__sportsmanager_bestenliste" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n erster_tag = '$erster_tag'," + . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") + . "\n tabellenwertung = '$tabellenwertung'," + . "\n typ = '$typ'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'" + . "\n WHERE bestenliste_id = $id"; + + if ($spielerstatistik->tabellenwertung != $tabellenwertung || $spielerstatistik->typ != $typ) + $spielerstatistik_aktualisieren = true; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + if ($id == 0) + $id = $db->insertid(); + + if ($spielerstatistik_aktualisieren) + spielerstatistikAktualisieren($id); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRemoveSpielerstatistik() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE, #__sportsmanager_bestenliste_veranstaltung WRITE, #__sportsmanager_bestenliste_individualwettbewerb WRITE, #__sportsmanager_bestenliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste_punkte WHERE bestenliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminKopierenSpielerstatistik() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_bestenliste WRITE, #__sportsmanager_bestenliste_veranstaltung WRITE, #__sportsmanager_bestenliste_individualwettbewerb WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $spielerstatistik = $rows[0]; + + $query = "INSERT INTO #__sportsmanager_bestenliste (saison_id, bezeichnung, tabellenwertung, typ, erster_tag, letzter_tag, status, reihenfolge, kategorie)" + . "\n VALUES ('$spielerstatistik->saison_id', '" . $db->escape($spielerstatistik->bezeichnung . " (Kopie)") . "', '$spielerstatistik->tabellenwertung', '$spielerstatistik->typ', '" . $db->escape($spielerstatistik->erster_tag) . "', '" . $db->escape($spielerstatistik->letzter_tag) . "', '0', '" . $db->escape($spielerstatistik->reihenfolge) . "', '" . $db->escape($spielerstatistik->kategorie) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_spielerstatistik_id = $db->insertid(); + + $query = "SELECT * FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_bestenliste_veranstaltung (bestenliste_id, veranstaltung_id)" + . "\n VALUES ($ziel_spielerstatistik_id, $row->veranstaltung_id);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_bestenliste_individualwettbewerb (bestenliste_id, individualwettbewerb_id)" + . "\n VALUES ($ziel_spielerstatistik_id, $row->individualwettbewerb_id);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($ziel_spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminSpielerstatistikVeranstaltungen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + if ($spielerstatistik_id == 0) die ("Wrong id!"); + + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + if (count($spielerstatistiken) < 1) die ("Wrong id"); + $spielerstatistik = $spielerstatistiken[0]; + + $query = "SELECT #__sportsmanager_bestenliste_veranstaltung.*, bezeichnung, erster_tag, letzter_tag, saisonbezeichnung" + . "\n FROM #__sportsmanager_bestenliste_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n LEFT JOIN #__sportsmanager_saison ON #__sportsmanager_saison.saison_id = #__sportsmanager_veranstaltung.saison_id" + . "\n WHERE bestenliste_id = $spielerstatistik_id" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $query = "SELECT #__sportsmanager_bestenliste_individualwettbewerb.*, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_bestenliste_individualwettbewerb" + . "\n LEFT JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n LEFT JOIN #__sportsmanager_saison ON #__sportsmanager_saison.saison_id = #__sportsmanager_individualwettbewerb.saison_id" + . "\n WHERE bestenliste_id = $spielerstatistik_id" + . "\n ORDER BY saisonbezeichnung, reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielerstatistikVeranstaltungen($spielerstatistik, $veranstaltungen, $individualwettbewerbe); +} + +function adminEditSpielerstatistikVeranstaltung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + + if ($id == 0) + $spielerstatistikVeranstaltung = null; + else { + $query = "SELECT * FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $spielerstatistikVeranstaltung = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + if (count($spielerstatistiken) < 1) die ("Wrong id"); + $spielerstatistik = $spielerstatistiken[0]; + + $query = "SELECT * FROM #__sportsmanager_veranstaltung"; + if ($spielerstatistik->erster_tag != null) + $query .= "\n WHERE (ISNULL(erster_tag) OR DATEDIFF(erster_tag, '$spielerstatistik->erster_tag') >= -1096" . ($spielerstatistikVeranstaltung != null ? " OR $spielerstatistikVeranstaltung->veranstaltung_id = veranstaltung_id" : "") . ")"; + if ($spielerstatistik->letzter_tag != null) + $query .= ($spielerstatistik->erster_tag != null ? " AND" : "\n WHERE") . " (ISNULL(erster_tag) OR DATEDIFF('$spielerstatistik->letzter_tag', letzter_Tag) >= -366" . ($spielerstatistikVeranstaltung != null ? " OR $spielerstatistikVeranstaltung->veranstaltung_id = veranstaltung_id" : "") . ")"; + $query .= "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditSpielerstatistikVeranstaltung($spielerstatistik, $spielerstatistikVeranstaltung, $veranstaltungen); +} + +function adminSaveSpielerstatistikVeranstaltung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + $veranstaltung_id = $jinput->get('veranstaltung_id', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); + + return; + } + + $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_bestenliste_veranstaltung" + . "\n SET bestenliste_id = '$spielerstatistik_id'," + . "\n veranstaltung_id = '$veranstaltung_id'"; + if ($id != 0) + $query .= "\n WHERE bestenliste_veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); +} + +function adminRemoveSpielerstatistikVeranstaltung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_veranstaltung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); +} + +function adminEditSpielerstatistikIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + + if ($id == 0) + $spielerstatistikIndividualwettbewerb = null; + else { + $query = "SELECT * FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $spielerstatistikIndividualwettbewerb = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_bestenliste WHERE bestenliste_id = $spielerstatistik_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + if (count($spielerstatistiken) < 1) die ("Wrong id"); + $spielerstatistik = $spielerstatistiken[0]; + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb" + . "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditSpielerstatistikIndividualwettbewerb($spielerstatistik, $spielerstatistikIndividualwettbewerb, $individualwettbewerbe); +} + +function adminSaveSpielerstatistikIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + $individualwettbewerb_id = $jinput->get('individualwettbewerb_id', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); + + return; + } + + $query = ($id == 0 ? "INSERT" : "UPDATE") . " #__sportsmanager_bestenliste_individualwettbewerb" + . "\n SET bestenliste_id = '$spielerstatistik_id'," + . "\n individualwettbewerb_id = '$individualwettbewerb_id'"; + if ($id != 0) + $query .= "\n WHERE bestenliste_individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); +} + +function adminRemoveSpielerstatistikIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_individualwettbewerb_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); +} + +function adminSpielerstatistikVeranstaltungenEntfernen() { + $db =& getDatabase(); + + if (!benutzerZugriff("spielerstatistiken_aendern")) + keinZugriff(true); + + $spielerstatistik_id = $jinput->get('spielerstatistik_id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_bestenliste_veranstaltung WRITE, #__sportsmanager_bestenliste_individualwettbewerb WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE bestenliste_id = $spielerstatistik_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE bestenliste_id = $spielerstatistik_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren($spielerstatistik_id); + + redirectSportsManagerURL('&task=admin_spielerstatistik_veranstaltungen&spielerstatistik_id=' . $spielerstatistik_id); +} + +function adminModeratoren() { + $db =& getDatabase(); + + if (!benutzerZugriff("moderatoren_aendern")) + keinZugriff(true); + + $query = "SELECT t1.moderator_id, t1.moderator_user_id, t2.name, t2.username, (SELECT COUNT(*) FROM #__sportsmanager_moderator_zugriff WHERE #__sportsmanager_moderator_zugriff.moderator_id = t1.moderator_id) AS zugriffe FROM #__sportsmanager_moderator as t1 LEFT JOIN #__users AS t2 ON t1.moderator_user_id=t2.id ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminModeratoren($rows); +} + +function adminEditModerator() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("moderatoren_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $row = null; + if ($id != 0) { + $query = "SELECT * FROM #__sportsmanager_moderator WHERE moderator_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + if (empty($id)) { + $zugriffe = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $zugriffe = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditModerator($row, $zugriffe, $users); +} + +function adminSaveModerator() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("moderatoren_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_moderatoren'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $userid = $jinput->get('userid', 0, 'INT'); + $zugriffe = $jinput->get('zugriffe', array(), 'ARRAY'); + + $query = "LOCK TABLES #__sportsmanager_moderator WRITE, #__sportsmanager_moderator_zugriff WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_moderator (moderator_user_id)" + . "\n VALUES ('$userid');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_moderator" + . "\n SET moderator_user_id = '$userid'" + . "\n WHERE moderator_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $alte_zugriffe = $db->loadObjectList(); + + foreach ($alte_zugriffe as $alter_zugriff) { + if (!in_array($alter_zugriff->zugriff, $zugriffe)) { + $alter_zugriff_id = $alter_zugriff->moderator_zugriff_id; + $query = "DELETE FROM #__sportsmanager_moderator_zugriff WHERE moderator_zugriff_id = $alter_zugriff_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $index = array_search($alter_zugriff->zugriff, $zugriffe); + if ($index !== false) { + unset($zugriffe[$index]); + } + } + } + + foreach ($zugriffe as $zugriff) { + $query = "INSERT #__sportsmanager_moderator_zugriff" + . "\n SET moderator_id = '$id'," + . "\n zugriff = '$zugriff'," + . "\n zusatz = ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_moderatoren'); +} + +function adminRemoveModerator() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("moderatoren_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_moderator WRITE, #__sportsmanager_moderator_zugriff WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_moderator WHERE moderator_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_moderator_zugriff WHERE moderator_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_moderatoren'); +} + +function adminVeranstalter() { + $db =& getDatabase(); + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_veranstaltung.veranstalter_id) AS veranstaltungen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_verein WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_verein.veranstalter_id) AS vereine," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_turnier WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_turnier.veranstalter_id) AS turniere," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_individualwettbewerb WHERE #__sportsmanager_veranstalter.veranstalter_id = #__sportsmanager_individualwettbewerb.veranstalter_id) AS individualwettbewerbe" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVeranstalter($rows); +} + +function adminEditVeranstalter() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) { + $row = null; + $berechtigt_fuer_veranstalter = array(); + } + else { + $query = "SELECT * FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + + $query = "SELECT #__sportsmanager_berechtigt_fuer_veranstalter.* FROM #__sportsmanager_berechtigt_fuer_veranstalter, #__users WHERE berechtigt_user_id = id AND berechtigt_veranstalter_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_veranstalter = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 1 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + HTML_sportsmanager_admin::adminEditVeranstalter($row, $berechtigt_fuer_veranstalter, $users, $kategorien); +} + +function adminSaveVeranstalter() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_veranstalter'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $kuerzel = $db->escape(trim($jinput->get('kuerzel', '', 'RAW'))); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + + $berechtigt_fuer_veranstalter_user_ids = array($jinput->get('berechtigt_fuer_veranstalter_user_1_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_veranstalter_user_2_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_veranstalter_user_3_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_veranstalter_user_4_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_veranstalter_user_5_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_veranstalter_user_6_id', 0, 'INT')); + + $query = "LOCK TABLES #__sportsmanager_veranstalter WRITE, #__sportsmanager_berechtigt_fuer_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_veranstalter (veranstalterbezeichnung, veranstalterkuerzel, kategorie) VALUES ('$bezeichnung', '$kuerzel', '$kategorie');"; + else { + $query = "UPDATE #__sportsmanager_veranstalter" + . "\n SET veranstalterbezeichnung = '$bezeichnung'," + . "\n veranstalterkuerzel = '$kuerzel'," + . "\n kategorie = '$kategorie'" + . "\n WHERE veranstalter_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + if ($id == 0) + $id = $db->insertid(); + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_veranstalter_user_ids[5];"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + for ($nummer = 0; $nummer <= 5; $nummer++) { + $berechtigt_user_id = $berechtigt_fuer_veranstalter_user_ids[$nummer]; + if ($berechtigt_user_id != 0) { + $gefunden = false; + foreach ($rows as $row) { + if ($row->berechtigt_user_id == $berechtigt_user_id) + $gefunden = true; + } + if (!$gefunden) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_veranstalter (berechtigt_user_id, berechtigt_veranstalter_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_veranstalter'); +} + +function adminRemoveVeranstalter() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("organisationen_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_veranstaltung WRITE, #__sportsmanager_rechnung WRITE, #__sportsmanager_berechtigt_fuer_veranstalter WRITE, #__sportsmanager_verein WRITE, #__sportsmanager_turnier WRITE, #__sportsmanager_individualwettbewerb WRITE, #__sportsmanager_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstalter_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_verein WHERE veranstalter_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnier WHERE veranstalter_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_individualwettbewerb WHERE veranstalter_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "UPDATE #__sportsmanager_rechnung SET veranstalter_id = NULL WHERE veranstalter_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_veranstalter_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_veranstalter'); +} + +function adminSaisons() { + $db =& getDatabase(); + + if (!benutzerZugriff("saisons_aendern")) + keinZugriff(true); + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS veranstaltungen," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_turnier WHERE #__sportsmanager_turnier.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS turniere," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_rangliste WHERE #__sportsmanager_rangliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS ranglisten," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_bestenliste WHERE #__sportsmanager_bestenliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS bestenlisten" + . "\n FROM #__sportsmanager_saison" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSaisons($rows); +} + +function adminEditSaison() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("saisons_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_saison WHERE saison_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditSaison($row); +} + +function adminSaveSaison() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("saisons_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_saisons'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $saisonbezeichnung = $db->escape(trim($jinput->get('saisonbezeichnung', '', 'RAW'))); + + if ($id == 0) + $query = "INSERT INTO #__sportsmanager_saison (saisonbezeichnung) VALUES ('$saisonbezeichnung');"; + else { + $query = "UPDATE #__sportsmanager_saison" + . "\n SET saisonbezeichnung = '$saisonbezeichnung'" + . "\n WHERE saison_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_saisons'); +} + +function adminRemoveSaison() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("saisons_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_saison WRITE, #__sportsmanager_veranstaltung READ, #__sportsmanager_turnier READ, #__sportsmanager_rangliste READ, #__sportsmanager_bestenliste READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT *," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_veranstaltung WHERE #__sportsmanager_veranstaltung.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS veranstaltungen," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_turnier WHERE #__sportsmanager_turnier.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS turniere," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_rangliste WHERE #__sportsmanager_rangliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS ranglisten," + . "\n IF(EXISTS(SELECT * FROM #__sportsmanager_bestenliste WHERE #__sportsmanager_bestenliste.saison_id = #__sportsmanager_saison.saison_id), 1, 0) AS bestenlisten" + . "\n FROM #__sportsmanager_saison" + . "\n WHERE saison_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $row = $rows[0]; + if ($row->veranstaltungen != 0 || $row->turniere != 0 || $row->ranglisten != 0 || $row->bestenlisten != 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_saison WHERE saison_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_saisons'); +} + +function adminEditVeranstaltung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + keinZugriff(true); + + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + $vorlage = $jinput->get('vorlage', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielmodi = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_verschieberegel ORDER BY bezeichnung"; // WHERE status != 0 " . ($id != 0 ? "OR teamspiel_modus_id = $row->modus_id " : "") . "ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verschieberegeln = $db->loadObjectList(); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 2 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (empty($id)) { + $berechtigt_fuer_veranstaltung = array(); + } + else { + $query = "SELECT #__sportsmanager_berechtigt_fuer_veranstaltung.* FROM #__sportsmanager_berechtigt_fuer_veranstaltung, #__users WHERE berechtigt_user_id = id AND berechtigt_veranstaltung_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_veranstaltung = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditVeranstaltung($row, $veranstalter, $spielmodi, $verschieberegeln, $kategorien, $saisons, $users, $berechtigt_fuer_veranstaltung, $vorlage); +} + +function adminSaveVeranstaltung() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $vorlage = $jinput->get('vorlage', 0, 'INT'); + $id = $vorlage ? 0 : $jinput->get('id', 0, 'INT'); + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $saison_id = $jinput->get('saison_id', 0, 'INT'); + $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('erster_tag_jahr', 2000, 'INT'), $jinput->get('erster_tag_monat', 1, 'INT'), $jinput->get('erster_tag_tag', 1, 'INT'))); + $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('letzter_tag_jahr', 2000, 'INT'), $jinput->get('letzter_tag_monat', 1, 'INT'), $jinput->get('letzter_tag_tag', 1, 'INT'))); + $modus_id = $jinput->get('modus_id', 0, 'INT'); + $verschieberegel_id = $jinput->get('verschieberegel_id', 0, 'INT'); + $tabellenwertung = $jinput->get('tabellenwertung', 0, 'INT'); + $unterteilung = $jinput->get('unterteilung', 0, 'INT'); + $elo_wertung = $jinput->get('elo_wertung', 0, 'INT'); + $logo_url = $db->escape(trim($jinput->get('logo_url', '', 'RAW'))); + $ticker_logo_url = $db->escape(trim($jinput->get('ticker_logo_url', '', 'RAW'))); + $status = $jinput->get('status', 0, 'INT'); + $reihenfolge = $jinput->get('reihenfolge', 0, 'INT'); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + $bildbeibehalten_logo = $jinput->get('bildbeibehalten_logo', 0, 'INT'); + $bildbeibehalten_ticker_logo = $jinput->get('bildbeibehalten_ticker_logo', 0, 'INT'); + $aktualisieren_ab_datum = $erster_tag; + $berechtigt_fuer_veranstaltung_user_ids = array(); + for ($i = 1; $i <= 6; $i++) { + $berechtigt_user_id = $jinput->get('berechtigt_fuer_veranstaltung_user_' . $i . '_id', 0, 'INT'); + if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_veranstaltung_user_ids)) + array_push($berechtigt_fuer_veranstaltung_user_ids, $berechtigt_user_id); + } + + $query = "LOCK TABLES #__sportsmanager_veranstaltung WRITE, #__sportsmanager_berechtigt_fuer_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_aktualisieren = false; + $spielerstatistik_aktualisieren = false; + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_veranstaltung (veranstalter_id, saison_id, bezeichnung, erster_tag, " . ($letzter_tag != null ? "letzter_tag, " : "") . "modus_id, verschieberegel_id, tabellenwertung, unterteilung, elo_wertung, logo_url, ticker_logo_url, status, reihenfolge, kategorie) VALUES + ('$veranstalterid', '$saison_id', '$bezeichnung', '$erster_tag', " . ($letzter_tag != null ? "'$letzter_tag', " : "") . "'$modus_id', '$verschieberegel_id', '$tabellenwertung', '$unterteilung', '$elo_wertung', '$logo_url', '$ticker_logo_url', '$status', '$reihenfolge', '$kategorie');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht', "Die Veranstaltung existiert nicht mehr!"); + + return; + } + $row = $rows[0]; + + if (!empty($row->erster_tag) && $row->erster_tag < $erster_tag) + $aktualisieren_ab_datum = $erster_tag; + + $query = "UPDATE #__sportsmanager_veranstaltung" + . "\n SET veranstalter_id = '$veranstalterid'," + . "\n bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n erster_tag = '$erster_tag'," + . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'," : "NULL,") + . "\n modus_id = '$modus_id'," + . "\n verschieberegel_id = '$verschieberegel_id'," + . "\n tabellenwertung = '$tabellenwertung'," + . "\n unterteilung = '$unterteilung'," + . "\n elo_wertung = '$elo_wertung'," + . "\n logo_url = '$logo_url'," + . "\n ticker_logo_url = '$ticker_logo_url'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'" + . "\n WHERE veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (($elo_wertung != 0 && $status != 0) != ($row->elo_wertung != 0 && $row->status != 0)) + $elo_aktualisieren = true; + if ((($modus_id != 0 || $row->modus_id != 0) && $status != $row->status) + || (($status != 0 || $row->status != 0) && $modus_id != $row->modus_id)) + $spielerstatistik_aktualisieren = true; + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; + if (!empty($berechtigt_fuer_veranstaltung_user_ids)) + $query .= " AND berechtigt_user_id NOT IN (" . implode($berechtigt_fuer_veranstaltung_user_ids, ", ") . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_veranstaltung_user_ids); + if ($index !== false) { + unset($berechtigt_fuer_veranstaltung_user_ids[$index]); + } + } + + foreach ($berechtigt_fuer_veranstaltung_user_ids as $berechtigt_user_id) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_veranstaltung (berechtigt_user_id, berechtigt_veranstaltung_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($elo_aktualisieren) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + + teamstatistikAktualisieren($id); + + if ($spielerstatistik_aktualisieren) { + begegnungenAktualisieren($id, 0); + spielerstatistikAktualisieren(0, $id); + } + + if ($bildbeibehalten_ticker_logo == 0) { + bildLoeschen("mannschaftswettbewerbe/ticker_logo", $id); + + if (!empty($_FILES["bild_ticker_logo"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild_ticker_logo"]["tmp_name"])) { + $size = getimagesize($_FILES["bild_ticker_logo"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] > 8192 || $size[1] > 8192)) { + redirectSportsManagerURL('&task=admin_ubersicht', "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit maximal 8192*8192 Bildpunkten vorliegt."); + + return; + } + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftswettbewerbe'; + if (!JFile::copy($_FILES["bild_ticker_logo"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . 'ticker_logo' . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'))) { + redirectSportsManagerURL('&task=admin_uebersicht', "Das Bild konnte nicht an die Zielposition kopiert werden."); + + return; + } + } + } + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRemoveVeranstaltung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_bestenliste_veranstaltung WRITE, #__sportsmanager_veranstaltung WRITE, #__sportsmanager_berechtigt_fuer_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_team WHERE veranstaltung_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + $query = "DELETE FROM #__sportsmanager_bestenliste_veranstaltung WHERE veranstaltung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_veranstaltung WHERE berechtigt_veranstaltung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + spielerstatistikAktualisieren(0, $id); + + bildLoeschen("mannschaftswettbewerbe/logo", $id); + bildLoeschen("mannschaftswettbewerbe/ticker_logo", $id); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminMannschaften() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT #__sportsmanager_team.*, #__sportsmanager_verein.vereinsname, #__sportsmanager_spielort.*," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id AND NOT ausgetreten) AS mitglieder_aktiv," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_team WHERE #__sportsmanager_team.team_id = #__sportsmanager_mitglied_von_team.team_id) AS mitglieder," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung WHERE heim_team_id = #__sportsmanager_team.team_id OR gast_team_id = #__sportsmanager_team.team_id) AS begegnungen" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_verein ON #__sportsmanager_verein.verein_id = #__sportsmanager_team.verein_id" + . "\n LEFT JOIN #__sportsmanager_spielort ON #__sportsmanager_spielort.spielort_id = #__sportsmanager_team.heimspielort_id" + . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminMannschaften($veranstaltung, $rows); +} + +function adminEditMannschaft() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + if ($id == 0) { + $row = null; + $berechtigt_fuer_team = null; + $teamansprechpartner = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $row = $rows[0]; + + if ($veranstaltungid != $row->veranstaltung_id) + die("Wrong id!"); + + $query = "SELECT t1.* FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__users AS t2 WHERE t1.berechtigt_user_id = t2.id AND berechtigt_team_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_team = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id ORDER BY kontaktperson_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teamansprechpartner = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT verein_id, vereinsname, veranstalterbezeichnung, ausgetreten" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten" . (!empty($row) && !empty($row->verein_id) ? " OR verein_id = $row->verein_id" : "") + . "\n ORDER BY veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_veranstaltungen) { + if (empty($id) || empty($row->teamgruppe_id)) { + $query = "SELECT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, IF(" . veranstaltungFilter("veranstaltung_id IN") . ", 1, 0) AS veranstaltung_moderator" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + else { + $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, team_id, team_begegnungen, IF(" . veranstaltungFilter("veranstaltung_id IN") . ", 1, 0) AS veranstaltung_moderator" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, IF(EXISTS(SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = team_id OR gast_team_id = team_id), 1, 0) AS team_begegnungen FROM #__sportsmanager_team WHERE teamgruppe_id = $row->teamgruppe_id) AS veranstaltungen USING (veranstaltung_id)" + . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND ((saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") . ") OR NOT ISNULL(team_id))" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + } + else { + if (empty($id) || empty($row->teamgruppe_id)) { + $query = "SELECT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND saison_id = $veranstaltung->saison_id" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + else { + $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, erster_tag, letzter_tag, saison_id, team_id, team_begegnungen" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, IF(EXISTS(SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = team_id OR gast_team_id = team_id), 1, 0) AS team_begegnungen FROM #__sportsmanager_team WHERE teamgruppe_id = $row->teamgruppe_id) AS veranstaltungen USING (veranstaltung_id)" + . "\n WHERE veranstaltung_id != $veranstaltung->veranstaltung_id AND (saison_id = $veranstaltung->saison_id OR NOT ISNULL(team_id))" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditMannschaft($veranstaltung, $row, $veranstaltungen, $vereine, $users, $berechtigt_fuer_team, $teamansprechpartner, $spielorte, $beschraenkter_zugriff_veranstaltungen); +} + +function adminSaveMannschaft() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltung_id)) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); + + return; + } + + $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + $beschraenkter_zugriff_veranstaltungen_ids = $beschraenkter_zugriff_veranstaltungen ? benutzerVeranstaltungIdsModerator() : null; + + $teamname = $db->escape(trim($jinput->get('teamname', '', 'RAW'))); + $platz = $jinput->get('platz', 0, 'INT'); + $verein_id = $jinput->get('verein_id', 0, 'INT'); + $tischtyp = $db->escape(trim($jinput->get('tischtyp', '', 'RAW'))); + $tischeigenschaften = $db->escape(trim($jinput->get('tischeigenschaften', '', 'RAW'))); + $heimspiel_wochentag = $jinput->get('heimspiel_wochentag', 0, 'INT'); + $heimspiel_uhrzeit = sprintf("%02d%02d", $jinput->get('heimspiel_uhrzeit_stunden', 0, 'INT'), $jinput->get('heimspiel_uhrzeit_minuten', 0, 'INT')); + $heimspielort_id = $jinput->get('heimspielort_id', 0, 'INT'); + $nichtraucherschutz = $jinput->get('nichtraucherschutz', 0, 'INT'); + $zusatzpunkte = $jinput->get('zusatzpunkte', 0, 'FLOAT'); + $bildbeibehalten = $jinput->get('bildbeibehalten', 0, 'INT'); + + $berechtigt_fuer_team_user_ids = array($jinput->get('berechtigt_fuer_team_user_1_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_team_user_2_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_team_user_3_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_team_user_4_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_team_user_5_id', 0, 'INT'), + $jinput->get('berechtigt_fuer_team_user_6_id', 0, 'INT')); + $pin = $db->escape(trim($jinput->get('pin', '', 'RAW'))); + + $weitere_veranstaltungen_anzahl = $jinput->get('weitere_veranstaltungen_anzahl', 0, 'INT'); + $weitere_veranstaltungen_beruecksichtigt = array(); + for ($i = 0; $i < $weitere_veranstaltungen_anzahl; $i++) { + $weitere_veranstaltung_id = $jinput->get('weitere_veranstaltung_id_' . $i, 0, 'INT'); + if ($weitere_veranstaltung_id != 0 && !in_array($weitere_veranstaltung_id, $weitere_veranstaltungen_beruecksichtigt)) + array_push($weitere_veranstaltungen_beruecksichtigt, $weitere_veranstaltung_id); + } + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamansprechpartner WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_begegnung WRITE, #__sportsmanager_veranstaltung READ, #__sportsmanager_unbestaetigtes_ergebnis READ, #__sportsmanager_begegnung_historie READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, zusatzpunkte" . ($veranstaltung->tabellenwertung == -2 ? ", platz" : "") . ", pin)" + . "\n VALUES (" . ($verein_id != 0 ? "'$verein_id'" : "NULL") . ", '$veranstaltungid', '$teamname', '$tischtyp', '$tischeigenschaften', '$heimspiel_wochentag', '$heimspiel_uhrzeit', " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . ", '$nichtraucherschutz', '$zusatzpunkte'" . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? ", '$platz'" : ", NULL") : "") . ", '$pin');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + $teamgruppe_id = $id; + $team_alt = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) == 0) die("Wrong id!"); + $team_alt = $teams[0]; + $teamgruppe_id = $team_alt->teamgruppe_id != null ? $team_alt->teamgruppe_id : $id; + + if ($veranstaltungid != $team_alt->veranstaltung_id) + die("Wrong id!"); + + $query = "UPDATE #__sportsmanager_team" + . "\n SET verein_id = " . ($verein_id != 0 ? "'$verein_id'" : "NULL") . "," + . "\n teamname = '$teamname'," + . "\n tischtyp = '$tischtyp'," + . "\n tischeigenschaften = '$tischeigenschaften'," + . "\n heimspiel_wochentag = '$heimspiel_wochentag'," + . "\n heimspiel_uhrzeit = '$heimspiel_uhrzeit'," + . "\n heimspielort_id = " . ($heimspielort_id != 0 ? "'$heimspielort_id'" : "NULL") . "," + . "\n nichtraucherschutz = '$nichtraucherschutz'," + . ($veranstaltung->tabellenwertung == -2 ? ($platz != 0 ? "\n platz = '$platz'," : "\n platz = NULL,") : "") + . "\n zusatzpunkte = '$zusatzpunkte'," + . "\n pin = '$pin'" + . "\n WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Teamvertreter speichern + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[0] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[1] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[2] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[3] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[4] AND berechtigt_user_id != $berechtigt_fuer_team_user_ids[5];"; + + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + for ($nummer = 0; $nummer <= 5; $nummer++) { + $berechtigt_user_id = $berechtigt_fuer_team_user_ids[$nummer]; + if ($berechtigt_user_id != 0) { + $gefunden = false; + foreach ($rows as $row) { + if ($row->berechtigt_user_id == $berechtigt_user_id) + $gefunden = true; + } + if (!$gefunden) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Ansprechpartner speichern + for ($nummer = 1; $nummer <= 2; $nummer++) { + $teamansprechpartner_id = $jinput->get('teamansprechpartner_' . $nummer . '_id', 0, 'INT'); + $teamansprechpartner_vorname = trim($jinput->get('teamansprechpartner_' . $nummer . '_vorname', '', 'RAW')); + $teamansprechpartner_nachname = trim($jinput->get('teamansprechpartner_' . $nummer . '_nachname', '', 'RAW')); + $teamansprechpartner_telefon = trim($jinput->get('teamansprechpartner_' . $nummer . '_telefon', '', 'RAW')); + $teamansprechpartner_mobil = trim($jinput->get('teamansprechpartner_' . $nummer . '_mobil', '', 'RAW')); + $teamansprechpartner_email = trim($jinput->get('teamansprechpartner_' . $nummer . '_email', '', 'RAW')); + + if ($teamansprechpartner_id == 0) { + if (strlen($teamansprechpartner_vorname) > 0 || strlen($teamansprechpartner_nachname) > 0) { + $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, vorname, nachname, telefon, mobil, email) VALUES ('$id', '$teamansprechpartner_vorname', '$teamansprechpartner_nachname', '$teamansprechpartner_telefon', '$teamansprechpartner_mobil', '$teamansprechpartner_email');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (strlen($teamansprechpartner_vorname) > 0 || strlen($teamansprechpartner_nachname) > 0) { + $query = "UPDATE #__sportsmanager_teamansprechpartner" + . "\n SET vorname = '$teamansprechpartner_vorname'," + . "\n nachname = '$teamansprechpartner_nachname'," + . "\n telefon = '$teamansprechpartner_telefon'," + . "\n mobil = '$teamansprechpartner_mobil'," + . "\n email = '$teamansprechpartner_email'" + . "\n WHERE kontaktperson_id = $teamansprechpartner_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE kontaktperson_id = $teamansprechpartner_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + if ($team_alt != null && ($team_alt->heimspiel_wochentag != $heimspiel_wochentag || $team_alt->heimspiel_uhrzeit != $heimspiel_uhrzeit)) + heimspieltag_aktualisieren($id); + + $bild_aktualisieren_gescheitert = 0; + if ($bildbeibehalten == 0) { + bildLoeschen("mannschaften", $id); + if (!empty($_FILES["bild"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { + $size = getimagesize($_FILES["bild"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { + $bild_aktualisieren_gescheitert = 1; + } + else { + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften'; + $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'); + if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $ziel_pfad, 240, 240, 0)) + $bild_aktualisieren_gescheitert = 2; + } + } + } + } + + // Weitere Wettbewerbe aktualisieren + $query = "SELECT team_id, veranstaltung_id" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id != $id AND teamgruppe_id = $teamgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bestehende_weitere_veranstaltungen_beruecksichtigt = $db->loadObjectList(); + + $veranstaltungen_aktualisieren = array(); + foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) { + if ($beschraenkter_zugriff_veranstaltungen && !in_array($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id, $beschraenkter_zugriff_veranstaltungen_ids)) + continue; + $ist_beruecksichtigt = false; + foreach ($weitere_veranstaltungen_beruecksichtigt as $weitere_veranstaltung_id) { + if ($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id == $weitere_veranstaltung_id) { + $ist_beruecksichtigt = true; + break; + } + } + if (!$ist_beruecksichtigt) + mannschaftsgruppe_entfernen($bestehende_weitere_veranstaltung_beruecksichtigt->team_id); + else { + mannschaftsgruppe_verknuepfen($id, $bestehende_weitere_veranstaltung_beruecksichtigt->team_id, true, false, $bildbeibehalten == 0); + if ($team_alt != null && ($team_alt->heimspiel_wochentag != $heimspiel_wochentag || $team_alt->heimspiel_uhrzeit != $heimspiel_uhrzeit)) + heimspieltag_aktualisieren($bestehende_weitere_veranstaltung_beruecksichtigt->team_id); + } + if (!in_array($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id, $veranstaltungen_aktualisieren)) + array_push($veranstaltungen_aktualisieren, $bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id); + } + + foreach ($weitere_veranstaltungen_beruecksichtigt as $index => $weitere_veranstaltung_id) { + if ($beschraenkter_zugriff_veranstaltungen && !in_array($weitere_veranstaltung_id, $beschraenkter_zugriff_veranstaltungen_ids)) + continue; + + $ist_beruecksichtigt = false; + foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) { + if ($bestehende_weitere_veranstaltung_beruecksichtigt->veranstaltung_id == $weitere_veranstaltung_id) { + $ist_beruecksichtigt = true; + break; + } + } + if (!$ist_beruecksichtigt) + mannschaftsgruppe_hinzufuegen($id, $weitere_veranstaltung_id); + if (!in_array($weitere_veranstaltung_id, $veranstaltungen_aktualisieren)) + array_push($veranstaltungen_aktualisieren, $weitere_veranstaltung_id); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + teamstatistikAktualisieren($veranstaltungid); + foreach ($veranstaltungen_aktualisieren as $weitere_veranstaltung_id) + teamstatistikAktualisieren($weitere_veranstaltung_id); + + if ($bild_aktualisieren_gescheitert > 0) { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid, $bild_aktualisieren_gescheitert == 1 ? "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt." : "Das Bild konnte nicht an die Zielposition kopiert werden."); + + return; + } + + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); +} + +function mannschaftsgruppe_hinzufuegen($quelle_team_id, $ziel_veranstaltung_id) { + $db =& getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $quelle_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) == 0) die("Wrong id!"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $quelle_team_id; + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_team" + . "\n WHERE teamgruppe_id = $teamgruppe_id AND veranstaltung_id = $ziel_veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) + return false; + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE veranstaltung_id = $ziel_veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n == 0) die("Wrong id!"); + + $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, pin)" + . "\n VALUES (" . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . ", '$ziel_veranstaltung_id', '" . $db->escape($team->teamname) . "', '" . $db->escape($team->tischtyp) . "', '" . $db->escape($team->tischeigenschaften) . "', '" . $db->escape($team->heimspiel_wochentag) . "', '" . $db->escape($team->heimspiel_uhrzeit) . "', " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . ", '$team->nichtraucherschutz', '" . $db->escape($team->pin) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_team_id = $db->insertid(); + + return mannschaftsgruppe_verknuepfen($quelle_team_id, $ziel_team_id, true, true, true); +} + +function mannschaftsgruppe_verknuepfen($quelle_team_id, $ziel_team_id, $mannschaftsdaten_aktualisieren, $mannschaftsspieler_aktualisieren, $mannschaftsbild_aktualisieren) { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + + if ($quelle_team_id == $ziel_team_id) + return false; + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $quelle_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $quelle_team_id; + + if ($team->teamgruppe_id == null) { + $query = "UPDATE #__sportsmanager_team" + . "\n SET teamgruppe_id = '$teamgruppe_id'" + . "\n WHERE team_id = $quelle_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Mannschaftsdaten aktualisieren + if ($mannschaftsdaten_aktualisieren) { + $query = "UPDATE #__sportsmanager_team" + . "\n SET teamgruppe_id = '$teamgruppe_id'," + . "\n verein_id = " . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . "," + . "\n teamname = '" . $db->escape($team->teamname) . "'," + . "\n tischtyp = '" . $db->escape($team->tischtyp) . "'," + . "\n tischeigenschaften = '" . $db->escape($team->tischeigenschaften) . "'," + . "\n heimspiel_wochentag = '" . $db->escape($team->heimspiel_wochentag) . "'," + . "\n heimspiel_uhrzeit = '" . $db->escape($team->heimspiel_uhrzeit) . "'," + . "\n heimspielort_id = " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . "," + . "\n nichtraucherschutz = '$team->nichtraucherschutz'," + . "\n pin = '" . $db->escape($team->pin) . "'" + . "\n WHERE team_id = $ziel_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Teamvertreter kopieren + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $quelle_team_id ORDER BY berechtigt_fuer_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $quelle_teamvertreter = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $ziel_team_id ORDER BY berechtigt_fuer_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_teamvertreter = $db->loadObjectList(); + + $quelle_teamvertreter_anzahl = count($quelle_teamvertreter); + $ziel_teamvertreter_anzahl = count($ziel_teamvertreter); + for ($i = 0; $i < $quelle_teamvertreter_anzahl; $i++) { + $berechtigt_user_id = $quelle_teamvertreter[$i]->berechtigt_user_id; + if ($i < $ziel_teamvertreter_anzahl) { + $berechtigt_fuer_team_id = $ziel_teamvertreter[$i]->berechtigt_fuer_team_id; + $query = "UPDATE #__sportsmanager_berechtigt_fuer_team" + . "\n SET berechtigt_user_id = '$berechtigt_user_id'" + . "\n WHERE berechtigt_fuer_team_id = $berechtigt_fuer_team_id"; + } + else { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id)" + . "\n VALUES ('$berechtigt_user_id', '$ziel_team_id');"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + for ($i = $quelle_teamvertreter_anzahl; $i < $ziel_teamvertreter_anzahl; $i++) { + $berechtigt_fuer_team_id = $ziel_teamvertreter[$i]->berechtigt_fuer_team_id; + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_fuer_team_id = $berechtigt_fuer_team_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Ansprechpartner kopieren + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $quelle_team_id ORDER BY kontaktperson_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $quelle_ansprechpartner = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $ziel_team_id ORDER BY kontaktperson_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_ansprechpartner = $db->loadObjectList(); + + $quelle_ansprechpartner_anzahl = count($quelle_ansprechpartner); + $ziel_ansprechpartner_anzahl = count($ziel_ansprechpartner); + for ($i = 0; $i < $quelle_ansprechpartner_anzahl; $i++) { + if ($i < $ziel_ansprechpartner_anzahl) { + $kontaktperson_id = $ziel_ansprechpartner[$i]->kontaktperson_id; + $query = "UPDATE #__sportsmanager_teamansprechpartner" + . "\n SET nachname = '" . $db->escape($quelle_ansprechpartner[$i]->nachname) . "'," + . "\n vorname = '" . $db->escape($quelle_ansprechpartner[$i]->vorname) . "'," + . "\n telefon = '" . $db->escape($quelle_ansprechpartner[$i]->telefon) . "'," + . "\n mobil = '" . $db->escape($quelle_ansprechpartner[$i]->mobil) . "'," + . "\n email = '" . $db->escape($quelle_ansprechpartner[$i]->email) . "'" + . "\n WHERE kontaktperson_id = $kontaktperson_id"; + } + else { + $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, nachname, vorname, telefon, mobil, email)" + . "\n VALUES ('$ziel_team_id', '" . $db->escape($quelle_ansprechpartner[$i]->nachname) . "', '" . $db->escape($quelle_ansprechpartner[$i]->vorname) . "', '" . $db->escape($quelle_ansprechpartner[$i]->telefon) . "', '" . $db->escape($quelle_ansprechpartner[$i]->mobil) . "', '" . $db->escape($quelle_ansprechpartner[$i]->email) . "');"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + for ($i = $quelle_ansprechpartner_anzahl; $i < $ziel_ansprechpartner_anzahl; $i++) { + $kontaktperson_id = $ziel_ansprechpartner[$i]->kontaktperson_id; + $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE kontaktperson_id = $kontaktperson_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + // Mitglieder aktualisieren + if ($mannschaftsspieler_aktualisieren) { + $query = "SELECT spieler_id, ausgetreten, SUM(IF(team_id = $quelle_team_id, 1, 0)) AS mitglied_quelle, SUM(IF(team_id = $ziel_team_id, 1, 0)) AS mitglied_ziel" // , SUM(IF(team_id = $quelle_team_id, 1, IF(team_id = $ziel_team_id, 10000, 0))) AS teammitgliedschaften" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE team_id = $quelle_team_id OR team_id = $ziel_team_id" + . "\n GROUP BY spieler_id, ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereinte_mitglieder = $db->loadObjectList(); + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder'; + foreach ($vereinte_mitglieder as $mitglied) { + $query = "SELECT mitglied_von_team_id" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_mitglieder = $db->loadObjectList(); + + foreach ($ziel_mitglieder as $ziel_mitglied) + bildLoeschen("mannschaftsmitglieder", $ziel_mitglied->mitglied_von_team_id); + + if ($mitglied->mitglied_quelle == 0 && $mitglied->mitglied_ziel > 0) { + $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + continue; + } + + if ($mitglied->mitglied_quelle > 0 && $mitglied->mitglied_ziel == 0) { + $query = "INSERT INTO #__sportsmanager_mitglied_von_team (spieler_id, team_id, ausgetreten)" + . "\n VALUES ('$mitglied->spieler_id', '$ziel_team_id', '$mitglied->ausgetreten');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT mitglied_von_team_id" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $ziel_team_id AND ausgetreten = $mitglied->ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_mitglieder = $db->loadObjectList(); + } + + $query = "SELECT mitglied_von_team_id" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE spieler_id = $mitglied->spieler_id AND team_id = $quelle_team_id AND ausgetreten = $mitglied->ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $quelle_mitglieder = $db->loadObjectList(); + + $bild_kopiert = false; + foreach ($quelle_mitglieder as $quelle_mitglied) { + foreach ($ziel_mitglieder as $ziel_mitglied) { + $pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $quelle_mitglied->mitglied_von_team_id . '.'; + if (JFile::exists($pfad . 'png')) { + JFile::copy($pfad . 'png', $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_mitglied->mitglied_von_team_id . '.png'); + $bild_kopiert = true; + } + else if (JFile::exists($pfad . 'jpg')) { + JFile::copy($pfad . 'jpg', $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_mitglied->mitglied_von_team_id . '.jpg'); + $bild_kopiert = true; + } + } + if ($bild_kopiert) + break; + } + } + } + + // Mannschaftsbild aktualisieren + if ($mannschaftsbild_aktualisieren) { + bildLoeschen("mannschaften", $ziel_team_id); + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften'; + $quelle_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $quelle_team_id . '.'; + $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $ziel_team_id . '.'; + if (JFile::exists($quelle_pfad . 'png')) + $ext = "png"; + else if (JFile::exists($quelle_pfad . 'jpg')) + $ext = "jpg"; + else + $ext = ""; + if (!empty($ext) && !JFile::copy($quelle_pfad . $ext, $ziel_pfad . $ext)) + return false; + } + + return true; +} + +function mannschaftsgruppe_entfernen($ziel_team_id) { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $ziel_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id; + if ($teamgruppe_id == null) + return false; + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = $ziel_team_id OR gast_team_id = $ziel_team_id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n > 0) + return false; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE team_id = $ziel_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) + bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $ziel_team_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE team_id = $ziel_team_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE team_id = $ziel_team_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_team WHERE team_id = $ziel_team_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_team" + . "\n WHERE teamgruppe_id = $teamgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n == 1) { + $query = "UPDATE #__sportsmanager_team" + . "\n SET teamgruppe_id = NULL" + . "\n WHERE teamgruppe_id = $teamgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + return true; +} + +function heimspieltag_aktualisieren($team_id) { + $db =& getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + + if ($team->heimspiel_wochentag < 1 || $team->heimspiel_wochentag > 7) + return; + + $query = "SELECT begegnung_id, zeitpunkt" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" + . "\n WHERE heim_team_id = $team_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" + . "\n ORDER BY spieltag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + foreach ($begegnungen as $begegnung) { + $ts = getdate(geaenderterWochentag(strtotime($begegnung->zeitpunkt), $team->heimspiel_wochentag - 1)); + $neuer_zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100); + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = '$neuer_zeitpunkt'" + . "\n WHERE begegnung_id = $begegnung->begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } +} + +function termin_aktualisieren($begegnung_id) { + $db =& getDatabase(); + + $query = "SELECT heim_team_id, zeitpunkt" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" + . "\n WHERE begegnung_id = $begegnung_id AND COALESCE(heim_spielpunkte, 0) = 0 AND COALESCE(gast_spielpunkte, 0) = 0 AND NOT ISNULL(zeitpunkt) AND ISNULL(spielort_id) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id) AND NOT EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id)" + . "\n ORDER BY spieltag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + if (count($begegnungen) < 1) + return; + $begegnung = $begegnungen[0]; + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + + if ($team->heimspiel_wochentag < 1 || $team->heimspiel_wochentag > 7) + return; + + $ts = getdate(geaenderterWochentag(strtotime($begegnung->zeitpunkt), $team->heimspiel_wochentag - 1)); + $neuer_zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100); + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = '$neuer_zeitpunkt'" + . "\n WHERE begegnung_id = $begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } +} + +function adminRemoveMannschaft() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamansprechpartner WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT teamgruppe_id, veranstaltung_id FROM #__sportsmanager_team WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $teamgruppe_id = $rows[0]->teamgruppe_id != null ? $rows[0]->teamgruppe_id : $id; + + if ($veranstaltungid != $rows[0]->veranstaltung_id) + die("Wrong id!"); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_begegnung WHERE heim_team_id = $id OR gast_team_id = $id), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n > 0) die(JText::_('COM_SPORTSMANAGER_UNABLE_REMOVE_EXISTING_LINKS')); + + if ($rows[0]->teamgruppe_id != null) { + mannschaftsgruppe_entfernen($id); + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) + bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE team_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_team WHERE team_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("mannschaften", $id); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + teamstatistikAktualisieren($veranstaltungid); + + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); +} + +function adminKopierenMannschaftForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT #__sportsmanager_team.*, vereinsname" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_veranstaltungen) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE " . veranstaltungFilter("veranstaltung_id IN") + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminKopierenMannschaft($veranstaltung, $teams, $veranstaltungen); +} + +function adminKopierenMannschaft() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $ids = $jinput->get('ids', array(), 'ARRAY'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + $mitglieder_kopieren = $jinput->get('mitglieder_kopieren', 0, 'INT'); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); + + return; + } + + $beschraenkter_zugriff = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + + $ziel_veranstaltungen_ids = array(); + for ($i = 1; $i <= 4; $i++) { + $ziel_veranstaltungid = $jinput->get('ziel_veranstaltungid_' . $i, 0, 'INT'); + if (empty($ziel_veranstaltungid) || ($beschraenkter_zugriff && !benutzerVeranstaltungModerator($ziel_veranstaltungid))) + continue; + if (!in_array($ziel_veranstaltungid, $ziel_veranstaltungen_ids)) + array_push($ziel_veranstaltungen_ids, $ziel_veranstaltungid); + } + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamansprechpartner WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + foreach ($ziel_veranstaltungen_ids as $ziel_veranstaltungid) { + foreach ($ids as $id) { + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + + if ($veranstaltungid != $team->veranstaltung_id) + die("Wrong id!"); + + $query = "INSERT INTO #__sportsmanager_team (verein_id, veranstaltung_id, teamname, tischtyp, tischeigenschaften, heimspiel_wochentag, heimspiel_uhrzeit, heimspielort_id, nichtraucherschutz, pin)" + . "\n VALUES (" . ($team->verein_id == null ? "NULL" : "'$team->verein_id'") . ", '$ziel_veranstaltungid', '" . $db->escape($team->teamname) . "', '" . $db->escape($team->tischtyp) . "', '" . $db->escape($team->tischeigenschaften) . "', '" . $db->escape($team->heimspiel_wochentag) . "', '" . $db->escape($team->heimspiel_uhrzeit) . "', " . ($team->heimspielort_id != 0 ? "'$team->heimspielort_id'" : "NULL") . ", '$team->nichtraucherschutz', '" . $db->escape($team->pin) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_teamid = $db->insertid(); + + // Mitglieder kopieren + if ($mitglieder_kopieren) { + $query = "SELECT * FROM #__sportsmanager_mitglied_von_team WHERE team_id = $id AND NOT ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_mitglied_von_team (spieler_id, team_id)" + . "\n VALUES ('$row->spieler_id', '$ziel_teamid');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_mitglied_von_team_id = $db->insertid(); + + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $row->mitglied_von_team_id . '.'; + if (JFile::exists($pfad . 'png')) + JFile::copy($pfad . 'png', $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $ziel_mitglied_von_team_id . '.png'); + else if (JFile::exists($pfad . 'jpg')) + JFile::copy($pfad . 'jpg', $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder' . DIRECTORY_SEPARATOR . $ziel_mitglied_von_team_id . '.jpg'); + } + } + + // Teamvertreter kopieren + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $id ORDER BY berechtigt_fuer_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_team (berechtigt_user_id, berechtigt_team_id)" + . "\n VALUES ('$row->berechtigt_user_id', '$ziel_teamid');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Ansprechpartner kopieren + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id ORDER BY kontaktperson_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_teamansprechpartner (team_id, nachname, vorname, telefon, mobil, email)" + . "\n VALUES ('$ziel_teamid', '" . $db->escape($row->nachname) . "', '" . $db->escape($row->vorname) . "', '" . $db->escape($row->telefon) . "', '" . $db->escape($row->mobil) . "', '" . $db->escape($row->email) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $id . '.'; + if (JFile::exists($pfad . 'png')) + JFile::copy($pfad . "png", $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $ziel_teamid . '.png'); + else if (JFile::exists($pfad . 'jpg')) + JFile::copy($pfad . "jpg", $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaften' . DIRECTORY_SEPARATOR . $ziel_teamid . '.jpg'); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + teamstatistikAktualisieren($ziel_veranstaltungid); + + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); +} + +function adminVerknuepfenMannschaftForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT #__sportsmanager_team.*, vereinsname" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE #__sportsmanager_team.veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $beschraenkter_zugriff_veranstaltungen = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + if ($beschraenkter_zugriff_veranstaltungen) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE saison_id = $veranstaltung->saison_id AND " . veranstaltungFilter("veranstaltung_id IN") + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE saison_id = $veranstaltung->saison_id" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVerknuepfenMannschaft($veranstaltung, $teams, $veranstaltungen); +} + +function adminVerknuepfenMannschaft() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $ids = $jinput->get('ids', array(), 'ARRAY'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); + + return; + } + + $beschraenkter_zugriff = benutzerZugriff("mannschaftswettbewerb_aendern") ? 0 : 1; + + $ziel_veranstaltungen_ids = array(); + for ($i = 1; $i <= 4; $i++) { + $ziel_veranstaltungid = $jinput->get('ziel_veranstaltungid_' . $i, 0, 'INT'); + if (empty($ziel_veranstaltungid) || ($beschraenkter_zugriff && !benutzerVeranstaltungModerator($ziel_veranstaltungid))) + continue; + if (!in_array($ziel_veranstaltungid, $ziel_veranstaltungen_ids)) + array_push($ziel_veranstaltungen_ids, $ziel_veranstaltungid); + } + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamansprechpartner WRITE, #__sportsmanager_veranstaltung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + foreach ($ziel_veranstaltungen_ids as $ziel_veranstaltungid) { + foreach ($ids as $id) { + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE team_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 0) die("Wrong id!"); + $team = $teams[0]; + + if ($veranstaltungid != $team->veranstaltung_id) + die("Wrong id!"); + + mannschaftsgruppe_hinzufuegen($id, $ziel_veranstaltungid); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + teamstatistikAktualisieren($ziel_veranstaltungid); + + redirectSportsManagerURL('&task=admin_teams&veranstaltungid=' . $veranstaltungid); +} + +function adminMitglieder() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(true); + + $berechtigt_spieler_aendern = benutzerZugriff("spieler_aendern"); + + $teamid = $jinput->get('teamid', 0, 'INT'); + if ($teamid == 0) die ("Wrong id!"); + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $team->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT mitglied_von_team_id, spieler_id, aktueller_verein_id, MAX(IF(team_id = $teamid, #__sportsmanager_mitglied_von_team.ausgetreten, 0)) AS ausgetreten, MAX(IF(team_id = $teamid, erster_spieltag, NULL)) AS erster_spieltag, MAX(IF(team_id = $teamid, letzter_spieltag, NULL)) AS letzter_spieltag, vorname, nachname, spielernr, MIN(IF(team_id = $teamid, 0, 1)) AS anderes_team" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_team USING (team_id)" + . "\n WHERE (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" + . "\n GROUP BY spieler_id" + . "\n ORDER BY anderes_team, IF(#__sportsmanager_mitglied_von_team.ausgetreten, 1, 0), nachname, vorname, erster_spieltag"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $mitglieder = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminMitglieder($team, $veranstaltung, $mitglieder, $berechtigt_spieler_aendern); +} + +function adminEditMitglied() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $teamid = $jinput->get('teamid', 0, 'INT'); + $alle_anzeigen = $jinput->get('alle_anzeigen', 0, 'INT'); + $entfernen = $jinput->get('entfernen', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; + + if (empty($id)) + $row = null; + else { + $query = "SELECT #__sportsmanager_mitglied_von_team.*, vorname, nachname FROM #__sportsmanager_mitglied_von_team LEFT JOIN #__sportsmanager_spieler USING (spieler_id) INNER JOIN #__sportsmanager_team USING (team_id) WHERE spieler_id = $id AND (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $team->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + if (empty($id)) { + $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, unterteilung, saison_id, team_id, NULL AS mitglied_von_team_id, NULL AS erster_spieltag, NULL AS letzter_spieltag, NULL AS ausgetreten" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, teamgruppe_id FROM #__sportsmanager_team WHERE team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . ") AS veranstaltungen USING (veranstaltung_id)" + . "\n WHERE team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") + . "\n ORDER BY IF(veranstaltung_id = $team->veranstaltung_id, 0, 1), bezeichnung"; + } + else { + $query = "SELECT DISTINCT veranstaltung_id, bezeichnung, unterteilung, saison_id, veranstaltungen.team_id, mitglied_von_team_id, erster_spieltag, letzter_spieltag, #__sportsmanager_mitglied_von_team.ausgetreten" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT veranstaltung_id, team_id, teamgruppe_id FROM #__sportsmanager_team WHERE #__sportsmanager_team.team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") . ") AS veranstaltungen USING (veranstaltung_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team ON veranstaltungen.team_id = #__sportsmanager_mitglied_von_team.team_id AND spieler_id = " . $row->spieler_id + . "\n WHERE veranstaltungen.team_id = $teamid" . (!empty($team->teamgruppe_id) ? " OR teamgruppe_id = $team->teamgruppe_id" : "") + . "\n ORDER BY IF(veranstaltung_id = $team->veranstaltung_id, 0, 1), bezeichnung"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $veranstaltungen_begegnungen = array(); + foreach ($veranstaltungen as $v) { + $query = "SELECT spieltag, zeitpunkt" + . "\n FROM #__sportsmanager_begegnung" + . "\n WHERE (heim_team_id = " . $v->team_id . " OR gast_team_id = " . $v->team_id . ") AND zeitpunkt < CURDATE()" + . "\n ORDER BY zeitpunkt DESC" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + $veranstaltungen_begegnungen[$v->veranstaltung_id] = array(); + $begegnungen = array_reverse($begegnungen); + foreach ($begegnungen as $begegnung) + array_push($veranstaltungen_begegnungen[$v->veranstaltung_id], array($begegnung->spieltag, $begegnung->zeitpunkt)); + + $query = "SELECT spieltag, zeitpunkt" + . "\n FROM #__sportsmanager_begegnung" + . "\n WHERE (heim_team_id = " . $v->team_id . " OR gast_team_id = " . $v->team_id . ") AND zeitpunkt >= CURDATE()" + . "\n ORDER BY zeitpunkt" + . "\n LIMIT 4"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + foreach ($begegnungen as $begegnung) + array_push($veranstaltungen_begegnungen[$v->veranstaltung_id], array($begegnung->spieltag, $begegnung->zeitpunkt)); + } + + /* + $query = "SELECT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler"; + if ($team->verein_id != NULL) + $query .= "\n LEFT JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.verein_id = $team->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT ISNULL(aktueller_verein_id)"; + else + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + $query .= "\n ORDER BY nachname, vorname"; +*/ + if ($team->verein_id != null) { + $query = "SELECT * FROM #__sportsmanager_verein WHERE verein_id = $team->verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + if (count($vereine) < 1) die ("Wrong id"); + $verein = $vereine[0]; + } + else + $verein = null; + + if (empty($id)) { + if (!empty($team->verein_id) && !$alle_anzeigen) { + $query = "SELECT DISTINCT #__sportsmanager_spieler.spieler_id, vorname, nachname, spielernr, 1 AS aktives_mitglied" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE verein_id = $team->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten" + . " AND spieler_id NOT IN (SELECT spieler_id FROM #__sportsmanager_team INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" + . "\n ORDER BY nachname, vorname"; + } + else { + $query = "SELECT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id)" + . " AND spieler_id NOT IN (SELECT spieler_id FROM #__sportsmanager_team INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE team_id = $teamid OR teamgruppe_id = $teamgruppe_id)" + . "\n ORDER BY nachname, vorname"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + if (!empty($team->verein_id) && !$alle_anzeigen) { + $query = "SELECT spieler_id, veranstaltung_id, unterteilung, erster_spieltag, letzter_spieltag, team_id, ausgetreten" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id)" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE saison_id = $veranstaltung->saison_id AND (unterteilung = 0 OR unterteilung = 1)" + . " AND EXISTS(SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.verein_id = $team->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten)" + . "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + + } + else { + $query = "SELECT spieler_id, veranstaltung_id, unterteilung, erster_spieltag, letzter_spieltag, team_id, ausgetreten" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id)" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE saison_id = $veranstaltung->saison_id AND (unterteilung = 0 OR unterteilung = 1) AND NOT ISNULL(aktueller_verein_id)" + . "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $mitgliedschaften = $db->loadObjectList(); + + $spielberechtigungen = array(); + foreach ($mitgliedschaften as $mitgliedschaft) { + if (!isset($spielberechtigungen[$mitgliedschaft->spieler_id])) + $spielberechtigungen[$mitgliedschaft->spieler_id] = array(); + array_push($spielberechtigungen[$mitgliedschaft->spieler_id], array($mitgliedschaft->veranstaltung_id, $mitgliedschaft->unterteilung, $mitgliedschaft->erster_spieltag, $mitgliedschaft->letzter_spieltag, $mitgliedschaft->team_id, $mitgliedschaft->ausgetreten)); + } + + // Veranstaltungsbezeichnungen ermitteln + $query = "SELECT veranstaltung_id, bezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE saison_id = $veranstaltung->saison_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $veranstaltungsbezeichnungen = array(); + foreach ($rows as $v) + $veranstaltungsbezeichnungen[$v->veranstaltung_id] = $v->bezeichnung; + + // Mannschaftsbezeichnungen ermitteln + $query = "SELECT team_id, teamname" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE saison_id = $veranstaltung->saison_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $mannschaftsnamen = array(); + foreach ($rows as $m) + $veranstaltungsbezeichnungen[$m->team_id] = $m->teamname; + + } + else { + $spieler = array(); + $spielberechtigungen = null; + $veranstaltungsbezeichnungen = null; + $mannschaftsnamen = null; + } + + HTML_sportsmanager_admin::adminEditMitglied($row, $team, $verein, $veranstaltung, $spieler, $spielberechtigungen, $veranstaltungsbezeichnungen, $mannschaftsnamen, $veranstaltungen, $veranstaltungen_begegnungen, $alle_anzeigen, $entfernen); +} + +function adminSaveMitglied() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator()) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $spielerids = $id != 0 ? array($id) : $jinput->get('spielerids', array(), 'ARRAY'); + $teamid = $jinput->get('teamid', 0, 'INT'); + $bildbeibehalten = $jinput->get('bildbeibehalten', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid); + + return; + } + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id"); + $team = $teams[0]; + $teamgruppe_id = $team->teamgruppe_id != null ? $team->teamgruppe_id : $teamid; + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($team->veranstaltung_id)) + keinZugriff(); + + $query = "LOCK TABLES #__sportsmanager_team WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamansprechpartner WRITE, #__sportsmanager_mitglied_von_team WRITE, #__sportsmanager_begegnung READ, #__sportsmanager_veranstaltung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Sicherstellen, dass Mannschaftsmitglied zum Team gehört + if (!empty($id)) { + $query = "SELECT * FROM #__sportsmanager_mitglied_von_team INNER JOIN #__sportsmanager_team USING (team_id) WHERE spieler_id = $id AND (team_id = $teamid OR teamgruppe_id = $teamgruppe_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + } + + $query = "SELECT DISTINCT veranstaltung_id, team_id" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $teamid" . (!empty($teamgruppe_id) ? " OR teamgruppe_id = $teamgruppe_id" : null); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + foreach ($veranstaltungen as $v) { + $status = $jinput->get('status_' . $v->veranstaltung_id, -1, 'INT'); + if ($status == -1) + continue; + $erster_spieltag = $jinput->get('erster_spieltag_' . $v->veranstaltung_id, 0, 'INT'); + $letzter_spieltag = $jinput->get('letzter_spieltag_' . $v->veranstaltung_id, 0, 'INT'); + + $erste_runde_typ = $jinput->get('erste_runde_typ_' . $v->veranstaltung_id, -1, 'INT'); + $erste_runde = max(min(abs($jinput->get('erste_runde_' . $v->veranstaltung_id, 1, 'INT')), $erste_runde_typ == -2 ? 99 : 9999), 1); + $erste_runde_platzierung_ende = max(min(abs($jinput->get('erste_runde_platzierung_ende_' . $v->veranstaltung_id, 0, 'INT')), $erste_runde + 99), 1); + + if ($erste_runde_typ >= 10000) + $erste_runde = $erste_runde_typ; + else if ($erste_runde_typ == -2) + $erste_runde = 20000 + ((99 - abs($erste_runde_platzierung_ende - $erste_runde)) * 100) + 99 - min($erste_runde, $erste_runde_platzierung_ende); + else if ($erste_runde_typ == 0) + $erste_runde = 0; + + $letzte_runde_typ = $jinput->get('letzte_runde_typ_' . $v->veranstaltung_id, -1, 'INT'); + $letzte_runde = max(min(abs($jinput->get('letzte_runde_' . $v->veranstaltung_id, 1, 'INT')), $letzte_runde_typ == -2 ? 99 : 9999), 1); + $letzte_runde_platzierung_ende = max(min(abs($jinput->get('letzte_runde_platzierung_ende_' . $v->veranstaltung_id, 0, 'INT')), $letzte_runde + 99), 1); + + if ($letzte_runde_typ >= 10000) + $letzte_runde = $letzte_runde_typ; + else if ($letzte_runde_typ == -2) + $letzte_runde = 20000 + ((99 - abs($letzte_runde_platzierung_ende - $letzte_runde)) * 100) + 99 - min($letzte_runde, $letzte_runde_platzierung_ende); + else if ($letzte_runde_typ == 0) + $letzte_runde = 0; + + if ($letzte_runde != 0 && $erste_runde != 0 && $erste_runde > $letzte_runde) { + $t = $erste_runde; + $erste_runde = $letzte_runde; + $letzte_runde = $t; + } + + if ($id == 0) { + foreach ($spielerids as $spielerid) { + if ($status == 0) + continue; + + $query = "SELECT mitglied_von_team_id FROM #__sportsmanager_mitglied_von_team WHERE team_id = $v->team_id AND spieler_id = '" . $db->escape($spielerid) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) + continue; + + $query = "INSERT #__sportsmanager_mitglied_von_team" + . "\n SET spieler_id = '" . $db->escape($spielerid) . "'," + . "\n team_id = '$v->team_id'," + . "\n erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," + . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," + . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE") . ";"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + $query = "SELECT mitglied_von_team_id FROM #__sportsmanager_mitglied_von_team WHERE team_id = $v->team_id AND spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if ($status == 0) { + foreach ($rows as $row) { + $query = "DELETE FROM #__sportsmanager_mitglied_von_team WHERE mitglied_von_team_id = " . $row->mitglied_von_team_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); + } + } + else { + if (count($rows) == 0) { + $query = "INSERT #__sportsmanager_mitglied_von_team" + . "\n SET spieler_id = '$id'," + . "\n team_id = '$v->team_id'," + . "\n erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," + . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," + . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE"); + } + else { + $query = "UPDATE #__sportsmanager_mitglied_von_team" + . "\n SET erster_spieltag = " . ($erste_runde == 0 ? "NULL" : "'$erste_runde'") . "," + . "\n letzter_spieltag = " . ($letzte_runde == 0 ? "NULL" : "'$letzte_runde'") . "," + . "\n ausgetreten = " . ($status == 2 ? "TRUE" : "FALSE") + . "\n WHERE mitglied_von_team_id = " . $rows[0]->mitglied_von_team_id; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($bildbeibehalten == 0) { + foreach ($rows as $row) { + bildLoeschen("mannschaftsmitglieder", $row->mitglied_von_team_id); + + if (!empty($_FILES["bild"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { + $size = getimagesize($_FILES["bild"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] < 60 || $size[1] < 60 || $size[0] > 8192 || $size[1] > 8192)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid, "Das Bild wurde nicht gespeichert, da es nicht im JPG/PNG-Format mit mindestens 90*90 und maximal 8192*8192 Bildpunkten vorliegt."); + + return; + } + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder'; + if (!bildKopierenAngepasst($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $row->mitglied_von_team_id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'), 180, 240, 1)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid, "Das Bild konnte nicht an die Zielposition kopiert werden."); + + return; + } + } + } + } + } + } + } + } + + $query = "SELECT team_id" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id != $teamid AND teamgruppe_id = $teamgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bestehende_weitere_veranstaltungen_beruecksichtigt = $db->loadObjectList(); + + foreach ($bestehende_weitere_veranstaltungen_beruecksichtigt as $bestehende_weitere_veranstaltung_beruecksichtigt) + mannschaftsgruppe_verknuepfen($teamid, $bestehende_weitere_veranstaltung_beruecksichtigt->team_id, false, false, false); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_mitglieder&teamid=' . $teamid); +} + +function adminBegegnungen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $modus = $rows[0]; + + $query = "SELECT t1.*, t2.teamname AS heim_name, t3.teamname AS gast_name, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t2.nichtraucherschutz AS heim_nichtraucherschutz, t3.nichtraucherschutz AS gast_nichtraucherschutz," + . "\n EXISTS(SELECT * FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = t1.begegnung_id AND aktion IN (1, 5)) AS verlegt," + . "\n (SELECT IF(#__sportsmanager_begegnung_historie.aktion NOT IN (0, 3, 4), NULL, #__sportsmanager_begegnung_historie.eingetragen) AS eingetragen FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n WHERE t2.veranstaltung_id = $veranstaltungid" + . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "t1.spieltag, " : "") . "t1.zeitpunkt, heim_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminBegegnungen($veranstaltung, $modus, $rows); +} + +function adminEditBegegnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + if (empty($id)) { + $query = "SELECT #__sportsmanager_begegnung.*" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON team_id = heim_team_id" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY zeitpunkt DESC LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $row = count($rows) < 1 ? null : $rows[0]; // Falls keine Begegnung als Vorlage verfügbar ist + } + else { + $query = "SELECT * FROM #__sportsmanager_begegnung WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $row = $rows[0]; + + // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $row->heim_team_id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id!"); + } + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + // Vorgeschlagene Termine ermitteln + $query = "SELECT #__sportsmanager_begegnung_historie.*, team.teamname as team, user.username, user.name, verantwortlich_team.teamname as verantwortlich_team" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n LEFT JOIN #__sportsmanager_team AS team USING (team_id)" + . "\n LEFT JOIN #__sportsmanager_team AS verantwortlich_team ON verantwortlich_team.team_id = verantwortlich_team_id" + . "\n LEFT JOIN #__users AS user ON user.id = user_id" + . "\n WHERE begegnung_id = $id" + . "\n ORDER BY begegnung_historie_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verlegen_aktionen = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditBegegnung($veranstaltung, $row, $id == null, $teams, $spielorte); + HTML_sportsmanager_admin::adminVerlegenVerlauf($verlegen_aktionen); +} + +function adminSaveBegegnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $update = $id != 0; + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid . '#id' . $id); + + return; + } + + $datum = normalisiertesDatum($jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('datum_jahr', 0, 'INT'), $jinput->get('datum_monat', 0, 'INT'), $jinput->get('datum_tag', 0, 'INT'))); + $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jinput->get('uhrzeit_stunden', 0, 'INT'), $jinput->get('uhrzeit_minuten', 0, 'INT'))); + $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); + $heim_team_id = $jinput->get('heim_team_id', 0, 'INT'); + $gast_team_id = $jinput->get('gast_team_id', 0, 'INT'); + $spielort_id = $jinput->get('spielort_id', 0, 'INT'); + $tisch = $db->escape(trim($jinput->get('tisch', '', 'RAW'))); + $nichtraucherschutz = $jinput->get('nichtraucherschutz', 0, 'INT'); + $rundentyp = $jinput->get('rundentyp', -1, 'INT'); + $runde = max(min(abs($jinput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); + $platzierung_ende = max(min(abs($jinput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); + $aktualisieren_ab_datum = $datum; + + if ($rundentyp >= 10000) + $runde = $rundentyp; + else if ($rundentyp == -2) + $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); + else if ($rundentyp == 0) + $runde = 0; + + $query = "SELECT status, elo_wertung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong Id!"); + $veranstaltung = $rows[0]; + + // Sicherstellen, dass Teams zu Veranstaltung gehören + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $heim_team_id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id!"); + $heim_team = $teams[0]; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $gast_team_id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id!"); + $gast_team = $teams[0]; + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_begegnung_historie WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id, spielort_id, tisch, nichtraucherschutz)" + . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", " . ($runde != null ? "'$runde'" : "NULL") . ", '$heim_team_id', '$gast_team_id', " . ($spielort_id != 0 ? "'$spielort_id'" : "NULL") . ", '$tisch', '$nichtraucherschutz');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + // Begegnung ermitteln + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" + . "\n FROM #__sportsmanager_begegnung" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $begegnung = $rows[0]; + + if (!empty($begegnung->zeitpunkt) && substr($begegnung->zeitpunkt, 0, 10) < $aktualisieren_ab_datum) + $aktualisieren_ab_datum = substr($begegnung->zeitpunkt, 0, 10); + + if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id) { + $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($begegnung->zeitpunkt != $zeitpunkt && $begegnung->verlegen_aktionen != 0) { + $aktueller_zeitpunkt = date('Y-m-d H:i:s'); + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 5, " . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", '$user_id', NULL, NULL, NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($begegnung->heim_team_id != $heim_team_id || $begegnung->gast_team_id != $gast_team_id || $begegnung->zeitpunkt != $zeitpunkt || $begegnung->spieltag != $runde || $begegnung->spielort_id != $spielort_id || (empty($begegnung->tisch) != empty($tisch) || $begegnung->tisch != $tisch) || $begegnung->nichtraucherschutz != $nichtraucherschutz) { + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = " . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . "," + . "\n spieltag = " . ($runde != null ? "'$runde'" : "NULL") . "," + . "\n heim_team_id = '$heim_team_id'," + . "\n gast_team_id = '$gast_team_id'," + . "\n spielort_id = " . ($spielort_id != 0 ? "'$spielort_id'" : "NULL") . "," + . "\n tisch = '$tisch'," + . "\n nichtraucherschutz = '$nichtraucherschutz'" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($veranstaltung->status > 0) { + if ($update && (empty($begegnung->tisch) != empty($tisch) || $begegnung->tisch != $tisch)) { + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" + . "\n FROM #__sportsmanager_begegnung" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $begegnung = $rows[0]; + begegnungTischChanged($begegnung, $heim_team, $gast_team); + } + + wannGespieltAktualisieren(); + if ($veranstaltung->elo_wertung > 0) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + } + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid . '#id' . $id); +} + +function adminRemoveBegegnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_begegnung_historie WRITE, #__sportsmanager_unbestaetigtes_ergebnis WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_begegnung WRITE, #__sportsmanager_team READ, #__sportsmanager_veranstaltung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Sicherstellen, dass Begegnung zu Veranstaltung gehört und Elo-Status abrufen + $query = "SELECT status, elo_wertung, zeitpunkt" + . "\n FROM #__sportsmanager_begegnung" + . "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE begegnung_id = $id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + return; + } + $row = $rows[0]; + + $elo_aktualisieren = $row->status != 0 && $row->elo_wertung != 0; + $aktualisieren_ab_datum = !empty($row->zeitpunkt) ? substr($row->zeitpunkt, 0, 10) : null; + + $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_begegnung WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($elo_aktualisieren) { + wannGespieltAktualisieren(); + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + spielerstatistikAktualisieren(0, $veranstaltungid); + teamstatistikAktualisieren($veranstaltungid); + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); +} + +function adminHeimtauschBegegnung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_unbestaetigtes_ergebnis READ, #__sportsmanager_begegnung_historie READ, #__sportsmanager_team READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_begegnung WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $row = $rows[0]; + + // Sicherstellen, dass mindestens ein Team zur Veranstaltung gehört + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $row->heim_team_id AND veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id!"); + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET heim_team_id = (@temp_heim_team_id := heim_team_id), heim_team_id = gast_team_id," + . "\n gast_team_id = @temp_heim_team_id," + . "\n heim_punkte = (@temp_heim_punkte := heim_punkte), heim_punkte = gast_punkte," + . "\n gast_punkte = @temp_heim_punkte," + . "\n heim_spielpunkte = (@temp_heim_spielpunkte := heim_spielpunkte), heim_spielpunkte = gast_spielpunkte," + . "\n gast_spielpunkte = @temp_heim_spielpunkte" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET heim_spieler_1_id = (@temp_heim_spieler_1_id := heim_spieler_1_id), heim_spieler_1_id = gast_spieler_1_id," + . "\n gast_spieler_1_id = @temp_heim_spieler_1_id," + . "\n heim_spieler_2_id = (@temp_heim_spieler_2_id := heim_spieler_2_id), heim_spieler_2_id = gast_spieler_2_id," + . "\n gast_spieler_2_id = @temp_heim_spieler_2_id," + . "\n teamspiel_heim_punkte = (@temp_teamspiel_heim_punkte := teamspiel_heim_punkte), teamspiel_heim_punkte = teamspiel_gast_punkte," + . "\n teamspiel_gast_punkte = @temp_teamspiel_heim_punkte," + . "\n teamspiel_heim_spielpunkte = (@temp_teamspiel_heim_spielpunkte := teamspiel_heim_spielpunkte), teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte," + . "\n teamspiel_gast_spielpunkte = @temp_teamspiel_heim_spielpunkte" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + termin_aktualisieren($id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid . '#id' . $id); +} + +function adminEditBegegnungSpielplan($bestaetigen) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $erneut_oeffnen = $jinput->get('erneut_oeffnen', 0, 'INT'); + + if ($bestaetigen == 2) { + $pin = $db->escape(trim($jinput->get('pin', '', 'RAW'))); + if (empty($pin)) { + $encrypted_pin = $db->escape($jinput->get('epin', '', 'RAW')); + if (empty($encrypted_pin)) { + redirectSportsManagerURL(null, "Keine PIN eingegeben."); + jexit(); + } + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) die("Missing id!"); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungid . "oDS7" . $id . "2eA"); + } + + $query = "SELECT t1.begegnung_id, t5.veranstaltung_id, IF(t2.pin = '$pin', heim_team_id, gast_team_id) AS aktion_team_id, IF(t2.pin = '$pin', gast_team_id, heim_team_id) AS anderes_team_id" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 " . kategorieFilter("AND t5.kategorie IN") . " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis OR NOT ISNULL(unbestaetigtes_ergebnis_id)) AND ((NOT ISNULL(t2.pin) AND t2.pin = '$pin') OR (NOT ISNULL(t3.pin) AND t3.pin = '$pin'))" + . "\n ORDER BY t1.zeitpunkt" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) { + redirectSportsManagerURL(null, "Keine offene Begegnung zur PIN gefunden."); + jexit(); + } + + $id = $rows[0]->begegnung_id; + $veranstaltungid = $rows[0]->veranstaltung_id; + $aus_uebersicht = 0; + $aktion_team_id = $rows[0]->aktion_team_id; + $anderes_team_id = $rows[0]->anderes_team_id; + } + else { + $pin = ""; + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) die("Missing id!"); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + } + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $teamspiel_modus_id = $veranstaltung->modus_id; + + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $teamspiel_modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $teamspiel_modus = $rows[0]; + + $query = "SELECT t1.*, t2.unbestaetigtes_ergebnis_id, t2.kommentar, t2.zwischenergebnis,"; + $query .= "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen,"; + if ($bestaetigen != 2) { + $query .= "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren"; + } else { + $query .= "\n IF(t4.vorschlagendes_team_id = $anderes_team_id, 1, 0) AS berechtigt_fuer_team_akzeptieren"; + } + $query .= "\n FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t2 ON t1.begegnung_id = t2.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n WHERE t1.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $begegnung = $rows[0]; + + // Vorgeschlagene Termine ermitteln + $query = "SELECT #__sportsmanager_begegnung_historie.*, team.teamname as team, user.username, user.name, verantwortlich_team.teamname as verantwortlich_team" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n LEFT JOIN #__sportsmanager_team AS team USING (team_id)" + . "\n LEFT JOIN #__sportsmanager_team AS verantwortlich_team ON verantwortlich_team.team_id = verantwortlich_team_id" + . "\n LEFT JOIN #__users AS user ON user.id = user_id" + . "\n WHERE begegnung_id = $id" + . "\n ORDER BY begegnung_historie_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verlegen_aktionen = $db->loadObjectList(); + + if ($bestaetigen == 1) { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) + keinZugriff(); + + $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + keinZugriff(true); + } + else if ($bestaetigen == 2) { + // + } + else { + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + } + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $heim_team = $rows[0]; + + if ($veranstaltungid != $heim_team->veranstaltung_id) + die("Wrong id!"); + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $gast_team = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_mitglied_von_team as t1" + . "\n INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id)" + . "\n WHERE team_id = $begegnung->heim_team_id AND NOT t1.ausgetreten " . ($begegnung->spieltag != null ? "AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= $begegnung->spieltag) AND (ISNULL(t1.letzter_spieltag) OR $begegnung->spieltag <= t1.letzter_spieltag) " : "") + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $heim_spieler = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_mitglied_von_team as t1" + . "\n INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id)" + . "\n WHERE team_id = $begegnung->gast_team_id AND NOT t1.ausgetreten " . ($begegnung->spieltag != null ? "AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= $begegnung->spieltag) AND (ISNULL(t1.letzter_spieltag) OR $begegnung->spieltag <= t1.letzter_spieltag) " : "") + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $gast_spieler = $db->loadObjectList(); + + $encrypted_pin = encrypt($pin, "a9cZ" . $veranstaltung->veranstaltung_id . "oDS7" . $id . "2eA"); + // Spielort ermitteln + $spielortQuery = "SELECT name FROM #__sportsmanager_spielort WHERE spielort_id = \"" + . (JFactory::getApplication()->input->getCmd('spielort_heim') == 1 + ? $heim_team->heimspielort_id + : $begegnung->spielort_id) . "\""; + $db->setQuery($spielortQuery); + $begegnung->spielort_name = $db->loadResult(); + + + if (isJson()) { + $response = JSON_sportsmanager::adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus, $encrypted_pin, count($verlegen_aktionen), $erneut_oeffnen, $aus_uebersicht); + JSON_sportsmanager::JSON($response); + } else { + HTML_sportsmanager_admin::adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus, $encrypted_pin, count($verlegen_aktionen), $erneut_oeffnen, $aus_uebersicht); + HTML_sportsmanager_admin::adminVerlegenVerlauf($verlegen_aktionen); + } + +} + + +function adminSaveBegegnungSpielplan() { + $app = &JFactory::getApplication(); + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + $begegnung_input = isJson() ? $jinput->json : $jinput; + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $id = $jinput->get('id', 0, 'INT'); + $bestaetigen = $begegnung_input->get('bestaetigen', 0, 'INT'); + $zwischenergebnis = isJson() && $jinput->getMethod() === 'PATCH' ? true : $begegnung_input->get('live', false, 'BOOL'); + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) { + abortWithError("Missing id!"); + } + $kommentar = $db->escape($jinput->get('kommentar', '', 'RAW')); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + $anzahl_historie = $jinput->get('anzahl_historie', 0, 'INT'); + $erneut_oeffnen = $jinput->get('erneut_oeffnen', 0, 'INT'); + $heim_team_id = $jinput->get('heim_team_id', 0, 'INT'); + $gast_team_id = $jinput->get('gast_team_id', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + if ($bestaetigen == 1) { + if ($aus_uebersicht) { + redirectSportsManagerURL('#id' . $id); + } + else { + redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungid . '#id' . $id); + } + } + else if ($bestaetigen == 2) { + if ($aus_uebersicht) { + redirectSportsManagerURL(); + } + else { + redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungid); + } + } + else { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid . '#id' . $id); + } + + return; + } + + $benutzer_ist_moderator = benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator($veranstaltungid); // Abfrage muss vor LOCK erfolgen, da sonst die Abfrage mangels Lock auf Moderator-Tabelle scheitert + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_veranstaltung WRITE, #__sportsmanager_teamspiel_modus WRITE, #__sportsmanager_unbestaetigtes_ergebnis WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_begegnung_historie WRITE, #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," + . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + $mannschaften_vertauscht = $begegnung->heim_team_id == $gast_team_id || $begegnung->gast_team_id == $heim_team_id; + $aktualisieren_ab_datum = !empty($begegnung->zeitpunkt) ? substr($begegnung->zeitpunkt, 0, 10) : null; + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + + // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $begegnung->heim_team_id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) { + abortWithError("Wrong id!"); + } + + // Spielmodus ermitteln + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $teamspiel_modus = $rows[0]; + + $spielpunkte_wertung_einzel = $teamspiel_modus->spielpunkte_wertung_einzel; + $spielpunkte_wertung_doppel = $teamspiel_modus->spielpunkte_wertung_doppel; + $modus = explode("|", $teamspiel_modus->modus); + $spieltypen = isset($modus[0]) ? explode(",", $modus[0]) : array(); + + if ($bestaetigen == 1) { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { + keinZugriff(); + } + + $query = "SELECT #__sportsmanager_berechtigt_fuer_team.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) { + keinZugriff(); + } + $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; + } + else if ($bestaetigen == 2) { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { + keinZugriff(); + } + + $encrypted_pin = $db->escape($jinput->get('pin', '', 'RAW')); + $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungid . "oDS7" . $id . "2eA"); + if (empty($pin)) { + keinZugriff(); + } + + $query = "SELECT team_id FROM #__sportsmanager_begegnung LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id OR gast_team_id = team_id WHERE begegnung_id = $id AND (team_id = $begegnung->heim_team_id OR team_id = $begegnung->gast_team_id) AND NOT ISNULL(pin) AND pin = '$pin'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) { + keinZugriff(); + } + + $vorschlagendes_team_id = $rows[0]->team_id; + } + else { + if (!$benutzer_ist_moderator) { + keinZugriff(); + } + } + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) { + abortWithError("Missing id!"); + } + + $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + if ($zwischenergebnis) { + $query = "INSERT INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, zwischenergebnis, kommentar, vorgeschlagen)" + . "\n VALUES ('$id', " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "'0'") . ", '1', '$kommentar', now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 9, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "NULL") . ", NULL, NULL, now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + else if ($bestaetigen != 0) { + $query = "INSERT INTO #__sportsmanager_unbestaetigtes_ergebnis (begegnung_id, vorschlagendes_team_id, kommentar, vorgeschlagen)" + . "\n VALUES ('$id', '$vorschlagendes_team_id', '$kommentar', now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 6, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', NULL, now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + else { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 8, NULL, '$user_id', NULL, NULL, NULL, now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id ORDER BY teamspiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + $spiele_nummern = array(); + foreach ($spiele as $spiel) { + $spiele_nummern[$spiel->teamspiel_nummer] = $spiel; + } + + $ergebnis_vereinen = $zwischenergebnis && $begegnung->verlegen_aktionen != $anzahl_historie; + + $total_heim_punkte = 0; + $total_gast_punkte = 0; + $total_heim_spielpunkte = 0; + $total_gast_spielpunkte = 0; + $spiel_nr = 1; + do { + $spieltyp = isset($spieltypen[$spiel_nr - 1]) ? $spieltypen[$spiel_nr - 1] : ''; + + $skip_spiel = $begegnung_input->get('spiel_' . $spiel_nr . '_typ', '', 'RAW') == '' && $jinput->getMethod() === 'PATCH'; + + if ($skip_spiel) { + if (isset($spiele_nummern[$spiel_nr])) { + $spiel_heim_punkte = $spiele_nummern[$spiel_nr]->$spiel_heim_punkte; + $spiel_gast_punkte = $spiele_nummern[$spiel_nr]->$spiel_gast_punkte; + } + else { + $spiel_heim_punkte = 0; + $spiel_gast_punkte = 0; + } + } + else { + $spiel_heim_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte_detailliert', array(), 'ARRAY'); + $spiel_gast_punkte_detailliert = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte_detailliert', array(), 'ARRAY'); + if (empty($spiel_heim_punkte_detailliert)) { + $spiel_heim_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_punkte', 0, 'INT'); + $spiel_gast_punkte = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_punkte', 0, 'INT'); + $ergebnis_detailliert = $spiel_heim_punkte == 0 && $spiel_gast_punkte == 0 ? '' : ($spiel_heim_punkte . ":" . $spiel_gast_punkte); + } + else { + $ergebnis_detailliert = ""; + $spiel_heim_punkte = 0; + $spiel_gast_punkte = 0; + for ($i = 0; $i < count($spiel_heim_punkte_detailliert); $i++) { + if (($spiel_heim_punkte_detailliert[$i] == 0 || empty($spiel_heim_punkte_detailliert[$i])) && ($spiel_gast_punkte_detailliert[$i] == 0 || empty($spiel_gast_punkte_detailliert[$i]))) { + continue; + } + if (!empty($ergebnis_detailliert)) { + $ergebnis_detailliert .= " "; + } + $punkte_heim = empty($spiel_heim_punkte_detailliert[$i]) ? "0" : $spiel_heim_punkte_detailliert[$i]; + $punkte_gast = empty($spiel_gast_punkte_detailliert[$i]) ? "0" : $spiel_gast_punkte_detailliert[$i]; + if ($punkte_heim > $punkte_gast) { + $spiel_heim_punkte++; + } + else if ($punkte_gast > $punkte_heim) { + $spiel_gast_punkte++; + } + $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; + } + } + + if ($spieltyp[0] == "S") { + $spiel_heim_spieler_1_id = 0; + $spiel_gast_spieler_1_id = 0; + $spiel_heim_spieler_2_id = 0; + $spiel_gast_spieler_2_id = 0; + } + else { + $spiel_heim_spieler_1_id = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_spieler_1_id', 0, 'INT'); + $spiel_gast_spieler_1_id = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_spieler_1_id', 0, 'INT'); + if ($spieltyp[0] == "E") { + $spiel_heim_spieler_2_id = 0; + $spiel_gast_spieler_2_id = 0; + } + else { + $spiel_heim_spieler_2_id = $begegnung_input->get('spiel_' . $spiel_nr . '_heim_spieler_2_id', 0, 'INT'); + $spiel_gast_spieler_2_id = $begegnung_input->get('spiel_' . $spiel_nr . '_gast_spieler_2_id', 0, 'INT'); + } + $spieler_angegeben = $spiel_heim_spieler_1_id != 0 || $spiel_gast_spieler_1_id != 0 || $spiel_heim_spieler_2_id != 0 || $spiel_gast_spieler_2_id != 0; + } + + if ($mannschaften_vertauscht) { + $t = $spiel_heim_punkte; + $spiel_heim_punkte = $spiel_gast_punkte; + $spiel_gast_punkte = $t; + $ergebnis_detailliert = runden_detailliert_invers($ergebnis_detailliert); + + $t = $spiel_heim_spieler_1_id; + $spiel_heim_spieler_1_id = $spiel_gast_spieler_1_id; + $spiel_gast_spieler_1_id = $t; + + $t = $spiel_heim_spieler_2_id; + $spiel_heim_spieler_2_id = $spiel_gast_spieler_2_id; + $spiel_gast_spieler_2_id = $t; + } + + if ($zwischenergebnis && $begegnung->verlegen_aktionen != $anzahl_historie && isset($spiele_nummern[$spiel_nr])) { + $spiel = $spiele_nummern[$spiel_nr]; + if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { + $spiel_heim_punkte = $spiel->teamspiel_heim_punkte; + $spiel_gast_punkte = $spiel->teamspiel_gast_punkte; + } + if ($spiel_heim_spieler_1_id == 0) + $spiel_heim_spieler_1_id = $spiel->heim_spieler_1_id; + if ($spiel_gast_spieler_1_id == 0) + $spiel_gast_spieler_1_id = $spiel->gast_spieler_1_id; + $spieler_angegeben = $spiel_heim_spieler_1_id != 0 || $spiel_gast_spieler_1_id != 0; + if ((!empty($spieltyp) && $spieltyp[0] == "D")) { + if ($spiel_heim_spieler_2_id == 0) + $spiel_heim_spieler_2_id = $spiel->heim_spieler_2_id; + if ($spiel_gast_spieler_2_id == 0) + $spiel_gast_spieler_2_id = $spiel->gast_spieler_2_id; + if (!$spieler_angegeben) + $spieler_angegeben = $spiel_heim_spieler_2_id != 0 || $spiel_gast_spieler_2_id != 0; + } + } + } + + if ($skip_spiel || $spiel_heim_punkte != 0 || $spiel_gast_punkte != 0 || ($zwischenergebnis && $spieler_angegeben)) { + $total_heim_punkte += $spiel_heim_punkte; + $total_gast_punkte += $spiel_gast_punkte; + + if ($spieltyp[0] != "D") { + if ($spielpunkte_wertung_einzel == 2) { + $spiel_heim_spielpunkte = $spiel_heim_punkte; + $spiel_gast_spielpunkte = $spiel_gast_punkte; + } + else { + if ($spiel_heim_punkte > $spiel_gast_punkte) { + $spiel_heim_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); + $spiel_gast_spielpunkte = 0; + } + else if ($spiel_heim_punkte < $spiel_gast_punkte) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); + } + else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + else if ($spielpunkte_wertung != 3) { + $spiel_heim_spielpunkte = 1; + $spiel_gast_spielpunkte = 1; + } + else { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + } + } + else { + if ($spielpunkte_wertung_doppel == 2) { + $spiel_heim_spielpunkte = $spiel_heim_punkte; + $spiel_gast_spielpunkte = $spiel_gast_punkte; + } + else { + if ($spiel_heim_punkte > $spiel_gast_punkte) { + $spiel_heim_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); + $spiel_gast_spielpunkte = 0; + } + else if ($spiel_heim_punkte < $spiel_gast_punkte) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); + } + else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + else if ($spielpunkte_wertung_doppel != 3) { + $spiel_heim_spielpunkte = 1; + $spiel_gast_spielpunkte = 1; + } + else { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + } + } + + $total_heim_spielpunkte += $spiel_heim_spielpunkte; + $total_gast_spielpunkte += $spiel_gast_spielpunkte; + + if (!$skip_spiel) { + if (!isset($spiele_nummern[$spiel_nr])) { + $query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + } + else { + $teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id; + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET heim_spieler_1_id = '$spiel_heim_spieler_1_id'," + . "\n heim_spieler_2_id = " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . "," + . "\n gast_spieler_1_id = '$spiel_gast_spieler_1_id'," + . "\n gast_spieler_2_id = " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . "," + . "\n teamspiel_heim_punkte = '$spiel_heim_punkte'," + . "\n teamspiel_gast_punkte = '$spiel_gast_punkte'," + . "\n teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte'," + . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'," + . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") + . "\n WHERE teamspiel_id = $teamspiel_id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + + $spiel_nr++; + } + + } while (isset($spieltypen[$spiel_nr - 1]) && ($skip_spiel || $spiel_heim_punkte != 0 || $spiel_gast_punkte != 0 || ($zwischenergebnis && $spieler_angegeben))); + + $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id AND teamspiel_nummer >= $spiel_nr;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + if ($spiel_nr > 1) { + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET heim_punkte = '$total_heim_punkte'," + . "\n gast_punkte = '$total_gast_punkte'," + . "\n heim_spielpunkte = '$total_heim_spielpunkte'," + . "\n gast_spielpunkte = '$total_gast_spielpunkte'" + . "\n WHERE begegnung_id = $id"; + } + else { + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET heim_punkte = NULL," + . "\n gast_punkte = NULL," + . "\n heim_spielpunkte = NULL," + . "\n gast_spielpunkte = NULL" + . "\n WHERE begegnung_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + // Benachrichtigung schreiben + /* + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'twitter_benutzername' || name = 'twitter_kennwort' ORDER BY name"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + if (count($rows) != 2 || empty($rows[0]->wert) || empty($rows[1]->wert)) + $twitter_benutzername = ""; + else { + $twitter_benutzername = $rows[0]->wert; + $twitter_kennwort = $rows[1]->wert; + } + */ + +// if (!empty($twitter_benutzername) || $bestaetigen) { + if ($bestaetigen != 0) { + // Begegnung ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $begegnung_alt = $begegnung; + $begegnung = $rows[0]; + + // Heimteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + // Gastteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + } + + if ($bestaetigen != 0 && !$zwischenergebnis) { + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $subject = $heim_team->teamname . " vs. " . $gast_team->teamname . ": Ergebnis vorgeschlagen"; + $body = "Zur Begegnung " . $heim_team->teamname . " gegen " . $gast_team->teamname . " am " . FormatiertesDatum($begegnung->zeitpunkt) . " in der " . $veranstaltung->bezeichnung . " wurde von " . ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname) . " ein Ergebnis eingetragen.\n\nBestaetigen des Ergebnisses ueber " . SportsManagerURL('&task=admin_begegnung_spielplan_edit_bestaetigen&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1) . "."; + + $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + foreach ($rows as $row) { + JFactory::getMailer()->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + } + } + + /* + if (!empty($twitter_benutzername) + && ($begegnung_alt->zwischenergebnis != $begegnung->zwischenergebnis + || $begegnung_alt->heim_punkte != $begegnung->heim_punkte + || $begegnung_alt->gast_punkte != $begegnung->gast_punkte + || $begegnung_alt->heim_spielpunkte != $begegnung->heim_spielpunkte + || $begegnung_alt->gast_spielpunkte != $begegnung->gast_spielpunkte)) { + try { + $twitter = new Twitter($twitter_benutzername, $twitter_kennwort); + $status = $twitter->send(($zwischenergebnis ? "Live: " : "") . $veranstaltung->bezeichnung . " " . $heim_team->teamname . " vs. " . $gast_team->teamname . " " . $total_heim_spielpunkte . ":" . $total_gast_spielpunkte . " (" . $total_heim_punkte . ":" . $total_gast_punkte . ")"); + } + catch(TwitterException $e) { + } + + } + */ + + begegnungChanged($begegnung, $begegnung_alt, $modus, $heim_team, $gast_team, $spiele); + + if ($bestaetigen == 0) { + if ($veranstaltung->status != 0) { + wannGespieltAktualisieren(); + if ($veranstaltung->elo_wertung != 0) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + } + spielerstatistikAktualisieren(0, $veranstaltungid); + teamstatistikAktualisieren($veranstaltungid); + } + + if (isJson()) { + begegnungSpielplan(); + } else { + if ($erneut_oeffnen) { + redirectSportsManagerURL('&task=' . ($bestaetigen != 0 ? ($bestaetigen == 1 ? 'admin_begegnung_spielplan_edit_bestaetigen' : 'pineingabe') : 'admin_begegnung_spielplan_edit') . '&id=' . $id . '&veranstaltungid=' . $veranstaltungid . ($bestaetigen != 0 ? '_bestaetigen' : '') . '&veranstaltungid=' . $veranstaltungid . '&id=' . $id . '&erneut_oeffnen=1' . (!empty($encrypted_pin) ? ('&epin=' . $encrypted_pin) : "") . ($aus_uebersicht ? '&aus_uebersicht=1' : '')); + } + else if ($bestaetigen == 1) { + if ($aus_uebersicht) + redirectSportsManagerURL('#id' . $id); + else + redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungid . '#id' . $id); + } + else if ($bestaetigen == 2) { + if ($aus_uebersicht) + redirectSportsManagerURL(); + else + redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungid); + } + else { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid . '#id' . $id); + } + } +} + +function adminBegegnungSpielplanHeimtausch() { + $app = &JFactory::getApplication(); + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + $id = $jinput->get('id', 0, 'INT'); + $bestaetigen = $jinput->get('bestaetigen', 0, 'INT'); + $zwischenergebnis = $jinput->get('zwischenergebnis', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + $kommentar = $db->escape($jinput->get('kommentar', '', 'RAW')); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + $anzahl_historie = $jinput->get('anzahl_historie', 0, 'INT'); + $erneut_oeffnen = $jinput->get('erneut_oeffnen', 0, 'INT'); + $heim_team_id = $jinput->get('heim_team_id', 0, 'INT'); + $gast_team_id = $jinput->get('gast_team_id', 0, 'INT'); + + $benutzer_ist_moderator = benutzerZugriff("mannschaftswettbewerb_aendern") || benutzerVeranstaltungModerator($veranstaltungid); // Abfrage muss vor LOCK erfolgen, da sonst die Abfrage mangels Lock auf Moderator-Tabelle scheitert + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_veranstaltung WRITE, #__sportsmanager_teamspiel_modus WRITE, #__sportsmanager_unbestaetigtes_ergebnis WRITE, #__sportsmanager_berechtigt_fuer_team WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_begegnung_historie WRITE, #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," + . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id!"); + $begegnung = $rows[0]; + + $mannschaften_vertauscht = $begegnung->heim_team_id == $gast_team_id || $begegnung->gast_team_id == $heim_team_id; + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + // Sicherstellen, dass mindestens ein Team zu Veranstaltung gehört + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $begegnung->heim_team_id AND veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (count($teams) < 1) die ("Wrong id!"); + + // Spielmodus ermitteln + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $modus = $rows[0]; + + if ($bestaetigen == 1) { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) + keinZugriff(); + + $query = "SELECT #__sportsmanager_berechtigt_fuer_team.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + keinZugriff(); + $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; + } + else if ($bestaetigen == 2) { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) + keinZugriff(); + + $encrypted_pin = $db->escape($jinput->get('pin', '', 'RAW')); + $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungid . "oDS7" . $id . "2eA"); + if (empty($pin)) + keinZugriff(); + + $query = "SELECT team_id FROM #__sportsmanager_begegnung LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id OR gast_team_id = team_id WHERE begegnung_id = $id AND (team_id = $begegnung->heim_team_id OR team_id = $begegnung->gast_team_id) AND NOT ISNULL(pin) AND pin = '$pin'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) + keinZugriff(); + + $vorschlagendes_team_id = $rows[0]->team_id; + } + else { + if (!$benutzer_ist_moderator) + keinZugriff(); + } + + if (!$benutzer_ist_moderator && !$modus->heimtausch) + keinZugriff(); + + if (!$mannschaften_vertauscht) { + /* + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 9, NULL, '$user_id', " . ($bestaetigen != 0 ? "'$vorschlagendes_team_id'" : "NULL") . ", NULL, NULL, now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + */ + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET heim_team_id = (@temp_heim_team_id := heim_team_id), heim_team_id = gast_team_id," + . "\n gast_team_id = @temp_heim_team_id," + . "\n heim_punkte = (@temp_heim_punkte := heim_punkte), heim_punkte = gast_punkte," + . "\n gast_punkte = @temp_heim_punkte," + . "\n heim_spielpunkte = (@temp_heim_spielpunkte := heim_spielpunkte), heim_spielpunkte = gast_spielpunkte," + . "\n gast_spielpunkte = @temp_heim_spielpunkte" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET heim_spieler_1_id = (@temp_heim_spieler_1_id := heim_spieler_1_id), heim_spieler_1_id = gast_spieler_1_id," + . "\n gast_spieler_1_id = @temp_heim_spieler_1_id," + . "\n heim_spieler_2_id = (@temp_heim_spieler_2_id := heim_spieler_2_id), heim_spieler_2_id = gast_spieler_2_id," + . "\n gast_spieler_2_id = @temp_heim_spieler_2_id," + . "\n teamspiel_heim_punkte = (@temp_teamspiel_heim_punkte := teamspiel_heim_punkte), teamspiel_heim_punkte = teamspiel_gast_punkte," + . "\n teamspiel_gast_punkte = @temp_teamspiel_heim_punkte," + . "\n teamspiel_heim_spielpunkte = (@temp_teamspiel_heim_spielpunkte := teamspiel_heim_spielpunkte), teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte," + . "\n teamspiel_gast_spielpunkte = @temp_teamspiel_heim_spielpunkte" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + redirectSportsManagerURL('&task=' . ($bestaetigen != 0 ? ($bestaetigen == 1 ? 'admin_begegnung_spielplan_edit_bestaetigen' : 'pineingabe') : 'admin_begegnung_spielplan_edit') . '&id=' . $id . '&veranstaltungid=' . $veranstaltungid . ($bestaetigen != 0 ? '_bestaetigen' : '') . '&veranstaltungid=' . $veranstaltungid . '&id=' . $id . '&erneut_oeffnen=1' . (!empty($encrypted_pin) ? ('&epin=' . $encrypted_pin) : "") . ($aus_uebersicht ? '&aus_uebersicht=1' : '')); +} + +function adminBegegnungSpielplanBestaetigen() { + $app = &JFactory::getApplication(); + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $id = $jinput->get('id', 0, 'INT'); + $bestaetigen = $jinput->get('bestaetigen', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + + // Begegnung ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, unbestaetigtes_ergebnis_id, zwischenergebnis," + . " (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_begegnung.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + $aktualisieren_ab_datum = !empty($begegnung->zeitpunkt) ? substr($begegnung->zeitpunkt, 0, 10) : null; + + if ($bestaetigen == 2) { + $encrypted_pin = $db->escape($jinput->get('pin', '', 'RAW')); + $pin = decrypt($encrypted_pin, "a9cZ" . $veranstaltungid . "oDS7" . $id . "2eA"); + if (empty($pin)) { + keinZugriff(); + } + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { + keinZugriff(); + } + + $query = "SELECT t1.begegnung_id, t5.veranstaltung_id, IF(t2.pin = '$pin', heim_team_id, gast_team_id) AS aktion_team_id, IF(t2.pin = '$pin', gast_team_id, heim_team_id) AS anderes_team_id," + . "\n IF(t4.vorschlagendes_team_id = IF(t2.pin = '$pin', gast_team_id, heim_team_id), 1, 0) AS berechtigt_fuer_team_akzeptieren" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 " . kategorieFilter("AND t5.kategorie IN") . " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis OR NOT ISNULL(unbestaetigtes_ergebnis_id)) AND ((NOT ISNULL(t2.pin) AND t2.pin = '$pin') OR (NOT ISNULL(t3.pin) AND t3.pin = '$pin'))" + . "\n ORDER BY t1.zeitpunkt" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) == 0) { + keinZugriff(); + } + + if (!$rows[0]->berechtigt_fuer_team_akzeptieren) { + keinZugriff(); + } + + $aktion_team_id = $rows[0]->aktion_team_id; + } + else { + if ($begegnung->unbestaetigtes_ergebnis_id == null && ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0)) { + keinZugriff(); + } + + $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung AS t2 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis t3 ON t2.begegnung_id = t3.begegnung_id WHERE NOT t3.zwischenergebnis AND t2.begegnung_id = $id AND t1.berechtigt_user_id = $user_id AND ((t1.berechtigt_team_id = t2.heim_team_id AND t3.vorschlagendes_team_id = t2.gast_team_id) OR (t1.berechtigt_team_id = t2.gast_team_id AND t3.vorschlagendes_team_id = t2.heim_team_id))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) { + keinZugriff(); + } + + $aktion_team_id = $rows[0]->berechtigt_team_id; + } + + $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + /* + // Benachrichtigung schreiben + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'twitter_benutzername' || name = 'twitter_kennwort' ORDER BY name"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + if (count($rows) != 2 || empty($rows[0]->wert) || empty($rows[1]->wert)) + $twitter_benutzername = ""; + else { + $twitter_benutzername = $rows[0]->wert; + $twitter_kennwort = $rows[1]->wert; + } + */ + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 7, NULL, " . ($bestaetigen != 2 ? "'$user_id'" : "NULL") . ", '$aktion_team_id', NULL, NULL, now());"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + // Heimteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + // Gastteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + + if ($veranstaltung->status != 0) { + wannGespieltAktualisieren(); + if ($veranstaltung->elo_wertung != 0) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + } + spielerstatistikAktualisieren(0, $veranstaltungid); + teamstatistikAktualisieren($veranstaltungid); + + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $subject = $heim_team->teamname . " vs. " . $gast_team->teamname . ": Ergebnis akzeptiert"; + $body = "Zur Begegnung " . $heim_team->teamname . " gegen " . $gast_team->teamname . " am " . FormatiertesDatum($begegnung->zeitpunkt) . " in der " . $veranstaltung->bezeichnung . " wurde von " . ($aktion_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname) . " das Ergebnis akzeptiert."; + + $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + foreach ($rows as $row) { + JFactory::getMailer()->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + } + + /* + if (!empty($twitter_benutzername)) { + try { + $twitter = new Twitter($twitter_benutzername, $twitter_kennwort); + $status = $twitter->send($veranstaltung->bezeichnung . " " . $heim_team->teamname . " vs. " . $gast_team->teamname . " " . $begegnung->heim_spielpunkte . ":" . $begegnung->gast_spielpunkte . " (" . $begegnung->heim_punkte . ":" . $begegnung->gast_punkte . ")"); + } + catch(TwitterException $e) { + } + } + */ + if (isJson()) { +// adminEditBegegnungSpielplan(0); + begegnungSpielplan(false); + } else { + if ($aus_uebersicht) { + redirectSportsManagerURL('#id' . $id); + } + else { + redirectSportsManagerURL('&task=veranstaltung&veranstaltungid=' . $veranstaltungid . '#id' . $id); + } + } +} + +/* Generiert Gruppenspiele zu einer beliebigen geraden Anzahl Teams + * bei denen jedes Team genau einmal gegen jedes andere Team spielt, + * die Spiele an Anzahl Teams - 1 Spieltagen ausgetragen werden und + * jedes Team an jedem Tag genau ein Spiel austrägt + * + * Rückgabewert: Dreidimensionales Array mit Spieltag als erstem Index (1, ..., Anzahl Teams - 1), + * Spiel-Nr. als zweitem Index (1, ..., Anzahl Teams / 2) und als drittem Index 0 für das erste + * und 1 für das zweite Team, wobei jeweils die Teamnummer enthalten ist (1, ..., Anzahl Teams) + * + * (C) Sven Nickel 2006 + */ +function Gruppenspiele($anzahlteams) { + if ($anzahlteams % 2 == 1) { + die ("Gruppenspiele(): Eine ungerade Anzahl an Teams ist nicht zulässig!"); + exit; + } + + $b = 1; + for ($i = 1; $i < $anzahlteams; $i++) { + for ($j = $i + 1; $j <= $anzahlteams; $j++) { + $begegnungen[$b++] = array($i, $j); + } + } + + $rueckschritt = false; + for ($spieltag = 1; $spieltag < $anzahlteams;) { + for ($spielnr = 1; $spielnr <= $anzahlteams / 2;) { + // Nächste noch nicht eingetragene Begegnung ermitteln, in der + // keine Mannschaft am aktuellen Spieltag bereits spielt + for ($b = 1; $b <= ($anzahlteams - 1) * $anzahlteams / 2; $b++) { + if ($rueckschritt) { + if ($begegnungen[$b][0] != $spiele[$spieltag][$spielnr][0] || + $begegnungen[$b][1] != $spiele[$spieltag][$spielnr][1]) + continue; + $rueckschritt = false; + continue; + } + $nicht_zulaessig = false; + for ($i = 1; $i <= $spieltag && !$nicht_zulaessig; $i++) { + for ($j = 1; $j <= ($i != $spieltag ? $anzahlteams / 2 : $spielnr - 1) && !$nicht_zulaessig; $j++) { + if (($spiele[$i][$j][0] == $begegnungen[$b][0] && $spiele[$i][$j][1] == $begegnungen[$b][1]) || + ($spiele[$i][$j][0] == $begegnungen[$b][1] && $spiele[$i][$j][1] == $begegnungen[$b][0])) { + $nicht_zulaessig = true; + break; + } + if ($spielnr > 1 && $spieltag < $anzahlteams - 1) { + if (($spiele[$i][$j][0] == $spiele[$spieltag][$spielnr - 1][1] && $spiele[$i][$j][1] == $begegnungen[$b][0]) || + ($spiele[$i][$j][0] == $begegnungen[$b][0] && $spiele[$i][$j][1] == $spiele[$spieltag][$spielnr - 1][1])) { + $nicht_zulaessig = true; + break; + } + if ($spielnr == $anzahlteams / 2) { + if (($spiele[$i][$j][0] == $begegnungen[$b][1] && $spiele[$i][$j][1] == $spiele[$spieltag][1][0]) || + ($spiele[$i][$j][0] == $spiele[$spieltag][1][0] && $spiele[$i][$j][1] == $begegnungen[$b][1])) { + $nicht_zulaessig = true; + break; + } + } + } + if ($i == $spieltag) + if ($begegnungen[$b][0] == $spiele[$i][$j][0] || + $begegnungen[$b][0] == $spiele[$i][$j][1] || + $begegnungen[$b][1] == $spiele[$i][$j][0] || + $begegnungen[$b][1] == $spiele[$i][$j][1]) { + $nicht_zulaessig = true; + break; + } + } + } + if (!$nicht_zulaessig) + break; + } + if ($b <= ($anzahlteams - 1) * $anzahlteams / 2) { // Begegnung gefunden + $spiele[$spieltag][$spielnr][0] = $begegnungen[$b][0]; + $spiele[$spieltag][$spielnr][1] = $begegnungen[$b][1]; + if ($spieltag < ($anzahlteams - 1)) { + $spiele[$spieltag + 1][$spielnr == 1 ? $anzahlteams / 2 : $spielnr - 1][1] = $begegnungen[$b][0]; + $spiele[$spieltag + 1][$spielnr][0] = $begegnungen[$b][1]; + } + $spielnr++; + } + else { // Keine weitere Begegnung gefunden + // Rückschritt durchführen + if ($spielnr > 1) { + $spielnr--; + } + else { + $spielnr = $anzahlteams / 2; + $spieltag -= 2; + } + $rueckschritt = true; + } + } + $spieltag += 2; + } + + return $spiele; +} + +function adminBegegnungenGenerierenForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminBegegnungenGenerieren($veranstaltung, $rows); +} + +function adminBegegnungenGenerieren() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); + + return; + } + + $anzahlteams = $jinput->get('anzahlteams', 0, 'INT'); + if ($anzahlteams == 0) die("Wrong number of teams!"); + + $query = "SELECT t1.*" + . "\n FROM #__sportsmanager_team AS t1" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY t1.teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + for ($i = 1; $i <= $anzahlteams; $i++) { + $teamids[$i] = $jinput->get('team_id_' . $i, 0, 'INT'); + if ($teamids[$i] == 0) die("Wrong id!"); + } + + $spieltage = $anzahlteams % 2 != 0 ? $anzahlteams : $anzahlteams - 1; + $spieltag_basis = array(); + for ($i = 1; $i <= ($spieltage * 2); $i++) { + $jahr = $jinput->get('datum_jahr_' . $i, 0, 'INT'); + $kw = $jinput->get('datum_kw_' . $i, 0, 'INT'); + if ($jahr == 0 || $kw == 0) die("Wrong date!"); + $spieltag_basis[$i] = array(); + $spieltag_basis[$i]["jahr"] = $jahr; + $spieltag_basis[$i]["kw"] = $kw; + } + + $spiele = Gruppenspiele($anzahlteams % 2 != 0 ? $anzahlteams + 1 : $anzahlteams); + + for ($spieltag = 1; $spieltag <= $spieltage; $spieltag++) { + for ($spielnr = 1; $spielnr <= ($anzahlteams % 2 != 0 ? $anzahlteams + 1 : $anzahlteams) / 2; $spielnr++) { + if ($spiele[$spieltag][$spielnr][0] > $anzahlteams || $spiele[$spieltag][$spielnr][1] > $anzahlteams) + continue; + + $heim_team_id = $teamids[$spiele[$spieltag][$spielnr][0]]; + $gast_team_id = $teamids[$spiele[$spieltag][$spielnr][1]]; + + $heim_team = null; + foreach ($teams as $t) { + if ($t->team_id == $heim_team_id) { + $heim_team = $t; + break; + } + } + if ($heim_team == null) die("Team id not found!"); + + $gast_team = null; + foreach ($teams as $t) { + if ($t->team_id == $gast_team_id) { + $gast_team = $t; + break; + } + } + if ($gast_team == null) die("Team id not found!"); + + if ($heim_team->heimspiel_wochentag == 0) + $zeitpunkt = null; + else { + $ts = getdate(mondaykw($spieltag_basis[$spieltag]["kw"], $spieltag_basis[$spieltag]["jahr"], $heim_team->heimspiel_wochentag - 1)); + $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($heim_team->heimspiel_uhrzeit / 100), $heim_team->heimspiel_uhrzeit % 100); + } + + $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id)" + . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", '$spieltag', '$heim_team_id', '$gast_team_id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $weiterer_spieltag = $spieltag + $spieltage; + if ($gast_team->heimspiel_wochentag == 0) + $zeitpunkt = null; + else { + $ts = getdate(mondaykw($spieltag_basis[$weiterer_spieltag]["kw"], $spieltag_basis[$weiterer_spieltag]["jahr"], $gast_team->heimspiel_wochentag - 1)); + $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($gast_team->heimspiel_uhrzeit / 100), $gast_team->heimspiel_uhrzeit % 100); + } + + $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id)" + . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", '$weiterer_spieltag', '$gast_team_id', '$heim_team_id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); +} + +function adminBegegnungenRundeErzeugenForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT #__sportsmanager_begegnung.*" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON team_id = heim_team_id" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY zeitpunkt DESC LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $row = count($rows) < 1 ? null : $row = $rows[0]; // Falls keine Begegnung als Vorlage verfügbar + + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminBegegnungenRundeErzeugen($veranstaltung, $rows, $row, $spielorte); +} + +function adminBegegnungenRundeErzeugen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); + + return; + } + + $anzahlteams = $jinput->get('anzahlteams', 0, 'INT'); + if ($anzahlteams == 0) die("Wrong number of teams!"); + if ($jinput->get('datum_tag', 0, 'INT') >= 0) { + $datum = normalisiertesDatum($jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('datum_jahr', 0, 'INT'), $jinput->get('datum_monat', 0, 'INT'), $jinput->get('datum_tag', 0, 'INT'))); + $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jinput->get('uhrzeit_stunden', 0, 'INT'), $jinput->get('uhrzeit_minuten', 0, 'INT'))); + $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); + $datum_kw = 0; + } + else { + $datum_jahr = $jinput->get('datum_jahr', 0, 'INT'); + $datum_kw = abs($jinput->get('datum_tag', 0, 'INT')); + } + $rundentyp = $jinput->get('rundentyp', -1, 'INT'); + $runde = max(min(abs($jinput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); + $platzierung_ende = max(min(abs($jinput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); + + if ($rundentyp >= 10000) + $runde = $rundentyp; + else if ($rundentyp == -2) + $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); + else if ($rundentyp == 0) + $runde = 0; + + $query = "SELECT t1.*" + . "\n FROM #__sportsmanager_team AS t1" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY t1.teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + for ($i = 1; $i <= $anzahlteams; $i++) + $teamids[$i] = $jinput->get('team_id_' . $i, 0, 'INT'); + + $spielort_ids = array(); + for ($i = 1; $i <= $anzahlteams; $i += 2) + $spielort_ids[$i] = $jinput->get('spielort_id_' . $i, 0, 'INT'); + + for ($teamnr = 1; $teamnr < $anzahlteams; $teamnr += 2) { + $heim_team_id = $teamids[$teamnr]; + $gast_team_id = $teamids[$teamnr + 1]; + + if ($heim_team_id == 0 || $gast_team_id == 0) + continue; + + $heim_team = null; + foreach ($teams as $t) { + if ($t->team_id == $heim_team_id) { + $heim_team = $t; + break; + } + } + if ($heim_team == null) die("Team id not found!"); + + $gast_team = null; + foreach ($teams as $t) { + if ($t->team_id == $gast_team_id) { + $gast_team = $t; + break; + } + } + if ($gast_team == null) die("Team id not found!"); + + if ($datum_kw != null) { + if ($heim_team->heimspiel_wochentag == 0) + $zeitpunkt = null; + else { + $ts = getdate(mondaykw($datum_kw, $datum_jahr, $heim_team->heimspiel_wochentag - 1)); + $zeitpunkt = sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], floor($heim_team->heimspiel_uhrzeit / 100), $heim_team->heimspiel_uhrzeit % 100); + } + } + + $query = "INSERT INTO #__sportsmanager_begegnung (zeitpunkt, spieltag, heim_team_id, gast_team_id, spielort_id)" + . "\n VALUES (" . ($zeitpunkt != null ? "'$zeitpunkt'" : "NULL") . ", " . ($runde != null ? "'$runde'" : "NULL") . ", '$heim_team_id', '$gast_team_id', " . ($spielort_ids[$teamnr] != 0 ? "'$spielort_ids[$teamnr]'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); +} + +function adminBegegnungenAlleEntfernen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) die("Missing id!"); + + if (!benutzerZugriff("mannschaftswettbewerb_aendern") && !benutzerVeranstaltungModerator($veranstaltungid)) + keinZugriff(); + + $query = "LOCK TABLES #__sportsmanager_begegnung WRITE, #__sportsmanager_begegnung_historie WRITE, #__sportsmanager_unbestaetigtes_ergebnis WRITE, #__sportsmanager_teamspiel WRITE, #__sportsmanager_veranstaltung READ, #__sportsmanager_team READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $veranstaltung = $rows[0]; + + $query = "SELECT MIN(DATE(zeitpunkt))" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktualisieren_ab_datum = $db->loadResult(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $id = $row->begegnung_id; + + $query = "DELETE FROM #__sportsmanager_begegnung_historie WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_unbestaetigtes_ergebnis WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_teamspiel WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_begegnung WHERE begegnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($veranstaltung->status != 0 && $veranstaltung->elo_wertung != 0) { + wannGespieltAktualisieren(); + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + + redirectSportsManagerURL('&task=admin_begegnungen&veranstaltungid=' . $veranstaltungid); +} + +function adminEditTurnier() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == null) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + $vorlage = $jinput->get('vorlage', 0, 'INT'); + + $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (empty($id)) { + $berechtigt_fuer_turnier = array(); + } + else { + $query = "SELECT #__sportsmanager_berechtigt_fuer_turnier.* FROM #__sportsmanager_berechtigt_fuer_turnier, #__users WHERE berechtigt_user_id = id AND berechtigt_turnier_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_turnier = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 3 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + HTML_sportsmanager_admin::adminEditTurnier($row, $veranstalter, $saisons, $vorlage, $users, $berechtigt_fuer_turnier, $kategorien); +} + +function adminSaveTurnier() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_uebersicht'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $turnierbezeichnung = $db->escape(trim($jinput->get('turnierbezeichnung', '', 'RAW'))); + $saison_id = $jinput->get('saison_id', 0, 'INT'); + $turnierort = $db->escape(trim($jinput->get('turnierort', '', 'RAW'))); + $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('erster_tag_jahr', 2000, 'INT'), $jinput->get('erster_tag_monat', 1, 'INT'), $jinput->get('erster_tag_tag', 1, 'INT'))); + $mehrtaegig = $jinput->get('mehrtaegig', 0, 'INT'); + if (!$mehrtaegig) + $letzter_tag = $erster_tag; + else + $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('letzter_tag_jahr', 2000, 'INT'), $jinput->get('letzter_tag_monat', 1, 'INT'), $jinput->get('letzter_tag_tag', 1, 'INT'))); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + $vorlage = $jinput->get('vorlage', 0, 'INT'); + $berechtigt_fuer_turnier_user_ids = array(); + for ($i = 1; $i <= 6; $i++) { + $berechtigt_user_id = $jinput->get('berechtigt_fuer_turnier_user_' . $i . '_id', 0, 'INT'); + if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_turnier_user_ids)) + array_push($berechtigt_fuer_turnier_user_ids, $berechtigt_user_id); + } + + $query = "LOCK TABLES #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turnier WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE, #__sportsmanager_turnier_rundenstufe WRITE, #__sportsmanager_berechtigt_fuer_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($vorlage) { + $vorlage_id = $id; + $id = 0; + $query = "SELECT erster_tag FROM #__sportsmanager_turnier WHERE turnier_id = $vorlage_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $vorlage_erster_tag = $rows[0]->erster_tag; + } + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_turnier (veranstalter_id, turnierbezeichnung, saison_id, turnierort, erster_tag" . ($letzter_tag != null ? ", letzter_tag" : "") . ", kategorie) VALUES ('$veranstalterid', '$turnierbezeichnung', '$saison_id', '$turnierort', '$erster_tag'" . ($letzter_tag != null ? ", '$letzter_tag'" : "") . ", '$kategorie');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_turnier" + . "\n SET veranstalter_id = '$veranstalterid'," + . "\n turnierbezeichnung = '$turnierbezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n turnierort = '$turnierort'," + . "\n erster_tag = '$erster_tag'," + . "\n letzter_tag = " . ($letzter_tag != null ? "'$letzter_tag'" : "NULL") . "," + . "\n kategorie = '$kategorie'" + . "\n WHERE turnier_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; + if (!empty($berechtigt_fuer_turnier_user_ids)) + $query .= " AND berechtigt_user_id NOT IN (" . implode($berechtigt_fuer_turnier_user_ids, ", ") . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_turnier_user_ids); + if ($index !== false) { + unset($berechtigt_fuer_turnier_user_ids[$index]); + } + } + + foreach ($berechtigt_fuer_turnier_user_ids as $berechtigt_user_id) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_turnier (berechtigt_user_id, berechtigt_turnier_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($vorlage) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE turnier_id = $vorlage_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplinen = $db->loadObjectList(); + + foreach ($disziplinen as $disziplin) { + $ts = getdate(strtotime($erster_tag) - strtotime($vorlage_erster_tag) + strtotime($disziplin->beginn)); + $neuer_beginn = $disziplin->beginn == null ? null : sprintf("%04d-%02d-%02d %02d:%02d", $ts["year"], $ts["mon"], $ts["mday"], $ts["hours"], $ts["minutes"]); + + $query = "INSERT INTO #__sportsmanager_turnierdisziplin (turnier_id, disziplin, kuerzel, beginn, typ, elo_wertung, voranmeldung, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, reihenfolge, status)" + . "\n VALUES ('$id', '" . $db->escape($disziplin->disziplin) . "', '" . $db->escape($disziplin->kuerzel) . "', " . ($neuer_beginn == null ? "NULL" : "'$neuer_beginn'") . ", '$disziplin->typ', '$disziplin->elo_wertung', " . ($disziplin->voranmeldung == null ? "NULL" : ("'" . $disziplin->voranmeldung . "'")) . ", " . ($disziplin->voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $disziplin->voranmeldungen_rangliste_id . "'")) . ", '$disziplin->voranmeldungen_reihenfolge', '$disziplin->reihenfolge', '$disziplin->status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplin_id = $db->insertid(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + foreach ($ranglisten as $rangliste) { + $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung) VALUES ('$rangliste->rangliste_id', '$disziplin_id', " . ($rangliste->system_id != null ? "'$rangliste->system_id'" : "NULL") . ", '" . $db->escape($rangliste->wertung) . "', '" . $db->escape($rangliste->doppel_teilwertung) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminRemoveTurnier() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turnier WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE, #__sportsmanager_turnier_rundenstufe WRITE, #__sportsmanager_berechtigt_fuer_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnier_id = $id AND elo_wertung > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $elo_aktualisieren = $db->loadResult(); + + $query = "SELECT MIN(DATE(beginn))" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE turnier_id = $id AND elo_wertung > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktualisieren_ab_datum = $db->loadResult(); + + $query = "DELETE #__sportsmanager_turnierspiel FROM #__sportsmanager_turnierspiel, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turnierspiel.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung FROM #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_rangliste_turnierdisziplin FROM #__sportsmanager_rangliste_turnierdisziplin, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_rangliste_turnierdisziplin.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turnier_rundenstufe FROM #__sportsmanager_turnier_rundenstufe, #__sportsmanager_turnierdisziplin WHERE #__sportsmanager_turnier_rundenstufe.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnierdisziplin WHERE turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_turnier_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnier WHERE turnier_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminTurnierdisziplinen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $turnierid = $jinput->get('turnierid', 0, 'INT'); + if ($turnierid == 0) die("Missing id!"); + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierid)) + keinZugriff(true); + + $beschraenkter_zugriff_turniere = benutzerZugriff("turniere_aendern") ? 0 : 1; + + $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $turnierid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnier = $rows[0]; + + $query = "SELECT t1.*," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id AND rundenstufe = 20) AS voranmeldungen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id AND rundenstufe = 0) AS meldungen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_turnierspiel AS t2 WHERE t1.turnierdisziplin_id = t2.turnierdisziplin_id) AS spiele" + . "\n FROM #__sportsmanager_turnierdisziplin AS t1" + . "\n WHERE turnier_id = $turnierid" + . "\n ORDER BY reihenfolge, disziplin, beginn"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTurnierdisziplinen($turnier, $rows, $beschraenkter_zugriff_turniere); +} + +function adminEditTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $turnierid = $jinput->get('turnierid', 0, 'INT'); + if ($turnierid == 0) die("Missing id!"); + + if ($id == null) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_turnier WHERE turnier_id = $turnierid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnier = $rows[0]; + + // Ranglisten ermitteln + if ($id == 0) { + $query = "SELECT #__sportsmanager_rangliste.rangliste_id, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + } + else { + $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, turnierdisziplin_id, ranglisten.system_id, wertung, doppel_teilwertung, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $id) AS ranglisten USING (rangliste_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + if ($id == 0) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste_system" + . "\n WHERE status != 0" + . "\n ORDER BY systembezeichnung"; + } + else { + $query = "SELECT DISTINCT rangliste_system_id, #__sportsmanager_rangliste_system.*" + . "\n FROM #__sportsmanager_rangliste_system" + . "\n LEFT JOIN #__sportsmanager_rangliste_turnierdisziplin ON turnierdisziplin_id = $id AND system_id = rangliste_system_id" + . "\n WHERE status != 0 OR NOT ISNULL(turnierdisziplin_id)" + . "\n ORDER BY systembezeichnung"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systeme = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditTurnierdisziplin($turnier, $row, $ranglisten, $systeme); +} + +function adminSaveTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $turnierid = $jinput->get('turnierid', 0, 'INT'); + if ($turnierid == 0) die("Missing id!"); + $disziplin = $db->escape(trim($jinput->get('disziplin', '', 'RAW'))); + $kuerzel = $db->escape(trim($jinput->get('kuerzel', '', 'RAW'))); + $datum = normalisiertesDatum($jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('datum_jahr', 0, 'INT'), $jinput->get('datum_monat', 0, 'INT'), $jinput->get('datum_tag', 0, 'INT'))); + $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jinput->get('uhrzeit_stunden', 0, 'INT'), $jinput->get('uhrzeit_minuten', 0, 'INT'))); + $beginn = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); + $reihenfolge = $jinput->get('reihenfolge', 0, 'INT'); + $aktualisieren_ab_datum = $datum; + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierid); + + return; + } + + $typ = $jinput->get('typ', 0, 'INT'); + $elo_wertung = $jinput->get('elo_wertung', 0, 'INT'); + $voranmeldung_datum = normalisiertesDatum($jinput->get('voranmeldung_datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('voranmeldung_datum_jahr', 0, 'INT'), $jinput->get('voranmeldung_datum_monat', 0, 'INT'), $jinput->get('voranmeldung_datum_tag', 0, 'INT'))); + $voranmeldung_uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jinput->get('voranmeldung_uhrzeit_stunden', 0, 'INT'), $jinput->get('voranmeldung_uhrzeit_minuten', 0, 'INT'))); + $voranmeldung = $voranmeldung_datum == null || $voranmeldung_uhrzeit == null ? null : ($voranmeldung_datum . " " . $voranmeldung_uhrzeit); + $status = $jinput->get('status', 0, 'INT'); + $voranmeldungen_rangliste_id = $jinput->get('voranmeldungen_rangliste_id', 0, 'INT'); + $voranmeldungen_reihenfolge = $jinput->get('voranmeldungen_reihenfolge', 0, 'INT'); + + $i = 0; + $rangliste_id = $jinput->get('rangliste_id_' . $i, 0, 'INT'); + $rangliste_system_id = $jinput->get('rangliste_system_id_' . $i, 0, 'INT'); + $rangliste_wertung = $jinput->get('rangliste_wertung_' . $i, 0, 'RAW'); + $rangliste_doppel_teilwertung = $jinput->get('doppel_teilwertung_' . $i, 0, 'RAW'); + $ranglisten_beruecksichtigt = array(); + $ranglisten_beruecksichtigt_system_id = array(); + $ranglisten_beruecksichtigt_wertung = array(); + $ranglisten_beruecksichtigt_doppel_teilwertung = array(); + while ($rangliste_id != 0 && !in_array($rangliste_id, $ranglisten_beruecksichtigt)) { + array_push($ranglisten_beruecksichtigt, $rangliste_id); + array_push($ranglisten_beruecksichtigt_system_id, $rangliste_system_id); + array_push($ranglisten_beruecksichtigt_wertung, $rangliste_wertung); + array_push($ranglisten_beruecksichtigt_doppel_teilwertung, $rangliste_doppel_teilwertung); + $i++; + $rangliste_id = $jinput->get('rangliste_id_' . $i, 0, 'INT'); + $rangliste_system_id = $jinput->get('rangliste_system_id_' . $i, 0, 'INT'); + $rangliste_wertung = $jinput->get('rangliste_wertung_' . $i, 0, 'RAW'); + $rangliste_doppel_teilwertung = $jinput->get('doppel_teilwertung_' . $i, 0, 'RAW'); + } + + $query = "LOCK TABLES #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE, #__sportsmanager_rangliste READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($id == 0) { + $aktualisieren = false; + $query = "INSERT INTO #__sportsmanager_turnierdisziplin (turnier_id, disziplin, kuerzel, beginn, typ, elo_wertung, voranmeldung, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, reihenfolge, status)" + . "\n VALUES ('$turnierid', '$disziplin', '$kuerzel', '$beginn', '$typ', '$elo_wertung', " . ($voranmeldung == null ? "NULL" : ("'" . $voranmeldung . "'")) . ", " . ($voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $voranmeldungen_rangliste_id . "'")) . ", '$voranmeldungen_reihenfolge', '$reihenfolge', '$status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $aktualisieren = true; + $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + $elo_aktualisieren = $row->elo_wertung || $elo_wertung; + + if ($row->typ != $typ) { + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__sportsmanager_turnierdisziplin" + . "\n SET turnier_id = '$turnierid'," + . "\n disziplin = '$disziplin'," + . "\n kuerzel = '$kuerzel'," + . "\n beginn = " . ($beginn == null ? "NULL" : ("'" . $beginn . "'")) . "," + . "\n typ = '$typ'," + . "\n elo_wertung = '$elo_wertung'," + . "\n voranmeldung = " . ($voranmeldung == null ? "NULL" : ("'" . $voranmeldung . "'")) . "," + . "\n voranmeldungen_rangliste_id = " . ($voranmeldungen_rangliste_id == 0 ? "NULL" : ("'" . $voranmeldungen_rangliste_id . "'")) . "," + . "\n voranmeldungen_reihenfolge = '$voranmeldungen_reihenfolge'," + . "\n reihenfolge = '$reihenfolge'," + . "\n status = '$status'" + . "\n WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + // Berücksichtige Ranglisten prüfen und ggf. aktualisieren + $query = "SELECT rangliste_id, system_id, wertung, doppel_teilwertung" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bestehende_ranglisten_beruecksichtigt = $db->loadObjectList(); + + foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { + $ist_beruecksichtigt = false; + foreach ($ranglisten_beruecksichtigt as $rangliste_id) { + if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { + $ist_beruecksichtigt = true; + break; + } + } + if (!$ist_beruecksichtigt) { + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE rangliste_id = $bestehende_rangliste_beruecksichtigt->rangliste_id AND turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + foreach ($ranglisten_beruecksichtigt as $index => $rangliste_id) { + $ist_beruecksichtigt = false; + foreach ($bestehende_ranglisten_beruecksichtigt as $bestehende_rangliste_beruecksichtigt) { + if ($bestehende_rangliste_beruecksichtigt->rangliste_id == $rangliste_id) { + $ist_beruecksichtigt = true; + $bestehende_rangliste_system_id = $bestehende_rangliste_beruecksichtigt->system_id; + $bestehende_rangliste_wertung = $bestehende_rangliste_beruecksichtigt->wertung; + $bestehende_rangliste_doppel_teilwertung = $bestehende_rangliste_beruecksichtigt->doppel_teilwertung; + break; + } + } + $system_id = $ranglisten_beruecksichtigt_system_id[$index]; + $wertung = $ranglisten_beruecksichtigt_wertung[$index]; + $doppel_teilwertung = $ranglisten_beruecksichtigt_doppel_teilwertung[$index]; + if (!$ist_beruecksichtigt) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n > 0) { + $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin (rangliste_id, turnierdisziplin_id, system_id, wertung, doppel_teilwertung) VALUES ('$rangliste_id', '$id', " . ($system_id != 0 ? "'$system_id'" : "NULL") . ", '" . $db->escape($wertung) . "', '" . $db->escape($doppel_teilwertung) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else if ($system_id != $bestehende_rangliste_system_id || $wertung != $bestehende_rangliste_wertung || $doppel_teilwertung != $bestehende_rangliste_doppel_teilwertung) { + $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET system_id = " . ($system_id != 0 ? "'$system_id'" : "NULL") . "," + . "\n wertung = '" . $db->escape($wertung) . "'," + . "\n doppel_teilwertung = '" . $db->escape($doppel_teilwertung) . "'" + . "\n WHERE rangliste_id = $rangliste_id AND turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($aktualisieren) { + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(0, $id); + einstufungAktualisieren(); + } + + redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierid); +} + +function adminRemoveTurnierdisziplin() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) die("Missing id!"); + $turnierid = $jinput->get('turnierid', 0, 'INT'); + if ($turnierid == 0) die("Missing id!"); + + $query = "LOCK TABLES #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_rangliste_turnierdisziplin WRITE, #__sportsmanager_turnier_rundenstufe WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + $elo_aktualisieren = $row->elo_wertung; + $aktualisieren_ab_datum = !empty($row->beginn) ? substr($row->beginn, 0, 10) : null; + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_turnierdisziplinen&turnierid=' . $turnierid); +} + +function adminExportTurniervoranmeldungenForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + if ($turnierdisziplinid == 0) die ("Wrong id!"); + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, typ, turnierbezeichnung, turnierort, beginn, voranmeldungen_rangliste_id, voranmeldungen_reihenfolge, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + /* + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE status > 0 AND erster_tag <= CURDATE() AND letzter_tag >= CURDATE()" + . "\n ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $ranglisten_aktuell = $db->loadObjectList(); + */ + + $query = "SELECT DISTINCT #__sportsmanager_rangliste.rangliste_id, turnierdisziplin_id, ranglisten.system_id, wertung, bezeichnung, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n LEFT JOIN (SELECT rangliste_id, turnierdisziplin_id, system_id, wertung FROM #__sportsmanager_rangliste_turnierdisziplin WHERE turnierdisziplin_id = $turnierdisziplinid) AS ranglisten USING (rangliste_id)" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminExportTurniervoranmeldungen($turnierdisziplin, $ranglisten); +} + +function adminExportTurniervoranmeldungen() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $ranglisteid = $jinput->get('ranglisteid', 0, 'INT'); + $sortierung = $jinput->get('sortierung', 0, 'INT'); + $format = $jinput->get('format', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); + + return; + } + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, beginn, typ FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(); + + if ($turnierdisziplin->typ == 0) { + $query = "SELECT *" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Nachname" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Vorname" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Spielernr" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Verein"; + if ($format != 0) + $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Geschlecht"; + if ($ranglisteid != 0) + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0) AS Punkte"; + $query .= "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '20'" + . "\n ORDER BY " . ($ranglisteid != 0 ? "Punkte DESC, " : "") . "Nachname, Vorname"; + } + else { + $query = "SELECT (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Nachname1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Vorname1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Spielernr1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Verein1"; + if ($format != 0) + $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS Geschlecht1"; + if ($ranglisteid != 0) + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0) AS Punkte1"; + $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Nachname2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Vorname2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), '', #__sportsmanager_spieler.spielernr) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Spielernr2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Verein2"; + if ($format != 0) + $query .= ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 'M', #__sportsmanager_spieler.geschlecht) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS Geschlecht2"; + if ($ranglisteid != 0) { + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0) AS Punkte2"; + if ($sortierung == 0) { + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0)" + . "+ COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0) AS Summe"; + } + else { + $query .= ", GREATEST(COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1), 0)" + . ", COALESCE((SELECT punkte FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_rangliste_punkte ON #__sportsmanager_rangliste_punkte.rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_turniermeldung_spieler.spieler_id WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1), 0)) AS Maximum"; + } + } + $query .= "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '20'" + . "\n ORDER BY " . ($ranglisteid != 0 ? ($sortierung == 0 ? "Summe DESC, " : "Maximum DESC, ") : "") . "Nachname1, Vorname1"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $voranmeldungen = $db->loadObjectList(); + + /* + if ($turnierdisziplin->typ == 0) { + $query = "SELECT t1.nachname as Nachname, t1.vorname as Vorname, t1.spielernr as Spielernr" + . ", COALESCE((SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = spieler_1_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1), 'Keiner') AS Verein"; + if ($format != 0) + $query .= ", t1.geschlecht as Geschlecht"; + if ($ranglisteid != 0) + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_1_id), 0) AS Punkte"; + } + else { + $query = "SELECT t1.nachname as Nachname1, t1.vorname as Vorname1, t1.spielernr as Spielernr1" + . ", COALESCE((SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = spieler_1_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1), 'Keiner') AS Verein1"; + if ($format != 0) + $query .= ", t1.geschlecht as Geschlecht1"; + if ($ranglisteid != 0) + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_1_id), 0) AS Punkte1"; + $query .= ", t2.nachname as Nachname2, t2.vorname as Vorname2, t2.spielernr as Spielernr2" + . ", COALESCE((SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = spieler_2_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1), 'Keiner') AS Verein2"; + if ($format != 0) + $query .= ", t2.geschlecht as Geschlecht2"; + if ($ranglisteid != 0) + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_2_id), 0) AS Punkte2"; + if ($ranglisteid != 0) { + $query .= ", GREATEST(COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_1_id), 0), COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_2_id), 0)) AS Maximum"; + $query .= ", COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_1_id), 0) + COALESCE((SELECT punkte FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $ranglisteid AND #__sportsmanager_rangliste_punkte.spieler_id = spieler_2_id), 0) AS Summe"; + } + } + $query .= "\n FROM #__sportsmanager_turniervoranmeldung" + . "\n LEFT JOIN #__sportsmanager_spieler AS t1 ON t1.spieler_id = spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS t2 ON t2.spieler_id = spieler_2_id" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid" + . "\n ORDER BY " . ($ranglisteid != 0 ? ($turnierdisziplin->typ == 0 ? "Punkte DESC, " : ($sortierung == 0 ? "Summe DESC, " : "Maximum DESC, ")) : "") . "t1.nachname, t1.vorname"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $voranmeldungen = $db->loadObjectList(); +*/ + $dateiname = 'Voranmeldungen ' . $turnierdisziplin->turnierbezeichnung . ' - ' . $turnierdisziplin->disziplin . '.csv'; + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + Header("Content-Type: text/x-csv"); + Header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + Header('Content-Disposition: attachment; filename="' . $dateiname . '"'); + Header("Pragma: no-cache"); + + if ($format == 0) { + $trennzeichen = "\t"; + + $header = ""; + foreach ($voranmeldungen[0] as $field => $value) + $header .= $field . $trennzeichen; + + $data = ""; + foreach ($voranmeldungen as $row) { + $line = ''; + foreach ($row as $value) { + if ((!isset($value)) OR ($value == "")) { + $value = $trennzeichen; + } + else { + $value = str_replace('"', '""', $value); + $value = str_replace("\t", ' ', $value); + $value = str_replace("\r", '', $value); + $value = str_replace("\n", ' ', $value); + $value = '"' . $value . '"' . $trennzeichen; + } + $line .= $value; + } + $data .= trim($line) . "\n"; + } + $data = str_replace("\r", "", $data); + + echo "sep=" . $trennzeichen . "\n" . $header . "\n" . $data; + } + else { + $gesetzt = ($format - 1) * 4; + if ($turnierdisziplin->typ == 0) { + echo "1\r\n"; + echo "NAME1#VORNAME1#GESCHLECHT1#VEREIN1#PSEUDONYM#SETZPOSITION\r\n"; + } + else { + echo "2\r\n"; + echo "NAME1#VORNAME1#GESCHLECHT1#VEREIN1#NAME2#VORNAME2#GESCHLECHT2#VEREIN2#PSEUDONYM#SETZPOSITION\r\n"; + } + + $platz = 1; + $punkte = 0; + $tatsaechlicher_platz = 0; + foreach ($voranmeldungen as $row) { + $row_punkte = $ranglisteid != 0 ? ($turnierdisziplin->typ == 0 ? $row->Punkte : ($sortierung == 0 ? $row->Summe : $row->Maximum)) : 0; + if ($row_punkte != $punkte) { + $tatsaechlicher_platz = $platz; + $punkte = $row_punkte; + } + if ($turnierdisziplin->typ == 0) { + echo utf8_decode(str_replace("#", ' ', $row->Nachname) + . "#" . str_replace("#", ' ', $row->Vorname) + . "#" . ($row->Geschlecht == "M" ? "M" : "F") + . "#" . str_replace("#", ' ', $row->Verein) + . "#" + . "#" . ($gesetzt != 0 && $tatsaechlicher_platz <= $gesetzt ? $tatsaechlicher_platz : "0") . "\r\n"); + } + else { + echo utf8_decode(str_replace("#", ' ', $row->Nachname1) + . "#" . str_replace("#", ' ', $row->Vorname1) + . "#" . ($row->Geschlecht1 == "M" ? "M" : "F") + . "#" . str_replace("#", ' ', $row->Verein1) + . "#" . str_replace("#", ' ', $row->Nachname2) + . "#" . str_replace("#", ' ', $row->Vorname2) + . "#" . ($row->Geschlecht2 == "M" ? "M" : "F") + . "#" . str_replace("#", ' ', $row->Verein2) + . "#" + . "#" . ($gesetzt != 0 && $tatsaechlicher_platz <= $gesetzt ? $tatsaechlicher_platz : "0") . "\r\n"); + } + $platz++; + } + } + + die(); +} + +function adminTurnierdisziplinMeldungenSpiele() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + if ($turnierdisziplinid == 0) die ("Wrong id!"); + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, typ, turnier_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + $disziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) + keinZugriff(true); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $turnierdisziplinid AND platz > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $platzierung_anzeigen = $db->loadResult() > 0; + + $meldungen = array(); + $meldungenSpielerNamen = array(); + foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { + /* Abfrage war erheblich zu langsam bei großem Bestand + $query = "SELECT *" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY platz, name1, name2"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $meldungen[$rundenstufe] = $db->loadObjectList(); + + foreach ($meldungen[$rundenstufe] as $meldung) { + $meldungenSpielerNamen[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? NichtLeererString($meldung->verknuepft1 ? $meldung->name1 : hervorheben($meldung->name1)) : StringsZusammenfassen($meldung->verknuepft1 ? $meldung->name1 : hervorheben($meldung->name1), $meldung->verknuepft2 ? $meldung->name2 : hervorheben($meldung->name2)); + } + */ + + $query = "SELECT platz, turniermeldung_id" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY platz, turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen[$rundenstufe] = $db->loadObjectList(); + } + + $query = "SELECT turniermeldung_id, spieler_id, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid" + . "\n ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + foreach ($meldungenSpieler as $s) { + $spielername = $s->spieler_id == null ? hervorheben($s->nachname . ", " . $s->vorname) : ($s->nachname . ", " . $s->vorname); + if (empty($meldungenSpielerNamen[$s->turniermeldung_id])) + $meldungenSpielerNamen[$s->turniermeldung_id] = $spielername; + else + $meldungenSpielerNamen[$s->turniermeldung_id] = StringsZusammenfassen($meldungenSpielerNamen[$s->turniermeldung_id], $spielername); + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier_rundenstufe" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $rundenstufen_details = array(); + foreach ($rows as $row) { + $rundenstufen_details[$row->rundenstufe] = $row; + } + + $spiele = array(); + foreach (array(1, 2, 3, 10) as $rundenstufe) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY runde DESC, spiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele[$rundenstufe] = $db->loadObjectList(); + } + + HTML_sportsmanager_admin::adminTurnierdisziplinMeldungenSpiele($disziplin, $rundenstufen_details, $meldungen, $meldungenSpielerNamen, $spiele, $platzierung_anzeigen); +} + +function adminTurnierdisziplinMeldungenSpieleAlleEntfernen() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $id = $jinput->get('turnierdisziplinid', 0, 'INT'); + $veranstalter_id = $jinput->get('veranstalterid', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); + + return; + } + + // Sicherstellen, dass Turnierdisziplin zum Turnier gehört + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (benutzerZugriff("turniere_aendern")) + $zugriffsebene = 2; + else if (benutzerTurnierModerator($turnierdisziplin->turnier_id)) + $zugriffsebene = 1; + else + keinZugriff(); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_turnier READ, #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_spieler WRITE, #__sportsmanager_mitglied_von_verein READ, #__sportsmanager_verein READ, #__sportsmanager_turnier_rundenstufe WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + $elo_aktualisieren = $turnierdisziplin->elo_wertung; + $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(0, $id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); +} + +function adminImportTurnierdisziplinMeldungenSpieleForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + if (benutzerZugriff("turniere_aendern")) + $zugriffsebene = 2; + else if (benutzerTurnierModerator($row->turnier_id)) + $zugriffsebene = 1; + else + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminImportTurnierdisziplinMeldungenSpieleForm($row, $veranstalter, $zugriffsebene); +} + +function adminImportTurnierdisziplinMeldungenSpiele() { + $db =& getDatabase(); + global $_FILES; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $id = $jinput->get('turnierdisziplinid', 0, 'INT'); + $veranstalter_id = $jinput->get('veranstalterid', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); + + return; + } + + // Sicherstellen, dass Turnierdisziplin zum Turnier gehört + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (benutzerZugriff("turniere_aendern")) + $zugriffsebene = 2; + else if (benutzerTurnierModerator($turnierdisziplin->turnier_id)) + $zugriffsebene = 1; + else + keinZugriff(); + + if ($zugriffsebene == 2 && $veranstalter_id != 0) + $wertungsbedingung = "(SELECT COUNT(*) FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_verein USING (verein_id) WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND veranstalter_id = $veranstalter_id) > 0 AND "; + else + $wertungsbedingung = "NOT ISNULL(aktueller_verein_id) AND "; + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin WRITE, #__sportsmanager_turnier READ, #__sportsmanager_turnierspiel WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_spieler WRITE, #__sportsmanager_mitglied_von_verein READ, #__sportsmanager_verein READ, #__sportsmanager_turnier_rundenstufe WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + $elo_aktualisieren = $turnierdisziplin->elo_wertung; + $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; + + if (!empty($_FILES["daten"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten"]["tmp_name"])) { + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $id AND rundenstufe <> 20;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe WHERE turnierdisziplin_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $handle = fopen($_FILES["daten"]["tmp_name"], "r"); + if (!$handle) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei kann nicht geöffnet werden."); + + return; + } + if (feof($handle)) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die übergebene Datei ist leer."); + + return; + } + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + if (substr($titelzeile, 0, 4) == "sep=") { + $trennzeichen = substr($titelzeile, 4); + if ($trennzeichen == "") // TAB am Ende wird aus irgendwelchen Gründen weggekürzt + $trennzeichen = "\t"; + $titelzeile = chop(utf8_encode(fgets($handle, 4096))); + } + if (strpos($titelzeile, "\t") !== false) + $trennzeichen = "\t"; + else if (strpos($titelzeile, ";") !== false) + $trennzeichen = ";"; + else + $trennzeichen = ","; + + $spalte = array(); + $titel = explode($trennzeichen, strtolower($titelzeile)); + + foreach ($titel as $index => $bezeichnung) { + if ($bezeichnung == "platz" || $bezeichnung == "platzierung") + $spalte["platz"] = $index; + else if ($bezeichnung == "itsf") + $spalte["itsf"] = $index; + else if ($bezeichnung == "name" || $bezeichnung == "nachname" || $bezeichnung == "name1" || $bezeichnung == "nachname1" || $bezeichnung == "nachname 1") + $spalte["nachname1"] = $index; + else if ($bezeichnung == "vorname" || $bezeichnung == "vorname1" || $bezeichnung == "vorname 1") + $spalte["vorname1"] = $index; + else if ($bezeichnung == "spielernr" || $bezeichnung == "spielernr1" || $bezeichnung == "spielernr. 1") + $spalte["spielernr1"] = $index; + else if ($bezeichnung == "verein" || $bezeichnung == "verein1" || $bezeichnung == "vereinsname" || $bezeichnung == "vereinsname1" || $bezeichnung == "vereinsname 1") + $spalte["verein1"] = $index; + else if ($bezeichnung == "name2" || $bezeichnung == "nachname2" || $bezeichnung == "nachname 2") + $spalte["nachname2"] = $index; + else if ($bezeichnung == "vorname2" || $bezeichnung == "vorname 2") + $spalte["vorname2"] = $index; + else if ($bezeichnung == "spielernr2" || $bezeichnung == "spielernr. 2") + $spalte["spielernr2"] = $index; + else if ($bezeichnung == "verein2" || $bezeichnung == "vereinsname2" || $bezeichnung == "vereinsname 2") + $spalte["verein1"] = $index; + } + + // CSV-Import + if ((isset($spalte["platz"]) && isset($spalte["vorname1"]) && isset($spalte["nachname1"])) || isset($spalte["itsf"])) { + $nichtGefundeneSpieler = ""; + $spielerMeldungen = array(); + + $ist_doppel = false; + if (isset($spalte["vorname2"]) && isset($spalte["nachname2"])) + $ist_doppel = true; + + while (!feof($handle)) { + $buffer = chop(utf8_encode(fgets($handle, 4096))); + $daten = explode($trennzeichen, $buffer); + + foreach ($daten as $index => $wert) { + $wert = trim($wert); + $len = strlen($wert); + if ($len < 2 || $wert[0] != '"' || $wert[$len - 1] != '"') + $daten[$index] = $wert; + else + $daten[$index] = str_replace('""', '"', substr($wert, 1, $len - 2)); + } + + if (isset($spalte["itsf"])) { + if (!isset($daten[$spalte["itsf"]])) + continue; + $itsf_daten = $daten[$spalte["itsf"]]; + if (empty($itsf_daten)) + continue; + + if (!$ist_doppel && strpos($itsf_daten, " - ") !== false) { + if (count($spielerMeldungen) != 0) + continue; + $ist_doppel = true; + } + + $nachname1 = ""; + $vorname1 = ""; + $spielernr1 = ""; + $verein1 = ""; + if ($ist_doppel) { + $nachname2 = ""; + $vorname2 = ""; + $spielernr2 = ""; + $verein2 = ""; + } + + $itsf_felder = explode(" ", $itsf_daten); + $position = 0; // 0: Platz, 1: Vorname1, 2: Nachname1, 3: Land1, 4: Vorname2, 5: Nachname2, 6: Land2 + foreach ($itsf_felder as $feld) { + if ($position == 0) { + if (!is_numeric($feld)) + break; + $platz = $feld; + $position++; + continue; + } + if ($position == 1) { + if (strtoupper($feld) != $feld) { + if (!empty($vorname1)) + $vorname1 .= " "; + $vorname1 .= $feld; + continue; + } + $position = 2; + } + if ($position == 2) { + if ($feld != "-" && substr($feld, 0, 1) != "(") { + if (!empty($nachname1)) + $nachname1 .= " "; + $nachname1 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); + continue; + } + $position = 3; + } + if ($position == 3) { + if ($feld == "-") + continue; + if (substr($feld, 0, 1) == "(" && substr($feld, 4) == ")") { + $verein1 = substr($feld, 1, 3); + continue; + } + if (!$ist_doppel) + break; + $position = 4; + } + if ($position == 4) { + if (strtoupper($feld) != $feld) { + if (!empty($vorname2)) + $vorname2 .= " "; + $vorname2 .= $feld; + continue; + } + $position = 5; + } + if ($position == 5) { + if ($feld != "-" && substr($feld, 0, 1) != "(") { + if (ctype_digit($feld)) + continue; + if (!empty($nachname2)) + $nachname2 .= " "; + $nachname2 .= substr($feld, 0, 1) . strtolower(substr($feld, 1)); + continue; + } + $position = 6; + } + if ($position == 6) { + if ($feld == "-") + continue; + if (substr($feld, 0, 1) == "(" && substr($feld, 4) == ")") { + $verein2 = substr($feld, 1, 3); + continue; + } + break; + } + } + + if (empty($platz) || empty($vorname1) || empty($nachname1)) + continue; + if ($ist_doppel && (empty($vorname2) || empty($nachname2))) + continue; + } + else { + $platz = str_replace(".", "", $daten[$spalte["platz"]]); + if (empty($platz)) + continue; + + if (!isset($daten[$spalte["vorname1"]]) || !isset($daten[$spalte["nachname1"]])) + continue; + + $nachname1 = $daten[$spalte["nachname1"]]; + $vorname1 = $daten[$spalte["vorname1"]]; + $spielernr1 = isset($spalte["spielernr1"]) && isset($daten[$spalte["spielernr1"]]) ? $daten[$spalte["spielernr1"]] : ""; + $verein1 = isset($spalte["verein1"]) && isset($daten[$spalte["verein1"]]) ? $daten[$spalte["verein1"]] : ""; + + if ($vorname1 == "" || $nachname1 == "") + continue; + + if ($ist_doppel) { + if (!isset($daten[$spalte["vorname2"]]) || !isset($daten[$spalte["nachname2"]])) + continue; + + $nachname2 = $daten[$spalte["nachname2"]]; + $vorname2 = $daten[$spalte["vorname2"]]; + $spielernr2 = isset($spalte["spielernr2"]) && isset($daten[$spalte["spielernr2"]]) ? $daten[$spalte["spielernr2"]] : ""; + $verein2 = isset($spalte["verein2"]) && isset($daten[$spalte["verein2"]]) ? $daten[$spalte["verein2"]] : ""; + + if ($vorname2 == "" || $nachname2 == "") + continue; + } + } + + if ($ist_doppel) { + // Spielernummern und -namen ermitteln + $spieler2_id = null; + if (!empty($spielernr2)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr2) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } + if ($spieler2_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname2) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname2) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + if (count($s) == 1) + $spieler2_id = $s[0]->spieler_id; + } + } + + // Spielernummern und -namen ermitteln + $spieler1_id = null; + if (!empty($spielernr1)) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr1) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } + if ($spieler1_id == null) { + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(vorname, '" . $db->escape($vorname1) . "') = 0 AND STRCMP(nachname, '" . $db->escape($nachname1) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + if (count($s) == 1) + $spieler1_id = $s[0]->spieler_id; + } + + $spielerMeldung = array(); + $spielerMeldung["p"] = $platz; + if ($spieler1_id == null) { + $spielerMeldung["1n"] = $nachname1; + $spielerMeldung["1v"] = $vorname1; + $spielerMeldung["1vn"] = $verein1; + } + else + $spielerMeldung["1"] = $spieler1_id; + + if ($ist_doppel) { + if ($spieler2_id == null) { + $spielerMeldung["2n"] = $nachname2; + $spielerMeldung["2v"] = $vorname2; + $spielerMeldung["2vn"] = $verein2; + } + else + $spielerMeldung["2"] = $spieler2_id; + } + array_push($spielerMeldungen, $spielerMeldung); + } + fclose($handle); + + foreach ($spielerMeldungen as $spielerMeldung) { + $platz = $spielerMeldung["p"]; + $spieler1_id = isset($spielerMeldung["1"]) ? $spielerMeldung["1"] : null; + if ($ist_doppel) + $spieler2_id = isset($spielerMeldung["2"]) ? $spielerMeldung["2"] : null; + + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$id', '0', '$platz');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungId = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . ($spieler1_id != null ? "'$spieler1_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if ($spieler1_id == null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["1n"]) . "', '" . $db->escape($spielerMeldung["1v"]) . "', '" . $db->escape($spielerMeldung["1vn"]) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($ist_doppel) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . ($spieler2_id != null ? "'$spieler2_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if ($spieler2_id == null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerMeldung["2n"]) . "', '" . $db->escape($spielerMeldung["2v"]) . "', '" . $db->escape($spielerMeldung["2vn"]) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + else { // XML-Import + fclose($handle); + + // Daten zu Vorrunde laden + $disziplinVorrunde = null; + if (!empty($_FILES["daten_vorrunde"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_vorrunde"]["tmp_name"])) { + // $disziplinVorrunde = new DOMIT_Document(); + // $success = $disziplinVorrunde->loadXML($_FILES["daten_vorrunde"]["tmp_name"]); + $disziplinVorrunde = new DOMDocument(); + $disziplinVorrunde->recover = true; + $success = $disziplinVorrunde->load($_FILES["daten_vorrunde"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + + return; + } + } + } + + // Daten zu Zusatzrunde laden + $disziplinZusatzrunde = null; + if (!empty($_FILES["daten_zusatzrunde"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_zusatzrunde"]["tmp_name"])) { + // $disziplinZusatzrunde = new DOMIT_Document(); + // $success = $disziplinZusatzrunde->loadXML($_FILES["daten_zusatzrunde"]["tmp_name"]); + $disziplinZusatzrunde = new DOMDocument(); + $disziplinZusatzrunde->recover = true; + $success = $disziplinZusatzrunde->load($_FILES["daten_zusatzrunde"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + + return; + } + } + } + + // Daten zu 2. Zusatzrunde laden + $disziplinZusatzrunde2 = null; + if (!empty($_FILES["daten_zusatzrunde2"]["tmp_name"])) { + if (is_uploaded_file($_FILES["daten_zusatzrunde2"]["tmp_name"])) { + // $disziplinZusatzrunde2 = new DOMIT_Document(); + // $success = $disziplinZusatzrunde2->loadXML($_FILES["daten_zusatzrunde2"]["tmp_name"]); + $disziplinZusatzrunde2 = new DOMDocument(); + $disziplinZusatzrunde2->recover = true; + $success = $disziplinZusatzrunde2->load($_FILES["daten_zusatzrunde2"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + + return; + } + } + } + + // Daten zu Hauptrunde laden + // $disziplin = new DOMIT_Document(); + // $success = $disziplin->loadXML($_FILES["daten"]["tmp_name"]); + $disziplin = new DOMDocument(); + $disziplin->recover = true; + $success = $disziplin->load($_FILES["daten"]["tmp_name"]); + if (!$success) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei ist keine XML-Datei."); + + return; + } + + if ($disziplinVorrunde != null) { + $matchingNodes =& $disziplinVorrunde->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + + return; + } + // if ($matchingNodes->getLength() != 1) { + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + + return; + } + } + + if ($disziplinZusatzrunde != null) { + $matchingNodes =& $disziplinZusatzrunde->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + + return; + } + // if ($matchingNodes->getLength() != 1) { + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + + return; + } + } + + if ($disziplinZusatzrunde2 != null) { + $matchingNodes =& $disziplinZusatzrunde2->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei enthaelt keine Disziplin."); + + return; + } + // if ($matchingNodes->getLength() != 1) { + if ($matchingNodes->length != 1) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Datei darf nur eine Disziplin enthalten."); + + return; + } + } + + $matchingNodes =& $disziplin->getElementsByTagName("disziplin"); + if ($matchingNodes == null) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei enthaelt keine Disziplin."); + + return; + } + // if ($matchingNodes->getLength() != 1) { + if ($matchingNodes->length != 1) { + /* + $handle = fopen ($_FILES["daten"]["tmp_name"], "r"); + while (!feof($handle)) { + $buffer = chop(utf8_encode(fgets($handle, 4096))); + echo htmlentities_utf8($buffer) . "
"; + } + fclose($handle); + echo "...
"; + */ + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id, "Die uebergebene Datei darf nur eine Disziplin enthalten."); + + return; + } + + // Spieler-Ids über Spielerliste ermitteln + $meldungenSpieler = array(); + $meldungenPlatz = array(); + foreach (array(0, 1, 2, 3, 10) as $rundenstufe) + $meldungenPlatz[$rundenstufe] = array(); + //$meldungenVerein = array(); + $meldungenIds = array(); + $matchingNodes =& $disziplin->getElementsByTagName("meldung"); + if ($matchingNodes != null) { + // $totalHauptrunde = $matchingNodes->getLength(); + $totalHauptrunde = $matchingNodes->length; + for ($i = 0; $i < $totalHauptrunde; $i++) { + $currNode =& $matchingNodes->item($i); + // $meldungName = utf8_encode($currNode->getAttribute("name")); + $meldungName = $currNode->getAttribute("name"); + $meldungPlatz = $currNode->getAttribute("platz"); + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $meldungPlatz; + $meldungenPlatz[1][$meldungName] = $meldungPlatz; + +// $spieler =& $currNode->firstChild; +// while ($spieler != NULL) { + $spielerNodes =& $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '$spielernr') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + else + $gefunden = null; + + if (!$gefunden) { + // $spielerVorname = $spieler->hasAttribute("vorname") ? utf8_encode(trim($spieler->getAttribute("vorname"))) : ""; + // $spielerNachname = utf8_encode(trim($spieler->getAttribute("nachname"))); + // $spielerVerein = utf8_encode(trim($spieler->getAttribute("verein"))); + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + array_push($meldungenSpieler[$meldungName], $gefunden); + else + array_push($meldungenSpieler[$meldungName], array($spielerNachname, $spielerVorname, $spielerVerein)); +// $spieler =& $spieler->nextSibling; + } + } + + $neueMeldungenZusatzrunde = 0; + if ($disziplinZusatzrunde != null) { + $matchingNodesZusatzrunde =& $disziplinZusatzrunde->getElementsByTagName("meldung"); + if ($matchingNodesZusatzrunde != null) { + //$totalZusatzrunde = $matchingNodesZusatzrunde->getLength(); + $totalZusatzrunde = $matchingNodesZusatzrunde->length; + for ($i = 0; $i < $totalZusatzrunde; $i++) { + $currNode =& $matchingNodesZusatzrunde->item($i); + // $meldungName = utf8_encode($currNode->getAttribute("name")); + $meldungName = $currNode->getAttribute("name"); + //if (!isset($meldungenVerein[$meldungName])) + // $meldungenVerein[$meldungName] = utf8_encode($currNode->getAttribute("verein")); + $meldungPlatz = $currNode->getAttribute("platz"); + $meldungenPlatz[2][$meldungName] = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $neueMeldungenZusatzrunde++; + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $meldungPlatz; + + // $spieler =& $currNode->firstChild; + // while ($spieler != NULL) { + $spielerNodes =& $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + else + $gefunden = null; + + if (!$gefunden) { + // $spielerVorname = $spieler->hasAttribute("vorname") ? utf8_encode(trim($spieler->getAttribute("vorname"))) : ""; + // $spielerNachname = utf8_encode(trim($spieler->getAttribute("nachname"))); + // $spielerVerein = utf8_encode(trim($spieler->getAttribute("verein"))); + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + array_push($meldungenSpieler[$meldungName], $gefunden); + else + array_push($meldungenSpieler[$meldungName], array($spielerNachname, $spielerVorname, $spielerVerein)); + // $spieler =& $spieler->nextSibling; + } + } + } + } + } + else + $totalZusatzrunde = 0; + + $neueMeldungenZusatzrunde2 = 0; + if ($disziplinZusatzrunde2 != null) { + $matchingNodesZusatzrunde2 =& $disziplinZusatzrunde2->getElementsByTagName("meldung"); + if ($matchingNodesZusatzrunde2 != null) { + // $totalZusatzrunde2 = $matchingNodesZusatzrunde2->getLength(); + $totalZusatzrunde2 = $matchingNodesZusatzrunde2->length; + for ($i = 0; $i < $totalZusatzrunde2; $i++) { + $currNode =& $matchingNodesZusatzrunde2->item($i); + // $meldungName = utf8_encode($currNode->getAttribute("name")); + $meldungName = $currNode->getAttribute("name"); + //if (!isset($meldungenVerein[$meldungName])) + // $meldungenVerein[$meldungName] = utf8_encode($currNode->getAttribute("verein")); + $meldungPlatz = $currNode->getAttribute("platz"); + $meldungenPlatz[3][$meldungName] = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $neueMeldungenZusatzrunde2++; + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $meldungPlatz; + + // $spieler =& $currNode->firstChild; + // while ($spieler != NULL) { + $spielerNodes =& $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + else + $gefunden = null; + + if (!$gefunden) { + // $spielerVorname = $spieler->hasAttribute("vorname") ? utf8_encode(trim($spieler->getAttribute("vorname"))) : ""; + // $spielerNachname = utf8_encode(trim($spieler->getAttribute("nachname"))); + // $spielerVerein = utf8_encode(trim($spieler->getAttribute("verein"))); + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + array_push($meldungenSpieler[$meldungName], $gefunden); + else + array_push($meldungenSpieler[$meldungName], array($spielerNachname, $spielerVorname, $spielerVerein)); + // $spieler =& $spieler->nextSibling; + } + } + } + } + } + else + $totalZusatzrunde2 = 0; + + $disziplinVorrundeErsterPlatz = 0; + if ($disziplinVorrunde != null) { + $matchingNodesVorrunde =& $disziplinVorrunde->getElementsByTagName("meldung"); + if ($matchingNodesVorrunde != null) { + // $totalVorrunde = $matchingNodesVorrunde->getLength(); + $totalVorrunde = $matchingNodesVorrunde->length; + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode =& $matchingNodesVorrunde->item($i); + // $meldungName = utf8_encode($currNode->getAttribute("name")); + $meldungName = $currNode->getAttribute("name"); + if (isset($meldungenSpieler[$meldungName])) + continue; + $meldungPlatz = $currNode->getAttribute("platz"); + if ($meldungPlatz < $disziplinVorrundeErsterPlatz || $disziplinVorrundeErsterPlatz == 0) + $disziplinVorrundeErsterPlatz = $meldungPlatz; + } + + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode =& $matchingNodesVorrunde->item($i); + // $meldungName = utf8_encode($currNode->getAttribute("name")); + $meldungName = $currNode->getAttribute("name"); + //if (!isset($meldungenVerein[$meldungName])) + // $meldungenVerein[$meldungName] = utf8_encode($currNode->getAttribute("verein")); + $meldungPlatz = $currNode->getAttribute("platz"); + $meldungenPlatz[10][$meldungName] = $meldungPlatz; + if ($disziplinVorrundeErsterPlatz == 0) + $disziplinVorrundeErsterPlatz = $meldungPlatz; + if (!isset($meldungenSpieler[$meldungName])) { + $meldungenSpieler[$meldungName] = array(); + $meldungenPlatz[0][$meldungName] = $totalHauptrunde + $neueMeldungenZusatzrunde + $neueMeldungenZusatzrunde2 + $meldungPlatz - $disziplinVorrundeErsterPlatz + 1; + + // $spieler =& $currNode->firstChild; + // while ($spieler != NULL) { + $spielerNodes =& $currNode->getElementsByTagName("spieler"); + foreach ($spielerNodes as $spieler) { + $spielernr = $spieler->getAttribute("spielerpass"); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + else + $gefunden = null; + + if (!$gefunden) { + // $spielerVorname = $spieler->hasAttribute("vorname") ? utf8_encode(trim($spieler->getAttribute("vorname"))) : ""; + // $spielerNachname = utf8_encode(trim($spieler->getAttribute("nachname"))); + // $spielerVerein = utf8_encode(trim($spieler->getAttribute("verein"))); + $spielerVorname = $spieler->hasAttribute("vorname") ? trim($spieler->getAttribute("vorname")) : ""; + $spielerNachname = trim($spieler->getAttribute("nachname")); + $spielerVerein = trim($spieler->getAttribute("verein")); + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE " . $wertungsbedingung . "STRCMP(nachname, '" . $db->escape($spielerNachname) . "') = 0 AND STRCMP(vorname, '" . $db->escape($spielerVorname) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $s = $db->loadObjectList(); + $gefunden = count($s) == 1 ? $s[0]->spieler_id : null; + } + + if ($gefunden != -1 && $gefunden != null) + array_push($meldungenSpieler[$meldungName], $gefunden); + else + array_push($meldungenSpieler[$meldungName], array($spielerNachname, $spielerVorname, $spielerVerein)); + // $spieler =& $spieler->nextSibling; + } + } + } + } + } + + // Meldungen speichern + foreach ($meldungenSpieler as $meldungName => $spielerIds) { + $meldungPlatz = $meldungenPlatz[0][$meldungName]; + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$id', '0', '$meldungPlatz');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungId = $db->insertid(); + $meldungenIds[$meldungName] = $meldungId; + + foreach ($spielerIds as $spielerId) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$meldungId', " . (!is_array($spielerId) ? "'$spielerId'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungSpielerId = $db->insertid(); + + if (is_array($spielerId)) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ('$meldungSpielerId', '" . $db->escape($spielerId[0]) . "', '" . $db->escape($spielerId[1]) . "', '" . $db->escape($spielerId[2]) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $rundenstufen = array(0); + $platzierungen = array(0 => $meldungenPlatz[0][$meldungName]); + foreach (array(1, 2, 3, 10) as $rundenstufe) { + if (isset($meldungenPlatz[$rundenstufe][$meldungName])) { + array_push($rundenstufen, $rundenstufe); + $platzierungen[$rundenstufe] = $meldungenPlatz[$rundenstufe][$meldungName]; + } + } + meldungsgruppe_verknuepfen($meldungId, $rundenstufen, $platzierungen); + } + } + + // Spiele speichern + $totalVorrunde = 0; + if ($disziplinVorrunde != null) { + $matchingNodes =& $disziplinVorrunde->getElementsByTagName("runde"); + if ($matchingNodes != null) { + // $totalVorrunde = $matchingNodes->getLength(); + $totalVorrunde = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalVorrunde; $i++) { + $currNode =& $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + // $spiel =& $currNode->firstChild; + // while ($spiel != NULL) { + $spielNodes =& $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + // $heim = utf8_encode($spiel->getAttribute("heim")); + // $gast = utf8_encode($spiel->getAttribute("gast")); + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + // $satz =& $spiel->firstChild; + // while ($satz != NULL) { + $satzNodes =& $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + // $satz =& $satz->nextSibling; + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '10', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // $spiel =& $spiel->nextSibling; + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . ($ergebnis_saetze_maximum != 0 ? "'$ergebnis_saetze_maximum'" : "null") . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '10'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Spiele speichern + $totalZusatzrunde = 0; + if ($disziplinZusatzrunde != null) { + $matchingNodes =& $disziplinZusatzrunde->getElementsByTagName("runde"); + if ($matchingNodes != null) { + // $totalZusatzrunde = $matchingNodes->getLength(); + $totalZusatzrunde = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalZusatzrunde; $i++) { + $currNode =& $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + // $spiel =& $currNode->firstChild; + // while ($spiel != NULL) { + $spielNodes =& $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + // $heim = utf8_encode($spiel->getAttribute("heim")); + // $gast = utf8_encode($spiel->getAttribute("gast")); + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + // $satz =& $spiel->firstChild; + // while ($satz != NULL) { + $satzNodes =& $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + // $satz =& $satz->nextSibling; + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '2', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // $spiel =& $spiel->nextSibling; + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . ($ergebnis_saetze_maximum != 0 ? "'$ergebnis_saetze_maximum'" : "null") . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '2'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + // Spiele speichern + $totalZusatzrunde2 = 0; + if ($disziplinZusatzrunde2 != null) { + $matchingNodes =& $disziplinZusatzrunde2->getElementsByTagName("runde"); + if ($matchingNodes != null) { + // $totalZusatzrunde2 = $matchingNodes->getLength(); + $totalZusatzrunde2 = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $totalZusatzrunde2; $i++) { + $currNode =& $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + // $spiel =& $currNode->firstChild; + // while ($spiel != NULL) { + $spielNodes =& $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + // $heim = utf8_encode($spiel->getAttribute("heim")); + // $gast = utf8_encode($spiel->getAttribute("gast")); + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + // $satz =& $spiel->firstChild; + // while ($satz != NULL) { + $satzNodes =& $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + // $satz =& $satz->nextSibling; + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '3', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // $spiel =& $spiel->nextSibling; + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . ($ergebnis_saetze_maximum != 0 ? "'$ergebnis_saetze_maximum'" : "null") . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '3'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + + $matchingNodes =& $disziplin->getElementsByTagName("runde"); + if ($matchingNodes != null) { + // $total = $matchingNodes->getLength(); + $total = $matchingNodes->length; + $ergebnis_saetze_maximum = 0; + for ($i = 0; $i < $total; $i++) { + $currNode =& $matchingNodes->item($i); + $rundenNr = $currNode->getAttribute("no"); + + // $spiel =& $currNode->firstChild; + // while ($spiel != NULL) { + $spielNodes =& $currNode->getElementsByTagName("spiel"); + foreach ($spielNodes as $spiel) { + // $heim = utf8_encode($spiel->getAttribute("heim")); + // $gast = utf8_encode($spiel->getAttribute("gast")); + $heim = $spiel->getAttribute("heim"); + $gast = $spiel->getAttribute("gast"); + + $heimGewonneneSaetze = 0; + $gastGewonneneSaetze = 0; + $ergebnis_detailliert = ""; + $ergebnis_saetze = 0; + // $satz =& $spiel->firstChild; + // while ($satz != NULL) { + $satzNodes =& $spiel->getElementsByTagName("satz"); + foreach ($satzNodes as $satz) { + $heimPunkte = $satz->getAttribute("heim"); + $gastPunkte = $satz->getAttribute("gast"); + if ($heimPunkte > $gastPunkte) + $heimGewonneneSaetze++; + else if ($heimPunkte < $gastPunkte) + $gastGewonneneSaetze++; + if ($heimPunkte > 1 || $gastPunkte > 1) { + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $ergebnis_detailliert .= $heimPunkte . ":" . $gastPunkte; + $ergebnis_saetze++; + } + // $satz =& $satz->nextSibling; + } + if ($ergebnis_saetze > $ergebnis_saetze_maximum) + $ergebnis_saetze_maximum = $ergebnis_saetze; + + $heimId = $meldungenIds[$heim]; + $gastId = $meldungenIds[$gast]; + $spielNr = $totalVorrunde + $i + 1; + if ($heimGewonneneSaetze > $gastGewonneneSaetze) + $ergebnis = 1; + else if ($heimGewonneneSaetze < $gastGewonneneSaetze) + $ergebnis = 2; + else + $ergebnis = 0; + + $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert)" + . "\n VALUES ('$id', '$spielNr', '$rundenNr', '1', '$heimId', '$gastId', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // $spiel =& $spiel->nextSibling; + } + } + if ($ergebnis_saetze_maximum > 0) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = ''," + . "\n typ = null," + . "\n runden = null," + . "\n tabellenwertung = null," + . "\n saetze = " . ($ergebnis_saetze_maximum != 0 ? "'$ergebnis_saetze_maximum'" : "null") . "," + . "\n tore = null," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$id'," + . "\n rundenstufe = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + } + + foreach (array(1, 2, 3, 10) as $rundenstufe) { + $query = "SELECT runde, COUNT(*) AS spiele" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe" + . "\n GROUP BY runde" + . "\n ORDER BY runde DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $runden = $db->loadObjectList(); + + if (count($runden) < 2 + || ($runden[0]->spiele != 1 && $runden[0]->spiele != 2) + || $runden[1]->spiele != 2) + continue; + if (count($runden) >= 3 + && ($runden[2]->spiele > 4)) + continue; + if (count($runden) >= 4 + && ($runden[2]->spiele != 4 || $runden[3]->spiele > 8)) + continue; + if (count($runden) >= 5 + && ($runden[3]->spiele != 8 || $runden[4]->spiele > 16)) + continue; + + $query = "SELECT turnierspiel_id" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe AND runde = " . $runden[0]->runde + . "\n ORDER BY turnierspiel_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET runde = '19999'" + . "\n WHERE turnierspiel_id = '" . $rows[0]->turnierspiel_id . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (count($rows) >= 2) { + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET runde = '19998'" + . "\n WHERE turnierspiel_id = '" . $rows[1]->turnierspiel_id . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + for ($i = 1; $i < count($runden) && $i <= 6; $i++) { + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET runde = '" . (19998 - $i) . "'" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = $rundenstufe AND runde = " . $runden[$i]->runde; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(0, $id); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $id); +} + +function adminEditTurnierdisziplinSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, typ, turnierbezeichnung, turnierort, beginn, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + $disziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) + keinZugriff(true); + + if (empty($id)) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_turnierspiel WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier_rundenstufe" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; + + $query = "SELECT *" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND (rundenstufe = '$rundenstufe'" . ($rundenstufe != 0 ? " OR rundenstufe = 0" : "") . ")" + . "\n ORDER BY rundenstufe, name1, name2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen = $db->loadObjectList(); + + /* + $query = "SELECT turniermeldung_id, spieler_id, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname, " + . "\n IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) AS vereinsname" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerNamen = array(); + foreach ($meldungenSpieler as $s) { + if (!isset($meldungenSpielerNamen[$s->turniermeldung_id])) + $meldungenSpielerNamen[$s->turniermeldung_id] = $s->nachname . ", " . $s->vorname; + else + $meldungenSpielerNamen[$s->turniermeldung_id] .= " / " . $s->nachname . ", " . $s->vorname; + } + + asort($meldungenSpielerNamen); +*/ + HTML_sportsmanager_admin::adminEditTurnierdisziplinSpiel($row, $disziplin, $rundenstufen_details, $meldungen, $rundenstufe); +} + +function adminSaveTurnierdisziplinSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $ergebnis = $jinput->get('ergebnis', 0, 'INT'); + $ergebnis_punkte_heim = $jinput->get('ergebnis_punkte_heim', array(), 'ARRAY'); + $ergebnis_punkte_gast = $jinput->get('ergebnis_punkte_gast', array(), 'ARRAY'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $spiel_nummer = $jinput->get('spiel_nummer', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + $rundentyp = $jinput->get('rundentyp', -1, 'INT'); + $runde = max(min(abs($jinput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); + $platzierung_ende = max(min(abs($jinput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#sid' . $id); + + return; + } + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(); + + $ergebnis_detailliert = ""; + $saetze_heim = 0; + $saetze_gast = 0; + for ($i = 0; $i < count($ergebnis_punkte_heim); $i++) { + if (($ergebnis_punkte_heim[$i] == 0 || empty($ergebnis_punkte_heim[$i])) && ($ergebnis_punkte_gast[$i] == 0 || empty($ergebnis_punkte_gast[$i]))) + continue; + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $punkte_heim = empty($ergebnis_punkte_heim[$i]) ? "0" : $ergebnis_punkte_heim[$i]; + $punkte_gast = empty($ergebnis_punkte_gast[$i]) ? "0" : $ergebnis_punkte_gast[$i]; + if ($punkte_heim > $punkte_gast) + $saetze_heim++; + else if ($punkte_gast > $punkte_heim) + $saetze_gast++; + $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; + } + if ($saetze_heim > 0 || $saetze_gast > 0) + $ergebnis = $saetze_heim > $saetze_gast ? 1 : ($saetze_heim < $saetze_gast ? 2 : 0); + + if ($rundentyp >= 10000) + $runde = $rundentyp; + else if ($rundentyp == -2) + $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); + else if ($hauptrunde && $rundentyp == 0) + $runde = 0; + + $gewinner_meldung_id = $jinput->get('gewinner_meldung_id', 0, 'INT'); + $verlierer_meldung_id = $jinput->get('verlierer_meldung_id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin READ, #__sportsmanager_turnier READ, #__sportsmanager_turnierspiel WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + $elo_aktualisieren = $turnierdisziplin->elo_wertung; + $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_turnierspiel (turnierdisziplin_id, spiel_nummer, runde, rundenstufe, heim_meldung_id, gast_meldung_id, ergebnis, ergebnis_detailliert) VALUES ('$turnierdisziplinid', " . ($spiel_nummer != 0 ? "'$spiel_nummer'" : "NULL") . ", '$runde', '$rundenstufe', '$gewinner_meldung_id', '$verlierer_meldung_id', '$ergebnis', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET spiel_nummer = " . ($spiel_nummer != 0 ? "'$spiel_nummer'" : "NULL") . "," + . "\n runde = '$runde'," + . "\n heim_meldung_id = '$gewinner_meldung_id'," + . "\n gast_meldung_id = '$verlierer_meldung_id'," + . "\n ergebnis = '$ergebnis'," + . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") + . "\n WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#sid' . $id); +} + +function adminRemoveTurnierdisziplinSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin READ, #__sportsmanager_turnier READ, #__sportsmanager_turnierspiel WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, elo_wertung FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $turnierdisziplin = $rows[0]; + + $elo_aktualisieren = $turnierdisziplin->elo_wertung; + $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierspiel_id = $id AND turnierdisziplin_id = $turnierdisziplinid;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($elo_aktualisieren) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); +} + +function adminEditTurnierdisziplinRunde() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $runde = $jinput->get('runde', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + HTML_sportsmanager_admin::adminEditTurnierdisziplinRunde($runde, $rundenstufe, $id, $turnierdisziplin); +} + +function adminSaveTurnierdisziplinRunde() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $runde_alt = $jinput->get('runde_alt', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + $rundentyp = $jinput->get('rundentyp', -1, 'INT'); + $runde = max(min(abs($jinput->get('runde', 1, 'INT')), $rundentyp == -2 ? 99 : 9999), 1); + $platzierung_ende = max(min(abs($jinput->get('platzierung_ende', 0, 'INT')), $runde + 99), 1); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#sid' . $id); + + return; + } + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(); + + if ($rundentyp >= 10000) + $runde = $rundentyp; + else if ($rundentyp == -2) + $runde = 20000 + ((99 - abs($platzierung_ende - $runde)) * 100) + 99 - min($runde, $platzierung_ende); + else if ($runde_alt >= 0 && $rundentyp == 0) + $runde = 0; + if ($runde_alt < 0) + $runde = -$runde; + + if ($runde != $runde_alt) { + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET runde = '$runde'" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND runde = $runde_alt AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#sid' . $id); +} + +function adminEditTurnierdisziplinMeldung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $weitere = $jinput->get('weitere', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 0 && $rundenstufe != 20 && $rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $rundenstufen = array(); + $platzierungen = array(0 => "0", 1 => "0", 2 => "0", 3 => "0", 10 => "0", 20 => "0"); + if ($id == null) { + $row = null; + $meldung = null; + $meldung_spieler = null; + + $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $turnierdisziplinid ORDER BY rundenstufe, platz DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) { + array_push($rundenstufen, $rows[0]->rundenstufe); + $platzierungen[$rows[0]->rundenstufe] = $rows[0]->platz; + } + } + else { + $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $meldung = $rows[0]; + + if ($meldung->meldungsgruppe_id != null) { + $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $meldung->turnierdisziplin_id AND meldungsgruppe_id = $meldung->meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + array_push($rundenstufen, $row->rundenstufe); + $platzierungen[$row->rundenstufe] = $row->platz; + } + } + else { + array_push($rundenstufen, $meldung->rundenstufe); + $platzierungen[$meldung->rundenstufe] = $meldung->platz; + } + + $rundenstufe = $meldung->rundenstufe; + + $query = "SELECT spieler_id, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname, " + . "\n IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) AS vereinsname" + . "\n FROM #__sportsmanager_turniermeldung_spieler" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n WHERE turniermeldung_id = $meldung->turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldung_spieler = $db->loadObjectList(); + } + + $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id)" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditTurnierdisziplinMeldung($meldung, $rundenstufe, $meldung_spieler, $turnierdisziplin, $spieler, $rundenstufen, $platzierungen, $weitere); +} + +function adminSaveTurnierdisziplinMeldung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $spieler_1_id = $jinput->get('spieler_1_id', 0, 'INT'); + $spieler_1_nachname = $db->escape($jinput->get('spieler_1_nachname', '', 'RAW')); + $spieler_1_vorname = $db->escape($jinput->get('spieler_1_vorname', '', 'RAW')); + $spieler_1_verein = $db->escape($jinput->get('spieler_1_verein', '', 'RAW')); + $spieler_2_id = $jinput->get('spieler_2_id', 0, 'INT'); + $spieler_2_nachname = $db->escape($jinput->get('spieler_2_nachname', '', 'RAW')); + $spieler_2_vorname = $db->escape($jinput->get('spieler_2_vorname', '', 'RAW')); + $spieler_2_verein = $db->escape($jinput->get('spieler_2_verein', '', 'RAW')); + $weitere = $jinput->get('weitere', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#mid' . $id); + + return; + } + + $rundenstufen = $jinput->get('rundenstufen', array(), 'ARRAY'); + $platzierungen = $jinput->get('platzierungen', array(), 'ARRAY'); + $platzierungen = array(0 => $platzierungen[0], 1 => $platzierungen[1], 2 => $platzierungen[2], 3 => $platzierungen[3], 10 => $platzierungen[4], 20 => 0); + + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin READ, #__sportsmanager_spieler READ, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + /* + if ($platz > 0 && ($spieler_1_id != 0 || $spieler_2_id != 0)) { + $query = "SELECT COUNT(*) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung USING (turniermeldung_id) WHERE platz > 0 AND rundenstufe = $rundenstufe AND #__sportsmanager_turniermeldung.turniermeldung_id != $id AND turnierdisziplin_id = $turnierdisziplinid"; + if ($spieler_1_id != 0 && $spieler_2_id != 0) + $query .= " AND (#__sportsmanager_turniermeldung_spieler.spieler_id = $spieler_1_id OR #__sportsmanager_turniermeldung_spieler.spieler_id = $spieler_2_id)"; + else if ($spieler_1_id != 0) + $query .= " AND #__sportsmanager_turniermeldung_spieler.spieler_id = $spieler_1_id"; + else + $query .= " AND #__sportsmanager_turniermeldung_spieler.spieler_id = $spieler_2_id"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + if ($db->loadResult() > 0) { + $query = "UNLOCK TABLES;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid, "Die Meldung wurde nicht gespeichert, da zu mindestens einem der Spieler bereits eine Platzierung bei einer anderen Meldung eingetragen ist."); + } + } + */ + + $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + $elo_aktualisieren = $turnierdisziplin->elo_wertung; + $aktualisieren_ab_datum = !empty($turnierdisziplin->beginn) ? substr($turnierdisziplin->beginn, 0, 10) : null; + + if ($id == 0) { + $rundenstufe = count($rundenstufen) > 0 ? $rundenstufen[0] : 0; + $platz = $platzierungen[$rundenstufe]; + + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$turnierdisziplinid', '$rundenstufe', " . ($platz != 0 ? "'$platz'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$id', " . ($spieler_1_id != 0 ? "'$spieler_1_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turniermeldung_spieler_id = $db->insertid(); + + if ($spieler_1_id == 0) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ($turniermeldung_spieler_id, '$spieler_1_nachname', '$spieler_1_vorname', '$spieler_1_verein');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($turnierdisziplin->typ == 1) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$id', " . ($spieler_2_id != 0 ? "'$spieler_2_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turniermeldung_spieler_id = $db->insertid(); + + if ($spieler_2_id == 0) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ($turniermeldung_spieler_id, '$spieler_2_nachname', '$spieler_2_vorname', '$spieler_2_verein');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + else { + $query = "SELECT * FROM #__sportsmanager_turniermeldung" + . "\n WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $meldung = $rows[0]; + + $rundenstufe = $meldung->rundenstufe; + $platz = $platzierungen[$rundenstufe]; + + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET platz = " . ($platz != 0 ? "'$platz'" : "NULL") + . "\n WHERE turniermeldung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if ($rows[0]->spieler_id == 0 && $spieler_1_id == 0) { + $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" + . "\n SET nachname = '$spieler_1_nachname'," + . "\n vorname = '$spieler_1_vorname'," + . "\n vereinsname = '$spieler_1_verein'" + . "\n WHERE turniermeldung_spieler_name_id = " . $rows[0]->turniermeldung_spieler_name_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($rows[0]->spieler_id == 0 && $spieler_1_id != 0) { + $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" + . "\n WHERE turniermeldung_spieler_name_id = " . $rows[0]->turniermeldung_spieler_name_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($rows[0]->spieler_id != 0 && $spieler_1_id == 0) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES (" . $rows[0]->turniermeldung_spieler_id . ", '$spieler_1_nachname', '$spieler_1_vorname', '$spieler_1_verein');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__sportsmanager_turniermeldung_spieler" + . "\n SET spieler_id = " . ($spieler_1_id != 0 ? "'$spieler_1_id'" : "NULL") + . "\n WHERE turniermeldung_spieler_id = " . $rows[0]->turniermeldung_spieler_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($turnierdisziplin->typ == 1) { + if ($rows[1]->spieler_id == 0 && $spieler_2_id == 0) { + $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" + . "\n SET nachname = '$spieler_2_nachname'," + . "\n vorname = '$spieler_2_vorname'," + . "\n vereinsname = '$spieler_2_verein'" + . "\n WHERE turniermeldung_spieler_name_id = " . $rows[1]->turniermeldung_spieler_name_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($rows[1]->spieler_id == 0 && $spieler_2_id != 0) { + $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" + . "\n WHERE turniermeldung_spieler_name_id = " . $rows[1]->turniermeldung_spieler_name_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($rows[1]->spieler_id != 0 && $spieler_2_id == 0) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES (" . $rows[1]->turniermeldung_spieler_id . ", '$spieler_2_nachname', '$spieler_2_vorname', '$spieler_2_verein');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__sportsmanager_turniermeldung_spieler" + . "\n SET spieler_id = " . ($spieler_2_id != 0 ? "'$spieler_2_id'" : "NULL") + . "\n WHERE turniermeldung_spieler_id = " . $rows[1]->turniermeldung_spieler_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + meldungsgruppe_verknuepfen($id, $rundenstufen, $platzierungen); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) + eloAktualisieren($aktualisieren_ab_datum); + ranglisteAktualisieren(0, $turnierdisziplinid); + einstufungAktualisieren(); + + if (!$weitere) + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid . '#mid' . $id); + else + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldung_edit&turnierdisziplinid=' . $turnierdisziplinid . '&id=' . $id . '&weitere=1'); +} + +function adminRemoveTurnierdisziplinMeldung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Sicherstellen, dass Meldung zur Turnierdisziplin und damit zum Turnier gehört + $query = "SELECT * FROM #__sportsmanager_turniermeldung" + . "\n WHERE turniermeldung_id = $id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $meldung = $rows[0]; + + meldungssgruppe_entfernen($id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren(0, $turnierdisziplinid); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); +} + +function adminVerknuepfenTurnierdisziplinMeldungForm() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + + $query = "SELECT #__sportsmanager_turnierdisziplin.turnierdisziplin_id, typ, turnier_id, disziplin, turnierbezeichnung, turnierort, beginn FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + $disziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($disziplin->turnier_id)) + keinZugriff(true); + + $meldungen = array(); + foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { + $query = "SELECT *" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS vereinsname1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vereinsname, (SELECT #__sportsmanager_verein.vereinsname FROM #__sportsmanager_verein, #__sportsmanager_mitglied_von_verein WHERE #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten LIMIT 1)) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS vereinsname2" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY platz, name1, name2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen[$rundenstufe] = $db->loadObjectList(); + } + HTML_sportsmanager_admin::adminVerknuepfenTurnierdisziplinMeldung($disziplin, $meldungen); +} + +function adminVerknuepfenTurnierdisziplinMeldung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $ids = array(); + foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) + $ids[$rundenstufe] = $jinput->get('ids' . $rundenstufe, array(), 'ARRAY'); + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + if ($turnierdisziplinid == 0) die("Missing id!"); + $rundenstufen = $jinput->get('rundenstufen', array(), 'ARRAY'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); + + return; + } + + // Sicherstellen, dass Turnierdisziplin zu Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) die("Wrong id!"); + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($rows[0]->turnier_id)) + keinZugriff(); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin READ, #__sportsmanager_spieler READ, #__sportsmanager_turniermeldung WRITE, #__sportsmanager_turniermeldung_spieler WRITE, #__sportsmanager_turniermeldung_spieler_name WRITE, #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { + foreach ($ids[$rundenstufe] as $meldung_id) { + // Sicherstellen, dass Meldung zu Turnierdisziplin und damit zu Turnier gehört + $query = "SELECT * FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $meldung_id AND turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + + meldungsgruppe_erweitern($meldung_id, $rundenstufen); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + ranglisteAktualisieren(0, $turnierdisziplinid); + einstufungAktualisieren(); + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); +} + +function meldungsgruppe_erweitern($quelle_turniermeldung_id, $rundenstufen) { + $db =& getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_turniermeldung" + . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $quelle_meldung = $rows[0]; + $meldungsgruppe_id = $quelle_meldung->meldungsgruppe_id != null ? $quelle_meldung->meldungsgruppe_id : $quelle_turniermeldung_id; + + if ($quelle_meldung->meldungsgruppe_id != null) { + $query = "SELECT DISTINCT rundenstufe FROM #__sportsmanager_turniermeldung" + . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + if (!in_array($row->rundenstufe, $rundenstufen)) + array_push($rundenstufen, $row->rundenstufe); + } + } + else { + if (!in_array($quelle_meldung->rundenstufe, $rundenstufen)) + array_push($rundenstufen, $quelle_meldung->rundenstufe); + } + + meldungsgruppe_verknuepfen($quelle_turniermeldung_id, $rundenstufen, null); +} + +function meldungsgruppe_verknuepfen($quelle_turniermeldung_id, $rundenstufen, $platzierungen) { + $db =& getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_turniermeldung" + . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $quelle_meldung = $rows[0]; + $meldungsgruppe_id = $quelle_meldung->meldungsgruppe_id != null ? $quelle_meldung->meldungsgruppe_id : $quelle_turniermeldung_id; + + $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $quelle_turniermeldung_id ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $quelle_meldung_spieler = $db->loadObjectList(); + + if ($quelle_meldung->meldungsgruppe_id == null && count($rundenstufen) > 1) { + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET meldungsgruppe_id = '$meldungsgruppe_id'" + . "\n WHERE turniermeldung_id = $quelle_turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + foreach (array(0, 1, 2, 3, 10, 20) as $rundenstufe) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE meldungsgruppe_id = '$meldungsgruppe_id' AND turnierdisziplin_id = '$quelle_meldung->turnierdisziplin_id' AND rundenstufe = '$rundenstufe'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (empty($rundenstufen) || !in_array($rundenstufe, $rundenstufen)) { + if (count($rows) == 0) + continue; + $ziel_meldung = $rows[0]; + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE heim_meldung_id = $ziel_meldung->turniermeldung_id OR gast_meldung_id = $ziel_meldung->turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND turniermeldung_id = $ziel_meldung->turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($quelle_meldung->rundenstufe == $rundenstufe) { + continue; + } + else if (count($rows) == 0) { + $platz = (empty($platzierungen) || !isset($platzierungen[$rundenstufe])) ? 0 : $platzierungen[$rundenstufe]; + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, meldungsgruppe_id, rundenstufe, platz)" + . "\n VALUES ('$quelle_meldung->turnierdisziplin_id', " . (count($rundenstufen) > 1 ? "'$meldungsgruppe_id'" : "NULL") . ", '$rundenstufe', " . ($platz != 0 ? "'$platz'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_turniermeldung_id = $db->insertid(); + + for ($i = 0; $i < count($quelle_meldung_spieler); $i++) { + $row = $quelle_meldung_spieler[$i]; + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$ziel_turniermeldung_id', " . ($row->spieler_id != null ? "'$row->spieler_id'" : "NULL") . ");"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turniermeldung_spieler_id = $db->insertid(); + + if ($row->spieler_id == null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ($turniermeldung_spieler_id, '" . $db->escape($row->nachname) . "', '" . $db->escape($row->vorname) . "', '" . $db->escape($row->vereinsname) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + else { + $ziel_meldung = $rows[0]; + if (!empty($platzierungen)) { + $platz = !isset($platzierungen[$rundenstufe]) ? 0 : $platzierungen[$rundenstufe]; + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET platz = " . ($platz != 0 ? "'$platz'" : "NULL") + . "\n WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE turniermeldung_id = $ziel_meldung->turniermeldung_id ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ziel_meldung_spieler = $db->loadObjectList(); + if (count($ziel_meldung_spieler) != count($quelle_meldung_spieler)) die("Wrong id!"); + + for ($i = 0; $i < count($quelle_meldung_spieler); $i++) { + $quelle_row = $quelle_meldung_spieler[$i]; + $ziel_row = $ziel_meldung_spieler[$i]; + + $query = "UPDATE #__sportsmanager_turniermeldung_spieler" + . "\n SET spieler_id = " . ($quelle_row->spieler_id != null ? "'$quelle_row->spieler_id'" : "NULL") + . "\n WHERE turniermeldung_spieler_id = $ziel_row->turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($quelle_row->spieler_id == null && $ziel_row->spieler_id == null) { + $query = "UPDATE #__sportsmanager_turniermeldung_spieler_name" + . "\n SET nachname = '" . $db->escape($quelle_row->nachname) . "'," + . "\n vorname = '" . $db->escape($quelle_row->vorname) . "'," + . "\n vereinsname = '" . $db->escape($quelle_row->vereinsname) . "'" + . "\n WHERE turniermeldung_spieler_name_id = $ziel_row->turniermeldung_spieler_name_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($quelle_row->spieler_id == null && $ziel_row->spieler_id != null) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler_name (turniermeldung_spieler_id, nachname, vorname, vereinsname)" + . "\n VALUES ($ziel_row->turniermeldung_spieler_id, '" . $db->escape($quelle_row->nachname) . "', '" . $db->escape($quelle_row->vorname) . "', '" . $db->escape($quelle_row->vereinsname) . "');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($quelle_row->spieler_id != null && $ziel_row->spieler_id == null) { + $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler_name" + . "\n WHERE turniermeldung_spieler_name_id = $ziel_row->turniermeldung_spieler_name_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + } + } + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n == 1) { + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET meldungsgruppe_id = NULL" + . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } +} + +function meldungssgruppe_entfernen($turniermeldung_id) { + $db =& getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_turniermeldung" + . "\n WHERE turniermeldung_id = $turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 0) die("Wrong id!"); + $meldung = $rows[0]; + $meldungsgruppe_id = $meldung->meldungsgruppe_id != null ? $meldung->meldungsgruppe_id : $turniermeldung_id; + + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE heim_meldung_id = $turniermeldung_id OR gast_meldung_id = $turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE #__sportsmanager_turniermeldung_spieler_name FROM #__sportsmanager_turniermeldung_spieler_name, #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler_name.turniermeldung_spieler_id = #__sportsmanager_turniermeldung_spieler.turniermeldung_spieler_id AND turniermeldung_id = $turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung_spieler WHERE turniermeldung_id = $turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_turniermeldung WHERE turniermeldung_id = $turniermeldung_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + + if ($n == 1) { + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET meldungsgruppe_id = NULL" + . "\n WHERE meldungsgruppe_id = $meldungsgruppe_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } +} + +function adminEditTurnierdisziplinRundenstufe() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(true); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung, turnierort, beginn, typ, turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier_rundenstufe" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; + + HTML_sportsmanager_admin::adminEditTurnierdisziplinRundenstufe($turnierdisziplin, $rundenstufe, $rundenstufen_details); +} + +function adminSaveTurnierdisziplinRundenstufe() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); + + return; + } + + $bezeichnung = $db->escape($jinput->get('bezeichnung', '', 'RAW')); + $typ = $jinput->get('typ', 0, 'INT'); + $runden = $jinput->get('runden', 0, 'INT'); + $tabellenwertung = $jinput->get('tabellenwertung', 0, 'INT'); + $saetze = $jinput->get('saetze', 0, 'INT'); + $tore = $jinput->get('tore', 0, 'INT'); + $spielfelder_erstes = $jinput->get('spielfelder_erstes', 0, 'INT'); + $spielfelder_letztes = $jinput->get('spielfelder_letztes', 0, 'INT'); + + // Sicherstellen, dass Turnierdisziplin zum Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(); + + $query = "LOCK TABLES #__sportsmanager_turnierdisziplin READ, #__sportsmanager_turnier_rundenstufe WRITE, #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_turnierdisziplin WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier_rundenstufe" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $rundenstufen_details = count($rows) >= 1 ? $rows[0] : null; + + if ($rundenstufen_details == null) { + $query = "INSERT #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n typ = " . ($typ != 0 ? "'$typ'" : "null") . "," + . "\n runden = " . ($runden != 0 ? "'$runden'" : "null") . "," + . "\n tabellenwertung = " . ($tabellenwertung != 0 ? "'$tabellenwertung'" : "null") . "," + . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," + . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," + . "\n spielfelder = null," + . "\n turnierdisziplin_id = '$turnierdisziplinid'," + . "\n rundenstufe = '$rundenstufe'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + $query = "UPDATE #__sportsmanager_turnier_rundenstufe" + . "\n SET bezeichnung = '$bezeichnung'," + . "\n typ = " . ($typ != 0 ? "'$typ'" : "null") . "," + . "\n runden = " . ($runden != 0 ? "'$runden'" : "null") . "," + . "\n tabellenwertung = " . ($tabellenwertung != 0 ? "'$tabellenwertung'" : "null") . "," + . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," + . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," + . "\n spielfelder = null" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (($rundenstufen_details->typ == null && $typ != 0) || ($rundenstufen_details->typ != null && $typ != 0 && $rundenstufen_details->typ != $typ)) { + $query = "DELETE FROM #__sportsmanager_turnierspiel WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else if ($rundenstufen_details->saetze != null && $rundenstufen_details->saetze > $saetze) { + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET ergebnis_detailliert = null" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); +} + +function adminRemoveTurnierdisziplinRundenstufe() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator()) + keinZugriff(); + + $turnierdisziplinid = $jinput->get('turnierdisziplinid', 0, 'INT'); + $rundenstufe = $jinput->get('rundenstufe', 0, 'INT'); + if ($rundenstufe != 10 && $rundenstufe != 1 && $rundenstufe != 2 && $rundenstufe != 3) die("Wrong id!"); + + // Sicherstellen, dass Turnierdisziplin zum Turnier gehört + $query = "SELECT turnier_id FROM #__sportsmanager_turnierdisziplin INNER JOIN #__sportsmanager_turnier USING (turnier_id) WHERE turnierdisziplin_id = $turnierdisziplinid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $turnierdisziplin = $rows[0]; + + if (!benutzerZugriff("turniere_aendern") && !benutzerTurnierModerator($turnierdisziplin->turnier_id)) + keinZugriff(); + + $query = "DELETE FROM #__sportsmanager_turnier_rundenstufe" + . "\n WHERE turnierdisziplin_id = $turnierdisziplinid AND rundenstufe = $rundenstufe"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_turnierdisziplin_meldungen_spiele&turnierdisziplinid=' . $turnierdisziplinid); +} + +function adminSpielerExportBilderForm() { + $db =& getDatabase(); + + $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) + $beschraenkter_zugriff = 1; + else + keinZugriff(true); + + if (!class_exists("ZipArchive") && !JArchive::getAdapter('zip')) { + redirectSportsManagerURL('&task=admin_spieler', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + $query = "SELECT DISTINCT veranstalter_id, #__sportsmanager_veranstalter.*" + . "\n FROM #__sportsmanager_veranstalter"; + if ($beschraenkter_zugriff == 1) + $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); + $query .= "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielerExportBilder($veranstalter, $beschraenkter_zugriff); +} + +function adminSpielerExportBilder() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) + $beschraenkter_zugriff = 1; + else + keinZugriff(); + + setMinMemoryLimit('256M'); + if (!ini_get('safe_mode')) + set_time_limit(300); + + $filter = $jinput->get('filter', 0, 'INT'); + $veranstalter_id = $jinput->get('veranstalter_id', 0, 'INT'); + if ($veranstalter_id != 0) { + $query = "SELECT veranstalterbezeichnung FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalter_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $veranstalter = $rows[0]; + } + else + $veranstalter = null; + + if ($beschraenkter_zugriff == 1) { + $query = "SELECT DISTINCT veranstalter_id" + . "\n FROM #__sportsmanager_veranstalter" + . "\n WHERE veranstalter_id = $veranstalter_id" . ($beschraenkter_zugriff == 1 ? (" AND" . veranstalterFilter("veranstalter_id IN")) : "") + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + if (count($veranstalter) == 0) + keinZugriff(); + } + + $query = "LOCK TABLES #__sportsmanager_spieler READ, #__sportsmanager_verein READ, #__sportsmanager_mitglied_von_verein READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export'; + if (!JFolder::exists($ziel_bilder_pfad) && !JFolder::create($ziel_bilder_pfad, 0777)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Der Ordner 'images/sportsmanager/export' konnte nicht neu erstellt werden."); + + return; + } + + $alte_bilder = JFolder::files($ziel_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFile::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/export' konnten nicht alle Dateien gelöscht werden.rstellt werden."); + + return; + } + } + + $query = "SELECT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler"; + if ($veranstalter_id != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if ($filter != 0) + $query .= " AND NOT bild_ausblenden"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + $anzahlSpieler = 0; + foreach ($spieler as $s) { + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler' . DIRECTORY_SEPARATOR . $s->spieler_id . '.'; + if (JFile::exists($pfad . 'png')) + $ext = "png"; + else if (JFile::exists($pfad . 'jpg')) + $ext = "jpg"; + else + continue; + + if (!JFile::copy($pfad . $ext, $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'Spieler ' . utf8_decode(bereinigterDateiname($s->nachname . ", " . $s->vorname . (!empty($s->spielernr) ? (" (" . $s->spielernr . ")") : "") . '.' . $ext)))) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Ein Bild (" . $s->spieler_id . ") konnte nicht an die Zielposition kopiert werden."); + + return; + } + $anzahlSpieler++; + } + + /* + $neue_bilder = JFolder::files($ziel_bilder_pfad); + $zip_dateien = array(); + foreach($neue_bilder as $fn) + array_push($zip_dateien, $ziel_bilder_pfad.DIRECTORY_SEPARATOR.$fn); + $file = tempnam("tmp", "tar"); + $zip = JArchive::create( $file, $zip_dateien, 'zip', '', $ziel_bilder_pfad );; +*/ + + if (class_exists("ZipArchive")) { + $file = tempnam("tmp", "zip"); + $zip = new ZipArchive(); + $zip->open($file, ZipArchive::OVERWRITE); + $neue_bilder = JFolder::files($ziel_bilder_pfad); + foreach ($neue_bilder as $fn) + $zip->addFile($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn, iconv("ISO-8859-1", "CP437", $fn)); + $zip->close(); + } + else if (JArchive::getAdapter('zip')) { + $zip_adapter = &JArchive::getAdapter('zip'); + $neue_bilder = JFolder::files($ziel_bilder_pfad); + $zip_dateien = array(); + foreach ($neue_bilder as $fn) { + $data = JFile::read($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + array_push($zip_dateien, array('name' => iconv("ISO-8859-1", "CP437", $fn), 'data' => $data)); + } + $file = tempnam("tmp", "zip"); + $zip_adapter->create($file, $zip_dateien, array()); + } + else { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + foreach ($neue_bilder as $fn) + JFile::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $dateiname = "Spielerbilder" . ($veranstalter != null ? (" " . utf8_decode($veranstalter->veranstalterbezeichnung)) : "") . ".zip"; + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header("Content-Type: application/zip"); + header("Content-Length: " . filesize($file)); + header("Content-Disposition: attachment; filename=\"" . $dateiname . "\""); + readfile($file); + unlink($file); + die(); +} + +function adminVereineExportBilderForm() { + $db =& getDatabase(); + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + if (!class_exists("ZipArchive") && !JArchive::getAdapter('zip')) { + redirectSportsManagerURL('&task=admin_vereine', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVereineExportBilder($veranstalter); +} + +function adminVereineExportBilder() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_vereine'); + + return; + } + + setMinMemoryLimit('256M'); + if (!ini_get('safe_mode')) + set_time_limit(300); + + $veranstalter_id = $jinput->get('veranstalter_id', 0, 'INT'); + if ($veranstalter_id != 0) { + $query = "SELECT veranstalterbezeichnung FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalter_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $veranstalter = $rows[0]; + } + else + $veranstalter = null; + + $query = "LOCK TABLES #__sportsmanager_verein READ, #__sportsmanager_mitglied_von_verein READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export'; + if (!JFolder::exists($ziel_bilder_pfad) && !JFolder::create($ziel_bilder_pfad, 0777)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Der Ordner 'images/sportsmanager/export' konnte nicht neu erstellt werden."); + + return; + } + + $alte_bilder = JFolder::files($ziel_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFile::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Im Ordner 'images/sportsmanager/export' konnten nicht alle Dateien gelöscht werden."); + + return; + } + } + + $query = "SELECT verein_id, vereinsname" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE NOT ausgetreten"; + if ($veranstalter_id != 0) + $query .= " AND veranstalter_id = $veranstalter_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + $anzahlVereine = 0; + foreach ($vereine as $v) { + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine' . DIRECTORY_SEPARATOR . $v->verein_id . '.'; + if (JFile::exists($pfad . 'png')) + $ext = "png"; + else if (JFile::exists($pfad . 'jpg')) + $ext = "jpg"; + else + continue; + + if (!JFile::copy($pfad . $ext, $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'Verein ' . utf8_decode(bereinigterDateiname($v->vereinsname)) . '.' . $ext)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Ein Bild (" . $v->verein_id . ") konnte nicht an die Zielposition kopiert werden."); + + return; + } + $anzahlVereine++; + } + /* + $neue_bilder = JFolder::files($ziel_bilder_pfad); + $zip_dateien = array(); + foreach($neue_bilder as $fn) + array_push($zip_dateien, $ziel_bilder_pfad.DIRECTORY_SEPARATOR.$fn); + $file = tempnam("tmp", "tar"); + $zip = JArchive::create( $file, $zip_dateien, 'zip', '', $ziel_bilder_pfad );; +*/ + + if (class_exists("ZipArchive")) { + $file = tempnam("tmp", "zip"); + $zip = new ZipArchive(); + $zip->open($file, ZipArchive::OVERWRITE); + $neue_bilder = JFolder::files($ziel_bilder_pfad); + foreach ($neue_bilder as $fn) + $zip->addFile($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn, iconv("ISO-8859-1", "CP437", $fn)); + $zip->close(); + } + else if (JArchive::getAdapter('zip')) { + $zip_adapter = &JArchive::getAdapter('zip'); + $neue_bilder = JFolder::files($ziel_bilder_pfad); + $zip_dateien = array(); + foreach ($neue_bilder as $fn) { + $data = JFile::read($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + array_push($zip_dateien, array('name' => iconv("ISO-8859-1", "CP437", $fn), 'data' => $data)); + } + $file = tempnam("tmp", "zip"); + $zip_adapter->create($file, $zip_dateien, array()); + } + else { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + foreach ($neue_bilder as $fn) + JFile::delete($ziel_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $dateiname = "Vereinsbilder" . ($veranstalter != null ? (" " . utf8_decode($veranstalter->veranstalterbezeichnung)) : "") . ".zip"; + $dateiname = bereinigterDateiname($dateiname); + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header("Content-Type: application/zip"); + header("Content-Length: " . filesize($file)); + header("Content-Disposition: attachment; filename=\"" . $dateiname . "\""); + readfile($file); + unlink($file); + die(); +} + +function adminSpielerImportBilderForm() { + $db =& getDatabase(); + + $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) + $beschraenkter_zugriff = 1; + else + keinZugriff(true); + + if (!class_exists("ZipArchive") && !JArchive::getAdapter('zip')) { + redirectSportsManagerURL('&task=admin_spieler', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + $query = "SELECT DISTINCT veranstalter_id, #__sportsmanager_veranstalter.*" + . "\n FROM #__sportsmanager_veranstalter"; + if ($beschraenkter_zugriff == 1) + $query .= "\n WHERE" . veranstalterFilter("veranstalter_id IN"); + $query .= "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminSpielerImportBilder($veranstalter, $beschraenkter_zugriff); +} + +function adminSpielerImportBilder() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $ansprechpartner_bilder_bearbeiten = einstellungswert("ansprechpartner_spielerdaten") == "1" || einstellungswert("ansprechpartner_spielerdaten") == "3"; + + if (benutzerZugriff("spieler_aendern")) + $beschraenkter_zugriff = 0; + else if (benutzerVeranstalterModerator() && $ansprechpartner_bilder_bearbeiten) + $beschraenkter_zugriff = 1; + else + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_spieler'); + + return; + } + + $veranstalter_id = $jinput->get('veranstalter_id', 0, 'INT'); + $bilder_beibehalten = $jinput->get('bilder_beibehalten', 0, 'INT'); + + if ($beschraenkter_zugriff == 1) { + $query = "SELECT DISTINCT veranstalter_id" + . "\n FROM #__sportsmanager_veranstalter" + . "\n WHERE veranstalter_id = $veranstalter_id" . ($beschraenkter_zugriff == 1 ? (" AND" . veranstalterFilter("veranstalter_id IN")) : "") + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + if (count($veranstalter) == 0) + keinZugriff(); + } + + $query = "LOCK TABLES #__sportsmanager_spieler READ, #__sportsmanager_verein READ, #__sportsmanager_mitglied_von_verein READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $quelle_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'import'; + if (!JFolder::exists($quelle_bilder_pfad) && !JFolder::create($quelle_bilder_pfad, 0777)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Der Ordner 'images/sportsmanager/import' existiert nicht."); + + return; + } + + $alte_bilder = JFolder::files($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFile::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); + + return; + } + } + $alte_bilder = JFolder::folders($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFolder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); + + return; + } + } + + if (class_exists("ZipArchive")) { + $zip = new ZipArchive; + if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || $zip->open($_FILES["bilder_archiv"]["tmp_name"]) !== true) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Die ZIP-Datei kann nicht geöffnet werden (ZA)."); + + return; + } + + for ($i = 0; $i < $zip->numFiles; $i++) { + $filename = $zip->getNameIndex($i); + $fileinfo = pathinfo($filename); + copy("zip://" . $_FILES["bilder_archiv"]["tmp_name"] . "#" . $filename, $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fileinfo['basename']); + } + $zip->close(); + } + else if (JArchive::getAdapter('zip')) { + $zip_adapter = &JArchive::getAdapter('zip'); + if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || !$zip_adapter->extract($_FILES["bilder_archiv"]["tmp_name"], $quelle_bilder_pfad)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Die ZIP-Datei kann nicht geöffnet werden (Z)."); + + return; + } + } + else { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_spieler', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + if (!ini_get('safe_mode')) + set_time_limit(300); + + $anzahlSpieler = 0; + $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'spieler'; + $neue_bilder_alle = JFolder::files($quelle_bilder_pfad, '(?i)(\.jpg|\.png)$'); + foreach ($neue_bilder_alle as $index => $bild) { + $ppos = strrpos($bild, "."); + if ($ppos === false) + continue; + $len = strlen($bild); + $ext = strtolower(substr($bild, $ppos + 1)); + if ($ext != "jpg" && $ext != "png") + continue; + $lpos = strrpos($bild, "("); + $rpos = $lpos !== false ? strpos($bild, ")", $lpos + 1) : false; + $spielernr = ""; + $name = ""; + if ($lpos !== false && $rpos !== false && $rpos - $lpos > 2) { + $spielernr = substr($bild, $lpos + 1, $rpos - $lpos - 1); + } + else if (strpos($bild, ",") !== false) { + $name = substr($bild, 0, $len - 4); + } + else + $spielernr = substr($bild, 0, $len - 4); + + if (!empty($spielernr)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler"; + if ($veranstalter_id != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id) AND STRCMP(spielernr, '" . $db->escape($spielernr) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) + continue; + $spieler_id = $rows[0]->spieler_id; + } + else if (!empty($name)) { + // Spielernummern und -namen ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler"; + if ($veranstalter_id != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten AND veranstalter_id = $veranstalter_id GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id) AND STRCMP(CONCAT_WS(', ', nachname, vorname), '" . $db->escape($name) . "') = 0" + . "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) + continue; + $spieler_id = $rows[0]->spieler_id; + } + else + continue; + + if ($bilder_beibehalten) { + $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $spieler_id . '.'; + if (JFile::exists($ziel_pfad . 'jpg') || JFile::exists($ziel_pfad . 'png')) + continue; + } + + $quelle_pfad = $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $bild; + $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $spieler_id . '.' . $ext; + if (!files_identical($quelle_pfad, $ziel_pfad)) { + bildLoeschen("spieler", $spieler_id); + if (!bildKopierenAngepasst($quelle_pfad, $ziel_pfad, 180, 240, 1)) + continue; + } + $anzahlSpieler++; + unset($neue_bilder_alle[$index]); + } + + $alte_bilder = JFolder::files($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) + JFile::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + $alte_bilder = JFolder::folders($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) + JFolder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + sort($neue_bilder_alle); + + HTML_sportsmanager_admin::adminSpielerImportBilderBericht($anzahlSpieler, $neue_bilder_alle); +} + +function adminVereineImportBilderForm() { + $db =& getDatabase(); + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(true); + + if (!class_exists("ZipArchive") && !JArchive::getAdapter('zip')) { + redirectSportsManagerURL('&task=admin_vereine', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminVereineImportBilder($veranstalter); +} + +function adminVereineImportBilder() { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("vereine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_vereine'); + + return; + } + + $veranstalter_id = $jinput->get('veranstalter_id', 0, 'INT'); + $bilder_beibehalten = $jinput->get('bilder_beibehalten', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_spieler READ, #__sportsmanager_verein READ, #__sportsmanager_mitglied_von_verein READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $quelle_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'import'; + if (!JFolder::exists($quelle_bilder_pfad) && !JFolder::create($quelle_bilder_pfad, 0777)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_uebersicht', "Der Ordner 'images/sportsmanager/import' existiert nicht."); + + return; + } + + $alte_bilder = JFolder::files($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFile::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); + + return; + } + } + $alte_bilder = JFolder::folders($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) { + if (!JFolder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_uebersicht', "Im Ordner 'images/sportsmanager/import' konnten nicht alle Dateien gelöscht werden."); + + return; + } + } + + if (class_exists("ZipArchive")) { + $zip = new ZipArchive; + if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || $zip->open($_FILES["bilder_archiv"]["tmp_name"]) !== true) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Die ZIP-Datei kann nicht geöffnet werden (ZA)."); + + return; + } + + for ($i = 0; $i < $zip->numFiles; $i++) { + $filename = $zip->getNameIndex($i); + $fileinfo = pathinfo($filename); + copy("zip://" . $_FILES["bilder_archiv"]["tmp_name"] . "#" . $filename, $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fileinfo['basename']); + } + $zip->close(); + } + else if (JArchive::getAdapter('zip')) { + $zip_adapter = &JArchive::getAdapter('zip'); + if (empty($_FILES["bilder_archiv"]["tmp_name"]) || !is_uploaded_file($_FILES["bilder_archiv"]["tmp_name"]) || !$zip_adapter->extract($_FILES["bilder_archiv"]["tmp_name"], $quelle_bilder_pfad)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_uebersicht', "Die ZIP-Datei kann nicht geöffnet werden (Z)."); + + return; + } + } + else { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + redirectSportsManagerURL('&task=admin_vereine', "Es steht keine Methode zur ZIP-Kompression zur Verfügung."); + + return; + } + + if (!ini_get('safe_mode')) + set_time_limit(300); + + $anzahlVereine = 0; + $ziel_bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'vereine'; + $neue_bilder_alle = JFolder::files($quelle_bilder_pfad, '(?i)(\.jpg|\.png)$'); + foreach ($neue_bilder_alle as $index => $bild) { + $ppos = strrpos($bild, "."); + if ($ppos === false) + continue; + $len = strlen($bild); + $ext = strtolower(substr($bild, $ppos + 1)); + if ($ext != "jpg" && $ext != "png") + continue; + if (substr($bild, 0, 7) != "Verein ") + continue; + $name = substr($bild, 7, $len - 11); + if (empty($name)) + continue; + + $query = "SELECT verein_id" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE NOT ausgetreten AND STRCMP(vereinsname, '" . $db->escape($name) . "') = 0"; + if ($veranstalter_id != 0) + $query .= " AND veranstalter_id = $veranstalter_id"; + $query .= "\n LIMIT 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) != 1) + continue; + $verein_id = $rows[0]->verein_id; + + if ($bilder_beibehalten) { + $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $verein_id . '.'; + if (JFile::exists($ziel_pfad . 'jpg') || JFile::exists($ziel_pfad . 'png')) + continue; + } + + $quelle_pfad = $quelle_bilder_pfad . DIRECTORY_SEPARATOR . $bild; + $ziel_pfad = $ziel_bilder_pfad . DIRECTORY_SEPARATOR . $verein_id . '.' . $ext; + if (!files_identical($quelle_pfad, $ziel_pfad)) { + bildLoeschen("vereine", $verein_id); + if (!bildKopierenAngepasst($quelle_pfad, $ziel_pfad, 240, 240, 0)) + continue; + } + $anzahlVereine++; + unset($neue_bilder_alle[$index]); + } + + $alte_bilder = JFolder::files($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) + JFile::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + $alte_bilder = JFolder::folders($quelle_bilder_pfad); + foreach ($alte_bilder as $fn) + JFolder::delete($quelle_bilder_pfad . DIRECTORY_SEPARATOR . $fn); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + sort($neue_bilder_alle); + + HTML_sportsmanager_admin::adminVereineImportBilderBericht($anzahlVereine, $neue_bilder_alle); +} + +function adminTermine($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (benutzerZugriff("termine_aendern")) + $zugriffsebene = 2; + else if (einstellungswert("termine_beantragen") == "1" && !JFactory::getUser()->guest && !isExternalDatabase()) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + $filter_jahr = $jinput->get('filter_jahr', 0, 'INT'); + if (empty($filter_jahr)) + $filter_jahr = date('Y'); + $filter_veranstaltung = $jinput->get('filter_veranstaltung', '', 'RAW'); + $filter_zusatz = $jinput->get('filter_zusatz', '', 'RAW'); + $filter_land = $jinput->get('filter_land', '', 'RAW'); + + $query = "SELECT DISTINCT YEAR(erster_tag) AS jahr" + . "\n FROM #__sportsmanager_termin" + . "\n ORDER BY erster_tag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $jahre = $db->loadObjectList(); + + $jahr_gefunden = false; + foreach ($jahre as $jahr) { + if ($jahr->jahr == $filter_jahr) { + $jahr_gefunden = true; + break; + } + } + if (!$jahr_gefunden && !empty($jahre)) + $filter_jahr = $jahre[0]->jahr; + + $query = "SELECT *, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)"; + if (!empty($filter_veranstaltung)) + $query .= " AND bezeichnung = '" . $db->escape($filter_veranstaltung) . "'"; + if (!empty($filter_zusatz)) + $query .= " AND EXISTS(SELECT * FROM #__sportsmanager_termin_zusatz WHERE termin_id = #__sportsmanager_termin.termin_id AND zusatz = '" . $db->escape($filter_zusatz) . "')"; + if (!empty($filter_land)) + $query .= " AND land = '" . $db->escape($filter_land) . "'"; + $query .= "\n GROUP BY termin_id" + . "\n ORDER BY erster_tag, bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $termine = $db->loadObjectList(); + + $query = "SELECT termin_id, termin_symbol_id" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n INNER JOIN #__sportsmanager_termin_symbolanzeige USING (termin_id)" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n ORDER BY termin_symbolanzeige_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $terminsymbole = $db->loadObjectList(); + + $termineSymbole = array(); + foreach ($terminsymbole as $termin) { + $termin_id = $termin->termin_id; + $termin_symbol_id = $termin->termin_symbol_id; + if (!isset($termineSymbole[$termin_id])) + $termineSymbole[$termin_id] = array(); + array_push($termineSymbole[$termin_id], $termin_symbol_id); + } + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_termin_aktion" + . "\n WHERE status = 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahl_beantragte_termine = $db->loadResult(); + + $query = "SELECT bezeichnung" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n INNER JOIN #__sportsmanager_termin_bezeichnung USING (bezeichnung)" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n GROUP BY bezeichnung" + . "\n ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $query = "SELECT bezeichnungszusatz, titel" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n INNER JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n INNER JOIN #__sportsmanager_termin_bezeichnungszusatz ON bezeichnungszusatz = zusatz" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n GROUP BY bezeichnungszusatz" + . "\n ORDER BY IF(titel = '', bezeichnungszusatz, titel)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $zusaetze = $db->loadObjectList(); + + $query = "SELECT land" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n INNER JOIN (SELECT land FROM #__sportsmanager_termin_land UNION SELECT bundesland AS land FROM #__sportsmanager_termin_bundesland) AS land_bundesland USING (land)" + . "\n WHERE YEAR(erster_tag) = '$filter_jahr' AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n GROUP BY land" + . "\n ORDER BY land"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $laender = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermine($termine, $termineSymbole, $jahre, $filter_jahr, $filter_veranstaltung, $filter_zusatz, $filter_land, $veranstaltungen, $zusaetze, $laender, $anzahl_beantragte_termine, $zugriffsebene, $admin_uebersicht, isExternalDatabase()); + + if (!$admin_uebersicht) + administrationFooter(); +} + +function adminEditTermin($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (benutzerZugriff("termine_aendern")) + $zugriffsebene = 2; + else if (einstellungswert("termine_beantragen") == "1" && !JFactory::getUser()->guest && !isExternalDatabase()) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + if ($zugriffsebene == 0) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $uebersicht = $jinput->get('uebersicht', 0, 'INT'); + $ueberarbeiten = $jinput->get('ueberarbeiten', 0, 'INT'); + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + + if (empty($id)) { + $termin = null; + $terminsymbolanzeige = null; + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE termin_id = $id" . ($zugriffsebene != 2 ? " AND status = 0" : " AND (status = 0 OR status = 2)") . " AND (typ = 0 OR typ = 1)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : ''), "Der bisherige Termin existiert nicht mehr."); + + return; + } + $termin = $rows[0]; + + $query = "SELECT termin_symbol_id" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n INNER JOIN #__sportsmanager_termin_symbolanzeige USING (termin_id)" + . "\n WHERE termin_id = $termin->termin_id" + . "\n ORDER BY termin_symbolanzeige_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $terminsymbolanzeige = $db->loadObjectList(); + } + + $query = "SELECT termin_symbol_id, symboltitel, status" + . "\n FROM #__sportsmanager_termin_symbol" + . "\n ORDER BY status DESC, symboltitel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $terminsymbole = $db->loadObjectList(); + + $benachrichtigung_email = ""; + if (empty($id)) { + $aktion_user =& JFactory::getUser(); + if (!empty($aktion_user->id) && !empty($aktion_user->email)) { + $benachrichtigung_email = $aktion_user->email; + } + } + else { + $benachrichtigung_email = $termin->benachrichtigung_email; + } + + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bezeichnungen = $db->loadObjectList(); + + if (!empty($id)) { + $bezeichnung_vorauswahl = null; + } + else { + // Häufigste Bezeichnung suchen + $query = "SELECT bezeichnung" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE DATEDIFF(erster_tag, CURDATE()) >= -365 AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n GROUP BY bezeichnung" + . "\n ORDER BY COUNT(*) DESC" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $bezeichnung_vorauswahl = count($rows) > 0 ? $rows[0]->bezeichnung : null; + } + + if (empty($id)) { + $zusaetze = null; + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_zusatz" + . "\n LEFT JOIN #__sportsmanager_termin_bezeichnungszusatz ON zusatz = bezeichnungszusatz" + . "\n WHERE termin_id = $id AND ISNULL(termin_bezeichnungszusatz_id)" + . "\n ORDER BY zusatz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $zusaetze = $db->loadObjectList(); + } + + if (empty($id)) { + $query = "SELECT *, NULL AS termin_zusatz_id" + . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" + . "\n ORDER BY bezeichnungszusatz"; + } + else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz ON termin_id = $id AND bezeichnungszusatz = zusatz" + . "\n ORDER BY bezeichnungszusatz"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bezeichnungszusaetze = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_termin_bundesland ORDER BY bundesland"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bundeslaender = $db->loadObjectList(); + + $query = "SELECT * FROM #__sportsmanager_termin_land ORDER BY land"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $laender = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditTermin($termin, $terminsymbolanzeige, $terminsymbole, $benachrichtigung_email, $bezeichnungen, $zusaetze, $bezeichnungszusaetze, $bundeslaender, $laender, $zugriffsebene, $admin_uebersicht, $bezeichnung_vorauswahl, $uebersicht, $ueberarbeiten, $nur_beantragte); +} + +function adminSaveTermin($admin_uebersicht) { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (benutzerZugriff("termine_aendern")) + $zugriffsebene = 2; + else if (einstellungswert("termine_beantragen") == "1" && !JFactory::getUser()->guest && !isExternalDatabase()) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + if ($zugriffsebene == 0 || isExternalDatabase()) + keinZugriff(); + + $uebersicht = $jinput->get('uebersicht', 0, 'INT'); + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $vorhandener_termin = !empty($id); + $erster_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('erster_tag_jahr', 2000, 'INT'), $jinput->get('erster_tag_monat', 1, 'INT'), $jinput->get('erster_tag_tag', 1, 'INT'))); + $mehrtaegig = $jinput->get('mehrtaegig', 0, 'INT'); + if (!$mehrtaegig) + $letzter_tag = $erster_tag; + else + $letzter_tag = normalisiertesDatum(sprintf("%04d-%02d-%02d", $jinput->get('letzter_tag_jahr', 2000, 'INT'), $jinput->get('letzter_tag_monat', 1, 'INT'), $jinput->get('letzter_tag_tag', 1, 'INT'))); + if (empty($erster_tag) || empty($letzter_tag)) die("Wrong date!"); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $bezeichnungszusaetze = $jinput->get('bezeichnungszusaetze', array(), 'ARRAY'); + $bezeichnungszusatz_benutzerdefiniert = trim($jinput->get('bezeichnungszusatz_benutzerdefiniert', '', 'RAW')); + if (!empty($bezeichnungszusatz_benutzerdefiniert)) + array_push($bezeichnungszusaetze, $bezeichnungszusatz_benutzerdefiniert); + $ort = $db->escape(trim($jinput->get('ort', '', 'RAW'))); + $land = $db->escape(trim($jinput->get('land', '', 'RAW'))); + $beschreibung = $db->escape(trim($jinput->get('beschreibung', '', 'RAW'))); + $info = $jinput->get('info', 0, 'INT'); + $url = $info == 0 ? $db->escape(trim($jinput->get('url', '', 'RAW'))) : ''; + $email = $db->escape(trim($jinput->get('email', '', 'RAW'))); + $ergebnisse_url = $db->escape(trim($jinput->get('ergebnisse_url', '', 'RAW'))); + $bestaetigt = $jinput->get('bestaetigt', 0, 'INT'); + $kommentar = $db->escape(trim($jinput->get('kommentar', '', 'RAW'))); + $ueberarbeiten = $jinput->get('ueberarbeiten', 0, 'INT'); + $ergebnisse_live = $jinput->get('ergebnisse_live', 0, 'INT'); + $benachrichtigung_email = $db->escape(trim(str_replace(';', ',', $jinput->get('benachrichtigung_email', '', 'RAW')))); + + // Sicherstellen, dass Überarbeitenaktionen nur durchgeführt werden wenn tatsächlich ein bestehender Termin dahinter steht und der Benutzer Moderator ist + if ($ueberarbeiten && (empty($id) || $zugriffsebene != 2)) + die ("Wrong id"); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_aktion WRITE, #__sportsmanager_termin_zusatz WRITE, #__sportsmanager_termin_symbolanzeige WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $termin_bezug_id = 0; + if (!empty($id)) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE termin_id = $id" . ($zugriffsebene != 2 ? " AND status = 0" : " AND (status = 0 OR status = 2)") . " AND (typ = 0 OR typ = 1)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf'), "Der bisherige Termin existiert nicht mehr."); + } + $termin = $rows[0]; + $termin_bezug_id = $termin->termin_bezug_id; + } + + $query = "INSERT #__sportsmanager_termin" + . "\n SET termin_bezug_id = '$termin_bezug_id'," + . "\n erster_tag = '$erster_tag'," + . "\n letzter_tag = '$letzter_tag'," + . "\n bezeichnung = '$bezeichnung'," + . "\n beschreibung = '$beschreibung'," + . "\n ort = '$ort'," + . "\n land = '$land'," + . "\n url = '$url'," + . "\n email = '$email'," + . "\n ergebnisse_url = '$ergebnisse_url'," + . "\n ergebnisse_live = '$ergebnisse_live'," + . "\n bestaetigt = '$bestaetigt'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $neuer_termin_id = $db->insertid(); + + foreach ($bezeichnungszusaetze as $bezeichnungszusatz) { + $query = "INSERT #__sportsmanager_termin_zusatz" + . "\n SET termin_id = $neuer_termin_id," + . "\n zusatz = '" . $db->escape($bezeichnungszusatz) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + for ($i = 0; $i <= 5; $i++) { + $symbol_id = JRequest::getInt('symbol_id_' . $i, 0); + if ($symbol_id != 0) { + $query = "INSERT #__sportsmanager_termin_symbolanzeige" + . "\n SET termin_id = $neuer_termin_id," + . "\n termin_symbol_id = $symbol_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + if (!$vorhandener_termin) { + $query = "UPDATE #__sportsmanager_termin" + . "\n SET termin_bezug_id = $neuer_termin_id" + . "\n WHERE termin_id = $neuer_termin_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + $dokument_kopieren_gescheitert = 0; + $info_dokument = $_FILES['info_dokument']; + if ($info == 1 && !empty($id)) { + $dokumente = JFolder::files($bilder_pfad, '^' . $id . ' '); + if (empty($dokumente)) { + $dokument_kopieren_gescheitert = 2; + } + else { + $info_dokument_dateiname = substr($dokumente[0], strlen((string) $id) + 1); + $quelle_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $dokumente[0]; + $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $neuer_termin_id . " " . $info_dokument_dateiname; + if (!JFile::copy($quelle_pfad, $ziel_pfad)) + $dokument_kopieren_gescheitert = 2; + } + } + else if ($info == 2 && isset($info_dokument) && !$info_dokument['error']) { + $info_dokument_dateiname = JFile::makeSafe($info_dokument["name"]); + if ($info_dokument["size"] > 8388608) { + $dokument_kopieren_gescheitert = 1; + } + else { + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + $ziel_pfad = $bilder_pfad . DIRECTORY_SEPARATOR . $neuer_termin_id . " " . $info_dokument_dateiname; + if (!JFile::upload($info_dokument["tmp_name"], $ziel_pfad)) + $dokument_kopieren_gescheitert = 2; + } + } + + if (!empty($dokument_kopieren_gescheitert)) { + $query = "DELETE FROM #__sportsmanager_termin_symbolanzeige WHERE termin_id = $neuer_termin_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_termin_zusatz WHERE termin_id = $neuer_termin_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_termin WHERE termin_id = $neuer_termin_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der Termin wurde nicht erstellt weil der Anhang " . ($dokument_kopieren_gescheitert == 1 ? "zu groß ist." : "nicht kopiert werden konnte.")); + + return; + } + + if ($vorhandener_termin && $zugriffsebene != 1) { + $query = "SELECT DISTINCT termin_id" + . "\n FROM #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND " . ($ueberarbeiten ? "(status = 0 OR termin_id = $id)" : "status = 0") . ";"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + foreach ($rows as $row) { + $dokumente = JFolder::files($bilder_pfad, '^' . $row->termin_id . ' '); + foreach ($dokumente as $dokument) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); + } + + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n SET status = 1" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND " . ($ueberarbeiten ? "(status = 0 OR termin_id = $id)" : "status = 0") . ";"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $user_id = JFactory::getUser()->id; + $query = "INSERT #__sportsmanager_termin_aktion" + . "\n SET termin_id = $neuer_termin_id," + . "\n typ = '" . ($vorhandener_termin ? 1 : 0) . "'," // 0: Hinzufügen, 1: Ändern, 2: Entfernen + . "\n benachrichtigung_email = '$benachrichtigung_email'," + . "\n aktion_user_id = '" . ($ueberarbeiten ? $termin->aktion_user_id : $user_id) . "'," + . "\n aktion_zeitpunkt = " . ($ueberarbeiten ? ("'$termin->aktion_zeitpunkt'") : "NOW()") . "," + . "\n aktion_kommentar = '" . ($ueberarbeiten ? $db->escape($termin->aktion_kommentar) : $kommentar) . "'," + . "\n moderation_user_id = " . ($zugriffsebene != 1 ? "'$user_id'" : "NULL") . "," + . "\n moderation_zeitpunkt = " . ($zugriffsebene != 1 ? "NOW()" : "NULL") . "," + . "\n moderation_kommentar = '" . ($ueberarbeiten ? $kommentar : "") . "'," + . "\n status = " . ($zugriffsebene != 1 ? "0" : "2"); // 0: Akzeptiert, 1: Archiviert, 2: Beantragt, 3: Abgelehnt + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $termin_aktion_id = $db->insertid(); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten); + + if ($zugriffsebene == 1) { + HTML_sportsmanager_admin::adminTermineBeantragtBestaetigung($admin_uebersicht); + } + else { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); + } +} + +function adminRemoveTerminForm($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (benutzerZugriff("termine_aendern")) + $zugriffsebene = 2; + else if (einstellungswert("termine_beantragen") == "1" && !JFactory::getUser()->guest && !isExternalDatabase()) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + if ($zugriffsebene == 0 || isExternalDatabase()) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n WHERE termin_id = $id AND status = 0 AND (typ = 0 OR typ = 1)" + . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der bisherige Termin existiert nicht mehr."); + } + $terminaktion = $rows[0]; + + HTML_sportsmanager_admin::adminRemoveTermin($terminaktion, $nur_beantragte, $zugriffsebene, $admin_uebersicht); +} + +function adminRemoveTermin($admin_uebersicht) { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (benutzerZugriff("termine_aendern")) + $zugriffsebene = 2; + else if (einstellungswert("termine_beantragen") == "1" && !JFactory::getUser()->guest && !isExternalDatabase()) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + if ($zugriffsebene == 0 || isExternalDatabase()) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $kommentar = $db->escape(trim($jinput->get('kommentar', '', 'RAW'))); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n WHERE termin_id = $id AND status = 0 AND (typ = 0 OR typ = 1);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine', "Der bisherige Termin existiert nicht mehr."); + } + $termin = $rows[0]; + $termin_bezug_id = $termin->termin_bezug_id; + + if ($zugriffsebene != 1) { + $query = "SELECT DISTINCT termin_id" + . "\n FROM #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + foreach ($rows as $row) { + $dokumente = JFolder::files($bilder_pfad, '^' . $row->termin_id . ' '); + foreach ($dokumente as $dokument) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); + } + + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n SET status = 1" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $user_id = JFactory::getUser()->id; + $query = "INSERT #__sportsmanager_termin_aktion" + . "\n SET termin_id = $id," + . "\n typ = '2'," // 0: Hinzufügen, 1: Ändern, 2: Entfernen + . "\n aktion_user_id = '$user_id'," + . "\n aktion_zeitpunkt = NOW()," + . "\n aktion_kommentar = '$kommentar'," + . "\n moderation_user_id = " . ($zugriffsebene != 1 ? "'$user_id'" : "NULL") . "," + . "\n moderation_zeitpunkt = " . ($zugriffsebene != 1 ? "NOW()" : "NULL") . "," + . "\n moderation_kommentar = ''," + . "\n status = " . ($zugriffsebene != 1 ? "0" : "2"); // 0: Akzeptiert, 1: Archiviert, 2: Beantragt, 3: Abgelehnt + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $termin_aktion_id = $db->insertid(); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + termineEmailBenachrichtigung($termin_aktion_id); + + if ($zugriffsebene == 1) { + HTML_sportsmanager_admin::adminTermineBeantragtBestaetigung($admin_uebersicht); + } + else { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine'); + } +} + +// $aktion = 0: Beantragt, 1: ... +function termineEmailBenachrichtigung($termin_aktion_id, $ueberarbeiten = false) { + $db =& getDatabase(); + $app = &JFactory::getApplication(); + + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, aktion_user.name AS aktion_user_name, aktion_user.email AS aktion_user_email, moderation_user.name AS moderation_user_name, moderation_user.email AS moderation_user_email, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" + . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" + . "\n WHERE termin_aktion_id = $termin_aktion_id" + . "\n GROUP BY #__sportsmanager_termin.termin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) return false; + $terminaktion = $rows[0]; + + $benachrichtigung_moderatoren_informieren = array(); + $benachrichtigung_moderatoren_aendern = array(); + $query = "SELECT DISTINCT email, IF(EXISTS(SELECT * FROM #__sportsmanager_moderator_zugriff AS m2 WHERE zugriff = 'termine_aendern' AND m2.moderator_id = #__sportsmanager_moderator_zugriff.moderator_id), 1, 0) AS termine_aendern" + . "\n FROM #__sportsmanager_moderator" + . "\n INNER JOIN #__sportsmanager_moderator_zugriff USING (moderator_id)" + . "\n INNER JOIN #__users ON moderator_user_id = id" + . "\n WHERE zugriff = 'termine_benachrichtigung'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + foreach ($rows as $row) { + if ($row->termine_aendern) + array_push($benachrichtigung_moderatoren_aendern, $row->email); + else + array_push($benachrichtigung_moderatoren_informieren, $row->email); + } + + $benachrichtigung_benutzer = array(); + $aktion_user =& JFactory::getUser($terminaktion->aktion_user_id); + if (($terminaktion->status == 2 && !empty($aktion_user->id) && !empty($aktion_user->email)) || ($terminaktion->status != 2 && !empty($aktion_user->id) && !empty($aktion_user->email) && ($terminaktion->aktion_user_id != $terminaktion->moderation_user_id || $terminaktion->aktion_zeitpunkt != $terminaktion->moderation_zeitpunkt))) + array_push($benachrichtigung_benutzer, $aktion_user->email); + $benachrichtigung_emails = explode(",", $terminaktion->benachrichtigung_email); + $benachrichtigung_alle_low = array_map('strtolower', array_merge($benachrichtigung_benutzer, $benachrichtigung_moderatoren_aendern, $benachrichtigung_moderatoren_informieren)); + foreach ($benachrichtigung_emails as $email) { + $email_trimmed = trim($email); + if (!in_array(strtolower($email_trimmed), $benachrichtigung_alle_low)) + array_push($benachrichtigung_benutzer, $email_trimmed); + } + + $termin_beschreibung = "\r\n" + . "Datum:\r\n" + . "" . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true) . ($terminaktion->bestaetigt ? "" : " (in Planung)") . "\r\n" + . "\r\n" + . "\r\n" + . "Veranstaltung:\r\n" + . "" . htmlentities_utf8($terminaktion->bezeichnung) . "\r\n" + . "\r\n"; + if (!empty($terminaktion->zusaetze)) { + $termin_beschreibung .= "\r\n" + . "Zusätze:\r\n" + . "" . htmlentities_utf8($terminaktion->zusaetze) . "\r\n" + . "\r\n"; + } + if (!empty($terminaktion->ort)) { + $termin_beschreibung .= "\r\n" + . "Ort:\r\n" + . "" . htmlentities_utf8($terminaktion->ort) . "\r\n" + . "\r\n"; + } + if (!empty($terminaktion->land)) { + $termin_beschreibung .= "\r\n" + . "Land:\r\n" + . "" . htmlentities_utf8($terminaktion->land) . "\r\n" + . "\r\n"; + } + if (!empty($terminaktion->beschreibung)) { + $termin_beschreibung .= "\r\n" + . "Beschreibung:\r\n" + . "" . htmlentities_utf8($terminaktion->beschreibung) . "\r\n" + . "\r\n"; + } + $info_dokument_dateiname = terminDokumentname($terminaktion->termin_id); + if ($info_dokument_dateiname !== false) { + $termin_beschreibung .= "\r\n" + . "Weitere Informationen:\r\n" + . "termin_id, -1) . "\" target=\"_blank\">" . htmlentities_utf8(NichtLeererString($info_dokument_dateiname)) . "\r\n" + . "\r\n"; + } + else if (!empty($terminaktion->url)) { + if (strpos($terminaktion->url, "://") === false) { + $termin_url_anzeige = $terminaktion->url; + $termin_url = "http://" . $terminaktion->url; + } + else { + $termin_url_anzeige = substr($terminaktion->url, 0, 7) == "http://" ? substr($terminaktion->url, 7) : $terminaktion->url; + $termin_url = $terminaktion->url; + } + $termin_beschreibung .= "\r\n" + . "Weitere Informationen:\r\n" + . "" . htmlentities_utf8($termin_url_anzeige) . "\r\n" + . "\r\n"; + } + if (!empty($terminaktion->email)) { + $termin_beschreibung .= "\r\n" + . "E-Mail öffentlich:\r\n" + . "email) . "\">" . htmlentities_utf8($terminaktion->email) . "\r\n" + . "\r\n"; + } + if (!empty($benachrichtigung_emails)) { + $termin_beschreibung .= "\r\n" + . "E-Mail bei Änderungen:\r\n" + . ""; + foreach ($benachrichtigung_emails as $index => $email) { + $email_trimmed = trim($email); + $termin_beschreibung .= ($index > 0 ? ", " : "") . "" . htmlentities_utf8($email_trimmed) . ""; + } + $termin_beschreibung .= "\r\n" + . "\r\n"; + } + if (!empty($terminaktion->ergebnisse_url)) { + if (strpos($terminaktion->ergebnisse_url, "://") === false) { + $termin_url_anzeige = $terminaktion->ergebnisse_url; + $termin_url = "http://" . $terminaktion->ergebnisse_url; + } + else { + $termin_url_anzeige = substr($terminaktion->ergebnisse_url, 0, 7) == "http://" ? substr($terminaktion->ergebnisse_url, 7) : $terminaktion->ergebnisse_url; + $termin_url = $terminaktion->ergebnisse_url; + } + $termin_beschreibung .= "\r\n" + . "" . ($terminaktion->ergebnisse_live ? "Live-" : "") . "Ergebnisse:\r\n" + . "" . htmlentities_utf8($termin_url_anzeige) . "\r\n" + . "\r\n"; + } + + $status = array(0 => "Akzeptiert", 1 => "Archiviert", 2 => "Beantragt", 3 => "Abgelehnt"); + $aktion = array(0 => "Hinzufügen", 1 => "Ändern", 2 => "Entfernen"); + if (empty($terminaktion->aktion_user_email)) + $aktion_user = htmlentities_utf8($terminaktion->aktion_user_name); + else + $aktion_user = "aktion_user_email) . "\">" . htmlentities_utf8($terminaktion->aktion_user_name) . ""; + if (empty($terminaktion->moderation_zeitpunkt)) + $moderation_user = ""; + else if (empty($terminaktion->aktion_user_email)) + $moderation_user = htmlentities_utf8($terminaktion->moderation_user_name); + else + $moderation_user = "moderation_user_email) . "\">" . htmlentities_utf8($terminaktion->moderation_user_name) . ""; + $termin_moderationsstatus = "\r\n" + . " \r\n" + . "\r\n" + . "\r\n" + . "Status:\r\n" + . "" . htmlentities_utf8($status[$terminaktion->status]) . "\r\n" + . "\r\n" + . "\r\n" + . "Aktionstyp:\r\n" + . "" . htmlentities_utf8($aktion[$terminaktion->typ]) . "\r\n" + . "\r\n" + . "\r\n" + . "Erstellung:\r\n" + . "" . FormatiertesDatum($terminaktion->aktion_zeitpunkt, true, false) . " von " . $aktion_user . "\r\n" + . "\r\n"; + if (!empty($terminaktion->aktion_kommentar)) { + $termin_moderationsstatus .= "\r\n" + . "Erstellerkommentar:\r\n" + . "" . nl2br(htmlentities_utf8($terminaktion->aktion_kommentar)) . "\r\n" + . "\r\n"; + } + $termin_moderationsstatus .= "\r\n" + . "Moderation:\r\n" + . "" . (empty($terminaktion->moderation_zeitpunkt) ? "Nicht erfolgt" : (FormatiertesDatum($terminaktion->moderation_zeitpunkt, true, false) . " von " . $moderation_user)) . "\r\n" + . "\r\n"; + if (!empty($terminaktion->moderation_kommentar)) { + $termin_moderationsstatus .= "\r\n" + . "Moderatorkommentar:\r\n" + . "" . nl2br(htmlentities_utf8($terminaktion->moderation_kommentar)) . "\r\n" + . "\r\n"; + } + + $from = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $mode = 1; + $cc = null; + $bcc = null; + $attachment = null; + $replyto = null; + $replytoname = null; + if ($terminaktion->status == 2) { + $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt: " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); + $body = "

Das " . htmlentities_utf8($aktion[$terminaktion->typ]) . " des folgenden Termins wurde beantragt und wird nun von den Moderatoren geprüft. Sobald der Termin bearbeitet wurde, wird eine E-Mail-Benachrichtigung verschickt.

"; + $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; + } + else { + $subject = "Termin " . $aktion[$terminaktion->typ] . " " . ($terminaktion->status == 0 ? "akzeptiert" : "abgelehnt") . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); + $body = "

Das " . htmlentities_utf8($aktion[$terminaktion->typ]) . " des folgenden Termins wurde " . ($terminaktion->status == 0 ? ($ueberarbeiten ? "in überarbeiteter Form akzeptiert" : "akzeptiert") : "abgelehnt") . ".

"; + $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; + } + foreach ($benachrichtigung_emails as $email) + JFactory::getMailer()->sendMail($from, $fromname, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyto, $replytoname); + + $from = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $mode = 1; + $cc = null; + $bcc = null; + $attachment = null; + $replyto = null; + $replytoname = null; + if ($terminaktion->status == 2) { + $subject = "Termin " . $aktion[$terminaktion->typ] . " beantragt von " . $terminaktion->aktion_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); + $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " beantragt:

\r\n"; + } + else if ($terminaktion->status == 0) { + $subject = "Termin " . $aktion[$terminaktion->typ] . " akzeptiert von " . $terminaktion->moderation_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); + $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " akzeptiert:

"; + } + else { + $subject = "Termin " . $aktion[$terminaktion->typ] . " abgelehnt von " . $terminaktion->moderation_user_name . ": " . $terminaktion->bezeichnung . " am " . FormatierterTermin($terminaktion->erster_tag, $terminaktion->letzter_tag, true); + $body = "

Termin " . htmlentities_utf8($aktion[$terminaktion->typ]) . " abgelehnt:

"; + } + $body .= "\r\n" . $termin_beschreibung . $termin_moderationsstatus . "
\r\n"; + foreach ($benachrichtigung_moderatoren_informieren as $email) + JFactory::getMailer()->sendMail($from, $fromname, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyto, $replytoname); + + $body .= "

Bitte termin_aktion_id, -1) . "\">hier klicken, um den Termin zu moderieren.

\r\n"; + foreach ($benachrichtigung_moderatoren_aendern as $email) + JFactory::getMailer()->sendMail($from, $fromname, $email, $subject, $body, $mode, $cc, $bcc, $attachment, $replyto, $replytoname); +} + +function adminTerminModerieren($admin_uebersicht) { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern") || isExternalDatabase()) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + $uebersicht = $jinput->get('uebersicht', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); + + return; + } + + if ($jinput->get('ueberarbeiten', false, 'BOOL')) { + $termin_id = $jinput->get('termin_id', 0, 'INT'); + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termin_edit&ueberarbeiten=1&id=' . $termin_id . ($nur_beantragte ? '&nur_beantragte=1' : '')); + + return; + } + + $akzeptieren = $jinput->get('akzeptieren', false, 'BOOL'); + $kommentar = $db->escape(trim($jinput->get('kommentar', '', 'RAW'))); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE termin_aktion_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $terminaktion = $rows[0]; + $termin_bezug_id = $terminaktion->termin_bezug_id; + + if ($terminaktion->status != 2) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : ''), "Die Moderation wurde nicht umgesetzt weil der Termin nicht mehr im Beantragt-Status war."); + } + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + if ($akzeptieren) { + $query = "SELECT DISTINCT termin_id" + . "\n FROM #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + foreach ($rows as $row) { + $dokumente = JFolder::files($bilder_pfad, '^' . $row->termin_id . ' '); + foreach ($dokumente as $dokument) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); + } + + if ($terminaktion->typ == 2) { + $dokumente = JFolder::files($bilder_pfad, '^' . $terminaktion->termin_id . ' '); + foreach ($dokumente as $dokument) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); + } + + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n SET status = 1" + . "\n WHERE termin_bezug_id = $termin_bezug_id AND status = 0;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + else { + if ($terminaktion->typ != 2) { + $dokumente = JFolder::files($bilder_pfad, '^' . $terminaktion->termin_id . ' '); + foreach ($dokumente as $dokument) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $dokument); + } + } + + $user_id = JFactory::getUser()->id; + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n INNER JOIN #__sportsmanager_termin USING (termin_id)" + . "\n SET status = " . ($akzeptieren ? 0 : 3) . "," + . "\n moderation_user_id = $user_id," + . "\n moderation_zeitpunkt = NOW()," + . "\n moderation_kommentar = '$kommentar'" + . "\n WHERE termin_aktion_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + termineEmailBenachrichtigung($id); + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . ($uebersicht ? 'termine' : 'termine_verlauf') . ($nur_beantragte ? '&nur_beantragte=1' : '')); +} + +function adminTermineVerlauf($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + + if ($nur_beantragte) { + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n LEFT JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" + . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" + . "\n WHERE status = 2" + . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" + . "\n ORDER BY aktion_zeitpunkt, bezeichnung" + . "\n LIMIT 1000"; + } + else { + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" + . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" + . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" + . "\n ORDER BY aktion_zeitpunkt DESC, bezeichnung" + . "\n LIMIT 1000"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $terminaktionen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineVerlauf($terminaktionen, $nur_beantragte, $admin_uebersicht); +} + +function terminDokument() { + $db =& getDatabase(); + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $bezug_id = $jinput->get('bezug_id', 0, 'INT'); + + if (benutzerZugriff("termine_aendern") || benutzerZugriff("termine_benachrichtigung")) + $zugriffsebene = 1; + else + $zugriffsebene = 0; + + if (!empty($bezug_id)) { + $query = "SELECT termin_id" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE termin_bezug_id = $bezug_id AND status = 0 AND (typ = 0 OR typ = 1)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $termin_vorhanden = count($rows) > 0; + if ($termin_vorhanden) + $id = $rows[0]->termin_id; + } + else { + $query = "SELECT IF (EXISTS (SELECT *" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n WHERE termin_id = $id" . ($zugriffsebene == 0 ? " AND status = 0 AND (typ = 0 OR typ = 1)" : "") . "), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $termin_vorhanden = $db->loadResult(); + } + + if (!$termin_vorhanden) + keinZugriff(true); + + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine'; + $dokumente = JFolder::files($pfad, '^' . $id . ' '); + + if (empty($dokumente)) { + redirectSportsManagerURL(null, "Der Anhang existiert nicht mehr."); + + return; + } + + $extension = strtolower(JFile::getExt($dokumente[0])); + if ($extension == "pdf") + $mm_type = "application/pdf"; + else + $mm_type = "application/octet-stream"; + + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header("Pragma: public"); + header("Expires: 0"); + header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header("Cache-Control: public"); + header("Content-Description: File Transfer"); + header("Content-Type: " . $mm_type); + header("Content-Length: " . (string) (filesize($pfad . DIRECTORY_SEPARATOR . $dokumente[0]))); + header('Content-Disposition: inline; filename="' . substr($dokumente[0], strlen((string) $id) + 1) . '"'); + header("Content-Transfer-Encoding: binary\n"); + + readfile($pfad . DIRECTORY_SEPARATOR . $dokumente[0]); + + exit(); +} + +function adminTerminDetails($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $nur_beantragte = $jinput->get('nur_beantragte', 0, 'INT'); + $uebersicht = $jinput->get('uebersicht', 0, 'INT'); + + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, aktion_user.name AS aktion_user_name, aktion_user.email AS aktion_user_email, moderation_user.name AS moderation_user_name, moderation_user.email AS moderation_user_email, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" + . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" + . "\n WHERE termin_aktion_id = $id" + . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $terminaktion = $rows[0]; + + $query = "SELECT #__sportsmanager_termin.*, #__sportsmanager_termin_aktion.*, DATEDIFF(erster_tag, NOW()) AS datumsdifferenz, aktion_user.name AS aktion_user_name, moderation_user.name AS moderation_user_name, GROUP_CONCAT(zusatz ORDER BY zusatz SEPARATOR ', ') AS zusaetze" + . "\n FROM #__sportsmanager_termin" + . "\n INNER JOIN #__sportsmanager_termin_aktion USING (termin_id)" + . "\n LEFT JOIN #__sportsmanager_termin_zusatz USING (termin_id)" + . "\n LEFT JOIN #__users AS aktion_user ON aktion_user_id = aktion_user.id" + . "\n LEFT JOIN #__users AS moderation_user ON moderation_user_id = moderation_user.id" + . "\n WHERE termin_bezug_id = $terminaktion->termin_bezug_id" + . "\n GROUP BY #__sportsmanager_termin_aktion.termin_aktion_id" + . "\n ORDER BY aktion_zeitpunkt DESC, bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $terminaktionen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTerminDetails($terminaktion, $terminaktionen, $nur_beantragte, $admin_uebersicht, $uebersicht, isExternalDatabase()); +} + +function adminTermineBezeichnungen($admin_uebersicht) { + $db =& getDatabase(); + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_bezeichnung" + . "\n ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bezeichnungen = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineBezeichnungen($bezeichnungen, $admin_uebersicht); +} + +function adminEditTermineBezeichnung($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if (empty($id)) { + $bezeichnung = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $bezeichnung = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTermineBezeichnung($bezeichnung, $admin_uebersicht); +} + +function adminSaveTermineBezeichnung($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $termine_umbenennen = $jinput->get('termine_umbenennen', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_bezeichnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!empty($id) && $termine_umbenennen) { + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $alte_bezeichnung = $db->escape($rows[0]->bezeichnung); + + $query = "UPDATE #__sportsmanager_termin" + . "\n SET bezeichnung = '$bezeichnung'" + . "\n WHERE bezeichnung = '$alte_bezeichnung'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnung WHERE bezeichnung = '$bezeichnung' AND termin_bezeichnung_id != $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + // Datenbankeintrag verwerfen, falls Bezeichnung schon existiert + if (count($rows) > 0) { + if (!empty($id)) { + $query = "DELETE FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (empty($id)) { + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '$bezeichnung'"; + } + else { + $query = "UPDATE #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '$bezeichnung'" + . "\n WHERE termin_bezeichnung_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); +} + +function adminRemoveTermineBezeichnung($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_termin_bezeichnung WHERE termin_bezeichnung_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungen'); +} + +function adminTermineBezeichnungszusaetze($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_bezeichnungszusatz" + . "\n ORDER BY bezeichnungszusatz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bezeichnungszusaetze = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineBezeichnungszusaetze($bezeichnungszusaetze, $admin_uebersicht); +} + +function adminEditTermineBezeichnungszusatz($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if (empty($id)) { + $bezeichnungszusatz = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $bezeichnungszusatz = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTermineBezeichnungszusatz($bezeichnungszusatz, $admin_uebersicht); +} + +function adminSaveTermineBezeichnungszusatz($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bezeichnungszusatz = $db->escape(trim($jinput->get('bezeichnungszusatz', '', 'RAW'))); + $titel = $db->escape(trim($jinput->get('titel', '', 'RAW'))); + $termine_umbenennen = $jinput->get('termine_umbenennen', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_bezeichnungszusatz WRITE, #__sportsmanager_termin_zusatz WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!empty($id) && $termine_umbenennen) { + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $alter_bezeichnungszusatz = $db->escape($rows[0]->bezeichnungszusatz); + + $query = "UPDATE #__sportsmanager_termin_zusatz" + . "\n SET zusatz = '$bezeichnungszusatz'" + . "\n WHERE zusatz = '$alter_bezeichnungszusatz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_termin_bezeichnungszusatz WHERE bezeichnungszusatz = '$bezeichnungszusatz' AND termin_bezeichnungszusatz_id != $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + // Datenbankeintrag verwerfen, falls Bezeichnungszusatz schon existiert + if (count($rows) > 0) { + if (!empty($id)) { + $query = "DELETE FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (empty($id)) { + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = '$bezeichnungszusatz'," + . "\n titel = '$titel'"; + } + else { + $query = "UPDATE #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = '$bezeichnungszusatz'," + . "\n titel = '$titel'" + . "\n WHERE termin_bezeichnungszusatz_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); +} + +function adminRemoveTermineBezeichnungszusatz($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_termin_bezeichnungszusatz WHERE termin_bezeichnungszusatz_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bezeichnungszusaetze'); +} + +function adminTermineBundeslaender($admin_uebersicht) { + $db =& getDatabase(); + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_bundesland" + . "\n ORDER BY bundesland"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $bundeslaender = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineBundeslaender($bundeslaender, $admin_uebersicht); +} + +function adminEditTermineBundesland($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if (empty($id)) { + $bundesland = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $bundesland = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTermineBundesland($bundesland, $admin_uebersicht); +} + +function adminSaveTermineBundesland($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $bundesland = $db->escape(trim($jinput->get('bundesland', '', 'RAW'))); + $termine_umbenennen = $jinput->get('termine_umbenennen', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_bundesland WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($termine_umbenennen) { + $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $altes_bundesland = $db->escape($rows[0]->bundesland); + + $query = "UPDATE #__sportsmanager_termin" + . "\n SET land = '$bundesland'" + . "\n WHERE land = '$altes_bundesland'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_termin_bundesland WHERE bundesland = '$bundesland' AND termin_bundesland_id != $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + // Datenbankeintrag verwerfen, falls Bundesland schon existiert + if (count($rows) > 0) { + if (!empty($id)) { + $query = "DELETE FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (empty($id)) { + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = '$bundesland'"; + } + else { + $query = "UPDATE #__sportsmanager_termin_bundesland" + . "\n SET bundesland = '$bundesland'" + . "\n WHERE termin_bundesland_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); +} + +function adminRemoveTermineBundesland($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_termin_bundesland WHERE termin_bundesland_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_bundeslaender'); +} + +function adminTermineLaender($admin_uebersicht) { + $db =& getDatabase(); + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_land" + . "\n ORDER BY land"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $laender = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineLaender($laender, $admin_uebersicht); +} + +function adminEditTermineLand($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if (empty($id)) { + $land = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_termin_land WHERE termin_land_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $land = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTermineLand($land, $admin_uebersicht); +} + +function adminSaveTermineLand($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $land = $db->escape(trim($jinput->get('land', '', 'RAW'))); + $termine_umbenennen = $jinput->get('termine_umbenennen', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_termin WRITE, #__sportsmanager_termin_land WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($termine_umbenennen) { + $query = "SELECT * FROM #__sportsmanager_termin_land WHERE termin_land_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $altes_bundesland = $db->escape($rows[0]->bundesland); + + $query = "UPDATE #__sportsmanager_termin" + . "\n SET land = '$land'" + . "\n WHERE land = '$altes_land'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_termin_land WHERE land = '$land' AND termin_land_id != $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + // Datenbankeintrag verwerfen, falls Bundesland schon existiert + if (count($rows) > 0) { + if (!empty($id)) { + $query = "DELETE FROM #__sportsmanager_termin_land WHERE termin_land_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + if (empty($id)) { + $query = "INSERT #__sportsmanager_termin_land" + . "\n SET land = '$land'"; + } + else { + $query = "UPDATE #__sportsmanager_termin_land" + . "\n SET land = '$land'" + . "\n WHERE termin_land_id = $id"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); +} + +function adminRemoveTermineLand($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "DELETE FROM #__sportsmanager_termin_land WHERE termin_land_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_laender'); +} + +function adminTermineSymbole($admin_uebersicht) { + $db =& getDatabase(); + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_termin_symbol" + . "\n ORDER BY status DESC, symboltitel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $symbole = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminTermineSymbole($symbole, $admin_uebersicht); +} + +function adminEditTermineSymbol($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + if (empty($id)) { + $symbol = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_termin_symbol WHERE termin_symbol_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die ("Wrong id"); + $symbol = $rows[0]; + } + + HTML_sportsmanager_admin::adminEditTermineSymbol($symbol, $admin_uebersicht); +} + +function adminSaveTermineSymbol($admin_uebersicht) { + $db =& getDatabase(); + global $_FILES; + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + if (JRequest::getBool('cancel')) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); + + return; + } + + $id = $jinput->get('id', 0, 'INT'); + $symboltitel = $db->escape(trim($jinput->get('symboltitel', '', 'RAW'))); + $bildbeibehalten = $jinput->get('bildbeibehalten', 0, 'INT'); + $status = $jinput->get('status', 0, 'INT'); + + if ($id == 0) { + $query = "INSERT INTO #__sportsmanager_termin_symbol (symboltitel,status)" + . "\n VALUES ('$symboltitel', '$status');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_termin_symbol" + . "\n SET symboltitel = '$symboltitel', " + . "\n status = '$status'" + . "\n WHERE termin_symbol_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($bildbeibehalten == 0) { + bildLoeschen('terminsymbole', $id); + + if (!empty($_FILES["bild"]["tmp_name"])) { + if (is_uploaded_file($_FILES["bild"]["tmp_name"])) { + $size = getimagesize($_FILES["bild"]["tmp_name"]); + if ($size == false + || ($size[2] != IMAGETYPE_JPEG && $size[2] != IMAGETYPE_PNG) + || ($size[0] > 8192 || $size[1] > 8192)) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole', JText::_('COM_SPORTSMANAGER_PLAYER_WRONG_IMAGE_FORMAT')); + + return; + } + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'terminsymbole'; + if (!JFile::copy($_FILES["bild"]["tmp_name"], $bilder_pfad . DIRECTORY_SEPARATOR . $id . ($size[2] == IMAGETYPE_PNG ? '.png' : '.jpg'))) { + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole', JText::_('COM_SPORTSMANAGER_IMAGE_COULD_NOT_COPIED')); + + return; + } + } + } + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); +} + +function adminRemoveTermineSymbol($admin_uebersicht) { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("termine_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_termin_symbolanzeige WRITE, #__sportsmanager_termin_symbol WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_termin_symbolanzeige WHERE termin_symbol_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_termin_symbol WHERE termin_symbol_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + bildLoeschen("terminsymbole", $id); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=' . ($admin_uebersicht ? 'admin_' : '') . 'termine_symbole'); +} + +function adminEditIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $vorlage = $jinput->get('vorlage', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern")) + keinZugriff(true); + + if ($id == 0) + $row = null; + else { + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + } + + $query = "SELECT * FROM #__sportsmanager_veranstalter ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + $query = "SELECT nummer, bezeichnung FROM #__sportsmanager_kategorie WHERE typ = 6 ORDER BY nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows_kategorien = $db->loadObjectList(); + + $kategorien = array(); + foreach ($rows_kategorien as $kategorie) + $kategorien[$kategorie->nummer] = $kategorie->bezeichnung; + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (empty($id)) { + $berechtigt_fuer_individualwettbewerb = array(); + } + else { + $query = "SELECT #__sportsmanager_berechtigt_fuer_individualwettbewerb.* FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb, #__users WHERE berechtigt_user_id = id AND berechtigt_individualwettbewerb_id = $id ORDER BY username, name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechtigt_fuer_individualwettbewerb = $db->loadObjectList(); + } + + $query = "SELECT * FROM #__users ORDER BY name, username"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $users = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditIndividualwettbewerb($row, $veranstalter, $kategorien, $saisons, $users, $berechtigt_fuer_individualwettbewerb, $vorlage); +} + +function adminSaveIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("individualwettbewerbe_aendern")) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $vorlage = $jinput->get('vorlage', 0, 'INT'); + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $bezeichnung = $db->escape(trim($jinput->get('bezeichnung', '', 'RAW'))); + $saison_id = $jinput->get('saison_id', 0, 'INT'); + $saetze = $jinput->get('saetze', 0, 'INT'); + $tore = $jinput->get('tore', 0, 'INT'); + $tabellenwertung = $jinput->get('tabellenwertung', 0, 'INT'); + $elo_wertung = $jinput->get('elo_wertung', 0, 'INT'); + $status = $jinput->get('status', 0, 'INT'); + $reihenfolge = $jinput->get('reihenfolge', 0, 'INT'); + $kategorie = $jinput->get('kategorie', 0, 'INT'); + $berechtigt_fuer_individualwettbewerb_user_ids = array(); + for ($i = 1; $i <= 6; $i++) { + $berechtigt_user_id = $jinput->get('berechtigt_fuer_individualwettbewerb_user_' . $i . '_id', 0, 'INT'); + if (!empty($berechtigt_user_id) && !in_array($berechtigt_user_id, $berechtigt_fuer_individualwettbewerb_user_ids)) + array_push($berechtigt_fuer_individualwettbewerb_user_ids, $berechtigt_user_id); + } + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb WRITE, #__sportsmanager_individualwettbewerb_spiel READ, #__sportsmanager_berechtigt_fuer_individualwettbewerb WRITE, #__sportsmanager_individualwettbewerb_platzierung READ, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_aktualisieren = false; + if ($vorlage) { + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $query = "INSERT #__sportsmanager_individualwettbewerb" + . "\n SET veranstalter_id = '$veranstalterid'," + . "\n bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," + . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," + . "\n tabellenwertung = '$tabellenwertung'," + . "\n elo_wertung = '$elo_wertung'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + + foreach ($rows as $row) { + $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET individualwettbewerb_id = '$id'," + . "\n spieler_id = '" . $row->spieler_id . "'," + . "\n platz = '" . $row->platz . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else if ($id == 0) { + $query = "INSERT #__sportsmanager_individualwettbewerb" + . "\n SET veranstalter_id = '$veranstalterid'," + . "\n bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," + . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," + . "\n tabellenwertung = '$tabellenwertung'," + . "\n elo_wertung = '$elo_wertung'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht', "Der Individualwettbewerb existiert nicht mehr!"); + + return; + } + $row = $rows[0]; + + $query = "UPDATE #__sportsmanager_individualwettbewerb" + . "\n SET veranstalter_id = '$veranstalterid'," + . "\n bezeichnung = '$bezeichnung'," + . "\n saison_id = '$saison_id'," + . "\n saetze = " . ($saetze != 0 ? "'$saetze'" : "null") . "," + . "\n tore = " . ($tore != 0 ? "'$tore'" : "null") . "," + . "\n tabellenwertung = '$tabellenwertung'," + . "\n elo_wertung = '$elo_wertung'," + . "\n status = '$status'," + . "\n reihenfolge = '$reihenfolge'," + . "\n kategorie = '$kategorie'" + . "\n WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (($elo_wertung != 0 && $status != 0) != ($row->elo_wertung != 0 && $row->status != 0)) + $elo_aktualisieren = true; + } + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; + if (!empty($berechtigt_fuer_individualwettbewerb_user_ids)) + $query .= " AND berechtigt_user_id NOT IN (" . implode($berechtigt_fuer_individualwettbewerb_user_ids, ", ") . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $index = array_search($row->berechtigt_user_id, $berechtigt_fuer_individualwettbewerb_user_ids); + if ($index !== false) { + unset($berechtigt_fuer_individualwettbewerb_user_ids[$index]); + } + } + + foreach ($berechtigt_fuer_individualwettbewerb_user_ids as $berechtigt_user_id) { + $query = "INSERT INTO #__sportsmanager_berechtigt_fuer_individualwettbewerb (berechtigt_user_id, berechtigt_individualwettbewerb_id) VALUES ('$berechtigt_user_id', '$id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT DATE(MIN(zeitpunkt)) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktualisieren_ab_datum = $db->loadResult(); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($elo_aktualisieren && $aktualisieren_ab_datum != null) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + + individualwettbewerbTabelleAktualisieren($id); + spielerstatistikAktualisieren(0, 0, $id); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function individualwettbewerbTabelleAktualisieren($id = null) { + $db =& getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_spiel READ, #__sportsmanager_individualwettbewerb_platzierung WRITE, #__sportsmanager_individualwettbewerb_ausgangsplatzierung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb"; + if (!empty($id)) + $query .= "\n WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + foreach ($individualwettbewerbe as $individualwettbewerb) { + $individualwettbewerb_id = $individualwettbewerb->individualwettbewerb_id; + if ($individualwettbewerb->tabellenwertung == 0) { + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $individualwettbewerb_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + continue; + } + + $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id" + . "\n ORDER BY zeitpunkt, individualwettbewerb_spiel_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id" + . "\n ORDER BY platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + + $platzierungen = array(); + foreach ($ausgangsplatzierungen as $ausgangsplatzierung) + array_push($platzierungen, $ausgangsplatzierung->spieler_id); + + foreach ($spiele as $spiel) { + if ($spiel->ergebnis == 0) + continue; + if ($spiel->heim_spieler_2_id != null) // Bis auf Weiteres keine Doppelspiele für Tabelle berücksichtigen + continue; + $sieger_spieler_id = $spiel->ergebnis == 1 ? $spiel->heim_spieler_1_id : $spiel->gast_spieler_1_id; + $verlierer_spieler_id = $spiel->ergebnis != 1 ? $spiel->heim_spieler_1_id : $spiel->gast_spieler_1_id; + + if (!in_array($verlierer_spieler_id, $platzierungen)) + array_push($platzierungen, $verlierer_spieler_id); + + $sieger_platzierung = array_search($sieger_spieler_id, $platzierungen); + $verlierer_platzierung = array_search($verlierer_spieler_id, $platzierungen); + if ($sieger_platzierung !== false) { + if ($sieger_platzierung < $verlierer_platzierung) + continue; + array_splice($platzierungen, $sieger_platzierung, 1); + } + array_splice($platzierungen, $verlierer_platzierung, 0, $sieger_spieler_id); + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_platzierung" + . "\n WHERE individualwettbewerb_id = $individualwettbewerb_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $platzierungen_vorhanden = $db->loadObjectList(); + + $platzierungen_uebrig = $platzierungen; + foreach ($platzierungen_vorhanden as $platzierung_vorhanden) { + $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); + if ($index !== false) { + $platz = $index + 1; + if ($platzierung_vorhanden->platz != $platz) { + $query = "UPDATE #__sportsmanager_individualwettbewerb_platzierung" + . "\n SET platz = '$platz'" + . "\n WHERE individualwettbewerb_platzierung_id = " . $platzierung_vorhanden->individualwettbewerb_platzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); + unset($platzierungen_uebrig[$index_uebrig]); + } + else { + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_platzierung_id = " . $platzierung_vorhanden->individualwettbewerb_platzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + foreach ($platzierungen_uebrig as $platzierung_uebrig) { + $index = array_search($platzierung_uebrig, $platzierungen); + $platz = $index + 1; + $query = "INSERT #__sportsmanager_individualwettbewerb_platzierung" + . "\n SET individualwettbewerb_id = '$individualwettbewerb_id'," + . "\n spieler_id = '$platzierung_uebrig'," + . "\n platz = '$platz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } +} + +function adminRemoveIndividualwettbewerb() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("individualwettbewerbe_aendern")) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb WRITE, #__sportsmanager_individualwettbewerb_spiel WRITE, #__sportsmanager_individualwettbewerb_platzierung WRITE, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE, #__sportsmanager_berechtigt_fuer_individualwettbewerb WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_uebersicht', "Der Individualwettbewerb existiert nicht mehr!"); + + return; + } + $row = $rows[0]; + + $query = "SELECT DATE(MIN(zeitpunkt)) FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktualisieren_ab_datum = $db->loadResult(); + + $query = "DELETE FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb WHERE berechtigt_individualwettbewerb_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_platzierung WHERE individualwettbewerb_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + wannGespieltAktualisieren(); + if ($row->elo_wertung && $aktualisieren_ab_datum != null) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + spielerstatistikAktualisieren(0, 0, $id); + + redirectSportsManagerURL('&task=admin_uebersicht'); +} + +function adminIndividualwettbewerbSpiele() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) + keinZugriff(true); + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(true); + + $query = "SELECT *," + . " theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname," + . " theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname," + . " tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname," + . " tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = gast_spieler_2_id" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY zeitpunkt DESC, individualwettbewerb_spiel_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + if ($row->tabellenwertung) { + $query = "SELECT spieler_id, nachname, vorname, vereinsname, aktueller_verein_id, platz, bild_ausblenden" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + } + else { + $ausgangsplatzierungen = null; + } + + HTML_sportsmanager_admin::adminIndividualwettbewerbSpiele($row, $spiele, $ausgangsplatzierungen); +} + +function adminEditIndividualwettbewerbSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) + keinZugriff(true); + + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $individualwettbewerb = $rows[0]; + + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(true); + + $id = $jinput->get('id', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'RAW'); + + if (empty($id)) { + $row = null; + $spiel_spieler_ids = null; + } + else { + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $row = $rows[0]; + + $spiel_spieler_ids = array($row->heim_spieler_1_id, $row->gast_spieler_1_id); + if ($row->heim_spieler_2_id != null) + array_push($spiel_spieler_ids, $row->heim_spieler_2_id, $row->gast_spieler_2_id); + $typ = $row->heim_spieler_2_id != null ? "doppel" : "einzel"; + } + + $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id)" . (!empty($spiel_spieler_ids) ? (" OR spieler_id IN (" . implode($spiel_spieler_ids, ", ") . ")") : "") + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditIndividualwettbewerbSpiel($row, $typ, $individualwettbewerb, $spieler); +} + +function adminSaveIndividualwettbewerbSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'RAW'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#sid' . $id); + + return; + } + + $datum = normalisiertesDatum($jinput->get('datum_jahr', 0, 'INT') == 0 ? null : sprintf("%04d-%02d-%02d", $jinput->get('datum_jahr', 0, 'INT'), $jinput->get('datum_monat', 0, 'INT'), $jinput->get('datum_tag', 0, 'INT'))); + $uhrzeit = normalisierteUhrzeit(sprintf(" %02d-%02d-00", $jinput->get('uhrzeit_stunden', 0, 'INT'), $jinput->get('uhrzeit_minuten', 0, 'INT'))); + $zeitpunkt = $datum == null || $uhrzeit == null ? null : ($datum . " " . $uhrzeit); + + if ($zeitpunkt == null) { + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#sid' . id, "Es muss ein gültiges Datum angegeben werden."); + + return; + } + + $ergebnis_punkte_heim = $jinput->get('ergebnis_punkte_heim', array(), 'ARRAY'); + $ergebnis_punkte_gast = $jinput->get('ergebnis_punkte_gast', array(), 'ARRAY'); + + $ergebnis_detailliert = ""; + $saetze_heim = 0; + $saetze_gast = 0; + for ($i = 0; $i < count($ergebnis_punkte_heim); $i++) { + if (($ergebnis_punkte_heim[$i] == 0 || empty($ergebnis_punkte_heim[$i])) && ($ergebnis_punkte_gast[$i] == 0 || empty($ergebnis_punkte_gast[$i]))) + continue; + if (!empty($ergebnis_detailliert)) + $ergebnis_detailliert .= " "; + $punkte_heim = empty($ergebnis_punkte_heim[$i]) ? "0" : $ergebnis_punkte_heim[$i]; + $punkte_gast = empty($ergebnis_punkte_gast[$i]) ? "0" : $ergebnis_punkte_gast[$i]; + if ($punkte_heim > $punkte_gast) + $saetze_heim++; + else if ($punkte_gast > $punkte_heim) + $saetze_gast++; + $ergebnis_detailliert .= $punkte_heim . ":" . $punkte_gast; + } + $ergebnis = $saetze_heim > $saetze_gast ? 1 : ($saetze_heim < $saetze_gast ? 2 : 0); + + $heim_spieler_1_id = $jinput->get('heim_spieler_1_id', 0, 'INT'); + $heim_spieler_2_id = $jinput->get('heim_spieler_2_id', 0, 'INT'); + $gast_spieler_1_id = $jinput->get('gast_spieler_1_id', 0, 'INT'); + $gast_spieler_2_id = $jinput->get('gast_spieler_2_id', 0, 'INT'); + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_spiel WRITE, #__sportsmanager_spieler READ"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (empty($id)) + $spiel = null; + else { + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $spiel = $rows[0]; + + $typ = $spiel->heim_spieler_2_id != null ? "doppel" : "einzel"; + } + + if (empty($heim_spieler_1_id) || empty($gast_spieler_1_id) || ($typ != "einzel" && (empty($heim_spieler_2_id) || empty($gast_spieler_2_id)))) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#sid' . id, "Es müssen Spieler ausgewählt werden."); + + return; + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $individualwettbewerb = $rows[0]; + + $elo_aktualisieren = $individualwettbewerb->elo_wertung; + $aktualisieren_ab_datum = $zeitpunkt; + + if ($id == 0) { + $query = "INSERT #__sportsmanager_individualwettbewerb_spiel" + . "\n SET individualwettbewerb_id = $individualwettbewerbid," + . "\n zeitpunkt = '$zeitpunkt'," + . "\n heim_spieler_1_id = '$heim_spieler_1_id'," + . "\n heim_spieler_2_id = " . ($typ != "einzel" ? "'$heim_spieler_2_id'" : "NULL") . "," + . "\n gast_spieler_1_id = '$gast_spieler_1_id'," + . "\n gast_spieler_2_id = " . ($typ != "einzel" ? "'$gast_spieler_2_id'" : "NULL") . "," + . "\n ergebnis = '$ergebnis'," + . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $id = $db->insertid(); + } + else { + $query = "UPDATE #__sportsmanager_individualwettbewerb_spiel" + . "\n SET zeitpunkt = '$zeitpunkt'," + . "\n heim_spieler_1_id = '$heim_spieler_1_id'," + . "\n heim_spieler_2_id = " . ($typ != "einzel" ? "'$heim_spieler_2_id'" : "NULL") . "," + . "\n gast_spieler_1_id = '$gast_spieler_1_id'," + . "\n gast_spieler_2_id = " . ($typ != "einzel" ? "'$gast_spieler_2_id'" : "NULL") . "," + . "\n ergebnis = '$ergebnis'," + . "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") + . "\n WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + individualwettbewerbTabelleAktualisieren($individualwettbewerbid); + + wannGespieltAktualisieren(); + if ($elo_aktualisieren) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + spielerstatistikAktualisieren(0, 0, $individualwettbewerbid); + + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#sid' . $id); +} + +function adminRemoveIndividualwettbewerbSpiel() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_spiel WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $individualwettbewerb = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $spiel = $rows[0]; + + $elo_aktualisieren = $individualwettbewerb->elo_wertung; + $aktualisieren_ab_datum = $spiel->zeitpunkt; + + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_spiel WHERE individualwettbewerb_spiel_id = $id AND individualwettbewerb_id = $individualwettbewerbid;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + individualwettbewerbTabelleAktualisieren($individualwettbewerbid); + + wannGespieltAktualisieren(); + if ($elo_aktualisieren && $aktualisieren_ab_datum != null) { + eloAktualisieren($aktualisieren_ab_datum); + einstufungAktualisieren(); + } + spielerstatistikAktualisieren(0, 0, $individualwettbewerbid); + + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid); +} + +function adminEditIndividualwettbewerbAusgangsplatzierung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator()) + keinZugriff(true); + + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + $individualwettbewerb = $rows[0]; + + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(true); + + if (!$individualwettbewerb->tabellenwertung) die("Wrong id!"); + + $id = $jinput->get('id', 0, 'INT'); + $typ = $jinput->get('typ', 0, 'RAW'); + + $query = "SELECT spieler_id, nachname, vorname, vereinsname, aktueller_verein_id, platz, bild_ausblenden" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + + $row = null; + if (!empty($id)) { + foreach ($ausgangsplatzierungen as $ausgangsplatzierung) { + if ($ausgangsplatzierung->spieler_id == $id) { + $row = $ausgangsplatzierung; + break; + } + } + if ($row == null) die("Wrong id!"); + } + + $query = "SELECT DISTINCT spieler_id, vorname, nachname, spielernr" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id)" . (!empty($spiel_spieler_ids) ? (" OR spieler_id IN (" . implode($spiel_spieler_ids, ", ") . ")") : "") + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + HTML_sportsmanager_admin::adminEditIndividualwettbewerbAusgangsplatzierung($row, $individualwettbewerb, $ausgangsplatzierungen, $spieler); +} + +function adminSaveIndividualwettbewerbAusgangsplatzierung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(); + + $id = $jinput->get('id', 0, 'INT'); + $nach_id = $jinput->get('nach_id', 0, 'INT'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#pid' . $id); + + return; + } + + if ($id == $nach_id) { + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#pid' . $id); + + return; + } + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE, #__sportsmanager_spieler READ"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_spieler WHERE spieler_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + + $platzierungen = array(); + foreach ($ausgangsplatzierungen as $ausgangsplatzierung) + array_push($platzierungen, $ausgangsplatzierung->spieler_id); + + if (!empty($nach_id) && !in_array($nach_id, $platzierungen)) die("Wrong id!"); + + $id_platzierung = array_search($id, $platzierungen); + if ($id_platzierung !== false) + array_splice($platzierungen, $id_platzierung, 1); + $nach_id_platzierung = !empty($nach_id) ? (array_search($nach_id, $platzierungen) + 1) : 0; + array_splice($platzierungen, $nach_id_platzierung, 0, $id); + + $platzierungen_uebrig = $platzierungen; + foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { + $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); + if ($index !== false) { + $platz = $index + 1; + if ($platzierung_vorhanden->platz != $platz) { + $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET platz = '$platz'" + . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $index_uebrig = array_search($platzierung_vorhanden->spieler_id, $platzierungen_uebrig); + unset($platzierungen_uebrig[$index_uebrig]); + } + else { + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + foreach ($platzierungen_uebrig as $platzierung_uebrig) { + $index = array_search($platzierung_uebrig, $platzierungen); + $platz = $index + 1; + $query = "INSERT #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET individualwettbewerb_id = '$individualwettbewerbid'," + . "\n spieler_id = '$platzierung_uebrig'," + . "\n platz = '$platz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + individualwettbewerbTabelleAktualisieren($individualwettbewerbid); + + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid . '#pid' . $id); +} + +function adminRemoveIndividualwettbewerbAusgangsplatzierung() { + $db =& getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $individualwettbewerbid = $jinput->get('individualwettbewerbid', 0, 'INT'); + if (!benutzerZugriff("individualwettbewerbe_aendern") && !benutzerIndividualwettbewerbModerator($individualwettbewerbid)) + keinZugriff(true); + + $query = "LOCK TABLES #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_ausgangsplatzierung WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_individualwettbewerb WHERE individualwettbewerb_id = $individualwettbewerbid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) die("Wrong id!"); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ausgangsplatzierungen = $db->loadObjectList(); + + $platzierungen = array(); + foreach ($ausgangsplatzierungen as $ausgangsplatzierung) + array_push($platzierungen, $ausgangsplatzierung->spieler_id); + + if (!empty($nach_id) && !in_array($nach_id, $platzierungen)) die("Wrong id!"); + + $id_platzierung = array_search($id, $platzierungen); + if ($id_platzierung !== false) + array_splice($platzierungen, $id_platzierung, 1); + + foreach ($ausgangsplatzierungen as $platzierung_vorhanden) { + $index = array_search($platzierung_vorhanden->spieler_id, $platzierungen); + if ($index !== false) { + $platz = $index + 1; + if ($platzierung_vorhanden->platz != $platz) { + $query = "UPDATE #__sportsmanager_individualwettbewerb_ausgangsplatzierung" + . "\n SET platz = '$platz'" + . "\n WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + else { + $query = "DELETE FROM #__sportsmanager_individualwettbewerb_ausgangsplatzierung WHERE individualwettbewerb_ausgangsplatzierung_id = " . $platzierung_vorhanden->individualwettbewerb_ausgangsplatzierung_id; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + individualwettbewerbTabelleAktualisieren($individualwettbewerbid); + + redirectSportsManagerURL('&task=admin_individualwettbewerb_spiele&individualwettbewerbid=' . $individualwettbewerbid); +} + + +?> diff --git a/src/structure/components/com_sportsmanager/api.php b/src/structure/components/com_sportsmanager/api.php new file mode 100644 index 0000000..900cde2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/api.php @@ -0,0 +1,279 @@ + $error])); + } else { + die($error); + } +} + +function isJson() { + $jinput = JFactory::getApplication()->input; + + return $jinput->get('format') === 'json'; +} + +function notifyChange($data) { + + try { + $db = &getDatabase(); + $query = "SELECT wert from #__sportsmanager_einstellungen WHERE name='api_push_key'"; + $db->setQuery($query); + $push_key = $db->loadResult(); + $push_server = !empty($push_key) && isset(_payload($push_key)->aud) ? _payload($push_key)->aud : ''; + if ($push_server != '' && $push_key != '') { + $url = $push_server . (substr($push_server, -1) == '/' ? '' : '/') . 'v1/notifications/send'; + $key = 'key=' . $push_key; + + $ch = curl_init($url); + curl_setopt_array($ch, array( + CURLOPT_POST => TRUE, + CURLOPT_RETURNTRANSFER => TRUE, + CURLOPT_HEADER => TRUE, + CURLOPT_HTTPHEADER => array( + 'Authorization: ' . $key, + 'Content-Type: application/json', + ), + CURLOPT_POSTFIELDS => json_encode($data), + )); + $resp = curl_exec($ch); + if ($resp == FALSE) { + error_log("failed to send notification"); + } + } + } catch (Exception $ex) { + error_log($ex); + } +} + +function begegnungChanged($begegnung, $begegnung_vorher, $modus, $heim_team, $gast_team, $spiele) { + notifyChange(['payload' => [ + 'begegnung' => $begegnung, + 'begegnung_vorher' => $begegnung_vorher, + '$modus' => $modus, + 'heim_team' => $heim_team, + 'gast_team' => $gast_team, + 'spiele' => $spiele, + ], 'type' => 'FIXTURE_RESULT_CHANGED']); +} + +function begegnungTischChanged($begegnung, $heim_team, $gast_team) { + notifyChange(['payload' => [ + 'begegnung' => $begegnung, + 'heim_team' => $heim_team, + 'gast_team' => $gast_team, + ], 'type' => 'TABLE_CHANGED']); +} + +function begegnungVerlegenNotify($begegnung, $users, $vorschlagendes_team_id, $heim_team, $gast_team) { + notifyChange([ + 'payload' => [ + 'begegnung' => $begegnung, + 'users' => $users, + 'vorschlagendes_team_id' => $vorschlagendes_team_id, + 'heim_team' => $heim_team, + 'gast_team' => $gast_team, + ], + 'type' => 'FIXTURE_DATE_CHANGED' + ]); +} + +/* + * erstellen von request tokens. diese sind 16 stunden gültig. + * @reponse body + * { data: { token: "reqest_token", access_for_team: ["team_id_1", "team_id_2"]}, expires: 1520013747000} + */ +function userToken() { + global $secret; + if (!isJson()) { + abortWithError("JSON Request only"); + } + if (isExternalDatabase()) { + abortWithError("Local Database only"); + } + $jinput = JFactory::getApplication()->input->json; + $access_key = $jinput->getString('access_key'); + + $user_id = _payload($access_key)->sub; + $user = JFactory::getUser($user_id); + + if (!jwt_validate($access_key, $secret.$user->password)) { + abortWithError('Access Key is invalid'); + } + + $expires = new DateTime(); + $expires->modify('+16 hours'); + $db = &getDatabase(); + $query = "SELECT berechtigt_team_id from #__sportsmanager_berechtigt_fuer_team where berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$db->execute()) { + abortWithError($db->stderr(true)); + } + $team_id = $db->loadObjectList(); + JSON_sportsmanager::JSON([ + 'token' => jwt_token([ + 'sub' => $user_id, + 'exp' => $expires->getTimestamp(), + ], $secret), + 'access_for_teams' => array_map(function($item) { return $item->berechtigt_team_id; }, $team_id), + 'expires' => $expires->getTimestamp() * 1000, // + ]); +} + +/* + * + * @response body + * { data: { token: "api_acccess_token" }} + */ +function userAuth() { + global $secret; + if (!isJson()) { + die(); + } + if (isExternalDatabase()) { + abortWithError("Local Database only"); + } + $jinput = JFactory::getApplication()->input->json; + $username = $jinput->getString('username'); + $password = $jinput->getString('password'); + + $db = &getDatabase(); + $query = $db->getQuery(true); + $query->select('id')->from('#__users')->where('username = "' . $username . '"')->limit(1); + $db->setQuery($query); + $user_id = $db->loadResult(); + $user = JFactory::getUser($user_id); + + if (JUserHelper::verifyPassword($password, $user->password, $user->id)) { + + JSON_sportsmanager::JSON([ + 'token' => jwt_token([ + 'sub' => $user_id, + 'iat' => (new DateTime())->getTimestamp(), + ], $secret.$user->password) + ]); + return; + } + abortWithError('Wrong credentials'); +} + +function getUserID() { + global $secret; + $token = JFactory::getApplication()->input->server->getString('HTTP_SECRET', NULL); + + return $token != NULL && jwt_validate($token, $secret) && isset(_payload($token)->sub) + ? (int) _payload($token)->sub + : 0; +} + +function getColorOfImage($image) { + if ($image != NULL) { + + if (strpos($image, '.png') !== false) { + $img = imagecreatefrompng($image); + } else { + $img = imagecreatefromjpeg($image); + } + $width = imagesx($img); + $height = imagesx($img); + $colorMap = []; + $colors = []; + for ($x = 0; $x < $width; $x++) { + for ($y = 0; $y < $height; $y++) { + $color = imagecolorsforindex($img, imagecolorat($img, $x, $y)); + if ($color['alpha'] < 20) { + $c = colorKey($color); + $hex = hex($color); + if ($hex != NULL) { + if (!isset($colors[$c])) { + $colors[$c] = 0; + $colorMap[$c] = $hex; + } + $colors[$c] += 1; + } + } + } + } + arsort($colors); + $result = array_keys($colors); + return sizeof($result) > 1 && $result[0] === '0-0-0' ? $colorMap[$result[1]] : $colorMap[$result[0]]; + } + return NULL; +} + +function colorKey($rgb) { + + $r = (int)($rgb['red'] / 100); + $g = (int)($rgb['green'] / 100); + $b = (int)($rgb['blue'] / 100); + + return $r . '-' . $g . '-' . $b; +} + +function hex($rgb) { + $r = $rgb['red']; + $g = $rgb['green']; + $b = $rgb['blue']; + if (($r + $g + $b) / 3 > 125) { + return NULL; + } + $r = dechex($r); + if (strlen($r) < 2) { + $r = '0' . $r; + } + $g = dechex($g); + if (strlen($g) < 2) { + $g = '0' . $g; + } + $b = dechex($b); + if (strlen($b) < 2) { + $b = '0' . $b; + } + return '#' . $r . $g . $b; +} + +/* + * sign string with secret + */ +function _sign($data, $secret, $algo = 'sha256') { + return base64_encode(hash_hmac('sha256', $data, $secret)); +} + +/* + * get payload from jwt token + */ +function _payload($token) { + $jwt = explode('.', $token); + return json_decode(base64_decode($jwt[0])); +} + +/* + * headless signed jwt token + */ +function jwt_token($payload, $secret) { + $data = base64_encode(json_encode($payload)); + + return $data . '.' . _sign($data, $secret); +} + +/* + * validate token + */ +function jwt_validate($token, $secret) { + $jwt = explode('.', $token); + if (sizeof($jwt) == 2 && $jwt[1] == _sign($jwt[0], $secret)) { + if (isset(_payload($token)->exp)) { + return _payload($token)->exp > (new DateTime())->getTimestamp(); + } + return true; + } + return sizeof($jwt) == 2 && $jwt[1] == _sign($jwt[0], $secret); +} diff --git a/src/structure/components/com_sportsmanager/controller.php b/src/structure/components/com_sportsmanager/controller.php new file mode 100644 index 0000000..192a18e --- /dev/null +++ b/src/structure/components/com_sportsmanager/controller.php @@ -0,0 +1,24 @@ +setQuery( $query ); + if (!$result = $sportsmanager_database_local->execute()) { die($sportsmanager_database_local->stderr(true)); } + $rows = $sportsmanager_database_local->loadObjectList(); + + $database_driver = "mysql"; + $database_host = ""; + $database_user = ""; + $database_password = ""; + $database_database = ""; + $database_prefix = "jos_"; + $joomla_path = ""; + $joomla_url = ""; + foreach ($rows as $row) { + $name = mb_strtolower($row->name); + if ($name == "database_driver") + $database_driver = $row->wert; + else if ($name == "database_host") + $database_host = $row->wert; + else if ($name == "database_user") + $database_user = $row->wert; + else if ($name == "database_password") + $database_password = $row->wert; + else if ($name == "database_database") + $database_database = $row->wert; + else if ($name == "database_prefix") + $database_prefix = $row->wert; + else if ($name == "joomla_path") + $joomla_path = $row->wert; + else if ($name == "joomla_url") + $joomla_url = $row->wert; + } + + if (!empty($database_driver) && !empty($database_host) && !empty($database_user) && !empty($database_database) && !empty($database_prefix) && !empty($joomla_path) && !empty($joomla_url)) { + $option = array(); //prevent problems + + $option['driver'] = $database_driver; // Database driver name + $option['host'] = $database_host; // Database host name + $option['user'] = $database_user; // User for database authentication + $option['password'] = $database_password; // Password for database authentication + $option['database'] = $database_database; // Database name + $option['prefix'] = $database_prefix; // Database prefix (may be empty) + + $sportsmanager_database_external = JDatabase::getInstance( $option ); + if (JError::isError($sportsmanager_database_external)) { + echo "".JText::_( 'COM_SPORTSMANAGER_CONNECTION_EXTERNAL_DB_FAILURE' )."

"; + $sportsmanager_database_external = NULL; + // jexit(htmlentities_utf8('Database Error: ' . $sportsmanager_database_external->toString())); + } else { + $query = "SELECT wert FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'"; + $sportsmanager_database_external->setQuery($query); + if (!$result = $sportsmanager_database_external->execute()) { + echo "".JText::_( 'COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_TABLES' )."

"; + $sportsmanager_database_external = NULL; + } else { + $db_version = $sportsmanager_database_external->loadResult(); + if ($db_version < 38) { + echo "".JText::_( 'COM_SPORTSMANAGER_EXTERNAL_DB_NO_SM_VERSION' )."

"; + $sportsmanager_database_external = NULL; + } else if (!is_dir($joomla_path.DIRECTORY_SEPARATOR."images".DIRECTORY_SEPARATOR."sportsmanager")) { + echo "".JText::_( 'COM_SPORTSMANAGER_EXTERNAL_NO_IMAGES_FOLDER' )." '/images/sportsmanager'!

"; + $sportsmanager_database_external = NULL; + } else { + $sportsmanager_joomla_path = $joomla_path; + $sportsmanager_joomla_url = $joomla_url; + } + } + } + } +} + +function isExternalDatabase() { + global $sportsmanager_database_external; + return $sportsmanager_database_external != NULL; +} + +function getDatabase($forceLocalDB = FALSE) { + global $sportsmanager_database_local; + global $sportsmanager_database_external; + if ($forceLocalDB || $sportsmanager_database_external == NULL) + $db = $sportsmanager_database_local; + else + $db = $sportsmanager_database_external; + + return $db; +} + +// Datenbank aktualisieren +function updateDatabase() +{ + $db = &getDatabase(); + + $elo_aktualisieren = false; + $rangliste_aktualisieren = false; + $wann_gespielt_aktualisieren = false; + $teamstatistik_aktualisieren = false; + $aktueller_verein_aktualisieren = false; + $spielerstatistik_aktualisieren = false; + $termin_aktionen_email_setzen = false; + + $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis' || name = '" . $db->getPrefix() . "tsleague_einstellungen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) { + $query = "SHOW TABLE STATUS WHERE name = '" . $db->getPrefix() . "tsleague_basis'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + if (count($rows) > 0) { + $query = "LOCK TABLES #__tsleague_basis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__tsleague_basis"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + die(JText::_( 'COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY' )); + + $datenbank_version = $rows[0]->datenbank_version; + + if ($datenbank_version < 1) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler DROP verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 2) { + $query = "LOCK TABLES #__tsleague_basis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_rangliste_system` (" + . "\n `rangliste_system_id` int(11) NOT NULL auto_increment," + . "\n `systembezeichnung` varchar(50)," + . "\n PRIMARY KEY (`rangliste_system_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_rangliste_system_punkte` (" + . "\n `rangliste_system_punkte_id` int(11) NOT NULL auto_increment," + . "\n `system_id` int(11) NOT NULL," + . "\n `platz_min` smallint," + . "\n `platz_max` smallint," + . "\n `teilnehmer_min` smallint," + . "\n `teilnehmer_max` smallint," + . "\n `punkte` smallint," + . "\n PRIMARY KEY (`rangliste_system_punkte_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_rangliste` (" + . "\n `rangliste_id` int(11) NOT NULL auto_increment," + . "\n `system_id` int(11) NOT NULL," + . "\n `bezeichnung` varchar(50)," + . "\n `erster_tag` date NOT NULL," + . "\n `letzter_tag` date NOT NULL," + . "\n `status` tinyint NOT NULL default '0'," + . "\n PRIMARY KEY (`rangliste_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_rangliste_turnierdisziplin` (" + . "\n `rangliste_turnierdisziplin_id` int(11) NOT NULL auto_increment," + . "\n `rangliste_id` int(11) NOT NULL," + . "\n `turnierdisziplin_id` int(11) NOT NULL," + . "\n PRIMARY KEY (`rangliste_turnierdisziplin_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS #__tsleague_rangliste_punkte (" + . "\n `rangliste_punkte_id` int(11) NOT NULL auto_increment," + . "\n `spieler_id` int(11) NOT NULL," + . "\n `punkte` smallint," + . "\n `teilnahmen` smallint," + . "\n PRIMARY KEY (`rangliste_punkte_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 3) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel_modus ADD spielpunkte_wertung tinyint NOT NULL default '0' AFTER punktetyp"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel_modus ADD begegnungspunkte_wertung tinyint NOT NULL default '0' AFTER spielpunkte_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 3"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 4) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_rangliste_system WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_system ADD streichergebnisse tinyint AFTER rangliste_system_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_rangliste_punkte WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_punkte ADD rangliste_id int(11) NOT NULL AFTER rangliste_punkte_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 4"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 5) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo CHANGE einzel_liga_elo elo_einzel smallint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo CHANGE doppel_liga_elo elo_doppel smallint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo CHANGE einzel_liga_spiele spiele_einzel smallint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo CHANGE doppel_liga_spiele spiele_doppel smallint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo DROP einzel_turnier_elo"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo DROP doppel_turnier_elo"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo DROP einzel_turnier_spiele"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo DROP doppel_turnier_spiele"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin CHANGE gewichtung elo_wertung tinyint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD elo_wertung tinyint AFTER letzter_tag"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstaltung WRITE, #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_veranstaltung" + . "\n SET elo_wertung = 1" + . "\n WHERE status = 2 OR status = 3"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_turnierdisziplin" + . "\n SET elo_wertung = 1" + . "\n WHERE elo_wertung != 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 5"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_aktualisieren = true; + } + + if ($datenbank_version < 6) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_unbestaetigtes_ergebnis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_unbestaetigtes_ergebnis ADD kommentar varchar(512) AFTER vorschlagendes_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD kommentar varchar(512) AFTER vorschlagendes_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 6"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 7) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_team CHANGE verein_id verein_id int(11)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_team" + . "\n SET verein_id = NULL" + . "\n WHERE verein_id = 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein DROP veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 7"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 8) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstalter ADD veranstalterkuerzel varchar(20) AFTER veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein ADD veranstalter_id int(11) AFTER verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 8"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 9) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT spieler_id, geschlecht" + . "\n FROM #__tsleague_spieler"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + $query = "ALTER TABLE #__tsleague_spieler CHANGE geschlecht geschlecht char(1)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + foreach ($spieler as $s) { + $query = "UPDATE #__tsleague_spieler" + . "\n SET geschlecht = " . ($s->geschlecht == 0 ? "'M'" : "'W'") + . "\n WHERE spieler_id = $s->spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 9"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 10) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD zuletzt_gespielt date AFTER spielernr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 10"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $wann_gespielt_aktualisieren = true; + $elo_aktualisieren = true; + } + + if ($datenbank_version < 11) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin ADD voranmeldung datetime AFTER elo_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS #__tsleague_turniervoranmeldung (" + . "\n `turniervoranmeldung_id` int(11) NOT NULL auto_increment," + . "\n `turnierdisziplin_id` int(11) NOT NULL," + . "\n `spieler_1_id` int(11) NOT NULL," + . "\n `spieler_2_id` int(11)," + . "\n PRIMARY KEY (`turniervoranmeldung_id`)" + . "\n ) TYPE=MyISAM;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 11"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 12) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen CHANGE kommentar kommentar varchar(255)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_unbestaetigtes_ergebnis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_unbestaetigtes_ergebnis CHANGE kommentar kommentar varchar(255)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 12"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 13) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein ADD vereinssitz varchar(30) AFTER vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD landeskennung varchar(10) AFTER ort"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstalter ADD kennzahl varchar(10) AFTER veranstalterkuerzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 13"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 14) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_unbestaetigtes_ergebnis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_unbestaetigtes_ergebnis ADD vorgeschlagen datetime AFTER kommentar"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD vorgeschlagen datetime AFTER kommentar"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD vorschlaege_heim smallint default 0 AFTER vorgeschlagen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD vorschlag_gast_erlauben smallint default 1 AFTER vorschlaege_heim"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD reihenfolge tinyint default 1 AFTER status"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 14"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 15) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD ausgetreten tinyint AFTER zuletzt_gespielt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 15"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_aktualisieren = true; + } + + if ($datenbank_version < 16) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE, #__tsleague_verein WRITE, #__tsleague_vereinsansprechpartner WRITE, #__tsleague_veranstalter WRITE, #__tsleague_teamspiel_modus WRITE, #__tsleague_veranstaltung WRITE, #__tsleague_team WRITE, #__tsleague_teamansprechpartner WRITE, #__tsleague_begegnung_verlegen WRITE, #__tsleague_unbestaetigtes_ergebnis WRITE, #__tsleague_turnier WRITE, #__tsleague_turnierdisziplin WRITE, #__tsleague_turniermeldung WRITE, #__tsleague_rangliste_system WRITE, #__tsleague_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_vereinsansprechpartner CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstalter CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel_modus CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_team CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamansprechpartner CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_unbestaetigtes_ergebnis CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnier CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_system CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste CONVERT TO CHARACTER SET latin1 COLLATE latin1_german1_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 16"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 17) { + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstalter DROP kennzahl"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_basis WRITE, #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler DROP url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 17"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 18) { + $query = "LOCK TABLES #__tsleague_basis WRITE" + . ", #__tsleague_spieler_elo WRITE" + . ", #__tsleague_verein WRITE" + . ", #__tsleague_mitglied_von_verein WRITE" + . ", #__tsleague_vereinsansprechpartner WRITE" + . ", #__tsleague_berechtigt_fuer_verein WRITE" + . ", #__tsleague_veranstaltung WRITE" + . ", #__tsleague_team WRITE" + . ", #__tsleague_teamansprechpartner WRITE" + . ", #__tsleague_mitglied_von_team WRITE" + . ", #__tsleague_begegnung WRITE" + . ", #__tsleague_begegnung_verlegen WRITE" + . ", #__tsleague_teamspiel WRITE" + . ", #__tsleague_unbestaetigtes_ergebnis WRITE" + . ", #__tsleague_berechtigt_fuer_team WRITE" + . ", #__tsleague_moderator WRITE" + . ", #__tsleague_turnier WRITE" + . ", #__tsleague_turnierdisziplin WRITE" + . ", #__tsleague_turniervoranmeldung WRITE" + . ", #__tsleague_turniermeldung WRITE" + . ", #__tsleague_turniermeldung_spieler WRITE" + . ", #__tsleague_turnierspiel WRITE" + . ", #__tsleague_rangliste_system_punkte WRITE" + . ", #__tsleague_rangliste WRITE" + . ", #__tsleague_rangliste_turnierdisziplin WRITE" + . ", #__tsleague_rangliste_punkte WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_elo ADD UNIQUE (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein ADD KEY (veranstalter_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_verein ADD KEY (spieler_id), ADD KEY (verein_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_vereinsansprechpartner ADD KEY (verein_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_berechtigt_fuer_verein ADD KEY (berechtigt_user_id), ADD KEY (berechtigt_verein_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD KEY (veranstalter_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_team ADD KEY (verein_id), ADD KEY (veranstaltung_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamansprechpartner ADD KEY (team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_team ADD KEY (spieler_id), ADD KEY (team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung ADD KEY (heim_team_id), ADD KEY (gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD KEY (begegnung_id), ADD KEY (vorschlagendes_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel ADD KEY (begegnung_id), ADD KEY (heim_spieler_1_id), ADD KEY (heim_spieler_2_id), ADD KEY (gast_spieler_1_id), ADD KEY (gast_spieler_2_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_unbestaetigtes_ergebnis ADD KEY (begegnung_id), ADD KEY (vorschlagendes_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_berechtigt_fuer_team ADD KEY (berechtigt_user_id), ADD KEY (berechtigt_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_moderator ADD KEY (moderator_user_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnier ADD KEY (veranstalter_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin ADD KEY (turnier_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniervoranmeldung ADD KEY (turnierdisziplin_id), ADD KEY (spieler_1_id), ADD KEY (spieler_2_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung ADD KEY (turnierdisziplin_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung_spieler ADD KEY (turniermeldung_id), ADD KEY (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierspiel ADD KEY (turnierdisziplin_id), ADD KEY (heim_meldung_id), ADD KEY (gast_meldung_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_system_punkte ADD KEY (system_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste ADD KEY (system_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_turnierdisziplin ADD KEY (rangliste_id), ADD KEY (turnierdisziplin_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_punkte ADD KEY (rangliste_id), ADD KEY (spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 18"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 19) { + $query = "LOCK TABLES #__tsleague_basis WRITE" + . ", #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein CHANGE vereinsname vereinsname varchar(50) NOT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_basis" + . "\n SET datenbank_version = 19"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "DROP TABLE IF EXISTS `#__tsleague_einstellungen`;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_einstellungen` (" + . "\n `name` char(30)," + . "\n `wert` char(255)," + . "\n PRIMARY KEY (`name`)" + . "\n ) TYPE=MyISAM COLLATE=latin1_german1_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_spieler WRITE, #__tsleague_einstellungen WRITE, #__tsleague_basis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD lizenznr varchar(20) AFTER spielernr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE, #__tsleague_basis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__tsleague_einstellungen" + . "\n SET name = 'datenbank_version', wert = '20'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__tsleague_einstellungen" + . "\n SET name = 'basis_spielernr', wert = ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DROP TABLE #__tsleague_basis"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__tsleague_einstellungen WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + die(JText::_( 'COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY' )); + + $datenbank_version = intval($rows[0]->wert); + + if ($datenbank_version < 21) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_veranstalter WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstalter ADD kategorie tinyint default '1' AFTER veranstalterkuerzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD kategorie tinyint default '1' AFTER reihenfolge"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '21'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 22) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD tabellenwertung tinyint NOT NULL default '0' AFTER modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_veranstaltung ADD unterteilung tinyint NOT NULL default '0' AFTER tabellenwertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_teamspiel_modus READ" + . ", #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_veranstaltung" + . "\n LEFT JOIN #__tsleague_teamspiel_modus ON teamspiel_modus_id = modus_id" + . "\n SET tabellenwertung = IF(begegnungspunkte_wertung = 0, 1, 2)" + . "\n WHERE status = 2"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_veranstaltung" + . "\n SET unterteilung = IF(status = 3, 1, 2)" + . "\n WHERE status = 3 OR status = 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_veranstaltung" + . "\n SET status = 1" + . "\n WHERE status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_teamspiel_modus WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel_modus DROP begegnungspunkte_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_teamspiel_modus WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_teamspiel_modus DROP ergebnistyp"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung DROP heim_begegnungspunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung DROP gast_begegnungspunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '22'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 23) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!JFolder::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague' . DIRECTORY_SEPARATOR . 'spieler')) { + if (!JFolder::move(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague' . DIRECTORY_SEPARATOR . 'players', JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague' . DIRECTORY_SEPARATOR . 'spieler')) + die(JText::_( 'COM_SPORTSMANAGER_RENAME_PLAYER_DIRECTORY_FAILED' )); + } + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague' . DIRECTORY_SEPARATOR . 'mannschaften', 0777)) + die(JText::_( 'COM_SPORTSMANAGER_CREATE_TEAM_DIRECTORY_FAILED' )); + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague' . DIRECTORY_SEPARATOR . 'vereine', 0777)) + die(JText::_( 'COM_SPORTSMANAGER_CREATE_CLUB_DIRECTORY_FAILED' )); + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '23'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 24) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste ADD reihenfolge tinyint default '1' AFTER status"; + + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste ADD kategorie tinyint default '1' AFTER reihenfolge"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_turnierdisziplin ADD wertung tinyint default '1' AFTER turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '24'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 25) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierspiel CHANGE runde runde smallint"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '25'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 26) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_veranstaltung" + . "\n SET tabellenwertung = IF(tabellenwertung = 1, 2, 5)" + . "\n WHERE tabellenwertung > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '26'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 27) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD aktion tinyint default '0' AFTER begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen CHANGE neuer_zeitpunkt zeitpunkt datetime"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD user_id int(11) AFTER zeitpunkt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen DROP INDEX vorschlagendes_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen CHANGE vorschlagendes_team_id team_id int(11)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD verantwortlich_team_id int(11) AFTER team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD KEY (user_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD KEY (team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen ADD KEY (verantwortlich_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen DROP vorschlaege_heim"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen DROP vorschlag_gast_erlauben"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_begegnung_verlegen CHANGE vorgeschlagen eingetragen datetime"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung READ" + . ", #__tsleague_begegnung_verlegen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_begegnung_verlegen, #__tsleague_begegnung" + . "\n SET verantwortlich_team_id = IF(team_id = heim_team_id, gast_team_id, heim_team_id)" + . "\n WHERE #__tsleague_begegnung_verlegen.begegnung_id = #__tsleague_begegnung.begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '27'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 28) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler DROP ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD ausgetreten bool default '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_spieler" + . "\n SET ausgetreten = IF(ISNULL(austritt), FALSE, TRUE)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler DROP austritt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein ADD ausgetreten bool default '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_verein" + . "\n SET ausgetreten = IF(ISNULL(austritt), FALSE, TRUE)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_verein DROP austritt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_verein ADD ausgetreten bool default '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_mitglied_von_verein" + . "\n SET ausgetreten = IF(ISNULL(austritt), FALSE, TRUE)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_verein DROP austritt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_mitglied_von_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_team ADD ausgetreten bool default '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_mitglied_von_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_mitglied_von_team" + . "\n SET ausgetreten = IF(ISNULL(austritt), FALSE, TRUE)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_mitglied_von_team DROP austritt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '28'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 29) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste ADD streichergebnisse tinyint AFTER system_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste_system WRITE" + . ", #__tsleague_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_rangliste, #__tsleague_rangliste_system" + . "\n SET #__tsleague_rangliste.streichergebnisse = #__tsleague_rangliste_system.streichergebnisse WHERE system_id = rangliste_system_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_system DROP streichergebnisse"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_turnierdisziplin ADD system_id int(11) AFTER turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_rangliste_turnierdisziplin ADD KEY (system_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '29'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 30) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turniermeldung_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung_spieler CHANGE spieler_id spieler_id int(11)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_turniermeldung_spieler_name` (" + . "\n `turniermeldung_spieler_name_id` int(11) NOT NULL auto_increment," + . "\n `turniermeldung_spieler_id` int(11) NOT NULL," + . "\n `nachname` varchar(30)," + . "\n `vorname` varchar(30) NOT NULL," + . "\n PRIMARY KEY (`turniermeldung_spieler_name_id`)," + . "\n KEY (`turniermeldung_spieler_id`)" + . "\n ) TYPE=MyISAM COLLATE=latin1_german1_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin ADD reihenfolge tinyint default '1' AFTER voranmeldung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin ADD kategorie tinyint default '1' AFTER reihenfolge"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '30'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 31) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD elo_einzel smallint AFTER pseudonym"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD elo_einzel_spiele smallint AFTER elo_einzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD elo_doppel smallint AFTER elo_einzel_spiele"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD elo_doppel_spiele smallint AFTER elo_doppel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE" + . ", #__tsleague_spieler_elo WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_spieler" + . "\n INNER JOIN #__tsleague_spieler_elo USING (spieler_id)" + . "\n SET #__tsleague_spieler.elo_einzel = #__tsleague_spieler_elo.elo_einzel," + . "\n #__tsleague_spieler.elo_einzel_spiele = #__tsleague_spieler_elo.spiele_doppel," + . "\n #__tsleague_spieler.elo_doppel = #__tsleague_spieler_elo.elo_doppel," + . "\n #__tsleague_spieler.elo_doppel_spiele = #__tsleague_spieler_elo.spiele_einzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DROP TABLE #__tsleague_spieler_elo;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '31'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 32) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD INDEX (nachname, vorname)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD INDEX (vorname, nachname)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '32'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 33) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turniermeldung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung DROP name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '33'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 34) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnier ADD turnierort varchar(50) AFTER turnierbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '34'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 35) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_spieler_import` ( " + . "\n `spieler_import_id` int(11) NOT NULL auto_increment, " + . "\n `session_id` varchar(200) NOT NULL," + . "\n `nachname` varchar(30)," + . "\n `vorname` varchar(30)," + . "\n `geschlecht` char(1)," + . "\n `geburtsdatum` date," + . "\n `strasse` varchar(30)," + . "\n `plz` varchar(6)," + . "\n `ort` varchar(30)," + . "\n `landeskennung` varchar(10)," + . "\n `telefon` varchar(25)," + . "\n `mobil` varchar(25)," + . "\n `email` varchar(40)," + . "\n `spielernr` varchar(20)," + . "\n `lizenznr` varchar(20)," + . "\n `ausgetreten` bool default '0'," + . "\n `pseudonym` varchar(30)," + . "\n `vereinsname` varchar(50)," + . "\n `vereinssitz` varchar(30)," + . "\n `veranstalterbezeichnung` varchar(50)," + . "\n PRIMARY KEY (`spieler_import_id`)," + . "\n KEY (`session_id`)" + . "\n ) TYPE=MyISAM COLLATE=latin1_german1_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '35'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 36) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turniermeldung_spieler_name WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turniermeldung_spieler_name ADD vereinsname varchar(50) AFTER vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '36'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 37) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler ADD geburtsjahr smallint unsigned AFTER geburtsdatum"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_spieler" + . "\n SET geburtsjahr = YEAR(geburtsdatum)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '37'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 38) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__tsleague_kategorie` (" + . "\n `kategorie_id` int(11) NOT NULL auto_increment," + . "\n `typ` tinyint," + . "\n `nummer` tinyint," + . "\n `bezeichnung` varchar(50)," + . "\n PRIMARY KEY (`kategorie_id`)" + . "\n ) TYPE=MyISAM COLLATE=latin1_german1_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '38'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 39) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierdisziplin DROP kuerzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '39'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 40) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__tsleague_mitglied_von_verein WHERE spieler_id = 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '40'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 41) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_spieler_import ADD geburtsjahr smallint unsigned AFTER geburtsdatum"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_team CHANGE teamname teamname varchar(50) NOT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '41'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 42) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_team ADD zusatzpunkte smallint AFTER tischtyp"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '42'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 43) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__tsleague_turnierspiel ADD rundenstufe tinyint AFTER runde"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_turnierspiel" + . "\n SET rundenstufe = IF(runde > 0, 1, -1), runde = ABS(runde)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '43'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 44) { + $query = "LOCK TABLES #__tsleague_einstellungen WRITE" + . ", #__tsleague_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_begegnung" + . "\n SET spieltag = spieltag + 99 - (2 * (spieltag % 100))" + . "\n WHERE spieltag >= 20000"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__tsleague_einstellungen" + . "\n SET wert = '44'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "LOCK TABLES #__tsleague_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DROP TABLE IF EXISTS `#__sportsmanager_begegnung`" + . ", `#__sportsmanager_begegnung_verlegen`" + . ", `#__sportsmanager_berechtigt_fuer_team`" + . ", `#__sportsmanager_berechtigt_fuer_turnier`" + . ", `#__sportsmanager_berechtigt_fuer_verein`" + . ", `#__sportsmanager_berechtigt_fuer_veranstalter`" + . ", `#__sportsmanager_berechtigt_fuer_veranstaltung`" + . ", `#__sportsmanager_einstellungen`" + . ", `#__sportsmanager_berechnung`" + . ", `#__sportsmanager_einstufung`" + . ", `#__sportsmanager_einstufung_rangliste`" + . ", `#__sportsmanager_elo_cache`" + . ", `#__sportsmanager_kategorie`" + . ", `#__sportsmanager_mitglied_von_team`" + . ", `#__sportsmanager_mitglied_von_verein`" + . ", `#__sportsmanager_moderator`" + . ", `#__sportsmanager_moderator_zugriff`" + . ", `#__sportsmanager_rangliste`" + . ", `#__sportsmanager_rangliste_punkte`" + . ", `#__sportsmanager_rangliste_system`" + . ", `#__sportsmanager_rangliste_system_punkte`" + . ", `#__sportsmanager_rangliste_turnierdisziplin`" + . ", `#__sportsmanager_spieler`" + . ", `#__sportsmanager_spieler_import`" + . ", `#__sportsmanager_team`" + . ", `#__sportsmanager_teamansprechpartner`" + . ", `#__sportsmanager_teamspiel`" + . ", `#__sportsmanager_teamspiel_modus`" + . ", `#__sportsmanager_termin`" + . ", `#__sportsmanager_termin_symbol`" + . ", `#__sportsmanager_termin_symbolanzeige`" + . ", `#__sportsmanager_termin_aktion`" + . ", `#__sportsmanager_termin_zusatz`" + . ", `#__sportsmanager_termin_bezeichnungszusatz`" + . ", `#__sportsmanager_termin_bezeichnung`" + . ", `#__sportsmanager_termin_bundesland`" + . ", `#__sportsmanager_termin_land`" + . ", `#__sportsmanager_turnier`" + . ", `#__sportsmanager_turnierdisziplin`" + . ", `#__sportsmanager_turniermeldung`" + . ", `#__sportsmanager_turniermeldung_spieler`" + . ", `#__sportsmanager_turniermeldung_spieler_name`" + . ", `#__sportsmanager_turnierspiel`" + . ", `#__sportsmanager_turniervoranmeldung`" + . ", `#__sportsmanager_unbestaetigtes_ergebnis`" + . ", `#__sportsmanager_veranstalter`" + . ", `#__sportsmanager_veranstaltung`" + . ", `#__sportsmanager_verein`" + . ", `#__sportsmanager_vereinsansprechpartner`;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "\n RENAME TABLE #__tsleague_begegnung TO #__sportsmanager_begegnung" + . ", #__tsleague_begegnung_verlegen TO #__sportsmanager_begegnung_verlegen" + . ", #__tsleague_berechtigt_fuer_team TO #__sportsmanager_berechtigt_fuer_team" + . ", #__tsleague_berechtigt_fuer_verein TO #__sportsmanager_berechtigt_fuer_verein" + . ", #__tsleague_einstellungen TO #__sportsmanager_einstellungen" + . ", #__tsleague_kategorie TO #__sportsmanager_kategorie" + . ", #__tsleague_mitglied_von_team TO #__sportsmanager_mitglied_von_team" + . ", #__tsleague_mitglied_von_verein TO #__sportsmanager_mitglied_von_verein" + . ", #__tsleague_moderator TO #__sportsmanager_moderator" + . ", #__tsleague_rangliste TO #__sportsmanager_rangliste" + . ", #__tsleague_rangliste_punkte TO #__sportsmanager_rangliste_punkte" + . ", #__tsleague_rangliste_system TO #__sportsmanager_rangliste_system" + . ", #__tsleague_rangliste_system_punkte TO #__sportsmanager_rangliste_system_punkte" + . ", #__tsleague_rangliste_turnierdisziplin TO #__sportsmanager_rangliste_turnierdisziplin" + . ", #__tsleague_spieler TO #__sportsmanager_spieler" + . ", #__tsleague_spieler_import TO #__sportsmanager_spieler_import" + . ", #__tsleague_team TO #__sportsmanager_team" + . ", #__tsleague_teamansprechpartner TO #__sportsmanager_teamansprechpartner" + . ", #__tsleague_teamspiel TO #__sportsmanager_teamspiel" + . ", #__tsleague_teamspiel_modus TO #__sportsmanager_teamspiel_modus" + . ", #__tsleague_turnier TO #__sportsmanager_turnier" + . ", #__tsleague_turnierdisziplin TO #__sportsmanager_turnierdisziplin" + . ", #__tsleague_turniermeldung TO #__sportsmanager_turniermeldung" + . ", #__tsleague_turniermeldung_spieler TO #__sportsmanager_turniermeldung_spieler" + . ", #__tsleague_turniermeldung_spieler_name TO #__sportsmanager_turniermeldung_spieler_name" + . ", #__tsleague_turnierspiel TO #__sportsmanager_turnierspiel" + . ", #__tsleague_turniervoranmeldung TO #__sportsmanager_turniervoranmeldung" + . ", #__tsleague_unbestaetigtes_ergebnis TO #__sportsmanager_unbestaetigtes_ergebnis" + . ", #__tsleague_veranstalter TO #__sportsmanager_veranstalter" + . ", #__tsleague_veranstaltung TO #__sportsmanager_veranstaltung" + . ", #__tsleague_verein TO #__sportsmanager_verein" + . ", #__tsleague_vereinsansprechpartner TO #__sportsmanager_vereinsansprechpartner;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '1'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + if (!JFolder::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager') && JFolder::exists(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague')) { + if (!JFolder::move(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'tsleague', JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager')) + die(JText::_( 'COM_SPORTSMANAGER_RENAME_PLAYER_FAILED' )); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + die(JText::_( 'COM_SPORTSMANAGER_EXTERNAL_DB_INCONSISTENCY' )); + + $datenbank_version = intval($rows[0]->wert); + + if ($datenbank_version < 2) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CHANGE tischtyp tischtyp varchar(60)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '2'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 3) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD elo_wertung tinyint(4) DEFAULT '1' AFTER pseudonym"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '3'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 4) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste` (" + . "\n `bestenliste_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` varchar(50) COLLATE latin1_german1_ci DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `erster_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `letzter_tag` date NOT NULL DEFAULT '0000-00-00'," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`bestenliste_id`)" + . "\n ) ENGINE=MyISAM ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_punkte` (" + . "\n `bestenliste_punkte_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `siege` smallint(6) DEFAULT NULL," + . "\n `unentschieden` smallint(6) DEFAULT NULL," + . "\n `niederlagen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `spielpunkte_verloren` smallint(6) DEFAULT NULL," + . "\n `punkte_gewonnen` smallint(6) DEFAULT NULL," + . "\n `punkte_verloren` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`bestenliste_punkte_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `spieler_id` (`spieler_id`)" + . "\n) ENGINE=MyISAM ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_veranstaltung` (" + . "\n `bestenliste_veranstaltung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstaltung_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`bestenliste_veranstaltung_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `veranstaltung_id` (`veranstaltung_id`)" + . "\n) ENGINE=MyISAM ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '4'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 5) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_punkte WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_punkte ADD platz smallint(6) DEFAULT NULL AFTER spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '5'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $rangliste_aktualisieren = true; + } + + if ($datenbank_version < 6) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD platz smallint(6) DEFAULT NULL AFTER heimspielort_anschrift_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD gesamtpunkte smallint(6) DEFAULT NULL AFTER platz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD begegnungspunkte smallint(6) DEFAULT NULL AFTER gesamtpunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD siege smallint(6) DEFAULT NULL AFTER begegnungspunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD unentschieden smallint(6) DEFAULT NULL AFTER siege"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD niederlagen smallint(6) DEFAULT NULL AFTER unentschieden"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD spielpunkte_gewonnen smallint(6) DEFAULT NULL AFTER niederlagen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD spielpunkte_verloren smallint(6) DEFAULT NULL AFTER spielpunkte_gewonnen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD spielpunkte_differenz smallint(6) DEFAULT NULL AFTER spielpunkte_verloren"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD spielpunkte_quotient float(8,2) DEFAULT NULL AFTER spielpunkte_differenz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD punkte_gewonnen smallint(6) DEFAULT NULL AFTER spielpunkte_quotient"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD punkte_verloren smallint(6) DEFAULT NULL AFTER punkte_gewonnen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD punkte_differenz smallint(6) DEFAULT NULL AFTER punkte_verloren"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD punkte_quotient float(8,2) DEFAULT NULL AFTER punkte_differenz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '6'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $teamstatistik_aktualisieren = true; + } + + if ($datenbank_version < 7) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_veranstalter` (" + . "\n `berechtigt_fuer_veranstalter_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_veranstalter_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_veranstalter_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_veranstalter_id` (`berechtigt_veranstalter_id`)" + . "\n) ENGINE=MyISAM ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '7'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 8) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_moderator WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_moderator ADD zugriff smallint(6) DEFAULT 1 AFTER moderator_user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '8'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 9) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD wertungskategorie tinyint(4) DEFAULT 0 AFTER streichergebnisse"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '9'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 10) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD aktueller_verein_id int(11) DEFAULT NULL AFTER pseudonym"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '10'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $aktueller_verein_aktualisieren = true; + } + + if ($datenbank_version < 11) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler DROP ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '11'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 12) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD status tinyint(4) NOT NULL DEFAULT 0 AFTER modus"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel_modus" + . "\n SET status = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_system WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_system ADD status tinyint(4) NOT NULL DEFAULT 0 AFTER systembezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_system WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste_system" + . "\n SET status = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '12'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 13) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import ADD spielernr_alt varchar(20) COLLATE latin1_german1_ci DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '13'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $aktueller_verein_aktualisieren = true; + } + + if ($datenbank_version < 14) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD punkte_sieg tinyint(4) NOT NULL DEFAULT 0 AFTER punktetyp"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '14'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $aktueller_verein_aktualisieren = true; + } + + if ($datenbank_version < 15) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_saison` (" + . "\n `saison_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saisonbezeichnung` varchar(30) COLLATE latin1_german1_ci DEFAULT NULL," + . "\n PRIMARY KEY (`saison_id`)" + . "\n) ENGINE=MyISAM ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD saison_id int(11) NOT NULL DEFAULT 0 AFTER rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD KEY (saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_bestenliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste ADD saison_id int(11) NOT NULL DEFAULT 0 AFTER bestenliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_bestenliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste ADD KEY (saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnier ADD saison_id int(11) NOT NULL DEFAULT 0 AFTER turnier_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnier ADD KEY (saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD saison_id int(11) NOT NULL DEFAULT 0 AFTER veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD KEY (saison_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_saison WRITE" + . ", #__sportsmanager_veranstaltung WRITE" + . ", #__sportsmanager_turnier WRITE" + . ", #__sportsmanager_rangliste WRITE" + . ", #__sportsmanager_bestenliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + // Saisons ergänzen + $query = "SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_veranstaltung WHERE NOT ISNULL(erster_tag)" + . "\n UNION" + . "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_turnier WHERE NOT ISNULL(erster_tag)" + . "\n UNION" + . "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_rangliste WHERE NOT ISNULL(erster_tag)" + . "\n UNION" + . "\n SELECT YEAR(erster_tag) AS jahr FROM #__sportsmanager_bestenliste WHERE NOT ISNULL(erster_tag)" + . "\n GROUP BY jahr" + . "\n ORDER BY jahr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $jahre = $db->loadObjectList(); + + if (count($jahre) > 0) { + foreach ($jahre as $jahr) { + $query = "INSERT #__sportsmanager_saison" + . "\n SET saisonbezeichnung = '$jahr->jahr'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } else { + $query = "INSERT #__sportsmanager_saison" + . "\n SET saisonbezeichnung = 'Keine'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "SELECT * FROM #__sportsmanager_saison ORDER BY saisonbezeichnung DESC LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + $aktuelle_saison_id = $saisons[0]->saison_id; + // Saisons den Veranstaltungen zuordnen + $query = "UPDATE #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_saison ON YEAR(erster_tag) = saisonbezeichnung" + . "\n SET #__sportsmanager_veranstaltung.saison_id = COALESCE(#__sportsmanager_saison.saison_id, '$aktuelle_saison_id')"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turnier" + . "\n LEFT JOIN #__sportsmanager_saison ON YEAR(erster_tag) = saisonbezeichnung" + . "\n SET #__sportsmanager_turnier.saison_id = COALESCE(#__sportsmanager_saison.saison_id, '$aktuelle_saison_id')"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n LEFT JOIN #__sportsmanager_saison ON YEAR(erster_tag) = saisonbezeichnung" + . "\n SET #__sportsmanager_rangliste.saison_id = COALESCE(#__sportsmanager_saison.saison_id, '$aktuelle_saison_id')"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_bestenliste" + . "\n LEFT JOIN #__sportsmanager_saison ON YEAR(erster_tag) = saisonbezeichnung" + . "\n SET #__sportsmanager_bestenliste.saison_id = COALESCE(#__sportsmanager_saison.saison_id, '$aktuelle_saison_id')"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '15'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 16) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftsmitglieder', 0777)) + die(JText::_('COM_SPORTSMANAGER_CREATE_TEAM_MEMBERS_DIRECTORY_FAILED')); + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '16'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $aktueller_verein_aktualisieren = true; + } + + if ($datenbank_version < 17) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_unbestaetigtes_ergebnis WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_unbestaetigtes_ergebnis ADD zwischenergebnis bool default '0' AFTER vorschlagendes_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '17'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 18) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_saison WRITE" + . ", #__sportsmanager_begegnung WRITE" + . ", #__sportsmanager_begegnung_verlegen WRITE" + . ", #__sportsmanager_berechtigt_fuer_team WRITE" + . ", #__sportsmanager_berechtigt_fuer_verein WRITE" + . ", #__sportsmanager_berechtigt_fuer_veranstalter WRITE" + . ", #__sportsmanager_kategorie WRITE" + . ", #__sportsmanager_mitglied_von_team WRITE" + . ", #__sportsmanager_mitglied_von_verein WRITE" + . ", #__sportsmanager_moderator WRITE" + . ", #__sportsmanager_rangliste WRITE" + . ", #__sportsmanager_rangliste_punkte WRITE" + . ", #__sportsmanager_rangliste_system WRITE" + . ", #__sportsmanager_rangliste_system_punkte WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin WRITE" + . ", #__sportsmanager_bestenliste WRITE" + . ", #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_bestenliste_veranstaltung WRITE" + . ", #__sportsmanager_spieler WRITE" + . ", #__sportsmanager_spieler_import WRITE" + . ", #__sportsmanager_team WRITE" + . ", #__sportsmanager_teamansprechpartner WRITE" + . ", #__sportsmanager_teamspiel WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE" + . ", #__sportsmanager_turnier WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE" + . ", #__sportsmanager_turniermeldung WRITE" + . ", #__sportsmanager_turniermeldung_spieler WRITE" + . ", #__sportsmanager_turniermeldung_spieler_name WRITE" + . ", #__sportsmanager_turnierspiel WRITE" + . ", #__sportsmanager_turniervoranmeldung WRITE" + . ", #__sportsmanager_unbestaetigtes_ergebnis WRITE" + . ", #__sportsmanager_veranstalter WRITE" + . ", #__sportsmanager_veranstaltung WRITE" + . ", #__sportsmanager_verein WRITE" + . ", #__sportsmanager_vereinsansprechpartner WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_einstellungen CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_saison CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung_verlegen CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_berechtigt_fuer_team CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_berechtigt_fuer_verein CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_berechtigt_fuer_veranstalter CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_kategorie CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_mitglied_von_team CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_mitglied_von_verein CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_moderator CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_punkte CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_system CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_system_punkte CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_veranstaltung CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamansprechpartner CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnier CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung_spieler CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung_spieler_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierspiel CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniervoranmeldung CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_unbestaetigtes_ergebnis CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstalter CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_vereinsansprechpartner CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '18'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 19) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein ADD vereinssitz_ortsteil varchar(30) DEFAULT NULL AFTER vereinssitz"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein ADD url varchar(150) DEFAULT NULL AFTER vereinssitz_ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein ADD beschreibung varchar(500) DEFAULT NULL AFTER url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_spielort` (" + . "\n `spielort_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `name` varchar(40) DEFAULT NULL," + . "\n `strasse` varchar(30) DEFAULT NULL," + . "\n `plz` varchar(10) DEFAULT NULL," + . "\n `ortsname` varchar(30) DEFAULT NULL," + . "\n `ortsteil` varchar(30) DEFAULT NULL," + . "\n `url` varchar(150) DEFAULT NULL," + . "\n `beschreibung` varchar(500) DEFAULT NULL," + . "\n `status` tinyint(1) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`spielort_id`)" + . "\n ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD heimspielort_id int(11) DEFAULT NULL AFTER heimspiel_uhrzeit"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD KEY (heimspielort_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '19'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $rangliste_aktualisieren = true; + } + + if ($datenbank_version < 20) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_ausblenden', wert = '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '20'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 21) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD bild_ausblenden tinyint(1) DEFAULT '0' AFTER pseudonym"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_einstellungen" + . "\n SET name = 'ansprechpartner_spielerdaten', wert = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '21'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 22) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin ADD voranmeldungen_rangliste_id int(11) DEFAULT NULL AFTER voranmeldung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin ADD voranmeldungen_reihenfolge tinyint(4) DEFAULT '0' AFTER voranmeldungen_rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin ADD KEY (voranmeldungen_rangliste_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '22'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 23) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_saison READ" + . ", #__sportsmanager_spielort WRITE" + . ", #__sportsmanager_team WRITE" + . ", #__sportsmanager_veranstaltung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_team.*" + . "\n FROM #__sportsmanager_team" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n LEFT JOIN #__sportsmanager_saison USING (saison_id)" + . "\n ORDER BY heimspielort_name, heimspielort_anschrift"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $heimspielort_name = ""; + $heimspielort_strasse = ""; + $heimspielort_plz = ""; + $heimspielort_ortsname = ""; + $heimspielort_beschreibung = ""; + $heimspielort_url = ""; + $spielort_id = 0; + foreach ($teams as $team) { + $name = $team->heimspielort_name; + $strasse = $team->heimspielort_anschrift; + if (empty($name) && empty($strasse)) + continue; + $plz_pos = false; + for ($i = 0; $i < strlen($strasse) - 5; $i++) { + if ($strasse[$i + 5] != " " || !ctype_digit(substr($strasse, $i, 5))) + continue; + $plz_pos = $i; + break; + } + if ($plz_pos === false) { + $plz = $ortsname = $beschreibung = ""; + } else { + $plz = substr($strasse, $plz_pos, 5); + $ortsname = trim(substr($strasse, $plz_pos + 6)); + $beschreibung_pos = strpos($ortsname, ","); + if ($beschreibung_pos === false) { + $beschreibung = ""; + } else { + $beschreibung = trim(substr($ortsname, $beschreibung_pos + 1)); + $ortsname = trim(substr($ortsname, 0, $beschreibung_pos)); + } + $strasse = trim(substr($strasse, 0, $plz_pos)); + $strasse_len = strlen($strasse); + if ($strasse_len > 0 && $strasse[$strasse_len - 1] == ",") + $strasse = trim(substr($strasse, 0, $strasse_len - 1)); + } + + if ($heimspielort_name != $name || $heimspielort_strasse != $strasse || $heimspielort_plz != $plz || $heimspielort_ortsname != $ortsname) { + $heimspielort_name = $name; + $heimspielort_strasse = $strasse; + $heimspielort_plz = $plz; + $heimspielort_ortsname = $ortsname; + $heimspielort_beschreibung = $beschreibung; + $heimspielort_url = $team->heimspielort_url; + $query = "INSERT INTO #__sportsmanager_spielort (name, strasse, plz, ortsname, ortsteil, url, beschreibung, status)" + . "\n VALUES ('" . $db->getEscaped($heimspielort_name) . "', '" . $db->getEscaped($heimspielort_strasse) . "', '" . $db->getEscaped($heimspielort_plz) . "', '" . $db->getEscaped($heimspielort_ortsname) . "', '', '" . $db->getEscaped($heimspielort_url) . "', '" . $db->getEscaped($heimspielort_beschreibung) . "', 1);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielort_id = $db->insertid(); + } + $query = "UPDATE #__sportsmanager_team" + . "\n SET heimspielort_id = '$spielort_id'" + . "\n WHERE team_id = '$team->team_id'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "ALTER TABLE #__sportsmanager_team DROP heimspielort_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team DROP heimspielort_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team DROP heimspielort_anschrift"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team DROP heimspielort_anschrift_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein DROP heimspielort_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein DROP heimspielort_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein DROP heimspielort_anschrift"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verein DROP heimspielort_anschrift_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '23'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 24) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung ADD spielort_id int(11) DEFAULT NULL AFTER gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '24'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 25) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD system_wertung tinyint(4) DEFAULT '0' AFTER system_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin ADD system_wertung tinyint(4) DEFAULT '0' AFTER system_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '25'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 26) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '26'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $rangliste_aktualisieren = true; + $spielerstatistik_aktualisieren = true; + } + + if ($datenbank_version < 27) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD teamgruppe_id int(11) DEFAULT NULL AFTER team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '27'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 28) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verteiler` (" + . "\n `verteiler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `verteiler` TEXT NOT NULL," + . "\n PRIMARY KEY (`verteiler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '28'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 29) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD KEY (teamgruppe_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung ADD KEY (spielort_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD verschieberegel_id int(11) DEFAULT NULL AFTER modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD KEY (verschieberegel_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_verschieberegel` (" + . "\n `verschieberegel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` varchar(50) NOT NULL DEFAULT ''," + . "\n `initial_ohne_termin` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `keine_gegenvorschlaege` tinyint(1) NOT NULL DEFAULT '0'," + . "\n `vorlaufzeit_tage` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `termine_minimal` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `termine_maximal` tinyint(4) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`verschieberegel_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE" + . ", #__sportsmanager_verschieberegel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT INTO #__sportsmanager_verschieberegel (bezeichnung, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal)" + . "\n VALUES ('Beliebig', '0', '0', '0', '1', '3');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $verschieberegel_id = $db->insertid(); + + $query = "UPDATE #__sportsmanager_veranstaltung" + . "\n SET verschieberegel_id = $verschieberegel_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '29'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 30) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rechnung` (" + . "\n `rechnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `notiz` TEXT NOT NULL," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `verein_id` int(11) DEFAULT NULL," + . "\n `veranstalter_id` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`rechnung_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `verein_id` (`verein_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rechnung_spieler` (" + . "\n `rechnung_spieler_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `rechnung_id` int(11) NOT NULL," + . "\n `spieler_id` int(11) NOT NULL," + . "\n PRIMARY KEY (`rechnung_spieler_id`)," + . "\n KEY `rechnung_id` (`rechnung_id`)," + . "\n KEY `spieler_id` (`spieler_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '30'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 31) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "RENAME TABLE #__sportsmanager_begegnung_verlegen TO #__sportsmanager_begegnung_historie;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung_historie WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung_historie CHANGE begegnung_verlegen_id begegnung_historie_id int(11) NOT NULL AUTO_INCREMENT"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '31'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 32) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_verschieberegel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_verschieberegel ADD ablehnen tinyint(1) NOT NULL DEFAULT '0' AFTER termine_maximal"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '32'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($datenbank_version < 33) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turniermeldung WRITE" + . ", #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turnierspiel" + . "\n SET rundenstufe = '10'" + . "\n WHERE rundenstufe = '-1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung ADD rundenstufe tinyint(4) DEFAULT NULL AFTER turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turniermeldung WRITE" + . ", #__sportsmanager_turniermeldung_spieler WRITE" + . ", #__sportsmanager_turniervoranmeldung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turniermeldung" + . "\n SET rundenstufe = '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_turniervoranmeldung" + . "\n ORDER BY turnierdisziplin_id"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $query = "INSERT INTO #__sportsmanager_turniermeldung (turnierdisziplin_id, rundenstufe, platz)" + . "\n VALUES ('$row->turnierdisziplin_id', '20', NULL);"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $id = $db->insertid(); + + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$id', '$row->spieler_1_id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + if ($row->spieler_2_id != NULL) { + $query = "INSERT INTO #__sportsmanager_turniermeldung_spieler (turniermeldung_id, spieler_id)" + . "\n VALUES ('$id', '$row->spieler_2_id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + } + + $query = "DROP TABLE #__sportsmanager_turniervoranmeldung;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '33'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 34) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turniermeldung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung ADD meldungsgruppe_id int(11) DEFAULT NULL AFTER turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turniermeldung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung ADD KEY (meldungsgruppe_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '34'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 35) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnierspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierspiel ADD ergebnis_detailliert tinytext DEFAULT NULL AFTER ergebnis"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '35'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 36) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_turnier_rundenstufe` (" + . "\n `turnier_rundenstufe_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `turnierdisziplin_id` int(11) NOT NULL DEFAULT '0'," + . "\n `rundenstufe` tinyint(4) DEFAULT NULL," + . "\n `bezeichnung` tinytext DEFAULT NULL," + . "\n `typ` tinyint(4) DEFAULT NULL," + . "\n `runden` tinyint(4) DEFAULT NULL," + . "\n `saetze` tinyint(4) DEFAULT NULL," + . "\n `tore` tinyint(4) DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) DEFAULT NULL," + . "\n `spielfelder` text DEFAULT NULL," + . "\n PRIMARY KEY (`turnier_rundenstufe_id`)," + . "\n KEY `turnierdisziplin_id` (`turnierdisziplin_id`)," + . "\n KEY `rundenstufe` (`rundenstufe`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '36'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 37) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD INDEX (spielernr)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler DROP INDEX vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler DROP INDEX nachname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD INDEX (nachname)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD INDEX (vorname)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import ADD INDEX (spielernr)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '37'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 38) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin CHANGE wertung wertung float(4,2) DEFAULT '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '38'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 39) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD pin varchar(20) DEFAULT NULL AFTER zusatzpunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '39'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 40) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_kategorie WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_kategorie ORDER BY typ, nummer, kategorie_id DESC"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + $typ = -1; + $nummer = -1; + foreach ($rows as $row) { + if ($typ != $row->typ || $nummer != $row->nummer) { + $typ = $row->typ; + $nummer = $row->nummer; + continue; + } + $query = "DELETE FROM #__sportsmanager_kategorie WHERE kategorie_id = $row->kategorie_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '40'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 41) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD spielpunkte_bedingung tinyint(4) NOT NULL DEFAULT '0' AFTER spielpunkte_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '41'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 42) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD spielernamen tinyint(4) NOT NULL DEFAULT '0' AFTER spielpunkte_bedingung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '42'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 43) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_einstufung` (" + . "\n `einstufung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` TINYTEXT NOT NULL," + . "\n `prioritaet` tinyint(4) DEFAULT NULL," + . "\n PRIMARY KEY (`einstufung_id`)," + . "\n KEY `prioritaet` (`prioritaet`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_einstufung_rangliste` (" + . "\n `einstufung_rangliste_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `einstufung_id` int(11) NOT NULL," + . "\n `rangliste_id` int(11) NOT NULL," + . "\n `platz_min` smallint(6) DEFAULT NULL," + . "\n `platz_max` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`einstufung_rangliste_id`)," + . "\n KEY `einstufung_id` (`einstufung_id`)," + . "\n KEY `rangliste_id` (`rangliste_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD einstufung_id int(11) DEFAULT NULL AFTER bild_ausblenden"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '43'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 44) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD heimtausch tinyint(4) NOT NULL DEFAULT '0' AFTER spielernamen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '44'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 45) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_einstufung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_einstufung ADD elo_min smallint(6) DEFAULT NULL AFTER prioritaet"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_einstufung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_einstufung ADD elo_max smallint(6) DEFAULT NULL AFTER elo_min"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '45'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 46) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_elo_cache` (" + . "\n `cache_datum` date NOT NULL," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `elo_einzel` smallint(6) DEFAULT NULL," + . "\n `elo_einzel_spiele` smallint(6) DEFAULT NULL," + . "\n `elo_doppel` smallint(6) DEFAULT NULL," + . "\n `elo_doppel_spiele` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`spieler_id`, `cache_datum`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '46'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_aktualisieren = TRUE; + } + + if ($datenbank_version < 47) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD erstmals_gespielt date AFTER lizenznr"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '47'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $wann_gespielt_aktualisieren = TRUE; + } + + if ($datenbank_version < 48) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_einstellungen" + . "\n SET name = 'spielerliste_elo', wert = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '48'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 49) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_einstufung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_einstufung ADD typ smallint(4) DEFAULT NULL AFTER bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstufung" + . "\n SET typ = '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler CHANGE einstufung_id einstufung_allgemein_id int(11) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD einstufung_einzel_id int(11) DEFAULT NULL AFTER einstufung_allgemein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD einstufung_doppel_id int(11) DEFAULT NULL AFTER einstufung_einzel_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '49'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 50) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_system WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_system ADD funktion TEXT DEFAULT NULL AFTER systembezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_system WRITE" + . ", #__sportsmanager_rangliste WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann/Wahle (1 Punkt für Letzten)'," + . "\n status = '1'," + //. "\n funktion = 'MAX(ROUND(m * ROUND((((POW(n * 10, 0.7) - 1) * (-LOG(p / n) * (1 - (p / n)))) / (-LOG(1 / n) * (1 - (1 / n)))) + 1)), 1)'"; + . "\n funktion = 'VERTEILUNG(POW(n * 10, 0.7), p, n, m)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $system_id = $db->insertid(); + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '3'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '3'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann (1 Punkt ab Platz 129)'," + . "\n status = '1'," + . "\n funktion = 'MAX(ROUND(m * ROUND((((n / 100) * 0.5) + 0.7) * (100 + ((-20.45) * LN(p))))), 1)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $system_id = $db->insertid(); + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '2'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '2'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_rangliste_system" + . "\n SET systembezeichnung = 'Klostermann (1 Punkt ab Platz 50)'," + . "\n status = '1'," + . "\n funktion = 'MAX(ROUND(m * ROUND((((n / 100) * 0.5) + 0.7) * (100 + ((-25.3) * LN(p))))), 1)'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $system_id = $db->insertid(); + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste_turnierdisziplin" + . "\n SET system_id = '$system_id'" + . "\n WHERE system_wertung = '1'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste DROP system_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin DROP system_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '50'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $rangliste_aktualisieren = true; + } + + if ($datenbank_version < 51) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_mitglied_von_verein ADD mitgliedsstatus tinyint(4) NOT NULL DEFAULT '0' AFTER verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET mitgliedsstatus = IF(ausgetreten, 0, 1)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '51'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 52) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import ADD mitgliedsstatus tinyint(4) NOT NULL AFTER veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_spieler_import" + . "\n SET mitgliedsstatus = 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import DROP ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '52'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 53) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rechnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rechnung ADD mitgliedsstatus tinyint(4) NOT NULL AFTER veranstalter_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rechnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rechnung" + . "\n SET mitgliedsstatus = 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '53'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 54) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin` (" + . "\n `termin_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_bezug_id` int(11) NOT NULL," + . "\n `erster_tag` date NOT NULL," + . "\n `letzter_tag` date NOT NULL," + . "\n `bezeichnung` text NOT NULL," + . "\n `beschreibung` text NOT NULL," + . "\n `ort` text NOT NULL," + . "\n `land` text NOT NULL," + . "\n `url` text NOT NULL," + . "\n `email` text NOT NULL," + . "\n `bestaetigt` tinyint(1) NOT NULL," + . "\n PRIMARY KEY (`termin_id`)," + . "\n KEY `termin_bezug_id` (`termin_bezug_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_aktion` (" + . "\n `termin_aktion_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_id` int(11) NOT NULL," + . "\n `typ` tinyint(4) NOT NULL," + . "\n `kommentar` text NOT NULL," + . "\n `aktion_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `aktion_zeitpunkt` datetime NOT NULL," + . "\n `moderation_user_id` int(11) DEFAULT '0'," + . "\n `moderation_zeitpunkt` datetime," + . "\n `status` tinyint(4) NOT NULL," + . "\n PRIMARY KEY (`termin_aktion_id`)," + . "\n KEY `termin_id` (`termin_id`)," + . "\n KEY `typ` (`typ`)," + . "\n KEY `status` (`status`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bezeichnung` (" + . "\n `termin_bezeichnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnung` text NOT NULL," + . "\n PRIMARY KEY (`termin_bezeichnung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bundesland` (" + . "\n `termin_bundesland_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bundesland` text NOT NULL," + . "\n PRIMARY KEY (`termin_bundesland_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_land` (" + . "\n `termin_land_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `land` text NOT NULL," + . "\n PRIMARY KEY (`termin_land_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_zusatz` (" + . "\n `termin_zusatz_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_id` int(11) NOT NULL," + . "\n `zusatz` text NOT NULL," + . "\n PRIMARY KEY (`termin_zusatz_id`)," + . "\n KEY `termin_id` (`termin_id`)," + . "\n KEY `ix_length_zusatz` (`zusatz`(16))" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_bezeichnungszusatz` (" + . "\n `termin_bezeichnungszusatz_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bezeichnungszusatz` text NOT NULL," + . "\n `titel` text NOT NULL," + . "\n PRIMARY KEY (`termin_bezeichnungszusatz_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_bezeichnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Challenger'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Meeting'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF Master'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF Pro'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'ITSF WCS'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Frauen-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Frauen-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Junioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Junioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Senioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = '2. Senioren-Bundesliga'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Sonstiges'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnung" + . "\n SET bezeichnung = 'Deutsche Meisterschaft'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_bezeichnungszusatz WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'OD'," + . "\n titel = 'Offenes Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'OE'," + . "\n titel = 'Offenes Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'HD'," + . "\n titel = 'Herren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'HE'," + . "\n titel = 'Herren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'DD'," + . "\n titel = 'Damen Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'DE'," + . "\n titel = 'Damen Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'JD'," + . "\n titel = 'Junioren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'JE'," + . "\n titel = 'Junioren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'SD'," + . "\n titel = 'Senioren Doppel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bezeichnungszusatz" + . "\n SET bezeichnungszusatz = 'SE'," + . "\n titel = 'Senioren Einzel'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_bundesland WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Baden-Württemberg'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Bayern'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Berlin'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Bremen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Hamburg'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Hessen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Niedersachsen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Nordrhein-Westfalen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Rheinland-Pfalz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Saarland'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Sachsen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Sachsen-Anhalt'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Schleswig-Holstein'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Schweiz'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "INSERT #__sportsmanager_termin_bundesland" + . "\n SET bundesland = 'Thüringen'"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '54'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 55) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_moderator_zugriff` (" + . "\n `moderator_zugriff_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `moderator_id` int(11) NOT NULL," + . "\n `zugriff` varchar(64) NOT NULL," + . "\n `zusatz` text," + . "\n PRIMARY KEY (`moderator_zugriff_id`)," + . "\n KEY `moderator_id` (`moderator_id`)," + . "\n KEY `zugriff` (`zugriff`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_moderator WRITE" + . ", #__sportsmanager_moderator_zugriff WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_moderator"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $moderator_id = $row->moderator_id; + $moderator_zugriff = $row->zugriff; + $zugriffe_admin = array( + "moderatoren_aendern", + "basiseinstellungen_aendern", + "kategorien_aendern", + "organisationen_aendern", + "saisons_aendern", + "spieler_aendern", + "spieler_lesen_erweiterte_daten", + "termine_aendern", + "termine_benachrichtigung" + ); + $zugriffe_vereine = array( + "vereine_aendern" + ); + $zugriffe_wettbewerbe = array( + "mannschaftsspielplaene_aendern", + "verschieberegeln_aendern", + "spielorte_aendern", + "einstufungen_aendern", + "mannschaftswettbewerb_aendern", + "spielerstatistiken_aendern", + "turniere_aendern", + "ranglistenwertungen_aendern", + "ranglisten_aendern", + ); + $zugriffe_verteiler = array( + "verteiler_aendern" + ); + $zugriffe_mitgliederrechnungen = array( + "rechnungen_aendern" + ); + $zugriffe_sonstige = array( + "verteiler_lesen" + ); + + if ($moderator_zugriff == 1) + $zugriffe = array_merge($zugriffe_admin, $zugriffe_vereine, $zugriffe_wettbewerbe, $zugriffe_verteiler, $zugriffe_mitgliederrechnungen, $zugriffe_sonstige); + else if ($moderator_zugriff == 2) + $zugriffe = array_merge($zugriffe_vereine, $zugriffe_wettbewerbe, $zugriffe_verteiler, $zugriffe_mitgliederrechnungen, $zugriffe_sonstige); + else if ($moderator_zugriff == 3) + $zugriffe = array_merge($zugriffe_wettbewerbe, $zugriffe_verteiler, $zugriffe_mitgliederrechnungen, $zugriffe_sonstige); + else if ($moderator_zugriff == 4) + $zugriffe = array_merge($zugriffe_verteiler, $zugriffe_sonstige); + else if ($moderator_zugriff == 5) + $zugriffe = array_merge($zugriffe_verteiler, $zugriffe_mitgliederrechnungen, $zugriffe_sonstige); + else if ($moderator_zugriff == 6) + $zugriffe = array_merge($zugriffe_mitgliederrechnungen, $zugriffe_sonstige); + else + $zugriffe = $zugriffe_sonstige; + + foreach ($zugriffe as $zugriff) { + $query = "INSERT #__sportsmanager_moderator_zugriff" + . "\n SET moderator_id = '$moderator_id'," + . "\n zugriff = '$zugriff'," + . "\n zusatz = ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { die($db->stderr(true)); } + } + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '55'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 56) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_moderator WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_moderator DROP zugriff"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '56'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 57) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_turnier` (" + . "\n `berechtigt_fuer_turnier_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_turnier_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_turnier_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_turnier_id` (`berechtigt_turnier_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_veranstaltung` (" + . "\n `berechtigt_fuer_veranstaltung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_veranstaltung_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_veranstaltung_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_veranstaltung_id` (`berechtigt_veranstaltung_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '57'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 58) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler CHANGE email email varchar(64) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import CHANGE email email varchar(64) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamansprechpartner WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamansprechpartner CHANGE email email varchar(64) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_vereinsansprechpartner WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_vereinsansprechpartner CHANGE email email varchar(64) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '58'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 59) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_einstellungen CHANGE name name char(64) NOT NULL DEFAULT ''"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '59'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 60) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'termine', 0777)) + die(JText::_( 'COM_SPORTSMANAGER_CREATE_DATES_FAILED' )); + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '60'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 61) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin_aktion DROP kommentar"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin_aktion ADD aktion_kommentar text NOT NULL AFTER aktion_zeitpunkt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin_aktion ADD moderation_kommentar text NOT NULL AFTER moderation_zeitpunkt"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '61'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 62) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $pfad = JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'termine'.DIRECTORY_SEPARATOR.'.htaccess'; + $inhalt = "# Dokumente der Terminverwaltung\n" + . "Deny from all\n"; + if (file_put_contents($pfad, $inhalt) === FALSE) + die(JText::_( 'COM_SPORTSMANAGER_FILE_FAILED' )); + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '62'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 63) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_mitglied_von_verein WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Fix für ausgebliebene Aktualisierung des Ausgetretenwertes beim manuellen Ändern des Mitgliedsstatus + $query = "UPDATE #__sportsmanager_mitglied_von_verein" + . "\n SET ausgetreten = IF(mitgliedsstatus = 0, TRUE, FALSE)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '63'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 64) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin ADD ergebnisse_url text NOT NULL AFTER email"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '64'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 65) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler DROP elo_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '65'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 66) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin ADD ergebnisse_live bool default '0' AFTER ergebnisse_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '66'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 67) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin ADD kuerzel varchar(20) DEFAULT NULL AFTER disziplin"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '67'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 68) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnier ADD kategorie tinyint(4) DEFAULT '1' AFTER letzter_tag"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnier WRITE" + . ", #__sportsmanager_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_turnier" + . "\n SET #__sportsmanager_turnier.kategorie = #__sportsmanager_turnierdisziplin.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnierdisziplin DROP kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '68'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 69) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel ADD ergebnis_detailliert tinytext DEFAULT NULL AFTER teamspiel_gast_spielpunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '69'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 70) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turnier WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turnier CHANGE turnierbezeichnung turnierbezeichnung varchar(64) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '70'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 71) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD doppel_teilwertung float(4,2) DEFAULT '1' AFTER wertungskategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '71'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 72) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste DROP doppel_teilwertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin ADD doppel_teilwertung float(4,2) DEFAULT '1' AFTER wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '72'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 73) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb` (" + . "\n `individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `saison_id` int(11) NOT NULL DEFAULT '0'," + . "\n `veranstalter_id` int(11) NOT NULL DEFAULT '0'," + . "\n `bezeichnung` varchar(50) DEFAULT NULL," + . "\n `saetze` tinyint(4) DEFAULT NULL," + . "\n `tore` tinyint(4) DEFAULT NULL," + . "\n `tabellenwertung` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `elo_wertung` tinyint(4) DEFAULT NULL," + . "\n `status` tinyint(4) NOT NULL DEFAULT '0'," + . "\n `reihenfolge` tinyint(4) DEFAULT '1'," + . "\n `kategorie` tinyint(4) DEFAULT '1'," + . "\n PRIMARY KEY (`individualwettbewerb_id`)," + . "\n KEY `saison_id` (`saison_id`)," + . "\n KEY `veranstalter_id` (`veranstalter_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_spiel` (" + . "\n `individualwettbewerb_spiel_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `zeitpunkt` datetime DEFAULT NULL," + . "\n `heim_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `heim_spieler_2_id` int(11) DEFAULT NULL," + . "\n `gast_spieler_1_id` int(11) NOT NULL DEFAULT '0'," + . "\n `gast_spieler_2_id` int(11) DEFAULT NULL," + . "\n `ergebnis` tinyint(4) DEFAULT NULL," + . "\n `ergebnis_detailliert` tinytext DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_spiel_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `zeitpunkt` (`zeitpunkt`)," + . "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`)," + . "\n KEY `heim_spieler_2_id` (`heim_spieler_2_id`)," + . "\n KEY `gast_spieler_1_id` (`gast_spieler_1_id`)," + . "\n KEY `gast_spieler_2_id` (`gast_spieler_2_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '73'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 74) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechtigt_fuer_individualwettbewerb` (" + . "\n `berechtigt_fuer_individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `berechtigt_user_id` int(11) NOT NULL DEFAULT '0'," + . "\n `berechtigt_individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`berechtigt_fuer_individualwettbewerb_id`)," + . "\n KEY `berechtigt_user_id` (`berechtigt_user_id`)," + . "\n KEY `berechtigt_individualwettbewerb_id` (`berechtigt_individualwettbewerb_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '74'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 75) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_platzierung` (" + . "\n `individualwettbewerb_platzierung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_platzierung_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `platz` (`platz`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '75'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 76) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_individualwettbewerb_ausgangsplatzierung` (" + . "\n `individualwettbewerb_ausgangsplatzierung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n `spieler_id` int(11) NOT NULL DEFAULT '0'," + . "\n `platz` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`individualwettbewerb_ausgangsplatzierung_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)," + . "\n KEY `platz` (`platz`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '76'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 77) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_bestenliste_individualwettbewerb` (" + . "\n `bestenliste_individualwettbewerb_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `bestenliste_id` int(11) NOT NULL DEFAULT '0'," + . "\n `individualwettbewerb_id` int(11) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`bestenliste_individualwettbewerb_id`)," + . "\n KEY `bestenliste_id` (`bestenliste_id`)," + . "\n KEY `individualwettbewerb_id` (`individualwettbewerb_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte ADD spieler_2_id int(11) DEFAULT NULL AFTER spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte ADD KEY (spieler_2_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte ADD saetze_gewonnen smallint(6) DEFAULT NULL AFTER spielpunkte_verloren"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte ADD saetze_unentschieden smallint(6) DEFAULT NULL AFTER saetze_gewonnen"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_bestenliste_punkte WRITE" + . ", #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_bestenliste_punkte ADD saetze_verloren smallint(6) DEFAULT NULL AFTER saetze_unentschieden"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '77'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 78) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel_modus WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus CHANGE punkte_sieg punkte_sieg_einzel tinyint(4) NOT NULL DEFAULT '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD punkte_sieg_doppel tinyint(4) NOT NULL DEFAULT '0' AFTER punkte_sieg_einzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus CHANGE spielpunkte_wertung spielpunkte_wertung_einzel tinyint(4) NOT NULL DEFAULT '0'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_teamspiel_modus ADD spielpunkte_wertung_doppel tinyint(4) NOT NULL DEFAULT '0' AFTER spielpunkte_wertung_einzel"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel_modus" + . "\n SET punkte_sieg_doppel = punkte_sieg_einzel," + . "\n spielpunkte_wertung_doppel = spielpunkte_wertung_einzel;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '78'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $teamstatistik_aktualisieren = true; + } + + if ($datenbank_version < 79) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_termin_aktion WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_termin_aktion ADD benachrichtigung_email text NOT NULL AFTER typ"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n SET benachrichtigung_email = '';"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '79'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $termin_aktionen_email_setzen = true; + } + + if ($datenbank_version < 80) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'mannschaftswettbewerbe', 0777)) + die(JText::_( 'COM_SPORTSMANAGER_CREATE_TEAM_COMPETITION_FAILED' )); + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '80'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 81) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD logo_url tinytext DEFAULT NULL AFTER elo_wertung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '81'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 82) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CHANGE zusatzpunkte zusatzpunkte float(6,2) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CHANGE gesamtpunkte gesamtpunkte float(6,2) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '82'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 83) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_veranstaltung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_veranstaltung ADD ticker_logo_url tinytext DEFAULT NULL AFTER logo_url"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '83'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 84) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD elo_einzel_startwert smallint(6) DEFAULT NULL AFTER aktueller_verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler ADD elo_doppel_startwert smallint(6) DEFAULT NULL AFTER elo_einzel_spiele"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '84'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 85) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CHANGE tischtyp tischtyp varchar(100) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '85'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 86) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD buchholz1 smallint(6) DEFAULT NULL AFTER punkte_quotient"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD buchholz2 smallint(6) DEFAULT NULL AFTER buchholz1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '86'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 87) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_symbolanzeige` (" + . "\n `termin_symbolanzeige_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `termin_symbol_id` int(11) NOT NULL," + . "\n `termin_id` int(11) NOT NULL," + . "\n PRIMARY KEY (`termin_symbolanzeige_id`)," + . "\n KEY `termin_symbol_id` (`termin_symbol_id`)," + . "\n KEY `termin_id` (`termin_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_termin_symbol` (" + . "\n `termin_symbol_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `symboltitel` text NOT NULL," + . "\n `status` tinyint(1) NOT NULL DEFAULT '0'," + . "\n PRIMARY KEY (`termin_symbol_id`)," + . "\n KEY `status` (`status`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!JFolder::create(JPATH_ROOT . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . 'terminsymbole', 0777)) + die(JText::_( 'COM_SPORTSMANAGER_CREATE_DATES_SYMBOLS_FAILED' )); + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '87'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 88) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_turniermeldung WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_turniermeldung ADD KEY turnierdisziplin_rundenstufe_platz (turnierdisziplin_id, rundenstufe, platz)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_punkte WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_punkte ADD KEY rangliste_platz (rangliste_id, platz)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '88'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 89) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_rangliste_turnierdisziplin_punkte` (" + . "\n `rangliste_id` int(11) NOT NULL," + . "\n `spieler_id` int(11) NOT NULL," + . "\n `turnierdisziplin_id` int(11) NOT NULL," + . "\n `punkte` smallint(6) DEFAULT NULL," + . "\n PRIMARY KEY (`rangliste_id`, `spieler_id`, `turnierdisziplin_id`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_punkte WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_punkte DROP PRIMARY KEY, DROP rangliste_punkte_id, DROP KEY rangliste_id, DROP KEY spieler_id, ADD PRIMARY KEY(rangliste_id, spieler_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '89'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rangliste_aktualisieren = true; + } + + if ($datenbank_version < 90) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "CREATE TABLE IF NOT EXISTS `#__sportsmanager_berechnung` (" + . "\n `berechnung_id` int(11) NOT NULL AUTO_INCREMENT," + . "\n `session_id` varchar(200) NOT NULL," + . "\n `typ` char(64) NOT NULL DEFAULT ''," + . "\n `parameter` char(255) DEFAULT NULL," + . "\n `id` int(11) DEFAULT NULL," + . "\n PRIMARY KEY (`berechnung_id`)," + . "\n KEY `session_id` (`session_id`)," + . "\n KEY `typ` (`typ`)," + . "\n KEY `id` (`typ`)" + . "\n) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '90'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 91) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_berechnung WRITE" + . ", #__sportsmanager_spieler_import WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_berechnung CHANGE session_id session_id datetime DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_spieler_import CHANGE session_id session_id datetime DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '91'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 92) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste_turnierdisziplin_punkte WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste_turnierdisziplin_punkte ADD platz smallint(6) DEFAULT NULL AFTER turnierdisziplin_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '92'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $rangliste_aktualisieren = true; + } + + if ($datenbank_version < 93) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (!bildKopierenAngepasst(JPATH_ROOT.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_sportsmanager'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'spieler-m.png', JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'spieler'.DIRECTORY_SEPARATOR.'m.png', 180, 240, 1)) + die('Das Bild konnte nicht an die Zielposition kopiert werden.'); + + if (!bildKopierenAngepasst(JPATH_ROOT.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_sportsmanager'.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'spieler-w.png', JPATH_ROOT.DIRECTORY_SEPARATOR.'images'.DIRECTORY_SEPARATOR.'sportsmanager'.DIRECTORY_SEPARATOR.'spieler'.DIRECTORY_SEPARATOR.'w.png', 180, 240, 1)) + die('Das Bild konnte nicht an die Zielposition kopiert werden.'); + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '93'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 94) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team CHANGE tischtyp tischtyp varchar(200) DEFAULT NULL"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '94'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 95) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rechnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rechnung ADD wertungskategorie tinyint(4) NOT NULL AFTER mitgliedsstatus"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rechnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rechnung" + . "\n SET wertungskategorie = 15"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '95'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 96) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_teamspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET ergebnis_detailliert = IF((ISNULL(teamspiel_heim_punkte) OR (teamspiel_heim_punkte = 0)) AND (ISNULL(teamspiel_gast_punkte) OR (teamspiel_gast_punkte = 0)), null, CONCAT_WS(':', teamspiel_heim_punkte, teamspiel_gast_punkte))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '96'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 97) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD geschlecht tinyint(4) DEFAULT NULL AFTER wertungskategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD minalter tinyint(4) DEFAULT NULL AFTER geschlecht"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD maxalter tinyint(4) DEFAULT NULL AFTER minalter"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET geschlecht = IF(wertungskategorie = 1 OR wertungskategorie = 5, 1, IF(wertungskategorie = 2 OR wertungskategorie = 6, 2, null))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET minalter = IF(wertungskategorie = 1 OR wertungskategorie = 2, 18, IF(wertungskategorie = 4, 50, null))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET maxalter = IF(wertungskategorie = 1 OR wertungskategorie = 2, 49, IF(wertungskategorie = 3, 17, null))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste DROP wertungskategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '97'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 98) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung ADD tisch tinytext DEFAULT NULL AFTER spielort_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '98'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 99) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_rangliste ADD ohnealter bool DEFAULT '0' AFTER maxalter"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_rangliste WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_rangliste" + . "\n SET ohnealter = '1'" + . "\n WHERE ISNULL(minalter) AND ISNULL(maxalter)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '99'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 100) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD tischeigenschaften varchar(200) DEFAULT NULL AFTER tischtyp"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '100'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + if ($datenbank_version < 101) { + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_begegnung WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_begegnung ADD nichtraucherschutz tinyint(4) DEFAULT '0' AFTER gast_spielpunkte"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "LOCK TABLES #__sportsmanager_einstellungen WRITE" + . ", #__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "ALTER TABLE #__sportsmanager_team ADD nichtraucherschutz tinyint(4) DEFAULT '0' AFTER heimspielort_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_einstellungen" + . "\n SET wert = '101'" + . "\n WHERE name = 'datenbank_version'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($termin_aktionen_email_setzen) { + $query = "SELECT aktion_user_id, termin_aktion_id" + . "\n FROM #__sportsmanager_termin_aktion"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + $aktion_user =& JFactory::getUser($row->aktion_user_id); + if (empty($aktion_user->id) || empty($aktion_user->email)) + continue; + $query = "UPDATE #__sportsmanager_termin_aktion" + . "\n SET benachrichtigung_email = '" . $db->getEscaped($aktion_user->email) . "'" + . "\n WHERE termin_aktion_id = " . $row->termin_aktion_id . ";"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + if ($wann_gespielt_aktualisieren) + wannGespieltAktualisieren(); + + if ($teamstatistik_aktualisieren) + teamstatistikAktualisieren(); + + if ($aktueller_verein_aktualisieren) + aktuellerVereinAktualisieren(); + + if ($spielerstatistik_aktualisieren) + spielerstatistikAktualisieren(); + + if ($elo_aktualisieren) + eloAktualisieren(); + + if ($rangliste_aktualisieren) + ranglisteAktualisieren(); + + if (!redirectSessionIdEmpty()) { + // Neu laden, um etwaige offene Berechnungen auszuführen und genügend Rechenzeit für eigentlichen Seitenaufruf zu haben + // Dass Posts verloren gehen, ist unwahrscheinlich, aber wird akzeptiert // TODO: Session-Id in URL ergänzen + redirectCurrentURL(); + jexit(); + } +} + +?> diff --git a/src/structure/components/com_sportsmanager/images/btn_view_results.png b/src/structure/components/com_sportsmanager/images/btn_view_results.png new file mode 100644 index 0000000..e27398e Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/btn_view_results.png differ diff --git a/src/structure/components/com_sportsmanager/images/cup.png b/src/structure/components/com_sportsmanager/images/cup.png new file mode 100644 index 0000000..16b813a Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/cup.png differ diff --git a/src/structure/components/com_sportsmanager/images/desktop.ini b/src/structure/components/com_sportsmanager/images/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/images/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/images/dtfvb_logo.png b/src/structure/components/com_sportsmanager/images/dtfvb_logo.png new file mode 100644 index 0000000..8936175 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/dtfvb_logo.png differ diff --git a/src/structure/components/com_sportsmanager/images/fin_icon.png b/src/structure/components/com_sportsmanager/images/fin_icon.png new file mode 100644 index 0000000..85746d8 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/fin_icon.png differ diff --git a/src/structure/components/com_sportsmanager/images/homeicon.jpg b/src/structure/components/com_sportsmanager/images/homeicon.jpg new file mode 100644 index 0000000..8d1ad47 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/homeicon.jpg differ diff --git a/src/structure/components/com_sportsmanager/images/left_background_pad.png b/src/structure/components/com_sportsmanager/images/left_background_pad.png new file mode 100644 index 0000000..b6fb622 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_background_pad.png differ diff --git a/src/structure/components/com_sportsmanager/images/left_button.png b/src/structure/components/com_sportsmanager/images/left_button.png new file mode 100644 index 0000000..fdbf1a8 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_button.png differ diff --git a/src/structure/components/com_sportsmanager/images/left_button_fin.png b/src/structure/components/com_sportsmanager/images/left_button_fin.png new file mode 100644 index 0000000..8206be1 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_button_fin.png differ diff --git a/src/structure/components/com_sportsmanager/images/left_button_hover.png b/src/structure/components/com_sportsmanager/images/left_button_hover.png new file mode 100644 index 0000000..6d5f4a6 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_button_hover.png differ diff --git a/src/structure/components/com_sportsmanager/images/left_button_run.png b/src/structure/components/com_sportsmanager/images/left_button_run.png new file mode 100644 index 0000000..7b40d1a Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_button_run.png differ diff --git a/src/structure/components/com_sportsmanager/images/left_button_upc.png b/src/structure/components/com_sportsmanager/images/left_button_upc.png new file mode 100644 index 0000000..e2b13ea Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/left_button_upc.png differ diff --git a/src/structure/components/com_sportsmanager/images/live_icon.png b/src/structure/components/com_sportsmanager/images/live_icon.png new file mode 100644 index 0000000..4fe118d Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/live_icon.png differ diff --git a/src/structure/components/com_sportsmanager/images/liveticker_bg.jpg b/src/structure/components/com_sportsmanager/images/liveticker_bg.jpg new file mode 100644 index 0000000..37b0910 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/liveticker_bg.jpg differ diff --git a/src/structure/components/com_sportsmanager/images/liveticker_bg.png b/src/structure/components/com_sportsmanager/images/liveticker_bg.png new file mode 100644 index 0000000..3afb277 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/liveticker_bg.png differ diff --git a/src/structure/components/com_sportsmanager/images/match_status.png b/src/structure/components/com_sportsmanager/images/match_status.png new file mode 100644 index 0000000..6b8d2a0 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/match_status.png differ diff --git a/src/structure/components/com_sportsmanager/images/mid_background_pad.png b/src/structure/components/com_sportsmanager/images/mid_background_pad.png new file mode 100644 index 0000000..3275125 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/mid_background_pad.png differ diff --git a/src/structure/components/com_sportsmanager/images/middle_button.png b/src/structure/components/com_sportsmanager/images/middle_button.png new file mode 100644 index 0000000..9bcf12f Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/middle_button.png differ diff --git a/src/structure/components/com_sportsmanager/images/middle_button_fin.png b/src/structure/components/com_sportsmanager/images/middle_button_fin.png new file mode 100644 index 0000000..1e6510f Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/middle_button_fin.png differ diff --git a/src/structure/components/com_sportsmanager/images/middle_button_hover.png b/src/structure/components/com_sportsmanager/images/middle_button_hover.png new file mode 100644 index 0000000..fda2b5c Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/middle_button_hover.png differ diff --git a/src/structure/components/com_sportsmanager/images/middle_button_run.png b/src/structure/components/com_sportsmanager/images/middle_button_run.png new file mode 100644 index 0000000..661f516 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/middle_button_run.png differ diff --git a/src/structure/components/com_sportsmanager/images/middle_button_upc.png b/src/structure/components/com_sportsmanager/images/middle_button_upc.png new file mode 100644 index 0000000..611e72c Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/middle_button_upc.png differ diff --git a/src/structure/components/com_sportsmanager/images/next.jpg b/src/structure/components/com_sportsmanager/images/next.jpg new file mode 100644 index 0000000..88a3a32 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/next.jpg differ diff --git a/src/structure/components/com_sportsmanager/images/prev.jpg b/src/structure/components/com_sportsmanager/images/prev.jpg new file mode 100644 index 0000000..a5dba7b Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/prev.jpg differ diff --git a/src/structure/components/com_sportsmanager/images/result_holder.png b/src/structure/components/com_sportsmanager/images/result_holder.png new file mode 100644 index 0000000..ae823f4 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/result_holder.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_background_pad.png b/src/structure/components/com_sportsmanager/images/right_background_pad.png new file mode 100644 index 0000000..feaf8d6 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_background_pad.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_button.png b/src/structure/components/com_sportsmanager/images/right_button.png new file mode 100644 index 0000000..289dff1 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_button.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_button_fin.png b/src/structure/components/com_sportsmanager/images/right_button_fin.png new file mode 100644 index 0000000..4ea5943 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_button_fin.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_button_hover.png b/src/structure/components/com_sportsmanager/images/right_button_hover.png new file mode 100644 index 0000000..f5a4ca0 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_button_hover.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_button_run.png b/src/structure/components/com_sportsmanager/images/right_button_run.png new file mode 100644 index 0000000..82f986a Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_button_run.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_button_upc.png b/src/structure/components/com_sportsmanager/images/right_button_upc.png new file mode 100644 index 0000000..055efc3 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_button_upc.png differ diff --git a/src/structure/components/com_sportsmanager/images/right_page_background.png b/src/structure/components/com_sportsmanager/images/right_page_background.png new file mode 100644 index 0000000..df5ccaa Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/right_page_background.png differ diff --git a/src/structure/components/com_sportsmanager/images/see_results_btn.png b/src/structure/components/com_sportsmanager/images/see_results_btn.png new file mode 100644 index 0000000..9c62fc1 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/see_results_btn.png differ diff --git a/src/structure/components/com_sportsmanager/images/see_results_btn_right.png b/src/structure/components/com_sportsmanager/images/see_results_btn_right.png new file mode 100644 index 0000000..bf988ce Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/see_results_btn_right.png differ diff --git a/src/structure/components/com_sportsmanager/images/sheme1.png b/src/structure/components/com_sportsmanager/images/sheme1.png new file mode 100644 index 0000000..9bc4218 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/sheme1.png differ diff --git a/src/structure/components/com_sportsmanager/images/spieler-m.png b/src/structure/components/com_sportsmanager/images/spieler-m.png new file mode 100644 index 0000000..d2ee245 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/spieler-m.png differ diff --git a/src/structure/components/com_sportsmanager/images/spieler-w.png b/src/structure/components/com_sportsmanager/images/spieler-w.png new file mode 100644 index 0000000..1e7ec13 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/spieler-w.png differ diff --git a/src/structure/components/com_sportsmanager/images/tab_eliminations.png b/src/structure/components/com_sportsmanager/images/tab_eliminations.png new file mode 100644 index 0000000..e447603 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/tab_eliminations.png differ diff --git a/src/structure/components/com_sportsmanager/images/tab_groups.png b/src/structure/components/com_sportsmanager/images/tab_groups.png new file mode 100644 index 0000000..2ebbb5f Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/tab_groups.png differ diff --git a/src/structure/components/com_sportsmanager/images/upc_icon.png b/src/structure/components/com_sportsmanager/images/upc_icon.png new file mode 100644 index 0000000..99ae593 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/upc_icon.png differ diff --git a/src/structure/components/com_sportsmanager/images/upd_icon.png b/src/structure/components/com_sportsmanager/images/upd_icon.png new file mode 100644 index 0000000..d768469 Binary files /dev/null and b/src/structure/components/com_sportsmanager/images/upd_icon.png differ diff --git a/src/structure/components/com_sportsmanager/index.html b/src/structure/components/com_sportsmanager/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/components/com_sportsmanager/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/js/jquery.min.js b/src/structure/components/com_sportsmanager/js/jquery.min.js new file mode 100644 index 0000000..4d34fca --- /dev/null +++ b/src/structure/components/com_sportsmanager/js/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */ +(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/mathparser.php b/src/structure/components/com_sportsmanager/mathparser.php new file mode 100644 index 0000000..dbf69d6 --- /dev/null +++ b/src/structure/components/com_sportsmanager/mathparser.php @@ -0,0 +1,2957 @@ +
+ * Math parser library features at a glance include:

+ * + * Easy to use, simple class API.
+ * Functions with 0 or more number of parameters in the form of: f(x,y,z, ...)
+ * Functions with unknown number of parameters, e.g. SUM(a,b,c,...)
+ * Comes with predefined functions.
+ * You can create custom functions/variables with callbacks to the functions that you define in your source code, either through delegates or interfaces.
+ * VariableResolver, a callback function to provide values for undefined variables.
+ * Function/variable names start with letters and can contain letters, numbers and underscore (_).
+ * Expression can contain string literals, variable values and function return values can be strings.
+ * Arithmetic Operators: +, -, /, *, ^, %(mod)
+ * Boolean Operators: <, >, =, &, |, ! ,<>, >=, <=
+ * String concatenation with & or +
+ * Optimization: Constant expression elimination for repeated tasks.
+ * Paranthesis: (
+ * List of predefined functions is available in the documentation.
+ * Provides localization support which is a dictionary of message-keys to messages you can set.
+ * Royalty free distribution.
+ * Comes as source code.

+ * + * You may ask why not use PHP eval() function? + * The answer is security. eval() is a security nightmare if you ask for formula input from the user. + * PHP syntax for formulas with $ signs is not intuitive either. The aim of MathParser is to be a + * a secure, simple math evaluator alternative to eval(). Please keep in mind, MathParser only evaluates + * mathematical expressions given using a simple syntax that consists of numbers, variables, function calls + * and paranthesis. MathParser does not evaluate PHP expressions.

+ * + * Predefined functions are: + *

+ * SQR: Square function which can be used as SQR(X) + *

+ * SIN: Sinus function which can be used as SIN(X), X is a real-type expression. + * Sin returns the sine of the angle X in radians. + *

+ * COS: Cosinus function which can be used as COS(X), X is a real-type expression. + * COS returns the cosine of the angle X in radians. + *

+ * ATAN: ArcTangent function which can be used as ATAN(X) + * Returns the arctangent of a number as a numeric value between -PI/2 and PI/2 radians. + *

+ * SINH: Sinus Hyperbolic function which can be used as SINH(X) + *

+ * COSH: Cosinus Hyperbolic function which can be used as COSH(X) + *

+ * COTAN: which can be used as COTAN(X) + *

+ * TAN: which can be used as TAN(X) + *

+ * EXP: which can be used as EXP(X) + *

+ * LN: natural log, which can be used as LN(X) + *

+ * LOG: 10 based log, which can be used as LOG(X) + *

+ * SQRT: which can be used as SQRT(X) + *

+ * ABS: absolute value, which can be used as ABS(X) + *

+ * SIGN: SIGN(X) returns -1 if X<0; +1 if X>0, 0 if X=0; it can be used as SQR(X) + *

+ * TRUNC: Discards the fractional part of a number. e.g. TRUNC(-3.2) is -3, TRUNC(3.2) is 3. + *

+ * CEIL: CEIL(-3.2) = 3, CEIL(3.2) = 4 + *

+ * FLOOR: FLOOR(-3.2) = -4, FLOOR(3.2) = 3 + *

+ * VAL: VAL("3.1") = 3.1 Returns the floating point numeric value of the string argument. + *

+ * Predefined functions that take two parameters are: + *

+ * POW: The Power function raises Base to any power. For fractional exponents or + * exponents greater than MaxInt, Base must be greater than 0. + *

+ * LOGN: The LogN function returns the log base N of X. Example: LOGN(10, 100) = 2 + *

+ * MIN: MIN(2, 3) is 2. + *

+ * MAX: MAX(2, 3) is 3. + *

+ * IF: The IF(b, case1, case2) function provides branching capability. + * If b is not 0, then it returns case1, else it returns case2. + * Behavior is similar to PHP's: return b ? case1 : case2;
+ * If b==0 then case1 will not be Evaluated, and vice versa. + * Example: IF(HEIGHT, 3/HEIGHT, 3) will make sure 3/HEIGHT does not cause division by zero. + *

+ * Predefined functions that take no parameters are: + * RND: RND() function generates a random number (double value) between 0 and 1. + *

+ * STR: STR(123) function returns the string representation of the passed value: "123". + *

+ * SUBSTR: SUBSTR("Hello", 1,3) function returns the substring just like PHP substr function. + * The first parameter is the string, the second parameter is which index (0 based) to start copying, + * and the last parameter is the number of characters to copy. For example, SUBSTR("Hello", 1,3) returns "ell". + *

+ * STRLEN: STRLEN("abc") function returns the length of the string parameter. For example, for "abc" it returns 3. + *

+ * CONCAT: CONCAT("abc","def",...) function returns the concatanated strings: "abcdef". + * There is no preset limit on the number of parameters. + *

+ * TRIM: TRIM(" abc ") function returns the trimmed version of the string parameter: " abc " -> "abc". + *

+ * SUM: SUM(2,3,5,...) functions returns the sum of it's arguments. There is no preset limit on the number of parameters. + *

+ */ +class MathParser +{ + /** + * protected variable that holds the expression to parse. + * @var string + */ + protected $Expression; + /** + * non-public flag that shows if parsing is needed or not. if false, existing + * parse tree will be re-used. + * @var boolean + */ + protected $Dirty; + /** + * when optimization on, after the parse tree is compiled, it will be further optimized + * by removing sub branches that evaluate to a constant. This will make parse() operation + * slower and getValue() operation faster. + * @var boolean + */ + protected $OptimizationOn; + + /** + * Starting node for the internal compiled representation of the + * expression in parsed form. + * @var Node + */ + protected $Node; + + /** + * internal list of variables that are available for use in an expression. + * @var array + */ + protected $Variables; + + /** + * internal list of functions that take more than 2 parameters that are available for use in an expression. + * @var array + */ + protected $Functions; + + /** + * A dictionary that holds translated messages. + * @var array + */ + static protected $translator; + + /** + * Does the expression allows string literals or not? + * For example, is an expression like this allowed: "Hello"+"World" + * @var boolean + */ + protected $StringLiteralsAllowed = true; + + /** + * The parser can use ampersand(&) or the plus(+) operator for string concatenations. + * You can set which one you want using StrConcatOperator property. + * The default is ampersand(&). Valid values are STR_CONCAT_OP.PLUS or + * STR_CONCAT_OP.AMPERSAND. + * @var string + */ + protected $StrConcatOperator; + + /* + * Public for performance reasons. + * @see getVariableResolver function for more info. + * @var string + */ + public $VariableResolver; + + /** + * @ignore + */ + static protected $add__; + /** + * @ignore + */ + static protected $subtract__; + /** + * @ignore + */ + static protected $mult__; + /** + * @ignore + */ + static protected $div__; + /** + * @ignore + */ + static protected $power__; + /** + * @ignore + */ + static protected $mod__; + /** + * @ignore + */ + static protected $unaryadd__; + /** + * @ignore + */ + static protected $negate__; + /** + * @ignore + */ + static protected $not__; + /** + * @ignore + */ + static protected $notequals__; + /** + * @ignore + */ + static protected $equals__; + /** + * @ignore + */ + static protected $lt__; + /** + * @ignore + */ + static protected $gt__; + /** + * @ignore + */ + static protected $ltequals__; + /** + * @ignore + */ + static protected $gtequals__; + /** + * @ignore + */ + static protected $and__; + /** + * @ignore + */ + static protected $or__; + + /** + * Implementation of plus (+) operator. + * @ignore + */ + protected $AddOp; + + /** + * Implementation of ampersand (&) operator for strings. + * @ignore + */ + protected $AndOp; + + + /** + * Can the expression contain string literals such as + * "abc", "hello world" etc. If you do not want to support strings in the + * expression, (want numeric processing only), then you can set this property + * to false and then you can also remove string functions from the list of available + * functions. Then the parser will solely work on numeric expressions. + * The string literals may also be useful in numeric context where the string can refer + * to a database table or column name and can be passed to functions that actually use these strings + * to lookup these values in databases to return numeric values too. + * @return boolean + */ + public function getStringLiteralsAllowed() + { + return $this->StringLiteralsAllowed; + } + /** + * @see getStringLiteralsAllowed + * @param $value - boolean + * @return void + */ + public function setStringLiteralsAllowed($value) + { + $this->StringLiteralsAllowed = $value; + if($value==true){ + if($this->StrConcatOperator=='&'){ + $this->AndOp = new Mathparser_ParserFunction('&', mp_and_str_, 2); + }else if ($this->StrConcatOperator=='+'){ + $this->AddOp = new Mathparser_ParserFunction('+', mp_add_str_, 2); + }else{ + throw new Exception('Invalid string concat operator: '.$this->StrConcatOperator); + } + }else{ + $this->AddOp = self::$add__; + $this->AndOp = self::$and__; + } + } + + /** + * If you setStringLiteralsAllowed to true, MathParser allows string literals and + * variables to be used in the expression. By default string values can be concatenated + * to each other using plus (+) operator. StrConcatOperator property allows the user to + * set ampersand instead (&). You can only set plus(+) or ampersand (&) + * @return boolean + */ + public function getStrConcatOperator(){ + return $this->StrConcatOperator; + } + /** + * @see getStrConcatOperator + * @param $value - boolean + * @return void + */ + public function setStrConcatOperator($value){ + $this->StrConcatOperator=$value; + if($value=='&'){ + if($this->StringLiteralsAllowed){ + $this->AndOp = new Mathparser_ParserFunction('&', mp_and_str_, 2); + $this->AddOp = self::$add__; + }else{ + $this->AddOp = new Mathparser_ParserFunction('+', mp_add_str_, 2); + $this->AndOp = self::$and__; + } + }else if ($value=='+'){ + if($this->StringLiteralsAllowed){ + $this->AddOp = new Mathparser_ParserFunction('+', mp_add_str_, 2); + $this->AndOp = self::$and__; + }else{ + $this->AndOp = new Mathparser_ParserFunction('&', mp_and_str_, 2); + $this->AddOp = self::$add__; + } + }else{ + throw new Exception('Invalid string concat operator: '.$value); + } + } + + /** + * VariableResolver is used as a callback function that returns the values of variables when asked. + * This is useful when a variable cannot be defined before the parse operation. + * If VariableResolver property is set, it will be used to resolve variables that were not defined + * at the time parse operation has started. This means that syntax errors regarding undefined variables + * will not be caught at parse time. This VariableResolver (user implementation) will decide whether + * a variable name is valid or not. + * This is useful when for example the value comes from a database lookup. In some cases, + * the problem domain is too big to define the variables ahead of time. In such cases, it makes sense + * to parse with the assumption that it is a valid variable and resolve it's value when needed on demand during + * evaluation. + * @return string + */ + public function getVariableResolver() + { + return $this->VariableResolver; + } + /** + * @see getVariableResolver + * @param $value string + */ + public function setVariableResolver($value){ + $this->VariableResolver=$value; + if($value==null){ + $this->Dirty=true; + } + } + + /** + * Constructor for the MathParser. + */ + public function __construct() + { + $this->Expression = ''; + $this->Node = null; + $this->Dirty = true; //means it is not Parsed yet. + $this->OptimizationOn = false; + + $this->Variables = array(); + $this->Functions = array(); + + //Comment out if you don't want these functions and variables: + $this->createDefaultFuncs(); + $this->createDefaultVars(); + + if(!isset(self::$add__)){ + self::$add__ = new Mathparser_ParserFunction('+', mp_add_, 2); + self::$subtract__ = new Mathparser_ParserFunction('-', mp_subtract_, 2); + self::$mult__ = new Mathparser_ParserFunction('*', mp_mult_, 2); + self::$div__ = new Mathparser_ParserFunction('/', mp_div_, 2); + self::$power__ = new Mathparser_ParserFunction('/', mp_power_, 2); + self::$mod__ = new Mathparser_ParserFunction('/', mp_mod_, 2); + + self::$notequals__ = new Mathparser_ParserFunction('!=', mp_notequals_, 2); + self::$equals__ = new Mathparser_ParserFunction('=', mp_equals_, 2); + self::$lt__ = new Mathparser_ParserFunction('<', mp_ltequals_, 2); + self::$gt__ = new Mathparser_ParserFunction('>', mp_gtequals_, 2); + self::$ltequals__ = new Mathparser_ParserFunction('<=', mp_ltequals_, 2); + self::$gtequals__ = new Mathparser_ParserFunction('>=', mp_gtequals_, 2); + + self::$unaryadd__ = new Mathparser_ParserFunction('+', mp_unaryadd_, 1); + self::$negate__ = new Mathparser_ParserFunction('-', mp_negate_, 1); + self::$not__ = new Mathparser_ParserFunction('!', mp_not_, 1); + + self::$and__ = new Mathparser_ParserFunction('&', mp_and_, 2); + self::$or__ = new Mathparser_ParserFunction('|', mp_or_, 2); + } + + $this->AddOp = self::$add__; + $this->AndOp = self::$and__; + $this->StrConcatOperator='&'; //default. + } + + /** + * Returns the existing trasnlatable strings used to report error messages. + * To use this component in a localized application, set the translated versions of + * strings for each value that exists in the hashtable. By default, same hashtable is shared + * between all instances of the parser. To change translation strings, set a new hashtable + * of your own for the parser instance instead of editing the values contained in this hashtable if + * you do not wish other parser instances not to be effected. + * Returns dictionary (array) of key/value pairs where value is a Locale dependent, typically translated String, that + * may contain placeholder parameters using %s. + * @return array + */ + public function &getTranslationStrings() + { + if(!isset(self::$translator)) + { + self::$translator = array(); + + //#Strings used by the math Parser. + self::$translator['ExpEmpty']='Expression is empty.'; + + //#parameter is the name of a variable: + self::$translator['VarNtExst']='Variable %s does not exist.'; + + //variable is not numeric: + self::$translator['VarNtDbl']='Variable %s is not numeric.'; + + //variable is not a string: + self::$translator['VarNtStr']='Variable %s is not a string.'; + + //variable is not a string or a double: + self::$translator['VarNtDblStr']='Variable %s should be a Double or a String. It is {1}.'; + + //variable already exists: + self::$translator['VarExt']='Variable %s already exists.'; + + //#parameter is the name of a variable: + self::$translator['NtVarNm']='%s is not a valid variable name.'; + + //#parameter is the math expression that failed to Parse: + self::$translator['SntxErr']='Syntax error in expression %s'; + + //#parameter is a function name: + self::$translator['NtFncNm']='%s is not a valid function name.'; + + //#parameter is a function name: + self::$translator['FncExst']='Function %s already exists.'; + + //#Parameters are function name and number of parameters: + self::$translator['WrngNPrms']='Function %s must accept at least 0 parameters not %s.'; + + self::$translator['WrngNPrms2']='Function %s requires at least %s parameters.'; + + //#sub expression is not valid: + self::$translator['ExpNtVld']='Sub expression "%s" in "%s" is not valid.'; + + self::$translator['InvNPrm']='Invalid number of parameters in "%s".'; + + //#bracket mismatch. + self::$translator['BrcktMis']='Bracket mismatch in expression "%s" at index %s.'; + + //#missing brackets. + self::$translator['MisBrckt']='Missing bracket ")" in expression "%s".'; + + //applying logical and & to string values: + self::$translator['InvConcatOper']='Parameter #2 %s is not a numeric value. Cannot apply logical and (&) operator. If you want to concatenate 2 strings, use STR() function to convert first parameter to string.'; + + //applying logical and + to string values: + self::$translator['InvConcatOper2']='Parameter #2 %s is not a numeric value. Cannot apply plus (+) operator. If you want to concatenate 2 strings, use STR() function to convert first parameter to string.'; + + //converting str to number: + self::$translator['InvNum']='Cannot convert to a number. %s is not a numeric value.'; + } + return self::$translator; + } + + /** + * Sets the key/value pairs where value is a translated message string for the parser to use while constructing messages. + * This mechanism allows the parser instances in the same VM efficiently + * use different locales independent of each other. not for each instance of the parser.

+ * Messages may contain parameter placeholders. For example: + * "Variable %s does not exist". You need to have your own messages translated + * accordingly.
+ * @param string + * @return void + */ + public function setTranslationStrings($strings) + { + self::$translator = $strings; + } + + /** + * Variable property is a way to set and get variable values. + * Throws Exception if the variable does not exist. + * Variable name is not case sensitive. + * @param string + * @return Returns the current value of the variable. It is either Double or String. + */ + public function getVariable($varName) + { + if ($varName==null) + { + throw new Exception("Variable name cannot be null."); + } + $upcName = strtoupper($varName); + $aVariable = $this->Variables[$upcName]; + if ($aVariable==null) + { + throw new Exception($this->getMessage1("VarNtExst", $varName)); + } + return $aVariable->Value; + } + + /** + * Variable property is a way to set and get variable values. + * setVariable function creates the variable if the variable does not exist. + * Variable name is not case sensitive. Throws exception if the variable needs + * to be created and the name is not a valid variable name. CreateVar is just an + * alias for this method. + * @param $varName - Name of the variable whose value is being set. + * @param $newVal - New value of the variable. It should be either a Double or a String. + * @param $fn_valueProvider - The delegate that returns the value for a variable when asked by name. + * When a $fn_valueProvider is set for a Variable, it's assigned value will not be used and instead the $fn_valueProvider of type + *

function VariableDelegate($parser, $varName);

+ * will be called. This is useful in cases when the value of a variable comes from a database and it is not easy to set it's value + * (or it is costly) ahead of time. So, when you want to compute the variable value only when it is needed, then you can register a $fn_valueProvider + * to be called. You can use the same $fn_valueProvider for all or some of your variables or you can have a different valueProvider for each variable. + * @return void + */ + public function setVariable($varName, $newVal, $fn_valueProvider=null) + { + if ($varName==null) + { + throw new Exception("Variable name cannot be null."); + } + if(is_numeric($newVal)) + { + $newVal = (float)$newVal; + }else + if(!is_string($newVal)){ + throw new Exception("Variable should be floating point or string value: ".$newVal); + } + $upcName = strtoupper($varName); + $existing = $this->Variables[$upcName]; + if ($existing!=null) + { + $existing->Value = $newVal; + } + else + { + if (!$this->isValidName($upcName)) + { + throw new Exception($this->getMessage1("NtVarNm", $varName)); + } + //create the variable: + $var = new Mathparser_Variable($this, $upcName, $newVal, $fn_valueProvider); + $this->Variables[$upcName] = $var; + $this->Dirty = true; + } + } + + /** + * Evaluates the expression and returns the result of it. If it cannot be parsed or + * evaluated then this method throws Exception. + *

+ * Calling this method is identical to calling getValue() + * @return Returns the value of the parsed expression. + * The return type is an object that can be interpreted as either Double or String. + */ + public function evaluate() + { + if ($this->Dirty) + { //if the expression has been changed, we need to Parse it again + $this->parse(); + } + return $this->Node->getValue(); //this will start the chain reaction to get the + //value of all nodes + } + + /** + * Parses the expression and forms a parse tree. Throws Exception if it cannot parse. + * Upon successful completion of parsing, it will set the Dirty flag to false, so that + * unless the expression is changed or variables and functions added or removed, + * expression does not need to be re-parsed. Users may want to call the parse method + * directly to check the validity of an input expression using a try-except block. + *

+ * If OptimizationOn property is true, Parse method will optimize the parse tree by + * evaluating constant branches of the parse tree at that moment, so that Evaluate + * function will run faster. + * @return void + */ + public function parse() + { + if (!isset($this->Expression) || ! ( strlen($this->Expression) > 0)) + { + $this->Node = null; + throw new Exception($this->getMessage("ExpEmpty")); + } + + $formula = $this->Expression; + $this->upperCase($formula); + //echo $formula; + + $len = strlen($formula); + $brackets = self::checkBrackets($formula); + if($brackets>-1 && $brackets<$len) + { + throw new Mathparser_ParserException($this->getMessage2("BrcktMis", $formula, $brackets), substr($formula, $brackets), $formula); + } + else + if($brackets==len) + { + throw new Mathparser_ParserException($this->getMessage1("MisBrckt", $formula), $formula, $formula); + } + + if (($this->Node = $this->createParseTree($formula)) == null) + { + throw new Mathparser_ParserException($this->getMessage2("ExpNtVld", $formula, $formula), $formula, $formula); + } + + if ($this->OptimizationOn) + { + $this->optimize(); //will make sure FNode tree is lean and mean + } + $this->Dirty = false; //note that we Parsed it once. Unless the expression is changed we do not need to reParse it. + } + + /** + * Uppercases the expression in char array form without touching the string literals. + * @param string to convert to uppercase. + * @return void + */ + private function upperCase(&$c) + { + $len = strlen($c); + $insideStringConst = false; + for ($i = 0; $i<$len; $i++) + { + $ch = $c[$i]; + if($ch=='"')//support string literals in the expression. + { + $insideStringConst = !$insideStringConst; + continue; + } + if(!$insideStringConst) + { + $c[$i] = strtoupper($ch); + } + } + } + /** + * Removes the spaces in the expression without touching the string literals. + * Uppercases non-string literal portions of the expression. + * @param s + */ + /* + private function RemoveSpacesExceptLiteralsAndUpperCase($s) + { + if(strpos($s,' ')===false) + { + return $s; //no spaces involved, return. + } + $len = strlen($s); + $ch; + $insideStringConst = false; + $sb = ''; + for ($i = 0; $i<$len; $i++) + { + $ch = $s[$i]; + if($ch=='\"')//support string literals in the expression. + { + $insideStringConst = !$insideStringConst; + $sb.=$ch; + continue; + } + if(!$insideStringConst) + { + if($ch!=' ')//if it is not a space, we want it. + { + $sb.=strtoupper($ch); + } + } + else + { + $sb.=$ch; + } + } + return $sb; + } + */ + + /** + * Creates a variable with given name and initial value. + * If the variable already exists, sets it's value to the specified value. + * Throws Exception if $varName is not a valid variable name. + * @param varName - Variable name (case insensitive). + * @param varValue - Initial value for the variable. + * @param valueProvider - The callback delegate (a plain old PHP function) that decides the value of the variable at runtime. + *

function VariableDelegate($parser, $varName);

+ * + */ + public function createVar($varName, $varValue, $valueProvider=null) + { + $this->setVariable($varName, $varValue, $valueProvider); + } + + /** + * CreateFunc method creates a new function that takes n number of parameters (could be 0) in + * the parser's list of functions. If the function name already exists then this method throws Exception. + * Function name is not case sensitive. + *

+ * The second parameter is the name of the user defined function that is globally available: + *

+ * function funcName($parameter1 [, $parameter2,...]);
+ *

+ * During evaluation of the expression, when the registered function name is + * encountered, the user supplied funcName will be called and variables will be passed. + *

+ * This user defined function + * will need to return a result (representing the value of the function) + * based on the parameters passed as an array of double values. + * If the number of parameters that a function takes is not known ahead of time, + * then the $paramCount parameter should be -1. Otherwise, it will be the + * number of parameters that will be passed to the function at runtime. Knowing the number of + * parameters ahead of time helps detect syntax errors during parsing. For example, if SIN(x) function + * descriptor did not tell us that it was taking only 1 parameter, then an expression like: + * SIN(x,y) would not cause syntax error during parsing, and if the implementation of SIN(x) did not check + * actual runtime number of parameters passed, then the problem could go undetected + * and the second y parameter could be ignored silently. + * @param $newFuncName - Name of the new function to create. + * @param $funcAddr - name of the PHP function that will be invoked when parser needs to execute this user defined function. + * @param $paramCount - number of parameters that this function takes. -1 means any number of parameters. + */ + public function createFunc($newFuncName, $funcAddr, $paramCount ) + { + if ($newFuncName==null){ throw new Exception("Function name cannot be null."); } + if ($funcAddr==null){ throw new Exception("Function implementation cannot be null."); } + + $upcName = strtoupper($newFuncName); + if (!$this->isValidName($upcName)) + { //must contain uppercase letters only + throw new Exception($this->getMessage1("NtFncNm", $newFuncName)); + } + + if ($this->isFunction($upcName)) + { + throw new Exception($this->getMessage1("FncExst", $newFuncName)); + } + else if($paramCount<-1)//-1 means num params unknown. + { + throw new Exception($this->getMessage2("WrngNPrms", $newFuncName, (string)$paramCount)); + } + else + { + $func = new Mathparser_ParserFunction($upcName, $funcAddr, $paramCount); + //if newFuncName doesn't exist it is inserted: + $this->Functions[$upcName]=$func; + } + $this->Dirty= true; //previously bad expression may now be ok, we should reParse it + } + + /** + * CreateDefaultFuncs method creates some predefined functions in the parser's list of functions. + *

+ * Predefined functions are: + *

+ * SQR: Square function which can be used as SQR(X) + *

+ * SIN: Sinus function which can be used as SIN(X), X is a real-type expression. + * Sin returns the sine of the angle X in radians. + *

+ * COS: Cosinus function which can be used as COS(X), X is a real-type expression. + * COS returns the cosine of the angle X in radians. + *

+ * ATAN: ArcTangent function which can be used as ATAN(X) + * Returns the arctangent of a number as a numeric value between -PI/2 and PI/2 radians. + *

+ * SINH: Sinus Hyperbolic function which can be used as SINH(X) + *

+ * COSH: Cosinus Hyperbolic function which can be used as COSH(X) + *

+ * COTAN: which can be used as COTAN(X) + *

+ * TAN: which can be used as TAN(X) + *

+ * EXP: which can be used as EXP(X) + *

+ * LN: natural log, which can be used as LN(X) + *

+ * LOG: 10 based log, which can be used as LOG(X) + *

+ * SQRT: which can be used as SQRT(X) + *

+ * ABS: absolute value, which can be used as ABS(X) + *

+ * SIGN: SIGN(X) returns -1 if X<0; +1 if X>0, 0 if X=0; it can be used as SQR(X) + *

+ * TRUNC: Discards the fractional part of a number. e.g. TRUNC(-3.2) is -3, TRUNC(3.2) is 3. + *

+ * CEIL: CEIL(-3.2) = 3, CEIL(3.2) = 4 + *

+ * FLOOR: FLOOR(-3.2) = -4, FLOOR(3.2) = 3 + *

+ * VAL: VAL("3.1") = 3.1 Returns the floating point numeric value of the string argument. + *

+ * Predefined functions that take two parameters are: + *

+ * POW: The Power function raises Base to any power. For fractional exponents or + * exponents greater than MaxInt, Base must be greater than 0. + *

+ * LOGN: The LogN function returns the log base N of X. Example: LOGN(10, 100) = 2 + *

+ * MIN: MIN(2, 3) is 2. + *

+ * MAX: MAX(2, 3) is 3. + *

+ * IF: The IF(b, case1, case2) function provides branching capability. + * If b is not 0, then it returns case1, else it returns case2. + * Behavior is similar to PHP's: return b ? case1 : case2;
+ * If b==0 then case1 will not be Evaluated, and vice versa. + * Example: IF(HEIGHT, 3/HEIGHT, 3) will make sure 3/HEIGHT does not cause division by zero. + *

+ * Predefined functions that take no parameters are: + * RND: RND() function generates a random number (double value) between 0 and 1. + *

+ * STR: STR(123) function returns the string representation of the passed value: "123". + *

+ * SUBSTR: SUBSTR("Hello", 1,3) function returns the substring just like PHP substring function. + * The first parameter is the string, the second parameter is which index (0 based) to start copying, + * and the last parameter is the number of characters to copy. For example, SUBSTR("Hello", 1,3) returns "ell". + *

+ * STRLEN: STRLEN("abc") function returns the length of the string parameter. For example, for "abc" it returns 3. + *

+ * CONCAT: CONCAT("abc","def",...) function returns the concatanated strings: "abcdef". + * There is no preset limit on the number of parameters. + *

+ * TRIM: TRIM(" abc ") function returns the trimmed version of the string parameter: " abc " -> "abc". + *

+ * SUM: SUM(2,3,5,...) functions returns the sum of it's arguments. There is no preset limit on the number of parameters. + *

+ * User functions can be added using CreateFunc method. + * Functions and Variables can be deleted using DeleteVar, DeleteFunc, + * DeleteAllVars, DeleteAllFuncs methods. + */ + public function createDefaultFuncs() + { + $this->createFunc("SQR", mp_square_, 1); + $this->createFunc("SIN", sin, 1); + $this->createFunc("COS", cos, 1); + $this->createFunc("ATAN", atan, 1); + $this->createFunc("SINH", sinh, 1); + $this->createFunc("COSH", cosh, 1); + $this->createFunc("COTAN", mp_cotan_, 1); + $this->createFunc("TAN", tan, 1); + $this->createFunc("EXP", exp, 1); + $this->createFunc("LN", log, 1); + $this->createFunc("LOG", log10, 1); + $this->createFunc("SQRT", sqrt, 1); + $this->createFunc("ABS", abs, 1); + $this->createFunc("SIGN", mp_sign_, 1); + $this->createFunc("TRUNC", mp_trunc_, 1); + $this->createFunc("CEIL", ceil, 1); + $this->createFunc("FLOOR", floor, 1); + $this->createFunc("RND", mp_rand_, 0); + $this->createFunc("VAL", mp_float_, 1); + + $this->createFunc("POW", pow, 2); + $this->createFunc("LOGN", mp_logn_, 2); + $this->createFunc("MIN", mp_min_, -1); + $this->createFunc("MAX", mp_max_, -1); + $this->createFunc("MOD", modulo, 2); + + $this->createFunc("IF", if_, 3); + + $this->createFunc("STRLEN", strlen, 1); + $this->createFunc("STR", strval,1); + $this->createFunc("SUBSTR", substr,3); + $this->createFunc("CONCAT", mp_concat_,-1); + $this->createFunc("TRIM", trim,1); + $this->createFunc("RTRIM", rtrim,1); + $this->createFunc("LTRIM", ltrim,1); + $this->createFunc("CHR", chr,1); + $this->createFunc("NUM", mp_num_,1); + + $this->createFunc("SUM", sum_, -1); + + } + + /** + * X, Y and PI variables can be predefined and can be immediately used in the expression. + * Initial values of X and Y are 0. PI is 3.14159265358979 + */ + public function createDefaultVars() + { + try + { + $this->createVar("PI", 3.14159265358979, null); + $this->createVar("X", 0.0, null); + $this->createVar("Y", 0.0, null); + } + catch(Exception $e) + { + //we know that these are valid names, so there won't be an exception. + } + } + + /** + * DeleteVar method deletes an existing variable from the list of available variables. + * If the variable does not exist, then DeleteVar does nothing. + *

+ * When a variable is deleted Dirty flag is set to true so that next time + * the Evaluate function is called the expression will be reparsed. + * Variable name is not case sensitive. + * @param varName - Name of the variable to delete. + */ + public function deleteVar($varName) + { + if ($varName==null) + { + throw new Exception("Variable name cannot be null."); + } + //this function deletes the variable only if it finds it. + $upcName = strtoupper($varName); + unset($this->Variables[$upcName]); + //TODO: Is this right? + //$this->Variables = array_values($this->Variables); + $this->Dirty = true; + } + + /** + * DeleteFunc method deletes an existing function from the list of available functions. + * If the function does not exist, deleteFunc does nothing. + *

+ * When a function is deleted Dirty flag is set to true so that next time the + * Evaluate function is called the expression will be reparsed. + * Function name is not case sensitive. + * @param funcName - Name of the function to delete. + */ + public function deleteFunc($funcName) + { + if ($funcName==null) + { + throw new Exception("Function name cannot be null."); + } + $upcName = strtoupper($funcName); + unset($this->Functions[$upcName]); + //$this->Functions = array_values($this->Functions); + $this->Dirty = true; + } + + /** + * DeleteAllVars method deletes all variables from the list of available variables. + *

+ * This action may be useful when number of unused variables is too high that + * causes performance to degrade. + *

+ * When a variable is deleted Dirty flag is set to true so that next time the + * Evaluate function is called the expression will be reparsed. + */ + public function deleteAllVars() + { + $this->Variables = array(); + $this->Dirty = true; + } + + /** + * DeleteAllFuncs method deletes all variables from the list of available functions. + *

+ * This action may be useful when number of unused functions is too high that + * causes performance to degrade. + *

+ * When a function is deleted Dirty flag is set to true so that next time the + * Evaluate function is called the expression will be reparsed. + */ + public function deleteAllFuncs() + { + $this->Functions = array(); + $this->Dirty = true; + } + /** + * FreeParseTree can be explicitly called to free the resources taken by the + * allocated Parse tree when an expression is parsed. FreeParseTree sets the Dirty + * flag to true so that next time the Evaluate function is called, expression will + * be parsed forming a new, valid parse tree to be evaluated. + */ + public function freeParseTree() + { + //delete FNode; + $this->Node = null; //this should free it all + $this->Dirty = true; //so that next time we call Evaluate, it will call the Parse method. + } + /** + * Returns true if a variable with the name 'varName' is used in the current expression. + * Variable name is not case sensitive. Throws exception if expression is not parsed + * and cannot be parsed. + * @param varName - Name of the variable in question. + * @return Returns true if the variable with the given name was actually used in the current expression. Returns false otherwise. + */ + public function isVariableUsed($varName) + { + if ($varName==null){ throw new Exception("Variable name cannot be null."); } + + if($this->Dirty) + { + parse(); //to create Parse tree if it is not created yet. + } + + $varName = strtoupper($varName); + return $this->Node->isVariableUsed($varName); + } + /** + * Returns true if a function with the name 'funcName' is used in the current expression. + * Function name is not case sensitive. Throws exception if expression is not parsed and cannot be parsed. + * Returns true if the function with the given name was actually used in the current expression. + * Returns false otherwise. + * @param string $funcName - Name of the function in question. + * @return boolean + */ + public function isFunctionUsed($funcName) + { + if ($funcName==null){ throw new Exception("Function name cannot be null."); } + if ($this->Dirty) + { + parse(); //to create Parse tree if it is not created yet. + } + + $funcName = strtoupper($funcName); + return $this->Node->isFunctionUsed($funcName); + } + /** + * Returns true if a variable with the name 'varName' is present in the current variables list. + * For backward compatibility, IsVariable returns true for constants also. + * For constants, you can use IsConstant. Returns true if the variable exists in the list of + * variables of the parser instance. false otherwise. + * @param string $varName - Name of the variable in question. + * @return boolean + */ + public function isVariable($varName) + { + if ($varName==null){ throw new Exception("Variable name cannot be null."); } + $varName = strtoupper($varName); + return isset($this->Variables[$varName]); + } + + /** + * Returns true if a function with the name 'funcName' is present in any of + * the current functions lists. Returns true if a function with the given name is defined. False otherwise. + * @param string $funcName - Name of the function in question. + * @return boolean + */ + public function isFunction($funcName) + { + if ($funcName==null){ throw new Exception("Function name cannot be null."); } + $funcName = strtoupper($funcName); + return isset($this->Functions[$funcName]); + } + + /** + * Returns the list of variables used in the current expression as an array of Strings. + * Each element of the array is guaranteed not to be null. + * If variables are not defined ahead of time, then $VariableResolver must have been set. + * Otherwise, when an undefined variable is found in the expression, ParserException will be thrown. + * Return array of variable names that are currently defined for this parser instance. + * @return array + */ + public function getVariablesUsed() + { + if ($this->Dirty && $this->Expression!=null && strlen($this->Expression)>0) + { + parse(); + } + return findVariablesUsed($this->Node); + } + + /** + * @ignore + * @param object $aNode + * @return array + */ + static function findVariablesUsed($aNode) + { + $list = array(); + if ($aNode instanceof Mathparser_VarNode) + { + $list[]=$aNode->VarName; + } + else if ($aNode.nodes) + { + foreach ($aNode.nodes as $n) + { + if ( $n instanceof Mathparser_VarNode ) + { + $list[]=$n->VarName; + } + else + { + $list = array_merge($list, findVariablesUsed($n)); + } + } + } + return $list; + } + + /** + * Returns the list of variables as an array of Strings. + * Each element of the array is guaranteed not to be null. + * Returns array of variable names that are currently defined for this parser instance. + * @return array + */ + public function getVariables() + { + return array_keys($this->Variables); + } + + /** + * Returns a String array of function names declared for this parser. + * Elements of the array are guaranteed not to be null. + * Returns array of function names that are currently defined for this parser instance. + * @return array + */ + public function getFunctions() + { + return array_keys($this->Functions); + } + + /** + * Optimizes the parse tree by finding branches that evaluate to a constant and + * replacing them with a leaf representing the constant. + * Until the expression is changed and reparsed, further evaluation requests will be + * quicker. + *

+ * If the same expression will not be evaluated repeatedly with varying + * values of parameters used in it, then optimization will not bring any gain, + * but will slow performance. + *

+ * If OptimizationOn property is set to true, this method is called automatically when an + * evaluation is requested by calling Evaluate method or getValue() method. + * @ignore + */ + public function optimize() + { + $this->Node = self::optimizeNode($this->Node); + } + + /** + * Value property is a read only property which returns the result of the expression. + * throws Exception if expression cannot be parsed. Return value is either Double or String. + * @return mixed + */ + public function getValue() + { + return $this->evaluate(); + } + + /** + * Value property is a read only property which returns the result of the expression. + * throws Exception if expression cannot be parsed. Return value is is a Double. + * @return float + */ + public function getValueAsDouble() + { + $obj = $this->evaluate(); + //if(is_string($obj)) + //{ + // return (float)$obj; + //} + return (float)$obj; + } + + /** + * Value property is a read only property which returns the result of the expression. + * throws Exception if expression cannot be parsed. Return value is a string. + * @return string + */ + public function getValueAsString() + { + return (string)evaluate(); + } + + //------------------------------------------------------------------------------ + //END OF PUBLIC METHODS. + //------------------------------------------------------------------------------ + + /** + * @ignore + * Valid char definition for function and variable names. + * @param index + * @param c + */ + private function isValidChar($index, $c) + { + if ($index==0) + { + if ( ($c>='A' && $c<='Z') ) + { + return true; + } + if ($c=='_'){ return true; } + return false; + } + if ( (($c>='0' && $c<='9') || ($c>='A' && $c<='Z')) ) + { + return true; + } + if ($c=='_'){ return true; } + return false; + } + /** + * Valid name definition for function and variable names. + * @param name + * @ignore + */ + private function isValidName($name) + { + $len = strlen($name); + for ($i=0; $i<$len; $i++) + { + if(!$this->isValidChar($i, $name[i])) + { + return false; + } + } + return true; + } + //------------------------------------------------------------------------------ + /** + * Makes sure number of opening brackets "(" are equal to + * the number of closing brackets ")" and they are consistent. + * @param formula + * @ignore + */ + protected static function checkBrackets($formula) + { + //this function checks to see if the order and double of brackets are correct + //it will say ok if it sees something like 3+()() + $n=0; + $len = strlen($formula); + $ch; + $insideStringConst = false; + for ($i = 0; $i<$len; $i++) + { //if length<1 loop won't execute + $ch = $formula[$i]; + if($ch=='\"')//support string literals in the expression. + { + $insideStringConst = !$insideStringConst; + continue; + } + if(!$insideStringConst) + { + if ($ch == '(') + ++$n; + else if ($ch == ')') + --$n; + + if ($n<0) return $i; //at any moment if expression is valid we cannot have more ) then ( + } + } + return ($n == 0) ? -1 : $len; //true if double of brackets matches + } + //------------------------------------------------------------------------------ + /** + * Removes unncessary outer brackets in an expression. + * @param formula + * @ignore + */ + protected static function removeOuterBrackets($formula) + { + //has to be careful about (X+1)-(Y-1) + //should not remove the outer brackets here thinking that they are unnecessary + //but should remove when ((X+1)-(Y-1)) + $temp = $formula; + $Len = strlen($temp); + while (($Len>2) && ($temp[0] == '(') && ($temp[$Len-1] == ')') ) + { + $temp = trim(substr($temp, 1, $Len-2)); + if (self::checkBrackets($temp)==-1) + { //if we did not screw up then assign to the return value + $formula = $temp; + } + $Len = strlen($temp); + } + return $formula; + } + //------------------------------------------------------------------------------ + /** + * Determines if a given string is a valid double number or not. + * If it is valid, the actual double value is returned out in the out parameter dblVal. + * @param formula - Expression to parse. + * @param dblVal - Output double value + * @ignore + */ + protected static function isValidDouble($formula, &$dblVal ) + { + if(is_numeric($formula)){ + $dblVal = (float)$formula; + return true; + } + return false; + } + /** + * Returns the string literal if this formula is a string literal such as "abc". + * Escape character is " inside the string. Meaning, to have quotes inside the + * string it would be like this: + * "abc""defg".
+ * Returns null if this is not a valid string literal. + * @param formula - The sub expression in question. + * @return the string that is inside the "" after "" escapes inside the string are processed. Null if the string is not valid. + * @ignore + */ + private static function getStringLiteral($formula) + { + $len=strlen($formula); + if (!($len>1 && $formula[0]=='"' && $formula[$len-1]=='"')) + { + return null; + } + $temp = substr($formula, 1,$len-2); + if(self::checkEscapes($temp)) + { + return str_replace('""', '"', $temp); + } + return null; + } + + /** + * @ignore + * @param $formula + * @return boolean + */ + private static function checkEscapes($formula) + { + //this function checks to see if the escaped quotes match. + $len = strlen($formula); + $ch; + $insideStringConst = false; + for ($i = 0; $i<$len; $i++) + { //if length<1 loop won't execute + $ch = $formula[$i]; + if($ch=='"') //support string literals in the expression. + { + if($insideStringConst) + { + return false; //too many quotes. + } + ++$i; + if($i<$len && $formula[$i]=='"') + { + $insideStringConst = true; + } + else + { + return false; + } + continue; + } + $insideStringConst = false; + } + return true; + } + //------------------------------------------------------------------------------ + /** + * Compiles the parse tree of the given expression. + * @param expToParse - Mathematical expression. + * @return Root node of the parse tree. + * @ignore + */ + protected function createParseTree($expToParse) + { + $expToParse = trim($expToParse); + if (($len=strlen($expToParse))==0) + { + return null; + } + + $formula = $this->removeOuterBrackets($expToParse); //remove unnecessary brackets + + if(strlen($formula)!=$len) + { + $formula = trim($formula); + if (strlen($formula)==0) + { + return null; + } + } + + //is this text a simple double value? + $dblVal; + if ($this->isValidDouble($formula, $dblVal) ) + { //attach a double node in the structure + return new Mathparser_BasicNode($dblVal); //we create a double node and attach it to the *Node reference. + } + + if($this->StringLiteralsAllowed) + { + $tempFormula = $this->getStringLiteral($formula); + if ( $tempFormula!=null ) + { + return new Mathparser_BasicNode($tempFormula); //we create a double node and attach it to the *Node reference. + } + } + + //if it is not a simple double or a string, maybe it is a variable? + $varNode = $this->createVarNode($formula); + if($varNode!=null) + { + return $varNode; + } + + //if it is not a variable + $leftNode = null; + $rightNode = null; + $LastOper= $this->findLastOper($formula); + + $funcAddr=null; + if (! ($LastOper>0) ) //if it is 0 then it is a unary operation which is a one param function + { + $param=null; + if ( $this->isOneParamFunc($formula, $funcAddr, $param, $LastOper) ) + { + if (($leftNode = $this->createParseTree($param)) == null ) + { + throw new Mathparser_ParserException($this->getMessage2("ExpNtVld", $param, $formula), $param, $formula); + } + if ($funcAddr != null) + { + return new Mathparser_NParamNode(array($leftNode), $funcAddr); + } + } + } + + $paramLeft=null; + $paramRight=null; + if ($this->isTwoParamFunc($formula, $funcAddr, $paramLeft, $paramRight, $LastOper) ) + { + if (($leftNode = $this->createParseTree($paramLeft)) == null) + { + throw new Mathparser_ParserException($this->getMessage2("ExpNtVld", $paramLeft, $formula), $paramLeft, $formula); + } + if (($rightNode = $this->createParseTree($paramRight)) == null ) + { + throw new Mathparser_ParserException($this->getMessage2("ExpNtVld", $paramRight, $formula), $paramRight, $formula); + } + //if there is a function address returned then we use it, otherwise we use function name + if ($funcAddr != null) + { + return new Mathparser_NParamNode(array($leftNode, $rightNode), $funcAddr); + } + } + + $parms=null; + //if it is none of the above: + if ($this->isNParamFunc($formula, /*out*/ $funcAddr, /*out*/ $parms, $LastOper) ) + { + if (!isset($parms)) + { + //We now allow functions with no parameters. + throw new Mathparser_ParserException($this->getMessage1("InvNPrm", $formula), $formula, $formula); + } + $nParam = count($parms); + $nodes = array(); + for ($i=0; $i<$nParam; $i++) + { + if ( ($leftNode = $this->createParseTree($parms[$i]) )== null) + { + throw new Mathparser_ParserException($this->getMessage2("ExpNtVld", $parms[$i], $formula), $parms[$i], $formula); + } + $nodes[$i] = $leftNode; + } + + //if there is a function address returned then we use it, otherwise we use function name + if ($funcAddr != null) + { + return new Mathparser_NParamNode($nodes, $funcAddr); + } + } + //when code reaches here it means we did not return true so after compiling the expression. + return null; + } + //------------------------------------------------------------------------------ + /** + * Finds the index of the last math operation in an expression. + * @param formula - Math expression. + * @return index of the last operand. + * @ignore + */ + private static function findLastOper($formula) + { //returns -1 if it cannot find anything + $Precedence = 13; //There are 12 operands and 13 is higher then all + $BracketLevel = 0; //shows the level of brackets we moved through + $Result = -1; + $Len = strlen($formula); + $lastWasOperator = 0; + $insideStringLiteral = false; + for ($i = 0; $i<$Len; $i++) //from left to right scan... + { + $current_ch = $formula[$i]; + if($current_ch=='"') + { + $insideStringLiteral = !$insideStringLiteral; + $lastWasOperator=0; + continue; + } + if($insideStringLiteral) + { + continue; //skip string literals. + } + if ($lastWasOperator>2) + { + return -1; + } + switch ($current_ch) + { + case ')' : + --$BracketLevel; //counting bracket levels + $lastWasOperator = 0; + break; + case '(' : + ++$BracketLevel; + $lastWasOperator = 0; + break; + + case '|' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 1 ) + { + $Precedence = 1; + $Result = $i; + } + ++$lastWasOperator; + break; + + case '&' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 2 ) + { + $Precedence = 2; + $Result = $i; + } + ++$lastWasOperator; + break; + + case '!' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 3 ) + { + $Precedence = 3; + $Result = $i; + } + ++$lastWasOperator; + break; + + case '=' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 4 ) + { + $Precedence = 4; + $Result = $i; + } + if($lastWasOperator>0) + { + $prevOperIndex = $i-$lastWasOperator; + if($formula[$prevOperIndex]=='<' || $formula[$prevOperIndex]=='>') + { + break; //skip incrementing lastWasOperator variable. + } + } + + ++$lastWasOperator; + break; + + case '>' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 5 ) + { + $Precedence = 5; + $Result = $i; + } + if($lastWasOperator>0) + { + if($formula[$i-$lastWasOperator]=='<') + { + break; + } + } + + ++$lastWasOperator; + break; + + case '<' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 5 ) + { + $Precedence = 5; + $Result = $i; + } + ++$lastWasOperator; + break; + + case '-' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) //a main operation has to be outside the brackets + if ($Precedence >= 7) //seeking for lowest precedence + { + $Precedence = 7; + $Result = $i; //record the current index. + } + ++$lastWasOperator; + break; + case '+' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 7 ) + { + $Precedence = 7; + $Result = $i; + } + ++$lastWasOperator; + break; + case '%' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 9 ) + { + $Precedence = 9; + $Result = $i; + } + ++$lastWasOperator; + break; + case '/' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 9 ) + { + $Precedence = 9; + $Result = $i; + } + ++$lastWasOperator; + break; + case '*' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 9 ) + { + $Precedence = 9; + $Result = $i; + } + ++$lastWasOperator; + break; + case '^' : + if (! ($BracketLevel > 0 || $lastWasOperator>0) ) + if ($Precedence >= 12 ) + { + $Precedence = 12; + $Result = $i; + } + ++$lastWasOperator; + break; + + case 'E' : + if ($i > 0 && $lastWasOperator==0) + { + $ch = $formula[$i-1]; + if ($ch >= '0' && $ch <= '9') + {//this E may be part of a number in scientific notation. + $j=$i; + while($j > 0) + { //trace back. + --$j; + $ch = $formula[$j]; + if ($ch=='.' || ($ch >= '0' && $ch <= '9')) + { //if it is not a function or variable name. + continue; + } + if ($ch=='_' || ($ch>='A' && $ch<='Z')) + {//is it a func or var name? + $lastWasOperator = 0; + break; //break the while loop. + } + ++$lastWasOperator; //it must be an operator or a paranthesis. + break; //break the while loop. + } + if ($j==0 && ($ch >= '0' && $ch <= '9')) + { + ++$lastWasOperator; + } + } + else + { + $lastWasOperator = 0; + } + } + else + { + $lastWasOperator = 0; + } + break; + case ' ': //space: + break; + default : + $lastWasOperator=0; + break; + } + } + return $Result; + } + //------------------------------------------------------------------------------ + /** + * Determines if a given expression by itself is a function that takes 2 parameters. + * For example: and input of "MAX(x,y+1)" would return true. + * @param formula - expression + * @param funcAddr - The IFunction that this expression represents (if it is a function call) + * @param paramLeft - Left parameter whose values will be sent out in a wrapper utility object. + * @param paramRight - Right parameter group whose values will be sent out in a wrapper utility object. + * @param CurrChar - current operand index in the expression + * @return true if formula is a valid two parameter function. + * @ignore + */ + private function isTwoParamFunc( $formula, + /*out*/ &$funcAddr, /*out*/ &$paramLeft, /*out*/ &$paramRight, + $CurrChar //gives the last operation index in the string + ) + { + $funcAddr = null; + $paramLeft = null; + $paramRight = null; + $Len= strlen($formula); + + if ($CurrChar>0 ) //if function in question is an operand + { + if($CurrChar>$Len-2) + { + return false; + } + $CurrCh = $formula[$CurrChar]; + + //was it an operand also? we want to find <>, >=, <= + if($CurrCh=='<') + { + $nextCh = $formula[$CurrChar+1]; //look ahead. + if($nextCh=='>') + { + $funcAddr = self::$notequals__; + $paramLeft = substr($formula, 0, $CurrChar); + $paramRight= substr($formula, $CurrChar+2); + } + else if ($nextCh=='=') + { + $funcAddr = self::$ltequals__; + $paramLeft = substr($formula, 0, $CurrChar); + $paramRight= substr($formula, $CurrChar+2); + } + else + { + $funcAddr = self::$lt__; //default case. + $paramLeft = substr($formula, 0, $CurrChar); + $paramRight= substr($formula, $CurrChar+1); + } + + if (! (strlen($paramLeft)>0) ) + { + return false; + } + if (! (strlen($paramRight)>0) ) + { + return false; + } + return true; //all output is assigned, now we return true. + } + else if($CurrCh=='>') + { + $nextCh = $formula[$CurrChar+1]; + if($nextCh=='=') + { + $funcAddr = self::$gtequals__; + $paramLeft = substr($formula, 0, $CurrChar); + $paramRight= substr($formula, $CurrChar+2); + } + else + { + $funcAddr = self::$gt__; //default case. + $paramLeft = substr($formula, 0, $CurrChar); + $paramRight= substr($formula, $CurrChar+1); + } + if (! (strlen($paramLeft)>0) ) + { + return false; + } + if (! (strlen($paramRight)>0) ) + { + return false; + } + return true; //all output is assigned, now we return true. + } + else + { + + $paramLeft = substr($formula, 0, $CurrChar); + if (! (strlen($paramLeft)>0) ) + { + return false; + } + + $paramRight= substr($formula, $CurrChar+1); + if (! (strlen($paramRight)>0) ) + { + return false; + } + + switch ($formula[$CurrChar]) + { + //analytical operators: + case '+': $funcAddr = $this->AddOp; break; + case '-': $funcAddr = self::$subtract__; break; + case '*': $funcAddr = self::$mult__; break; + case '/': $funcAddr = self::$div__; break; + case '^': $funcAddr = self::$power__; break; + case '%': $funcAddr = self::$mod__; break; + + //logical operators: + case '<': $funcAddr = self::$lt__; break; + case '>': $funcAddr = self::$gt__; break; + case '=': $funcAddr = self::$equals__; break; + case '&': $funcAddr = $this->AndOp; break; + case '|': $funcAddr = self::$or__; break; + } + } + return true; //all output is assigned, now we return true. + } + //if we reach here, result is false + //if main operation is not an operand but a function + //$BracketLevel; + //$paramStart; + $temp=''; + if ($formula[$Len-1] == ')') //last character must be brackets closing function param list + { + $i= 0; + while ($this->isValidChar($i, $formula[$i])) + { + $temp.=($formula[$i]); + ++$i; + } + while($formula[$i]==' ') + { + ++$i; + } + + if (($formula[$i] == '(') && ($i < $Len-1) ) + { + $func = $this->Functions[$temp]; + if ($func != null && $func->paramCount==2) + { + $funcAddr = $func; + $paramStart= $i+1; + $BracketLevel= 1; + $insideStringLiteral = false; + while (! ($i>$Len-1-1) ) //last character is a ')', that's why we use i>Len-1 + { + ++$i; + switch( $formula[$i] ) + { + case '"': $insideStringLiteral = !$insideStringLiteral; break; + case '(': if(!$insideStringLiteral)++$BracketLevel; break; + case ')': if(!$insideStringLiteral)--$BracketLevel; break; + case ',': + if ((!$insideStringLiteral) && (1 == $BracketLevel) && ($i<$Len-2) ) //last character is a ')', that's why we use i>Len-2 + { + $paramLeft= substr($formula, $paramStart, $i-$paramStart); + $paramRight= substr($formula, $i+1, $Len-1-($i+1)); //last character is a ')', that's why we use Len-1-i + return true; //we are sure that it is a two parameter function + } + break; + } + } + } + } + } + return false; //means we could not find it + } + //------------------------------------------------------------------------------ + /** + * Determines if a given expression by itself is a function that takes 1 parameter. + * For example: and input of "SIN(x)" would return true. + * @param formula - expression + * @param funcAddr - The IFunction that this node represents. + * @param param - the parameter that will be passed into this function. + * @param CurrChar - current operand index in the expression + * @return true if formula is a valid one parameter function. + * @ignore + */ + private function isOneParamFunc( $formula, + /*out*/ &$funcAddr, /*out*/ &$param, + $CurrChar + ) + { + $funcAddr = null; + $param = null; + $paramStart; + $Len= strlen($formula); + if ($CurrChar == 0) //if function in question is an unary operand + { + $param= substr($formula, 1); + if (! (strlen($param)>0) ) + { + return false; + } + + switch ($formula[$CurrChar]) + { + case '+': $funcAddr = self::$unaryadd__; break; + case '-': $funcAddr = self::$negate__; break; + case '!': $funcAddr = self::$not__; break; + default: return false; //only + and - can be unary operators + } + return true; //all output is assigned, now we exit. + } + //if we reach here, result is false + //if main operation is not an operand but a function + if ($formula[$Len-1] == ')') //last character must be brackets closing function param list + { + $i= 0; + $temp = ''; + while ($this->isValidChar($i, $formula[$i])) + { + $temp.=($formula[$i]); + ++$i; + } + while($formula[$i]==' ') + { + ++$i; + } + if (($formula[$i] == '(') && ($i < $Len-2) ) + { + $func = $this->Functions[$temp]; + if ($func != null && $func->paramCount==1) + { + $funcAddr = $func; + $paramStart= $i+1; + $param= substr($formula, $paramStart, $Len-1-$paramStart); //check example: SIN(30) + return true; //we are sure that it is a two parameter function + } + } + } + return false; + } + //------------------------------------------------------------------------------ + /** + * Determines if a given expression by itself is a function that takes N parameters. + * For example: and input of "IF(x, 3/x, 3)" would return true. + * @param formula - expression + * @param funcAddr - the IFunction that this node represents. + * @param parms - the parameters that this function takes in this expression. + * @param CurrChar - current operand index in the expression + * @return true if formula is a valid N parameter function. + * @ignore + */ + private function isNParamFunc( $formula, + /*out*/ &$funcAddr, /*out*/ &$parms, + $CurrChar //gives the last operation index in the string + ) + { + $funcAddr = null; + $parms = null; + //if main operation is not an operand but a function + $Len= strlen($formula); + $temp = ''; + if ($formula[$Len-1] == ')') //last character must be brackets closing function param list + { + $i= 0; + while ($this->isValidChar($i, $formula[$i])) + { + $temp.=($formula[$i]); + ++$i; + } + while($formula[$i]==' ') + { + ++$i; + } + if (($formula[$i] == '(') && ($i < $Len-1) ) + { + //we first check if it is one param func or two param func, + //so here if it is a func, we know it is N param func. + $funcAddr = $this->Functions[$temp]; + + if ($funcAddr != null) + { + $nParams = $funcAddr->paramCount; + if($nParams>-1) + { + $parms = array(); + if($nParams==0) //a function that takes no param. + { + if($formula[$i+1]==')') + { + return true; + } + } + $paramStart = $i+1; + $BracketLevel= 1; + $pIndex = 0; + $insideStringLiteral = false; + while (! ($i>$Len-1-1) ) //last character is a ')', that's why we use i>Len-1 + { + ++$i; + switch( $formula[$i] ) + { + case '"': $insideStringLiteral = !$insideStringLiteral; break; + case '(': if(!$insideStringLiteral)++$BracketLevel; break; + case ')': if(!$insideStringLiteral)--$BracketLevel; break; + case ',': + if ((!$insideStringLiteral) && (1 == $BracketLevel) && ($i<$Len-2) ) //last character is a ')', that's why we use i>Len-2 + { + //must have at least 2 params for this part to work: + if ($nParams>-1 && !($pIndex<$nParams) ) + { + return false; //wrong number of parameters. + } + $parms[$pIndex++] = substr($formula, $paramStart, $i-$paramStart); + + if($pIndex==$nParams-1) + { + //assign the last one: + $parms[$pIndex] = substr($formula, $i+1, $Len-1-($i+1)); + return true; + } + $paramStart = $i+1; + } + break; + } + } + } + else + { + $list = array(); + $paramStart = $i+1; + $BracketLevel= 1; + $insideStringLiteral = false; + while (! ($i>$Len-1-1) ) //last character is a ')', that's why we use i>Len-1 + { + ++$i; + switch( $formula[$i] ) + { + case '"': $insideStringLiteral = !$insideStringLiteral; break; + case '(': if(!$insideStringLiteral) ++$BracketLevel; break; + case ')': if(!$insideStringLiteral) --$BracketLevel; break; + case ',': + if (!$insideStringLiteral && (1 == $BracketLevel) && ($i<$Len-2) ) //last character is a ')', that's why we use i>Len-2 + { + $list[]=substr($formula, $paramStart, $i-$paramStart); + $paramStart = $i+1; + } + break; + } + } + //add the remaining: + //list.Add( formula.Substring(paramStart, Len-1-paramStart) ); + $remaining = trim(substr($formula, $paramStart, $Len - 1 - $paramStart)); + if (strlen($remaining)>0) + { + $list[]=$remaining; + } + + $parms = $list; + return true; + } + } + } + } + return false; //means we could not find it + } + //------------------------------------------------------------------------------ + /** + * Optimizes a compiled tree where root is the given Node. + * @param aNode - Root node. + * @return Starting root node of the optimized tree. + * @ignore + */ + static function optimizeNode($aNode) + { + $aNode->optimize(); + //Below code changes the value of the Node pointer, + //thus it cannot be done inside a polymorphic method of the + //class instance pointed to by that pointer. + //Therefore, "instanceof" is required. + if ($aNode instanceof Mathparser_NParamNode) + { + $count = count($aNode->nodes); + for ($i=0; $i<$count; $i++) + { + //if any node is not constant, just return as is: + if ( !($aNode->nodes[$i] instanceof Mathparser_BasicNode) ) + { + return $aNode; + } + } + //if all parameters of the function are constants (basic nodes): + return new Mathparser_BasicNode($nParamNode->getValue()); + } + return $aNode; + } + //------------------------------------------------------------------------------ + + /** + * Expression property represents the mathematical expression which is input to be Evaluated by the user. + * + * The expression can contain variables such as X, Y, T, HEIGHT, WEIGHT and so on. + * The values of these constants are set before the expression is evaluated. + * The values of the variables can be set before the expression is evaluated or the values can be provided + * during evaluation using a PHP function registered as $VariableResolver. + * @return string + */ + public function getExpression() + { + return $this->Expression; + } + /** + * @see getExpression + * @param $value + * @return unknown_type + */ + public function setExpression($value) + { + if ($value!=$this->Expression) + { + $this->Expression = $value; + $this->Dirty = true; + } + } + + /** + * Set OptimizationOn to let the bcParser component evaluate constant expressions + * at parse time. The optimized parse tree will enhance subsequant evaluation + * operations, though initial parsing will be slower. + *

+ * Optimization is good if you are going to parse once and evaluate the same + * expression many many times with different variable values. + * @return boolean + */ + public function isOptimizationOn() + { + return $this->OptimizationOn; + } + /** + * @see isOptimizationOn + * @param boolean $value + * @return void + */ + public function setOptimizationOn($value) + { + $this->OptimizationOn = $value; + } + + /** + * This method can be overridden to return a Node that is fancy enough to lookup + * values from a database etc to come up with variable values at evaluation time. + * @param string $varName + * @return object + */ + protected function createVarNode($varName) + { + //if it is not a simple double, maybe it is a variable? + $variable = $this->Variables[$varName]; + if ($variable!=null) + { + return new Mathparser_VarNode($variable, $varName); //recursion will end on these points when we get to the basics + } + else if($this->VariableResolver!=null) + { + $Len = strlen($varName); + for($i=0; $i<$Len; $i++) + { + $ch = $varName[$i]; + if(!$this->isValidChar($i, $ch)) + { + return null; + } + } + return new Mathparser_UnknownVarNode($this, $varName); + } + return null; + } + + /** + * Translation support. + * @ignore + */ + static function getMessage($key) + { + try + { + if (self::$translator == null) { + self::getTranslationStrings(); + } + $s = self::$translator[$key]; + if ($s==null){ $s = $key; } + return $s; + } + catch(Exception $e) + { + return $key; + } + } + /** + * Translation support. + * @ignore + */ + static function getMessage1($key, $param) + { + $temp = self::getMessage($key); + //assuming {0} is not used in the real string, + //and it is only a placeholder for the first parameter. + return sprintf($temp, $param); + } + /** + * Translation support. + * @ignore + */ + static function getMessage2($key, $param0, $param1) + { + $temp = self::getMessage($key); + return sprintf($temp, $param0, $param1); + } + +} //End of Math Parser Implementation. + + +/** + * Internal support class to help internal representation of a variable and a constant. + * @ignore + */ +class Mathparser_Variable +{ + + /** + * The parent parser instance, used to call the VariableResolver if needed. + */ + private $Parser; + + /** + * Name of this variable. + */ + public $Name; + + /** + * The preset value of this variable. + */ + public $Value; + + /** + * The delegate function name (string value) that supplies variable values. + * If this is not null, then it is called to get + * the value for this variable. + *

function VariableResolver($parser, $varName);

+ */ + public $ValueProvider; + + /** + * If the $this->ValueProvider is set, then this method uses it to get the runtime value. + * Otherwise, this method returns the value of $this->Value; + * + */ + public function getRuntimeValue(){ + return !isset($this->ValueProvider) ? $this->Value : $this->ValueProvider($this->Parser, $this->Name); + } + + public function __construct($parser, $aName, $newVal, $valueProvider) { + $this->Parser = $parser; + $this->Name = $aName; + $this->Value = $newVal; + $this->ValueProvider = $valueProvider; + } +} + +/** + * Internal support class to represent a user defined function. + * User defined functions can be used in expressions. + * @ignore + */ +class Mathparser_ParserFunction { + /** + * $EventHandler that is the name of the actual PHP function to call. + */ + public $EventHandler; + /** + * Name of the user defined function as used in an expression. + */ + public $Name; + /** + * Number of parameters that the user defined function accepts. + * -1 means any number of parameters. + * 0 means no parameters, 1 means 1 parameter like SIN(X) etc. + */ + public $paramCount; + /** + * Constructor. + * @param $name - Name of the user defined function as used in an expression. + * @param $eventHandler is the name of the actual PHP function to call. + * @param $paramCount Number of parameters that the user defined function accepts. + */ + public function __construct($name, $eventHandler, $paramCount){ + $this->EventHandler = $eventHandler; + $this->Name = $name; + $this->paramCount = $paramCount; + } +} + +/** + * Internal support class that represents constants such as 3, 5, 7 in the formula. + * @ignore + */ +class Mathparser_BasicNode extends Mathparser_Node { + public $Value; + + public function __construct($Val) { + $this->Value = $Val; + } + public function getValue() { + return $this->Value; + } + public function getValueAsDouble() { + if(is_float($this->Value)) + { + return $this->Value; + } + else if(is_numeric($this->Value)) + { + return (float)$this->Value; + } + throw new Exception("Value is not numeric: ".$this->Value); + } + public function getValueAsString() { + return (string)$this->Value; + } + //------------------------------------------------------------------------------ + public function isVariableUsed($Name) { + return false; //a basic node does not store any variable or function info + } + //------------------------------------------------------------------------------ + public function isFunctionUsed($Name) { + return false; //a basic node does not store any variable or function info + } + //------------------------------------------------------------------------------ + //since basic node cannot be Optimized further, this function does nothing + public function optimize() { + //Optimize Evaluates constant values at compile time. + //do nothing. + } + +} + +/** + * Internal support class that represents N parameter functions such as IF(X, Y, Z) etc. + * @ignore + */ +class Mathparser_NParamNode extends Mathparser_Node { + public $nodes; //array of nodes (these are the parameters). + public $fPtr; //function to execute + + public function __construct($n, $FuncAddr) { + $this->nodes = &$n; + $this->fPtr = $FuncAddr; + } + public function getValue() { + if($this->fPtr->Name=='IF'){ + //special case for short circuit boolean logic. + //helps to avoid div by zero etc. + //assume there are 3 parameters: + $cond = $this->nodes[0]->getValue(); + if($cond==0){ //false: + return $this->nodes[2]->getValue(); + }else{ + return $this->nodes[1]->getValue(); + } + }else{ + $p = array(); + $count = count($this->nodes); + for($i=0; $i<$count; $i++){ + $p[]=$this->nodes[$i]->getValue(); + } + return call_user_func_array($this->fPtr->EventHandler, $p); + } + } + public function getValueAsDouble() { + $Value = $this->getValue(); + if(is_float($Value)) + { + return $Value; + } + else if(is_numeric($Value)) + { + return (float)$Value; + } + throw new Exception("Value is not numeric: ".$Value); + } + public function getValueAsString() { + return (string)$this->getValue(); + } + + public function isFunctionUsed($Name) { + if($this->fPtr->Name==$Name){ + return true; + } + $i=0; + foreach ($this->nodes as $n) { + if ($n->isFunctionUsed($Name)) { + return true; + } + } + return false; + } + public function isVariableUsed($Name) { + $i=0; + foreach ($this->nodes as $n) { + if ($n->isVariableUsed($Name)) { + return true; + } + } + return false; + } + + public function optimize() { + $i=0; + foreach ($this->nodes as $n) { + $this->nodes[$i] = MathParser::optimizeNode($n); + $i++; + } + } +}; + +/** + * Internal support class that represents a variable Node. + * @ignore + */ +class Mathparser_VarNode extends Mathparser_Node { + private $pVar; //address of the variable in the variable list + public function __construct ($variable) { + $this->pVar = $variable; + } + public function getValue() { + return $this->pVar->getRuntimeValue(); + } + public function getValueAsDouble() { + $Value = $this->pVar->getRuntimeValue(); + if(is_float($Value)) + { + return $Value; + } + else if(is_numeric($Value)) + { + return (float)$Value; + } + throw new Exception("Value is not numeric: ".$Value); + } + public function getValueAsString() { + return (string)$this->pVar->getRuntimeValue(); + } + + public function isVariableUsed($Name) { + return $this->pVar->Name==$Name; + } + public function isFunctionUsed($Name) + { + return false; + } + //since there is no parameter used to get the value of a variable, no further + //optimization can be made. + public function optimize() { //Optimize Evaluates constant values at compile time. + //do nothing + } +} + + +/** + * Internal support class that represents a variable Node that was not defined before the parse. + * We will resolve it's value during evaluation. + * @ignore + */ +class Mathparser_UnknownVarNode extends Mathparser_Node +{ + private $VarName; //name of the variable that was defined on the fly. + + private $MathParser; + public function __construct($parser, $varName) + { + $this->MathParser = $parser; + $this->VarName = $varName; + } + public function getValue() + { + return call_user_func($this->MathParser->VariableResolver, $this->MathParser, $this->VarName); + } + public function getValueAsDouble() + { + $Value = $this->getValue(); + if(is_float($Value)) + { + return $Value; + } + else if(is_numeric($Value)) + { + return (float)$Value; + } + throw new Exception("Value is not numeric: ".$Value); + } + public function getValueAsString() + { + return (string) $this->getValue() ; + } + + public function isVariableUsed($Name) + { + return $this->VarName==$Name; + } + public function isFunctionUsed($Name) + { + return false; + } + //since there is no parameter used to get the value of a variable, no further + //optimization can be made. + public function optimize() + { //Optimize Evaluates constant values at compile time. + //do nothing + } +} + +/** + * Base class for expression tree nodes. + * @ignore + */ +abstract class Mathparser_Node +{ + /** + * Returns the computed value of this Node. + */ + abstract public function getValue(); + /** + * Returns the computed value of this Node as a double precision value. + */ + abstract public function getValueAsDouble(); + /** + * Returns the value as a String. + */ + abstract public function getValueAsString(); + + /** + * Is this variable used in the expression under this node? + */ + abstract public function isVariableUsed($Name); + + /** + * Is this function used in the expression under this node? + */ + abstract public function isFunctionUsed($Name); + + /** + * Optimize Evaluates constant values at compile time (When parse() is called). + * Once this is done, Evaluate will run faster. + */ + abstract public function optimize(); +} + +/** + * ParserException is thrown by some methods of MathParser implementation if an + * expression cannot be parsed. These methods are: + * parse(), evaluate(), getValue() + * User defined functions can choose to throw this exception too. + */ +class Mathparser_ParserException extends Exception +{ + /** + * Member variable that holds the error portion of the expression. + */ + public $err; + + /** + * Member variable that holds the parsed expression itself. + */ + public $exp; + + /** + * Constructor. + */ + public function __construct($msg, $errPart, $expression) + { + parent::__construct($msg); + $this->err = $errPart; + $this->exp = $expression; + } + /** + * Returns the expression string that cannot be parsed. + */ + public function getInvalidPortionOfExpression() + { + return $this->err; + } + + /** + * Returns the subexpression that is the immediate parent of the error portion.
+ * For example, if the expression is 3+LN(MAX(4,)) + * then getInvalidPortionOfExpression() would return MAX(4,) and getSubExpression() + * would return LN(MAX(4,))

+ * The returned sub expressions may not exactly match the original string supplied + * as the expression since space characters and paranthesis may be substituted for efficient + * parsing. + */ + public function getSubExpression() + { + return $this->exp; + } +} + +//Globals +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number or string + */ +function mp_add_($p1, $p2){ + return $p1+$p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return string + */ +function mp_add_str_($p1, $p2){ + if(is_string($p1)){ + return $p1.$p2; + }else if(!is_numeric($p2)){ + throw new Exception(MathParser::getMessage1('InvConcatOper2',$p2)); + } + return $p1+$p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_subtract_($p1, $p2){ + return $p1-$p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_mult_($p1, $p2){ + return $p1*$p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_div_($p1, $p2){ + return $p1/$p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_power_($p1, $p2){ + return pow($p1, $p2); +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_mod_($p1, $p2){ + return $p1 % $p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_notequals_($p1, $p2){ + return ($p1!=$p2) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_equals_($p1, $p2){ + return ($p1==$p2) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_lt_($p1, $p2){ + return ($p1<$p2) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_gt_($p1, $p2){ + return ($p1>$p2) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_ltequals_($p1, $p2){ + return ($p1<=$p2) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_gtequals_($p1, $p2){ + return ($p1>=$p2) ? 1 : 0; +} + +/** + * @ignore + * @param $p1 + * @return number + */ +function mp_unaryadd_($p1){ + return $p1; +} +/** + * @ignore + * @param $p1 + * @return number + */ +function mp_negate_($p1){ + return -$p1; +} +/** + * @ignore + * @param $p1 + * @return number + */ +function mp_not_($p1){ + return ((!$p1)==0)? 0 : 1; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_and_($p1, $p2){ + return ( ($p1==0 ? false : true) && ($p2==0 ? false : true) ) ? 1 : 0; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return string + */ +function mp_and_str_($p1, $p2){ + if(is_string($p1)){ + return $p1.$p2; + }else if(!is_numeric($p2)){ + throw new Exception(MathParser::getMessage1('InvConcatOper',$p2)); + } + return $p1 && $p2; +} +/** + * @ignore + * @param $p1 + * @param $p2 + * @return number + */ +function mp_or_($p1, $p2){ + return (($p1==0 ? false : true) || ($p2==0 ? false : true)) ? 1 : 0; +} +/** + * @ignore + * @return number + */ +function sum_(){ + $p = func_get_args(); + $count = func_num_args(); + $tot=0; + for($i=0; $i<$count; $i++){ + $tot+=$p[$i]; + } + return $tot; +} +/** + * @ignore + * @return number + */ +function mp_max_(){ + $p = func_get_args(); + $count = func_num_args(); + if($count<1){ + throw new Mathparser_ParserException(MathParser::getMessage2('WrngNPrms2', 'MAX', '1'), 'max', 'max'); + } + return max($p); +} +/** + * @ignore + * @return number + */ +function mp_min_(){ + $p = func_get_args(); + $count = func_num_args(); + if($count<1){ + throw new Mathparser_ParserException(MathParser::getMessage2('WrngNPrms2', 'MIN', '1'), 'min', 'min'); + } + return min($p); +} +/** + * @ignore + * @param $cond + * @param $trueCase + * @param $falseCase + * @return number + */ +function if_($cond, $trueCase, $falseCase){ + return $cond!=0 ? $trueCase : $falseCase; +} +/** + * @ignore + * @param $val + * @return number + */ +function mp_num_($val){ + if(is_numeric($val)){ + return (float)$val; + } + throw new Mathparser_ParserException(MathParser::getMessage2('InvNum', $val), 'NUM', 'NUM'); +} + +/** + * @ignore + * @param $val + * @return number + */ +function mp_square_($val){ + return $val*$val; +} + +/** + * @ignore + * @param $val + * @return number + */ +function mp_cotan_($val){ + return 1.0/tan($val); +} + +/** + * @ignore + * @param $val + * @return number + */ +function mp_sign_($val){ + if($val>0)return 1; + if($val<0)return -1; + return 0; +} + +/** + * @ignore + * @param $val + * @return number + */ +function mp_trunc_($val){ + if($val>0)return floor($val); + if($val<0)return floor($val)+1; + return 0; +} + +/** + * @ignore + * @param $val + * @return number + */ +function mp_float_($val){ + return (float)$val; +} + +/** + * @ignore + * @param $base + * @param $val + * @return number + */ +function mp_logn_($base, $val){ + return log($val) / log($base); +} + +/** + * @ignore + * @return number + */ +function mp_rand_(){ + $max = getrandmax(); + return rand(0, $max)/$max; +} + +/** + * @ignore + * @return number + */ +function mp_concat_(){ + $p = func_get_args(); + $s=''; + foreach($p as $val){ + $s.=$val; + } + return $s; +} +?> \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/models/desktop.ini b/src/structure/components/com_sportsmanager/models/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/models/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/models/index.html b/src/structure/components/com_sportsmanager/models/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/components/com_sportsmanager/models/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/models/sportsmanager.php b/src/structure/components/com_sportsmanager/models/sportsmanager.php new file mode 100644 index 0000000..e69de29 diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php new file mode 100644 index 0000000..5f0318c --- /dev/null +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -0,0 +1,8409 @@ +"); +} + +laufzeitInit(); + +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'tools.php'); +setMinMemoryLimit('64M'); + +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'api.php'); + +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'admin.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'controller.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'database.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'mathparser.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.html.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view.json.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_admin.php'); +require_once (JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'views/sportsmanager/view_ticker.php'); + + + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); +jimport('joomla.filesystem.archive'); + +initDatabase(); +updateDatabase(); + +if (isset($_POST['filter_saison_id'])) + setcookie('sportsmanager_filter_saison_id', $_POST['filter_saison_id'], time() + (60 * 60 * 24)); +else if (isset($_REQUEST['filter_saison_id'])) + setcookie('sportsmanager_filter_saison_id', $_REQUEST['filter_saison_id'], time() + (60 * 60 * 24)); + +global $content; +global $task; +global $params; +$jinput = JFactory::getApplication()->input; +$task = $jinput->getCmd('task'); +$app = JFactory::getApplication('site'); +$params = $app->getParams('com_sportsmanager'); +$content = isJson() && $jinput->getCmd('content', NULL) != NULL ? $jinput->getCmd('content') : $params->get('content'); + +if (berechnungen()) + return; + +if ($task == "spielerbild") { + spielerbild(); +} else if ($task == "anhang_termin") { + terminDokument(); +} else if ($task == "spieler_details") { + spielerDetails(); +} else if (substr($task, 0, 6) == "admin_") { + switch ($task) { + case 'admin_einstellungen': + adminEinstellungen(); + break; + case 'admin_einstellungen_save': + adminSaveEinstellungen(); + break; + case 'admin_datenbank': + adminDatenbank(); + break; + case 'admin_datenbank_save': + adminSaveDatenbank(); + break; + case 'admin_spieler': + adminSpieler(1); + break; + case 'admin_spieler_edit': + adminEditSpieler(); + break; + case 'admin_spieler_save': + adminSaveSpieler(); + break; + case 'admin_spieler_remove': + adminRemoveSpieler(); + break; + case 'admin_spieler_zusammenlegen_form': + adminSpielerZusammenlegenForm(); + break; + case 'admin_spieler_zusammenlegen': + adminSpielerZusammenlegen(); + break; + case 'admin_spieler_import_form': + adminImportSpielerForm(); + break; + case 'admin_spieler_import_details_form': + adminImportSpielerDetailsForm(); + break; + case 'admin_spieler_import_vorschau': + adminImportSpielerVorschau(); + break; + case 'admin_spieler_import': + adminImportSpieler(); + break; + case 'admin_spieler_export_form': + adminExportSpielerForm(); + break; + case 'admin_spieler_export': + adminExportSpieler(); + break; + case 'admin_spieler_export_international_form': + adminExportSpielerInternationalForm(); + break; + case 'admin_spieler_export_international': + adminExportSpielerInternational(); + break; + case 'admin_spieler_export_sport': + adminExportSpielerSport(); + break; + case 'admin_spieler_remove_inaktive_form': + adminRemoveInaktiveSpielerForm(); + break; + case 'admin_spieler_remove_inaktive': + adminRemoveInaktiveSpieler(); + break; + case 'admin_vereine': + adminVereine(); + break; + case 'admin_verein_edit': + adminEditVerein(); + break; + case 'admin_verein_save': + adminSaveVerein(); + break; + case 'admin_verein_remove': + adminRemoveVerein(); + break; + case 'admin_vereine_zusammenlegen_form': + adminVereineZusammenlegenForm(); + break; + case 'admin_vereine_zusammenlegen': + adminVereineZusammenlegen(); + break; + case 'admin_vereinsmitglieder': + adminVereinsmitglieder(); + break; + case 'admin_vereinsmitglied_edit': + adminEditVereinsmitglied(); + break; + case 'admin_vereinsmitglied_save': + adminSaveVereinsmitglied(); + break; + case 'admin_vereinsmitglied_remove': + adminRemoveVereinsmitglied(); + break; + case 'admin_spielorte': + adminSpielorte(); + break; + case 'admin_spielort_edit': + adminEditSpielort(); + break; + case 'admin_spielort_save': + adminSaveSpielort(); + break; + case 'admin_spielort_remove': + adminRemoveSpielort(); + break; + case 'admin_spielorte_zusammenlegen_form': + adminSpielorteZusammenlegenForm(); + break; + case 'admin_spielorte_zusammenlegen': + adminSpielorteZusammenlegen(); + break; + case 'admin_teamspiel_modi': + adminTeamspielModi(); + break; + case 'admin_teamspiel_modus_edit': + adminEditTeamspielmodus(); + break; + case 'admin_teamspiel_modus_save': + adminSaveTeamspielmodus(); + break; + case 'admin_teamspiel_modus_remove': + adminRemoveTeamspielmodus(); + break; + case 'admin_teamspiel_modus_kopieren': + adminKopierenTeamspielmodus(); + break; + case 'admin_verschieben_modi': + adminVerschiebenModi(); + break; + case 'admin_verschieben_modus_edit': + adminEditVerschiebenModus(); + break; + case 'admin_verschieben_modus_save': + adminSaveVerschiebenModus(); + break; + case 'admin_verschieben_modus_remove': + adminRemoveVerschiebenModus(); + break; + case 'admin_kategorien': + adminKategorien(); + break; + case 'admin_kategorien_save': + adminSaveKategorien(); + break; + case 'admin_ranglistensysteme': + adminRanglistensysteme(); + break; + case 'admin_ranglistensystem_edit': + adminEditRanglistensystem(); + break; + case 'admin_ranglistensystem_save': + adminSaveRanglistensystem(); + break; + case 'admin_ranglistensystem_auswertung': + adminRanglistensystemAuswertung(); + break; + case 'admin_ranglistensystem_remove': + adminRemoveRanglistensystem(); + break; + case 'admin_rangliste_edit': + adminEditRangliste(); + break; + case 'admin_rangliste_save': + adminSaveRangliste(); + break; + case 'admin_rangliste_remove': + adminRemoveRangliste(); + break; + case 'admin_rangliste_kopieren': + adminKopierenRangliste(); + break; + case 'admin_rangliste_system_zuruecksetzen': + adminRanglisteSystemZuruecksetzen(); + break; + case 'admin_rangliste_disziplinen_entfernen': + adminRanglisteDisziplinenEntfernen(); + break; + case 'admin_rangliste_turnierdisziplinen': + adminRanglisteTurnierdisziplinen(); + break; + case 'admin_rangliste_turnierdisziplin_edit': + adminEditRanglisteTurnierdisziplin(); + break; + case 'admin_rangliste_turnierdisziplin_save': + adminSaveRanglisteTurnierdisziplin(); + break; + case 'admin_rangliste_turnierdisziplin_remove': + adminRemoveRanglisteTurnierdisziplin(); + break; + case 'admin_spielerstatistik_edit': + adminEditSpielerstatistik(); + break; + case 'admin_spielerstatistik_save': + adminSaveSpielerstatistik(); + break; + case 'admin_spielerstatistik_remove': + adminRemoveSpielerstatistik(); + break; + case 'admin_spielerstatistik_kopieren': + adminKopierenSpielerstatistik(); + break; + case 'admin_spielerstatistik_veranstaltungen_entfernen': + adminSpielerstatistikVeranstaltungenEntfernen(); + break; + case 'admin_spielerstatistik_veranstaltungen': + adminSpielerstatistikVeranstaltungen(); + break; + case 'admin_spielerstatistik_veranstaltung_edit': + adminEditSpielerstatistikVeranstaltung(); + break; + case 'admin_spielerstatistik_veranstaltung_save': + adminSaveSpielerstatistikVeranstaltung(); + break; + case 'admin_spielerstatistik_veranstaltung_remove': + adminRemoveSpielerstatistikVeranstaltung(); + break; + case 'admin_spielerstatistik_individualwettbewerb_edit': + adminEditSpielerstatistikIndividualwettbewerb(); + break; + case 'admin_spielerstatistik_individualwettbewerb_save': + adminSaveSpielerstatistikIndividualwettbewerb(); + break; + case 'admin_spielerstatistik_individualwettbewerb_remove': + adminRemoveSpielerstatistikIndividualwettbewerb(); + break; + case 'admin_einstufungen': + adminEinstufungen(); + break; + case 'admin_einstufung_edit': + adminEditEinstufung(); + break; + case 'admin_einstufung_save': + adminSaveEinstufung(); + break; + case 'admin_einstufung_remove': + adminRemoveEinstufung(); + break; + case 'admin_saisons': + adminSaisons(); + break; + case 'admin_saison_edit': + adminEditSaison(); + break; + case 'admin_saison_save': + adminSaveSaison(); + break; + case 'admin_saison_remove': + adminRemoveSaison(); + break; + case 'admin_verteiler': + adminVerteiler(); + break; + case 'admin_verteiler_edit': + adminEditVerteiler(); + break; + case 'admin_verteiler_save': + adminSaveVerteiler(); + break; + case 'admin_verteiler_remove': + adminRemoveVerteiler(); + break; + case 'admin_rechnungen': + adminRechnungen(); + break; + case 'admin_rechnung_edit': + adminEditRechnung(); + break; + case 'admin_rechnung_save': + adminSaveRechnung(); + break; + case 'admin_rechnung_remove': + adminRemoveRechnung(); + break; + case 'admin_moderatoren': + adminModeratoren(); + break; + case 'admin_moderator_edit': + adminEditModerator(); + break; + case 'admin_moderator_save': + adminSaveModerator(); + break; + case 'admin_moderator_remove': + adminRemoveModerator(); + break; + case 'admin_veranstalter': + adminVeranstalter(); + break; + case 'admin_veranstalter_edit': + adminEditVeranstalter(); + break; + case 'admin_veranstalter_save': + adminSaveVeranstalter(); + break; + case 'admin_veranstalter_remove': + adminRemoveVeranstalter(); + break; + case 'admin_veranstaltung_edit': + adminEditVeranstaltung(); + break; + case 'admin_veranstaltung_save': + adminSaveVeranstaltung(); + break; + case 'admin_veranstaltung_remove': + adminRemoveVeranstaltung(); + break; + case 'admin_teams': + adminMannschaften(); + break; + case 'admin_team_edit': + adminEditMannschaft(); + break; + case 'admin_team_save': + adminSaveMannschaft(); + break; + case 'admin_team_remove': + adminRemoveMannschaft(); + break; + case 'admin_team_kopieren_form': + adminKopierenMannschaftForm(); + break; + case 'admin_team_kopieren': + adminKopierenMannschaft(); + break; + case 'admin_team_verknuepfen_form': + adminVerknuepfenMannschaftForm(); + break; + case 'admin_team_verknuepfen': + adminVerknuepfenMannschaft(); + break; + case 'admin_mitglieder': + adminMitglieder(); + break; + case 'admin_mitglied_edit': + adminEditMitglied(); + break; + case 'admin_mitglied_save': + adminSaveMitglied(); + break; + /* + case 'admin_mitglied_remove_form': + adminRemoveMitgliedForm(); + break; + case 'admin_mitglied_remove': + adminRemoveMitglied(); + break; + */ + case 'admin_begegnungen': + adminBegegnungen(); + break; + case 'admin_begegnung_edit': + adminEditBegegnung(); + break; + case 'admin_begegnung_save': + adminSaveBegegnung(); + break; + case 'admin_begegnung_remove': + adminRemoveBegegnung(); + break; + case 'admin_begegnung_heimtausch': + adminHeimtauschBegegnung(); + break; + case 'admin_begegnung_spielplan_edit': + adminEditBegegnungSpielplan(0); + break; + case 'admin_begegnung_spielplan_edit_bestaetigen': + adminEditBegegnungSpielplan(1); + break; + case 'admin_begegnung_spielplan_save': + $input = isJson() ? $jinput->json : $jinput; + if ($input->get('ergebnis_bestaetigen', false, 'BOOL')) { + adminBegegnungSpielplanBestaetigen(); + } else if ($jinput->get('heimrecht_tauschen', false, 'BOOL')) { + adminBegegnungSpielplanHeimtausch(); + } else { + adminSaveBegegnungSpielplan(); + } + break; + /* + case 'admin_begegnung_spielplan_bestaetigen': + adminBegegnungSpielplanBestaetigen(); + break; + case 'admin_begegnung_spielplan_heimtausch': + adminBegegnungSpielplanHeimtausch(); + break; + */ + case 'admin_begegnungen_generieren_form': + adminBegegnungenGenerierenForm(); + break; + case 'admin_begegnungen_generieren': + adminBegegnungenGenerieren(); + break; + case 'admin_begegnungen_runde_erzeugen_form': + adminBegegnungenRundeErzeugenForm(); + break; + case 'admin_begegnungen_runde_erzeugen': + adminBegegnungenRundeErzeugen(); + break; + case 'admin_begegnungen_alle_entfernen': + adminBegegnungenAlleEntfernen(); + break; + case 'admin_individualwettbewerb_edit': + adminEditIndividualwettbewerb(); + break; + case 'admin_individualwettbewerb_save': + adminSaveIndividualwettbewerb(); + break; + case 'admin_individualwettbewerb_remove': + adminRemoveIndividualwettbewerb(); + break; + case 'admin_individualwettbewerb_spiele': + adminIndividualwettbewerbSpiele(); + break; + case 'admin_individualwettbewerb_spiel_edit': + adminEditIndividualwettbewerbSpiel(); + break; + case 'admin_individualwettbewerb_spiel_save': + adminSaveIndividualwettbewerbSpiel(); + break; + case 'admin_individualwettbewerb_spiel_remove': + adminRemoveIndividualwettbewerbSpiel(); + break; + case 'admin_individualwettbewerb_ausgangsplatzierung_edit': + adminEditIndividualwettbewerbAusgangsplatzierung(); + break; + case 'admin_individualwettbewerb_ausgangsplatzierung_save': + adminSaveIndividualwettbewerbAusgangsplatzierung(); + break; + case 'admin_individualwettbewerb_ausgangsplatzierung_remove': + adminRemoveIndividualwettbewerbAusgangsplatzierung(); + break; + case 'admin_termine': + adminTermine(1); + break; + case 'admin_termin_edit': + adminEditTermin(1); + break; + case 'admin_termin_save': + adminSaveTermin(1); + break; + case 'admin_termin_remove_form': + adminRemoveTerminForm(1); + break; + case 'admin_termin_remove': + adminRemoveTermin(1); + break; + case 'admin_termine_verlauf': + adminTermineVerlauf(1); + break; + case 'admin_termin_details': + adminTerminDetails(1); + break; + case 'admin_termin_moderieren': + adminTerminModerieren(1); + break; + case 'admin_termine_bezeichnungen': + adminTermineBezeichnungen(1); + break; + case 'admin_termine_bezeichnung_edit': + adminEditTermineBezeichnung(1); + break; + case 'admin_termine_bezeichnung_save': + adminSaveTermineBezeichnung(1); + break; + case 'admin_termine_bezeichnung_remove': + adminRemoveTermineBezeichnung(1); + break; + case 'admin_termine_bezeichnungszusaetze': + adminTermineBezeichnungszusaetze(1); + break; + case 'admin_termine_bezeichnungszusatz_edit': + adminEditTermineBezeichnungszusatz(1); + break; + case 'admin_termine_bezeichnungszusatz_save': + adminSaveTermineBezeichnungszusatz(1); + break; + case 'admin_termine_bezeichnungszusatz_remove': + adminRemoveTermineBezeichnungszusatz(1); + break; + case 'admin_termine_bundeslaender': + adminTermineBundeslaender(1); + break; + case 'admin_termine_bundesland_edit': + adminEditTermineBundesland(1); + break; + case 'admin_termine_bundesland_save': + adminSaveTermineBundesland(1); + break; + case 'admin_termine_bundesland_remove': + adminRemoveTermineBundesland(1); + break; + case 'admin_termine_laender': + adminTermineLaender(1); + break; + case 'admin_termine_land_edit': + adminEditTermineLand(1); + break; + case 'admin_termine_land_save': + adminSaveTermineLand(1); + break; + case 'admin_termine_land_remove': + adminRemoveTermineLand(1); + break; + case 'admin_termine_symbole': + adminTermineSymbole(1); + break; + case 'admin_termine_symbol_edit': + adminEditTermineSymbol(1); + break; + case 'admin_termine_symbol_save': + adminSaveTermineSymbol(1); + break; + case 'admin_termine_symbol_remove': + adminRemoveTermineSymbol(1); + break; + case 'admin_turnier_edit': + adminEditTurnier(); + break; + case 'admin_turnier_save': + adminSaveTurnier(); + break; + case 'admin_turnier_remove': + adminRemoveTurnier(); + break; + case 'admin_turnierdisziplinen': + adminTurnierdisziplinen(); + break; + case 'admin_turnierdisziplin_edit': + adminEditTurnierdisziplin(); + break; + case 'admin_turnierdisziplin_save': + adminSaveTurnierdisziplin(); + break; + case 'admin_turnierdisziplin_remove': + adminRemoveTurnierdisziplin(); + break; + case 'admin_turniervoranmeldungen_export_form': + adminExportTurniervoranmeldungenForm(); + break; + case 'admin_turniervoranmeldungen_export': + adminExportTurniervoranmeldungen(); + break; + case 'admin_turnierdisziplin_meldungen_spiele': + adminTurnierdisziplinMeldungenSpiele(); + break; + case 'admin_turnierdisziplin_meldungen_spiele_alle_entfernen': + adminTurnierdisziplinMeldungenSpieleAlleEntfernen(); + break; + case 'admin_turnierdisziplin_spiel_edit': + adminEditTurnierdisziplinSpiel(); + break; + case 'admin_turnierdisziplin_spiel_save': + adminSaveTurnierdisziplinSpiel(); + break; + case 'admin_turnierdisziplin_spiel_remove': + adminRemoveTurnierdisziplinSpiel(); + break; + case 'admin_turnierdisziplin_runde_edit': + adminEditTurnierdisziplinRunde(); + break; + case 'admin_turnierdisziplin_runde_save': + adminSaveTurnierdisziplinRunde(); + break; + case 'admin_turnierdisziplin_meldung_edit': + adminEditTurnierdisziplinMeldung(); + break; + case 'admin_turnierdisziplin_meldung_save': + adminSaveTurnierdisziplinMeldung(); + break; + case 'admin_turnierdisziplin_meldung_remove': + adminRemoveTurnierdisziplinMeldung(); + break; + case 'admin_turnierdisziplin_meldung_verknuepfen_form': + adminVerknuepfenTurnierdisziplinMeldungForm(); + break; + case 'admin_turnierdisziplin_meldung_verknuepfen': + adminVerknuepfenTurnierdisziplinMeldung(); + break; + case 'admin_turnierdisziplin_meldungen_spiele_import_form': + adminImportTurnierdisziplinMeldungenSpieleForm(); + break; + case 'admin_turnierdisziplin_meldungen_spiele_import': + adminImportTurnierdisziplinMeldungenSpiele(); + break; + case 'admin_turnierdisziplin_rundenstufe_edit': + adminEditTurnierdisziplinRundenstufe(); + break; + case 'admin_turnierdisziplin_rundenstufe_save': + adminSaveTurnierdisziplinRundenstufe(); + break; + case 'admin_turnierdisziplin_rundenstufe_remove': + adminRemoveTurnierdisziplinRundenstufe(); + break; + case 'admin_spieler_bilder_exportieren_form': + adminSpielerExportBilderForm(); + break; + case 'admin_spieler_bilder_exportieren': + adminSpielerExportBilder(); + break; + case 'admin_spieler_bilder_importieren_form': + adminSpielerImportBilderForm(); + break; + case 'admin_spieler_bilder_importieren': + adminSpielerImportBilder(); + break; + case 'admin_vereine_bilder_exportieren_form': + adminVereineExportBilderForm(); + break; + case 'admin_vereine_bilder_exportieren': + adminVereineExportBilder(); + break; + case 'admin_vereine_bilder_importieren_form': + adminVereineImportBilderForm(); + break; + case 'admin_vereine_bilder_importieren': + adminVereineImportBilder(); + break; + case 'admin_grooming_mehrfache_mitgliedschaften': + adminGroomingMehrfacheMitgliedschaften(); + break; + default: + if (!benutzerModerator() && !benutzerVeranstaltungModerator() && !benutzerTurnierModerator() && !benutzerIndividualwettbewerbModerator() && (benutzerVeranstalterModerator() || benutzerVereinModerator())) + adminSpieler(0); + else + adminUebersicht(); + break; + } +} +else if ($content == "players") { + switch ($task) { + default: + spieler(); + break; + } +} else if ($content == "elorangliste") { + switch ($task) { + default: + eloRanglisten(); + break; + } +} else if ($content == "individualwettbewerbe") { + switch ($task) { + default: + individualwettbewerbe(); + break; + } +} else if ($content == "teams" || $content == "teams_vereinigt") { + switch ($task) { + case 'begegnung_spielplan': + begegnungSpielplan(true); + break; + case 'team_details': + mannschaftDetails($content == "teams_vereinigt"); + break; + case 'team_spielplan_xml': + teamSpielplanXML(); + break; + case 'team_begegnungen_ical': + teamBegegnungeniCal(); + break; + default: + mannschaften($content == "teams_vereinigt"); + break; + } +} else if ($content == "vereine") { + switch ($task) { + case 'verein_details': + vereinDetails(); + break; + case 'verein_begegnungen_ical': + vereinBegegnungeniCal(); + break; + default: + vereine(); + break; + } +} else if ($content == "turniervoranmeldungen") { + switch ($task) { + default: + turniervoranmeldungen(); + break; + } +} else if ($content == "turniere") { + switch ($task) { + case 'turnierdisziplin': + turnierdisziplin(); + break; + case 'turnierdisziplinen': + turnierdisziplinen(); + break; + default: + turniere(); + break; + } +} else if ($content == "ranglisten") { + switch ($task) { + case 'ranglistenpunkte': + ranglistenpunkte(); + break; + case 'rangliste': + rangliste(); + break; + default: + ranglisten(); + break; + } +} else if ($content == "spielerstatistiken") { + switch ($task) { + case 'spielerstatistik': + spielerstatistik(); + break; + default: + spielerstatistiken(); + break; + } +} else if ($content == "aktuelle_begegnungen") { + switch ($task) { + case 'begegnung_verlegen_form': + begegnungVerlegenForm(); + break; + case 'begegnung_verlegen': + begegnungVerlegen(); + break; + case 'begegnung_verlegen_bestaetigen': + begegnungVerlegenBestaetigen(); + break; + case 'begegnung_spielplan': + begegnungSpielplan(); + break; + case 'veranstaltungen_ticker': + veranstaltungenTicker(true); + break; + case 'veranstaltungen_ticker_timestamp': + veranstaltungenTickerTimestamp(true); + break; + case 'veranstaltungen_ticker_daten': + veranstaltungenTickerDaten(true); + break; + case 'veranstaltungen_ticker_css': + veranstaltungenTickerCSS(); + break; + case 'team_details': + mannschaftDetails(true, true); + break; + case 'team_spielplan_xml': + teamSpielplanXML(); + break; + case 'team_begegnungen_ical': + teamBegegnungeniCal(); + break; + default: + aktuelleBegegnungen(); + break; + } +} else if ($content == "aktuelle_begegnungen_pin") { + switch ($task) { + case 'begegnung_verlegen_form': + begegnungVerlegenForm(); + break; + case 'begegnung_verlegen': + begegnungVerlegen(); + break; + case 'begegnung_verlegen_bestaetigen': + begegnungVerlegenBestaetigen(); + break; + case 'begegnung_spielplan': + begegnungSpielplan(); + break; + case 'pineingabe': + adminEditBegegnungSpielplan(2); + break; + case 'veranstaltungen_ticker': + veranstaltungenTicker(true); + break; + case 'veranstaltungen_ticker_timestamp': + veranstaltungenTickerTimestamp(true); + break; + case 'veranstaltungen_ticker_daten': + veranstaltungenTickerDaten(true); + break; + case 'veranstaltungen_ticker_css': + veranstaltungenTickerCSS(); + break; + case 'team_details': + mannschaftDetails(true, true); + break; + case 'team_spielplan_xml': + teamSpielplanXML(); + break; + case 'team_begegnungen_ical': + teamBegegnungeniCal(); + break; + default: + aktuelleBegegnungen(TRUE); + break; + } +} else if ($content == "mannschaftswettbewerbe") { + switch ($task) { + case 'begegnung_verlegen_form': + begegnungVerlegenForm(); + break; + case 'begegnung_verlegen': + begegnungVerlegen(); + break; + case 'begegnung_verlegen_bestaetigen': + begegnungVerlegenBestaetigen(); + break; + case 'begegnung_spielplan': + begegnungSpielplan(); + break; + case 'veranstaltung': + veranstaltung(); + break; + case 'veranstaltung_begegnungen_ical': + veranstaltungBegegnungeniCal(); + break; + case 'veranstaltungen_ticker': + veranstaltungenTicker(); + break; + case 'veranstaltungen_ticker_daten': + veranstaltungenTickerDaten(); + break; + case 'veranstaltungen_ticker_css': + veranstaltungenTickerCSS(); + break; + case 'veranstaltungen_ticker_timestamp': + veranstaltungenTickerTimestamp(); + break; + case 'team_details': + mannschaftDetails(true, true); + break; + case 'team_spielplan_xml': + teamSpielplanXML(); + break; + case 'team_begegnungen_ical': + teamBegegnungeniCal(); + break; + default: + veranstaltungen(); + } +} else if ($content == "spielorte") { + switch ($task) { + case 'begegnung_verlegen_form': + begegnungVerlegenForm(); + break; + case 'begegnung_verlegen': + begegnungVerlegen(); + break; + case 'begegnung_verlegen_bestaetigen': + begegnungVerlegenBestaetigen(); + break; + case 'begegnung_spielplan': + begegnungSpielplan(); + break; + case 'begegnung_spielplan': + begegnungSpielplan(true); + break; + case 'team_details': + mannschaftDetails(true, true); + break; + case 'team_spielplan_xml': + teamSpielplanXML(); + break; + case 'team_begegnungen_ical': + teamBegegnungeniCal(); + break; + case 'spielort': + spielort(); + break; + case 'spielort_begegnungen_ical': + spielortBegegnungeniCal(); + break; + default: + spielorte(); + break; + } +} else if ($content == "termine") { + switch ($task) { + case 'termin_edit': + adminEditTermin(0); + break; + case 'termin_save': + adminSaveTermin(0); + break; + case 'termin_remove_form': + adminRemoveTerminForm(0); + break; + case 'termin_remove': + adminRemoveTermin(0); + break; + case 'termine_verlauf': + adminTermineVerlauf(0); + break; + case 'termin_details': + adminTerminDetails(0); + break; + case 'termin_moderieren': + adminTerminModerieren(0); + case 'termine_bezeichnungen': + adminTermineBezeichnungen(0); + break; + case 'termine_bezeichnung_edit': + adminEditTermineBezeichnung(0); + break; + case 'termine_bezeichnung_save': + adminSaveTermineBezeichnung(0); + break; + case 'termine_bezeichnung_remove': + adminRemoveTermineBezeichnung(0); + break; + case 'termine_bezeichnungszusaetze': + adminTermineBezeichnungszusaetze(0); + break; + case 'termine_bezeichnungszusatz_edit': + adminEditTermineBezeichnungszusatz(0); + break; + case 'termine_bezeichnungszusatz_save': + adminSaveTermineBezeichnungszusatz(0); + break; + case 'termine_bezeichnungszusatz_remove': + adminRemoveTermineBezeichnungszusatz(0); + break; + case 'termine_bundeslaender': + adminTermineBundeslaender(0); + break; + case 'termine_bundesland_edit': + adminEditTermineBundesland(0); + break; + case 'termine_bundesland_save': + adminSaveTermineBundesland(0); + break; + case 'termine_bundesland_remove': + adminRemoveTermineBundesland(0); + break; + case 'termine_laender': + adminTermineLaender(0); + break; + case 'termine_land_edit': + adminEditTermineLand(0); + break; + case 'termine_land_save': + adminSaveTermineLand(0); + break; + case 'termine_land_remove': + adminRemoveTermineLand(0); + break; + case 'termine_symbole': + adminTermineSymbole(0); + break; + case 'termine_symbol_edit': + adminEditTermineSymbol(0); + break; + case 'termine_symbol_save': + adminSaveTermineSymbol(0); + break; + case 'termine_symbol_remove': + adminRemoveTermineSymbol(0); + break; + default: + adminTermine(0); + break; + } +} else if ($content == 'login') { + userAuth(); +} else if ($content == 'login_refresh') { + userToken(); +} else { + adminUebersicht(); +} +// laufzeitAusgeben(); + +return; + +function redirectSportsManagerURL($weitereParameter = NULL, $nachricht = '') { + global $redirect_session_id; + if (!empty($redirect_session_id)) { + if (empty($weitereParameter)) + $weitereParameter = ''; + $weitereParameter .= "&rsession_id=" . urlencode($redirect_session_id); + } + $app = &JFactory::getApplication(); + $app->redirect(SportsManagerURL($weitereParameter), $nachricht); + return; +} + +function redirectCurrentURL() { + global $redirect_session_id; + $u = & JURI::getInstance(); + if (!empty($redirect_session_id)) + $u->setVar('rsession_id', $redirect_session_id); + $app = &JFactory::getApplication(); + $app->redirect($u->toString()); +} + +function redirectSessionIdSetzen() { + global $redirect_session_id; + if (empty($redirect_session_id)) + $redirect_session_id = date('Y-m-d H:i:s'); + return $redirect_session_id; +} + +function redirectSessionIdEmpty() { + global $redirect_session_id; + return empty($redirect_session_id); +} + +function redirectRequestGetSessionId() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + $session_id = $db->escape(trim($jinput->get('rsession_id', '', 'RAW'))); + return $session_id; +} + +function berechnungen() { + $db = & getDatabase(); + + $session_id = redirectRequestGetSessionId(); + + $query = "SELECT IF(EXISTS(" + . "\n SELECT *" + . "\n FROM #__sportsmanager_berechnung" + . "\n WHERE " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")) + . "\n ), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechnungen = $db->loadResult(); + ; + + if (empty($berechnungen)) + return FALSE; + + ranglisteAktualisieren(0, 0, 0, TRUE); + einstufungAktualisieren(TRUE); + + $u = & JURI::getInstance(); + $app = &JFactory::getApplication(); + $app->redirect($u->toString()); + return TRUE; +} + +function benutzerJoomlaAdmin() { + $version = new JVersion; + $joomla = $version->getShortVersion(); + + if (substr($joomla, 0, 3) != '1.5') { + if (JFactory::getUser()->authorise('core.manage', 'com_sportsmanager')) + return true; + } else { + JFactory::getACL()->addACL('com_sportsmanager', 'manage', 'users', 'super administrator'); + if (JFactory::getUser()->authorize('com_sportsmanager', 'manage')) + return true; + } +} + +function benutzerModerator() { + $db = & getDatabase(); + + if (benutzerJoomlaAdmin()) + return TRUE; + + if (isExternalDatabase()) + return FALSE; + + $user_id = JFactory::getUser()->id; + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_moderator" + . "\n WHERE moderator_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $gefunden = $db->loadResult(); + return !empty($gefunden); +} + +function benutzerZugriff($zugriff, $joomlaAdminIgnorieren = FALSE) { + $db = & getDatabase(); + + if (!$joomlaAdminIgnorieren && benutzerJoomlaAdmin()) + return TRUE; + + if (isExternalDatabase()) + return FALSE; + + $user_id = JFactory::getUser()->id; + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_moderator" + . "\n INNER JOIN #__sportsmanager_moderator_zugriff USING (moderator_id)" + . "\n WHERE moderator_user_id = $user_id AND #__sportsmanager_moderator_zugriff.zugriff = '" . $db->escape($zugriff) . "'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $gefunden = $db->loadResult(); + return !empty($gefunden); +} + +function benutzerIndividualwettbewerbModerator($individualwettbewerb_id = NULL) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb INNER JOIN #__sportsmanager_individualwettbewerb ON individualwettbewerb_id = berechtigt_individualwettbewerb_id WHERE berechtigt_user_id = $user_id"; + if ($individualwettbewerb_id != NULL) + $query .= " AND berechtigt_individualwettbewerb_id = $individualwettbewerb_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function benutzerVeranstalterModerator($veranstalter_id = NULL) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_user_id = $user_id"; + if ($veranstalter_id != NULL) + $query .= " AND berechtigt_veranstalter_id = $veranstalter_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function benutzerVeranstaltungModerator($veranstaltung_id = NULL) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14"; + if ($veranstaltung_id != NULL) + $query .= " AND berechtigt_veranstaltung_id = $veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function benutzerVeranstaltungIdsModerator() { + $db = & getDatabase(); + + if (isExternalDatabase()) + return array(); + + $user_id = JFactory::getUser()->id; + $query = "SELECT DISTINCT veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $ids = array(); + foreach ($rows as $row) + array_push($ids, $row->veranstaltung_id); + + return $ids; +} + +function benutzerTurnierModerator($turnier_id = NULL) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_turnier INNER JOIN #__sportsmanager_turnier ON turnier_id = berechtigt_turnier_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14"; + if ($turnier_id != NULL) + $query .= " AND berechtigt_turnier_id = $turnier_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function benutzerMannschaftModerator($team_id) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_team_id = $team_id AND berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function benutzerVereinModerator($verein_id = NULL) { + $db = & getDatabase(); + + if (isExternalDatabase()) + return false; + + $user_id = JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_verein INNER JOIN #__sportsmanager_verein ON berechtigt_verein_id = verein_id WHERE NOT ausgetreten AND berechtigt_user_id = $user_id"; + if ($verein_id != NULL) + $query .= " AND berechtigt_verein_id = $verein_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return false; + + return true; +} + +function currentUserHasAccessToDetails() { + $db = & getDatabase(); + + if (benutzerModerator()) + return true; + + if (isExternalDatabase()) + return false; + + $user_id = isJson() ? getUserID() : JFactory::getUser()->id; + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) + return true; + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_verein, #__sportsmanager_verein WHERE verein_id = berechtigt_verein_id AND NOT ausgetreten AND berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) + return true; + + $query = "SELECT * FROM #__sportsmanager_berechtigt_fuer_team WHERE berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) > 0) + return true; + + return false; +} + +function administrationFooter() { + if (benutzerModerator() || benutzerVeranstaltungModerator() || benutzerTurnierModerator() || benutzerIndividualwettbewerbModerator()) + $benutzer_zugriff = 2; + else if (benutzerVereinModerator() || benutzerVeranstalterModerator()) + $benutzer_zugriff = 1; + else + $benutzer_zugriff = 0; + + if ($benutzer_zugriff) + HTML_sportsmanager::administrationFooter(); +} + +function einstellungswert($name) { + $db = & getDatabase(); + + $query = "SELECT * FROM #__sportsmanager_einstellungen WHERE name = '$name'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) + return null; + return $rows[0]->wert; +} + +function aktuelleBegegnungen($pineingabe = FALSE) { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + + $praesentation = $jinput->get('praesentation', 0, 'INT'); + $aktualisieren = $jinput->get('aktualisieren', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + $ticker_anzeigen = false; + if (count($saisons) != 0) { + $filter_saison_id = $saisons[0]->saison_id; + + $query = "SELECT #__sportsmanager_veranstaltung.*" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . (" AND saison_id = $filter_saison_id") + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + if (count($veranstaltungen) > 0) + $ticker_anzeigen = true; + } + + $pineingabe_anzeigen = false; + if ($pineingabe) { + $query = "SELECT IF(EXISTS(" + . "\n (" + . "\n SELECT *" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 " . kategorieFilter("AND t5.kategorie IN") . " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis OR NOT ISNULL(unbestaetigtes_ergebnis_id)) AND ((NOT ISNULL(t2.pin) AND t2.pin != '') OR (NOT ISNULL(t3.pin) AND t3.pin != ''))" + . "\n )" + . "\n ), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $pin_begegnungen = $db->loadResult(); + + if ($pin_begegnungen > 0) { + $pineingabe_anzeigen = true; + } + } + + if (isJson()) { + if ($jinput->get('jahr') != '' && $jinput->get('monat') != '') { + JSON_sportsmanager::JSON( + begegnungenAnzeigen(NULL, NULL, NULL, 0,false, false, false, '', false, true, $praesentation, $jinput->get('jahr'), $jinput->get('monat')) + ); + } else { + JSON_sportsmanager::JSON([ + 'running_matches' => begegnungenAnzeigen(NULL, NULL, NULL, 7, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true, $praesentation), + 'next_matches' => begegnungenAnzeigen(NULL, NULL, NULL, 14, true, false, true, JText::_('COM_SPORTSMANAGER_NEXT_MATCHES'), false, true, $praesentation), + 'finished_matches' => begegnungenAnzeigen(NULL, NULL, NULL, 7, false, true, true, JText::_('COM_SPORTSMANAGER_FINISHED_MATCHES'), true, true, $praesentation) + ]); + } + } else { + HTML_sportsmanager::aktuelleBegegnungenHeader($params->get('titel'), $params->get('beschreibung'), $ticker_anzeigen, $pineingabe_anzeigen); + + if ($praesentation == 0) { + if (begegnungenAnzeigen(NULL, NULL, NULL, 7, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true) > 0 && $aktualisieren == 0) + $aktualisieren = 60; + begegnungenAnzeigen(NULL, NULL, NULL, 7, false, true, true, JText::_('COM_SPORTSMANAGER_MATCHES_THE_LAST_7_DAYS'), true, true); + begegnungenAnzeigen(NULL, NULL, NULL, 14, true, false, true, JText::_('COM_SPORTSMANAGER_MATCHES_THE_NEXT_14_DAYS'), false, true); + administrationFooter(); + } else { + echo "\r\n"; + echo "\r\n\r\n\r\n\r\n
\r\n"; + if (begegnungenAnzeigen(NULL, NULL, NULL, 7, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true, $praesentation) == 0) + begegnungenAnzeigen(NULL, NULL, NULL, 14, true, false, true, JText::_('COM_SPORTSMANAGER_NEXT_MATCHES'), false, true, $praesentation); + else if ($aktualisieren == 0) + $aktualisieren = 60; + echo "\r\n"; + begegnungenAnzeigen(NULL, NULL, NULL, 7, false, true, true, JText::_('COM_SPORTSMANAGER_FINISHED_MATCHES'), true, true, $praesentation); + echo "
\r\n"; + } + } +} + +function veranstaltungen() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $praesentation = $jinput->get('praesentation', 0, 'INT'); + $aktualisieren = $jinput->get('aktualisieren', 0, 'INT'); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) { + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + } + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT #__sportsmanager_veranstaltung.*" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . (" AND saison_id = $filter_saison_id") + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $ticker_anzeigen = false; + if (count($veranstaltungen) > 0) { + $ticker_anzeigen = true; + } + + if (!isJson()) { + HTML_sportsmanager::veranstaltungenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id, $praesentation, $ticker_anzeigen); + } + $query = "SELECT #__sportsmanager_veranstaltung.*, #__sportsmanager_veranstalter.veranstalterbezeichnung," + . "\n EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id AND ISNULL(platz) OR platz = 0) AS platzierung_offen" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + if (isJson()) { + $json = []; + foreach ($veranstaltungen as $veranstaltung) { + $competition = [ + 'veranstaltung' => $veranstaltung, + 'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0), + 'tabelle' => NULL + ]; + if ($veranstaltung->tabellenwertung != 0) { + $competition['tabelle'] = tabelle($veranstaltung, $spieltag, true); + } + $json[] = $competition; + } + echo json_encode($json); + } else { + if ($praesentation == 1 || $praesentation == 2) + echo "\r\n\r\n"; + + foreach ($veranstaltungen as $veranstaltung) { + if ($praesentation == 1 || $praesentation == 2) + echo "\r\n"; + } + if ($praesentation == 1 || $praesentation == 2) + echo "\r\n"; + if ($praesentation == 2 || $praesentation == 3) { + if ($praesentation == 3) + echo "
\r\n"; + if ($veranstaltung->tabellenwertung != 0 && ($veranstaltung->tabellenwertung != -1 || !$veranstaltung->platzierung_offen)) { + HTML_sportsmanager::tabelleHeader($veranstaltung); + tabelle($veranstaltung, 0, false, $praesentation); + } else { + begegnungenAnzeigen($veranstaltung, NULL, NULL, 0, false, false, false, $veranstaltung->bezeichnung, false, true, $praesentation); + } + if ($praesentation == 1 || $praesentation == 2) + echo "
\r\n"; + echo "\r\n\r\n\r\n"; + } + + if ($praesentation == 1 || $praesentation == 2 || $praesentation == 3) + echo "\r\n\r\n
\r\n"; + if (begegnungenAnzeigen(NULL, NULL, NULL, 7, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true, $praesentation) == 0) + begegnungenAnzeigen(NULL, NULL, NULL, 14, true, false, true, JText::_('COM_SPORTSMANAGER_NEXT_MATCHES'), false, true, $praesentation); + echo "\r\n"; + begegnungenAnzeigen(NULL, NULL, NULL, 7, false, true, true, JText::_('COM_SPORTSMANAGER_FINISHED_MATCHES'), true, true, $praesentation); + echo "
\r\n"; + + if ($praesentation == 0) + administrationFooter(); + + if ($aktualisieren) + HTML_sportsmanager::automatischAktualisieren($aktualisieren); + } +} + +function veranstaltung() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $id = $jinput->get('veranstaltungid', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + settype($id, 'integer'); + $spieltag = $jinput->get('spieltag', 0, 'INT'); + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $id AND status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $veranstaltung = $rows[0]; + + if (isJson()) { + $json = [ + 'veranstaltung' => $veranstaltung, + 'begegnungen' => begegnungenAnzeigen($veranstaltung, NULL, NULL, 0) + ]; + if ($veranstaltung->tabellenwertung != 0) { + $table = tabelle($veranstaltung, $spieltag, true); + $json['tabelle'] = $table['tabelle']; + $json['modus'] = $table['modus']; + } + JSON_sportsmanager::JSON($json); + } else { + // Vorherige und nächste Veranstaltung ermitteln + $query = "SELECT #__sportsmanager_veranstaltung.*, #__sportsmanager_veranstalter.veranstalterbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE status > 0" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_veranstaltung_id = 0; + $naechste_veranstaltung_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->veranstaltung_id == $id) { + if ($i > 0) + $vorherige_veranstaltung_id = $rows[$i - 1]->veranstaltung_id; + if ($i + 1 < $n) + $naechste_veranstaltung_id = $rows[$i + 1]->veranstaltung_id; + break; + } + } + + // Anzeigen + HTML_sportsmanager::veranstaltungHeaderAlone($veranstaltung, $vorherige_veranstaltung_id, $naechste_veranstaltung_id, $filter_saison_id); + + if ($veranstaltung->tabellenwertung != 0) + tabelle($veranstaltung, $spieltag, true); + + begegnungenAnzeigen($veranstaltung, NULL, NULL, 0); + HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=veranstaltung_begegnungen_ical&id=' . $veranstaltung->veranstaltung_id)); + } +} + +function tabelle($veranstaltung, $spieltag, $alleine_angezeigt, $praesentation = 0) { + $db = & getDatabase(); + + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $modus = $rows[0]; + + if ($veranstaltung->tabellenwertung > 0) { + // Spieltage ermitteln, an denen schon eine Begegnung ausgetragen wurde + $query = "SELECT DISTINCT spieltag" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id)" + . "\n INNER JOIN #__sportsmanager_team ON heim_team_id = team_id" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND (heim_spielpunkte != 0 OR gast_spielpunkte != 0) AND ISNULL(#__sportsmanager_unbestaetigtes_ergebnis.begegnung_id)" + . "\n ORDER BY spieltag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieltage = $db->loadObjectList(); + + $aktueller_spieltag = count($spieltage) > 0 ? $spieltage[0]->spieltag : 0; + if ($spieltag == 0 || $veranstaltung->tabellenwertung >= 21) + $spieltag = $aktueller_spieltag; + + if ($spieltag == $aktueller_spieltag) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id" + . "\n ORDER BY platz, teamname"; + } else { + $query = "SELECT verein_id, teamname, zusatzpunkte," + . "\n werte.*," + . "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " + COALESCE(zusatzpunkte, 0) AS gesamtpunkte," + . "\n werte.siege * " . ($veranstaltung->tabellenwertung <= 3 ? "2" : ($veranstaltung->tabellenwertung <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung <= 6 ? " + werte.unentschieden" : "") . " AS begegnungspunkte," + . "\n werte.punkte_gewonnen - werte.punkte_verloren AS punkte_differenz," + . "\n IF(werte.punkte_verloren = 0, -1, werte.punkte_gewonnen / werte.punkte_verloren) AS punkte_quotient," + . "\n werte.spielpunkte_gewonnen - werte.spielpunkte_verloren AS spielpunkte_differenz," + . "\n IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren) AS spielpunkte_quotient" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN" + . "\n (SELECT t1.team_id," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte > tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte > tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS siege," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND (tt1.heim_team_id = t1.team_id OR tt1.gast_team_id = t1.team_id) AND tt1.heim_spielpunkte = tt1.gast_spielpunkte AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS unentschieden," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND ((tt1.heim_team_id = t1.team_id AND tt1.heim_spielpunkte < tt1.gast_spielpunkte) OR (tt1.gast_team_id = t1.team_id AND tt1.gast_spielpunkte < tt1.heim_spielpunkte)) AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)) AS niederlagen," + . "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_gewonnen," + . "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS punkte_verloren," + . "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen," + . "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.heim_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS tt1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS tt2 ON tt1.begegnung_id = tt2.begegnung_id WHERE ISNULL(tt2.unbestaetigtes_ergebnis_id)" . ($spieltag > 0 ? " AND tt1.spieltag <= $spieltag" : "") . " AND tt1.gast_team_id = t1.team_id AND (tt1.heim_punkte != 0 OR tt1.gast_punkte != 0)), 0)) AS spielpunkte_verloren" + . "\n FROM #__sportsmanager_team AS t1 WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)" + . "\n AS werte USING (team_id)" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; + if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7) + $query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8) + $query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 10) + $query .= "\n ORDER BY spielpunkte_differenz DESC, punkte_differenz DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 11) + $query .= "\n ORDER BY spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; + else + $query .= "\n ORDER BY gesamtpunkte DESC, teamname"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + if (isJson()) { + return JSON_sportsmanager::tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, $praesentation); + } else { + HTML_sportsmanager::tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, $praesentation); + } + } else { + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id" + . "\n ORDER BY ISNULL(platz), platz, teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (isJson()) { + return JSON_sportsmanager::tabelleEigeneAnzeigen($veranstaltung, $modus, $teams, $alleine_angezeigt, $praesentation); + } else { + HTML_sportsmanager::tabelleEigeneAnzeigen($veranstaltung, $modus, $teams, $alleine_angezeigt, $praesentation); + } + } +} + +function veranstaltungenTicker($aktuelle_saison_anzeigen = false) { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $type = $jinput->get('type', '', 'RAW'); + $day = $jinput->get('day', '', 'RAW'); + $currentpage = $jinput->get('currentpage', '', 'RAW'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + if ($aktuelle_saison_anzeigen) { + $filter_saison_id = $saisons[0]->saison_id; + } else { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + } else { + $filter_saison_id = 0; + } + + $query = "SELECT #__sportsmanager_veranstaltung.veranstaltung_id, ticker_logo_url" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . (" AND saison_id = $filter_saison_id"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $id = null; + $logo_url = null; + $bild_identisch = true; + foreach ($veranstaltungen as $veranstaltung) { + if ($id == null) { + $id = $veranstaltung->veranstaltung_id; + $logo_url = $veranstaltung->ticker_logo_url; + continue; + } + if ($logo_url != $veranstaltung->ticker_logo_url || !bildIdentisch("mannschaftswettbewerbe/ticker_logo", $id, "mannschaftswettbewerbe/ticker_logo", $veranstaltung->veranstaltung_id)) { + $id = null; + $logo_url = null; + $bild_identisch = false; + break; + } + } + + HTML_sportsmanager_ticker::veranstaltungenTicker($id, $logo_url); + jexit(); +} + +function veranstaltungenTickerDaten($aktuelle_saison_anzeigen = false) { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $type = $jinput->get('type', '', 'RAW'); + $day = $jinput->get('day', '', 'RAW'); + $currentpage = $jinput->get('currentpage', '', 'RAW'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + if ($aktuelle_saison_anzeigen) { + $filter_saison_id = $saisons[0]->saison_id; + } else { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + } else { + $filter_saison_id = 0; + } + + if (strstr($type, 'matchdetail') !== false) { + $veranstaltungen = NULL; + $tabellen = NULL; + $begegnung_spiele = NULL; + $veranstaltung_elimination_index = -1; + $details = explode('matchdetail', $type); + if (count($details) < 2 || !ctype_digit($details[1])) + jexit(); + $begegnung_id = $details[1]; + + // Begegnung ermitteln + $query = "SELECT t1.*, t2.teamname AS heim_name, t2.verein_id AS heim_verein_id, t3.teamname AS gast_name, t3.verein_id AS gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + // . "\n IF(TIMESTAMPDIFF(SECOND, (SELECT MAX(eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id AND aktion IN (6, 7, 8, 9)), NOW()) <= 45, 1, 0) AS gerade_aktualisiert," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t1.begegnung_id = $begegnung_id AND t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . (" AND saison_id = $filter_saison_id"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + if (count($begegnungen) < 1) + die("Wrong id!"); + $begegnung = $begegnungen[0]; + + // Spiele ermitteln + $query = "SELECT t1.*, theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname, theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname, tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname, tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname, " + . "mheim1.mitglied_von_team_id AS heim_spieler_1_mitglied_id, mheim2.mitglied_von_team_id AS heim_spieler_2_mitglied_id, " + . "mgast1.mitglied_von_team_id AS gast_spieler_1_mitglied_id, mgast2.mitglied_von_team_id AS gast_spieler_2_mitglied_id, " + . "theim1.bild_ausblenden AS heim_spieler_1_bild_ausblenden, theim2.bild_ausblenden AS heim_spieler_2_bild_ausblenden, " + . "tgast1.bild_ausblenden AS gast_spieler_1_bild_ausblenden, tgast2.bild_ausblenden AS gast_spieler_2_bild_ausblenden" + . "\n FROM #__sportsmanager_teamspiel AS t1" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = t1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mheim1 ON mheim1.team_id = $begegnung->heim_team_id AND mheim1.spieler_id = t1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = t1.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mheim2 ON mheim2.team_id = $begegnung->heim_team_id AND mheim2.spieler_id = t1.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = t1.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mgast1 ON mgast1.team_id = $begegnung->gast_team_id AND mgast1.spieler_id = t1.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = t1.gast_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mgast2 ON mgast2.team_id = $begegnung->gast_team_id AND mgast2.spieler_id = t1.gast_spieler_2_id" + . "\n WHERE begegnung_id = $begegnung_id" + . "\n GROUP BY teamspiel_id" + . "\n ORDER BY teamspiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnung_spiele = $db->loadObjectList(); + } else { + $begegnung_spiele = NULL; + $query = "SELECT #__sportsmanager_veranstaltung.*, #__sportsmanager_veranstalter.veranstalterbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") . (" AND saison_id = $filter_saison_id") + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $veranstaltung_elimination_index = -1; + foreach ($veranstaltungen as $index => $veranstaltung) { + if ($veranstaltung->tabellenwertung == -1) { + if ($veranstaltung_elimination_index == -1) { + $veranstaltung_elimination_index = $index; + } else { + $veranstaltung_elimination_index = -1; + break; + } + } + } + + $tabellen = array(); + foreach ($veranstaltungen as $index => $veranstaltung) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND NOT ISNULL(platz) AND platz > 0" + . "\n ORDER BY platz, teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $tabellen[$index] = $db->loadObjectList(); + } + + $begegnungen = array(); + if ($type == "allmatches" || $type == "finmatches" || $type == "upcmatches" || $type == "runmatches") { + if ($type == "allmatches") { //if the tab all matches is clicked this script will be called with type='almatches' + $ausgetragene_filtern = false; + $zwischenergebnisse_filtern = false; + $auszutragende_filtern = false; + } elseif ($type == "finmatches") { + $ausgetragene_filtern = false; + $zwischenergebnisse_filtern = true; + $auszutragende_filtern = true; + } elseif ($type == "upcmatches") { + $ausgetragene_filtern = true; + $zwischenergebnisse_filtern = true; + $auszutragende_filtern = false; + } elseif ($type == "runmatches") { + $ausgetragene_filtern = true; + $zwischenergebnisse_filtern = false; + $auszutragende_filtern = true; + } + $query = "SELECT t1.*, t2.teamname AS heim_name, t2.verein_id AS heim_verein_id, t3.teamname AS gast_name, t3.verein_id AS gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + // . "\n IF(TIMESTAMPDIFF(SECOND, (SELECT MAX(eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id AND aktion IN (6, 7, 8, 9)), NOW()) <= 45, 1, 0) AS gerade_aktualisiert," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . (" AND saison_id = $filter_saison_id") . ($ausgetragene_filtern ? " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR (heim_punkte = 0 AND gast_punkte = 0) OR zwischenergebnis)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0 OR zwischenergebnis)" : "") . ($zwischenergebnisse_filtern ? " AND (ISNULL(unbestaetigtes_ergebnis_id) OR NOT zwischenergebnis)" : "") + . "\n ORDER BY IF(zwischenergebnis, 0, IF((heim_punkte = 0 AND gast_punkte = 0) OR (ISNULL(heim_punkte) AND ISNULL(gast_punkte)), 2, 1)), IF(zwischenergebnis OR (heim_punkte = 0 AND gast_punkte = 0) OR (ISNULL(heim_punkte) AND ISNULL(gast_punkte)), 0, t1.zeitpunkt) DESC, IF(zwischenergebnis OR (heim_punkte = 0 AND gast_punkte = 0) OR (ISNULL(heim_punkte) AND ISNULL(gast_punkte)), t1.zeitpunkt, 0), spieltag DESC, heim_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + } elseif ($type == "eliminations" && $veranstaltung_elimination_index != -1) { + $query = "SELECT t1.*, t2.teamname AS heim_name, t2.verein_id AS heim_verein_id, t3.teamname AS gast_name, t3.verein_id AS gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + // . "\n IF(TIMESTAMPDIFF(SECOND, (SELECT MAX(eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id AND aktion IN (6, 7, 8, 9)), NOW()) <= 45, 1, 0) AS gerade_aktualisiert," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . "\n WHERE t2.veranstaltung_id = " . $veranstaltungen[$veranstaltung_elimination_index]->veranstaltung_id + . "\n ORDER BY begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + } + } + + HTML_sportsmanager_ticker::veranstaltungenTickerDaten($type, $veranstaltungen, $tabellen, $begegnungen, $veranstaltung_elimination_index, $currentpage, $begegnung_spiele); + jexit(); +} + +function veranstaltungenTickerCSS() { + header("Content-type: text/css"); + HTML_sportsmanager_ticker::veranstaltungenTickerCSS(); + jexit(); +} + +function veranstaltungenTickerTimestamp($aktuelle_saison_anzeigen = false) { + $jinput = JFactory::getApplication()->input; + + $matches = $jinput->get('matches', '', 'RAW'); + $groups = $jinput->get('groups', '', 'RAW'); + + $db = & getDatabase(); + global $params; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $type = $jinput->get('type', '', 'RAW'); + $day = $jinput->get('day', '', 'RAW'); + $currentpage = $jinput->get('currentpage', '', 'RAW'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + if ($aktuelle_saison_anzeigen) { + $filter_saison_id = $saisons[0]->saison_id; + } else { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + } else { + $filter_saison_id = 0; + } + + if ($matches == "allmatches") { //if the tab all matches is clicked this script will be called with type='almatches' + $ausgetragene_filtern = false; + $zwischenergebnisse_filtern = false; + $auszutragende_filtern = false; + } elseif ($matches == "finmatches") { + $ausgetragene_filtern = false; + $zwischenergebnisse_filtern = true; + $auszutragende_filtern = true; + } elseif ($matches == "upcmatches") { + $ausgetragene_filtern = true; + $zwischenergebnisse_filtern = true; + $auszutragende_filtern = false; + } else { // if ($matches == "runmatches") { + $ausgetragene_filtern = true; + $zwischenergebnisse_filtern = false; + $auszutragende_filtern = true; + } + $query = "SELECT MAX(eingetragen)" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung_historie USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . (" AND saison_id = $filter_saison_id") . ($ausgetragene_filtern ? " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR (heim_punkte = 0 AND gast_punkte = 0) OR zwischenergebnis)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0 OR zwischenergebnis)" : "") . ($zwischenergebnisse_filtern ? " AND (ISNULL(unbestaetigtes_ergebnis_id) OR NOT zwischenergebnis)" : ""); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $matches_timestamp = $db->loadResult(); + + if (!empty($matches_timestamp)) { + if ($ausgetragene_filtern || $zwischenergebnisse_filtern || $auszutragende_filtern) { + $query = "SELECT MAX(eingetragen)" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_begegnung_historie USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . (" AND saison_id = $filter_saison_id"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $groups_timestamp = $db->loadResult(); + } else + $groups_timestamp = $matches_timestamp; + } + else { + $matches_timestamp = date("Y-m-d H:i"); + $groups_timestamp = $matches_timestamp; + } + + HTML_sportsmanager_ticker::veranstaltungenTickerTimestamp($matches_timestamp, $groups_timestamp); + jexit(); +} + +function begegnungenAnzeigen($veranstaltung, $verein_id, $spielort_id, $zeitfenster, $ausgetragene_filtern = false, $auszutragende_filtern = false, $zwischenergebnisse_filtern = false, $titel = "", $umgekehrte_reihenfolge = false, $aus_uebersicht = false, $praesentation = 0, $year = NULL, $month = NULL) { + $db = & getDatabase(); + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + +// $homeTeamSpielort = JFactory::getApplication()->input->getCmd('spielort_heim') == 1; +// var_dump($homeTeamSpielort); + + + if ($verein_id != NULL) { + $query = "SELECT t1.*, t2.teamname AS heim_name, t3.teamname AS gast_name, t2.teamgruppe_id as heim_teamgruppe, t3.teamgruppe_id as gast_teamgruppe, t2.verein_id as heim_verein_id, t3.verein_id as gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE NOT t4.zwischenergebnis AND tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren," + . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," + . "\n (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verantwortlich_team_id," + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . "\n WHERE t5.status > 0 AND (t2.verein_id = $verein_id OR t3.verein_id = $verein_id)" . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR NOT ISNULL(t4.unbestaetigtes_ergebnis_id) OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") . ($ausgetragene_filtern ? " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0 OR zwischenergebnis)" : "") . ($zwischenergebnisse_filtern ? " AND (ISNULL(unbestaetigtes_ergebnis_id) OR NOT zwischenergebnis)" : "") + . "\n ORDER BY t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + $modus = NULL; + } else if ($spielort_id != NULL) { + $query = "SELECT t1.*, t2.teamname AS heim_name, t3.teamname AS gast_name, t2.teamgruppe_id as heim_teamgruppe, t3.teamgruppe_id as gast_teamgruppe, t2.verein_id as heim_verein_id, t3.verein_id as gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE NOT t4.zwischenergebnis AND tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren," + . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," + . "\n (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verantwortlich_team_id," + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . "\n WHERE t5.status > 0 AND (t1.spielort_id = $spielort_id OR (ISNULL(t1.spielort_id) AND t2.heimspielort_id = $spielort_id))" . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR NOT ISNULL(t4.unbestaetigtes_ergebnis_id) OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") . ($ausgetragene_filtern ? " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0 OR zwischenergebnis)" : "") . ($zwischenergebnisse_filtern ? " AND (ISNULL(unbestaetigtes_ergebnis_id) OR NOT zwischenergebnis)" : "") + . "\n ORDER BY t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + $modus = NULL; + } else if ($veranstaltung == NULL) { + $homeTeamSpielort = JFactory::getApplication()->input->getCmd('spielort_heim') == 1; + $query = "SELECT t1.*, t2.teamname AS heim_name, t2.teamgruppe_id as heim_teamgruppe, t3.teamgruppe_id as gast_teamgruppe, t3.teamname AS gast_name, t2.verein_id as heim_verein_id, t3.verein_id as gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, t5.unterteilung, s1.name as spielort_name," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE NOT t4.zwischenergebnis AND tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren," + . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," + . "\n (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verantwortlich_team_id," + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON " . ($homeTeamSpielort ? "t2.heimspielort_id" : "t1.spielort_id" ) . " = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . ($year != NULL && $month != NULL + ? "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . " AND YEAR(zeitpunkt) = " . $year . " AND MONTH(zeitpunkt) = " . $month + : "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR NOT ISNULL(t4.unbestaetigtes_ergebnis_id) OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") + ) . ($ausgetragene_filtern ? " AND ((ISNULL(heim_punkte) AND ISNULL(gast_punkte)) OR zwischenergebnis)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0 OR zwischenergebnis)" : "") . ($zwischenergebnisse_filtern ? " AND (ISNULL(unbestaetigtes_ergebnis_id) OR NOT zwischenergebnis)" : "") + . "\n ORDER BY t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name"; + + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + $modus = NULL; + } else { + $homeTeamSpielort = JFactory::getApplication()->input->getCmd('spielort_heim') == 1; + $query = "SELECT t1.*, t2.teamname AS heim_name, t3.teamname AS gast_name, t2.teamgruppe_id as heim_teamgruppe, t3.teamgruppe_id as gast_teamgruppe, t2.verein_id as heim_verein_id, t3.verein_id as gast_verein_id, t4.unbestaetigtes_ergebnis_id, t4.zwischenergebnis, t4.vorgeschlagen as ergebnis_vorgeschlagen, t5.bezeichnung, t5.veranstaltung_id, s1.name as spielort_name," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND (tt1.berechtigt_team_id = t1.heim_team_id OR tt1.berechtigt_team_id = t1.gast_team_id)) AS berechtigt_fuer_team_eintragen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE NOT t4.zwischenergebnis AND tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren," + . "\n (SELECT vorschlagendes_team_id FROM #__sportsmanager_unbestaetigtes_ergebnis AS tt1 WHERE tt1.begegnung_id = t1.begegnung_id LIMIT 1) AS unbestaetigtes_ergebnis_team_id," +// Folgende zwei Zeilen machen die Datenbankabfrage langsam (etwa 3 Sekunden pro Zeile) + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," + . "\n (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verantwortlich_team_id," +// + . "\n IF(NOT ISNULL(t6.verschieberegel_id) AND (t6.vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= t6.vorlaufzeit_tage), 1, 0) AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON " . ($homeTeamSpielort ? "t2.heimspielort_id" : "t1.spielort_id" ) . " = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_verschieberegel AS t6 ON t5.verschieberegel_id = t6.verschieberegel_id" + . "\n WHERE t5.status > 0" . kategorieFilter("AND t5.kategorie IN") . " AND t2.veranstaltung_id = $veranstaltung->veranstaltung_id" . ($zeitfenster > 0 ? " AND (ABS(DATEDIFF(zeitpunkt, CURDATE())) <= $zeitfenster OR (heim_punkte = 0 AND gast_punkte = 0 AND (SELECT IF(aktion NOT IN (0, 3, 4), 0, 1) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) = 1))" : "") . ($ausgetragene_filtern ? " AND ISNULL(heim_punkte) AND ISNULL(gast_punkte)" : "") . ($auszutragende_filtern ? " AND (heim_punkte != 0 OR gast_punkte != 0)" : "") + . "\n ORDER BY " . ((($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) && $zeitfenster == 0) ? ("t1.spieltag" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", s1.name, ") : "") . "t1.zeitpunkt" . ($umgekehrte_reihenfolge ? " DESC" : "") . ", heim_name"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) + $modus = $rows[0]; + } + if (isJson()) { + for ($i = 0; $i < sizeof($begegnungen); $i++) { + $begegnungen[$i]->heim_bild = teamImage($begegnungen[$i]->heim_team_id, $begegnungen[$i]->heim_verein_id); + $begegnungen[$i]->gast_bild = teamImage($begegnungen[$i]->gast_team_id, $begegnungen[$i]->gast_verein_id); + $begegnungen[$i]->spieltag = Rundenbezeichnung($begegnungen[$i]->spieltag, $begegnungen[$i]->unterteilung == 0); + } + return $begegnungen; + } else { + HTML_sportsmanager::begegnungenAnzeigen($veranstaltung, $modus, $begegnungen, $zeitfenster, $titel, $aus_uebersicht, $praesentation); + return count($begegnungen); + } +} + +function turniere() { + global $params; + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE #__sportsmanager_turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + HTML_sportsmanager::turniereHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + $query = "SELECT *, GROUP_CONCAT(disziplintitel ORDER BY disziplintitel SEPARATOR ', ') AS disziplinen" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN ((SELECT turnier_id, turnierdisziplin_id, status, IF(COALESCE(kuerzel, '') <> '', kuerzel, disziplin) AS disziplintitel FROM #__sportsmanager_turnierdisziplin) AS turnierdisziplin) USING (turnier_id)" + . "\n WHERE turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n GROUP BY turnier_id" + . "\n ORDER BY #__sportsmanager_turnier.erster_tag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turniere = $db->loadObjectList(); + + HTML_sportsmanager::turniere($turniere); + + administrationFooter(); +} + +function turnierdisziplinen() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $details_anzeigen = currentUserHasAccessToDetails(); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + $turnier_id = $jinput->get('turnierid', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE #__sportsmanager_turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT #__sportsmanager_turnier.*" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE turnier_id = $turnier_id AND #__sportsmanager_turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0" . kategorieFilter("AND kategorie IN") . ")" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (empty($rows)) + die("Wrong id"); + $turnier = $rows[0]; + + $query = "SELECT *" + . ", (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AS teilnehmer" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE turnier_id = $turnier_id AND status > 0 AND EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n ORDER BY reihenfolge, disziplin, beginn"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplinen = $db->loadObjectList(); + + // Vorheriges und nächstes Turnier ermitteln + $query = "SELECT turnier_id" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE #__sportsmanager_turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n GROUP BY turnier_id" + . "\n ORDER BY #__sportsmanager_turnier.erster_tag DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_turnier_id = 0; + $naechste_turnier_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->turnier_id == $turnier_id) { + if ($i > 0) + $vorherige_turnier_id = $rows[$i - 1]->turnier_id; + if ($i + 1 < $n) + $naechste_turnier_id = $rows[$i + 1]->turnier_id; + break; + } + } + + HTML_sportsmanager::turnierdisziplinenHeader($turnier, $vorherige_turnier_id, $naechste_turnier_id); + + foreach ($disziplinen as $disziplin) { + HTML_sportsmanager::disziplinHeader($disziplin); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = 0 AND platz > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $platzierung_anzeigen = $db->loadResult() > 0; + + /* Abfrage war erheblich zu langsam bei großem Bestand + $meldungenSpielerIds = array(); + $meldungenSpielerNamen = array(); + $meldungenSpielerBilderAusblenden = array(); + $query = "SELECT *" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" + . ", (SELECT #__sportsmanager_turniermeldung_spieler.spieler_id FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS spieler_id1" + . ", (SELECT #__sportsmanager_turniermeldung_spieler.spieler_id FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS spieler_id2" + . ", (SELECT #__sportsmanager_spieler.bild_ausblenden FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS bild_ausblenden1" + . ", (SELECT #__sportsmanager_spieler.bild_ausblenden FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS bild_ausblenden2" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = '0' AND platz <= 3" + . "\n ORDER BY platz, name1, name2"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $meldungen = $db->loadObjectList(); + + foreach ($meldungen as $meldung) { + $meldungenSpielerIds[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array($meldung->spieler_id1) : array($meldung->spieler_id1, $meldung->spieler_id2); + $meldungenSpielerNamen[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array(NichtLeererString($meldung->name1)) : array(NichtLeererString($meldung->name1), NichtLeererString($meldung->name2)); + $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array($meldung->bild_ausblenden1) : array($meldung->bild_ausblenden1, $meldung->bild_ausblenden2); + } + */ + $query = "SELECT platz, turniermeldung_id" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = '0' AND platz <= 3" + . "\n ORDER BY platz, turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen = $db->loadObjectList(); + + $query = "SELECT turniermeldung_id, spieler_id, geschlecht, bild_ausblenden, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = '0' AND platz <= 3" + . "\n ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerIds = array(); + $meldungenSpielerNamen = array(); + $meldungenSpielerGeschlechter = array(); + $meldungenSpielerBilderAusblenden = array(); + foreach ($meldungenSpieler as $s) { + $turniermeldung_id = $s->turniermeldung_id; + $spielerId = $s->spieler_id; + $spielername = $s->nachname . ", " . $s->vorname; + $spielerGeschlecht = $s->geschlecht; + $spielerBilderAusblenden = $s->bild_ausblenden; + if (!isset($meldungenSpielerIds[$turniermeldung_id])) { + $meldungenSpielerIds[$turniermeldung_id] = array(); + $meldungenSpielerNamen[$turniermeldung_id] = array(); + $meldungenSpielerGeschlechter[$turniermeldung_id] = array(); + $meldungenSpielerBilderAusblenden[$turniermeldung_id] = array(); + } + array_push($meldungenSpielerIds[$turniermeldung_id], $spielerId); + array_push($meldungenSpielerNamen[$turniermeldung_id], $spielername); + array_push($meldungenSpielerGeschlechter[$turniermeldung_id], $spielerGeschlecht); + array_push($meldungenSpielerBilderAusblenden[$turniermeldung_id], $spielerBilderAusblenden); + } + + HTML_sportsmanager::turnierdisziplinen($disziplin, $meldungen, $meldungenSpielerIds, $meldungenSpielerGeschlechter, $meldungenSpielerNamen, $meldungenSpielerBilderAusblenden, $platzierung_anzeigen, $details_anzeigen); + } +} + +function turnierdisziplin() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + + $details_anzeigen = currentUserHasAccessToDetails(); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE #__sportsmanager_turnierdisziplin.status > 0" . kategorieFilter("AND kategorie IN") . " AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + /* + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier, #__sportsmanager_turnierdisziplin" + . "\n WHERE EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AND" + . "\n #__sportsmanager_turnierdisziplin.turnierdisziplin_id = $id AND #__sportsmanager_turnierdisziplin.status > 0 AND #__sportsmanager_turnier.turnier_id = #__sportsmanager_turnierdisziplin.turnier_id"; + */ + $query = "SELECT *" + . ", (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AS teilnehmer" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE turnierdisziplin_id = $id AND status > 0 AND EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n ORDER BY reihenfolge, disziplin, beginn"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $disziplin = $rows[0]; + $turnierid = $disziplin->turnier_id; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnier_id)" + . "\n WHERE turnier_id = $disziplin->turnier_id AND turnierdisziplin_id = $id AND status > 0 AND EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n LIMIT 1"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $turnier = $rows[0]; + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = 0 AND platz > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $platzierung_anzeigen = $db->loadResult() > 0; + + $meldungen = array(); + foreach (array(0, 1, 2, 3, 10) as $rundenstufe) { + /* Abfrage war erheblich zu langsam bei großem Bestand + $query = "SELECT *" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS name1" + . ", (SELECT CONCAT_WS(', ', #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_turniermeldung_spieler_name.vorname) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS name2" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS verknuepft1" + . ", (SELECT IF(ISNULL(#__sportsmanager_turniermeldung_spieler.spieler_id), 0, 1) FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS verknuepft2" + . ", (SELECT #__sportsmanager_turniermeldung_spieler.spieler_id FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS spieler_id1" + . ", (SELECT #__sportsmanager_turniermeldung_spieler.spieler_id FROM #__sportsmanager_turniermeldung_spieler WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS spieler_id2" + . ", (SELECT #__sportsmanager_spieler.bild_ausblenden FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 0, 1) AS bild_ausblenden1" + . ", (SELECT #__sportsmanager_spieler.bild_ausblenden FROM #__sportsmanager_turniermeldung_spieler LEFT JOIN #__sportsmanager_spieler USING (spieler_id) WHERE #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id ORDER BY turniermeldung_spieler_id LIMIT 1, 1) AS bild_ausblenden2" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY platz, name1, name2"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $meldungen[$rundenstufe] = $db->loadObjectList(); + + foreach ($meldungen[$rundenstufe] as $meldung) { + $meldungenSpielerIds[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array($meldung->spieler_id1) : array($meldung->spieler_id1, $meldung->spieler_id2); + $meldungenSpielerNamen[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array(NichtLeererString($meldung->name1)) : array(NichtLeererString($meldung->name1), NichtLeererString($meldung->name2)); + $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id] = $disziplin->typ == 0 ? array($meldung->bild_ausblenden1) : array($meldung->bild_ausblenden1, $meldung->bild_ausblenden2); + } + */ + $query = "SELECT platz, turniermeldung_id" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY platz, turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen[$rundenstufe] = $db->loadObjectList(); + } + + $query = "SELECT turniermeldung_id, spieler_id, geschlecht, bild_ausblenden, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE turnierdisziplin_id = $id" + . "\n ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerIds = array(); + $meldungenSpielerNamen = array(); + $meldungenSpielerGeschlechter = array(); + $meldungenSpielerBilderAusblenden = array(); + foreach ($meldungenSpieler as $s) { + $turniermeldung_id = $s->turniermeldung_id; + $spielerId = $s->spieler_id; + $spielername = $s->nachname . ", " . $s->vorname; + $spielerGeschlecht = $s->geschlecht; + $spielerBilderAusblenden = $s->bild_ausblenden; + if (!isset($meldungenSpielerIds[$turniermeldung_id])) { + $meldungenSpielerIds[$turniermeldung_id] = array(); + $meldungenSpielerNamen[$turniermeldung_id] = array(); + $meldungenSpielerGeschlechter[$turniermeldung_id] = array(); + $meldungenSpielerBilderAusblenden[$turniermeldung_id] = array(); + } + array_push($meldungenSpielerIds[$turniermeldung_id], $spielerId); + array_push($meldungenSpielerNamen[$turniermeldung_id], $spielername); + array_push($meldungenSpielerGeschlechter[$turniermeldung_id], $spielerGeschlecht); + array_push($meldungenSpielerBilderAusblenden[$turniermeldung_id], $spielerBilderAusblenden); + } + + $spiele = array(); + foreach (array(1, 2, 3, 10) as $rundenstufe) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $id AND rundenstufe = '$rundenstufe'" + . "\n ORDER BY runde DESC, spiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele[$rundenstufe] = $db->loadObjectList(); + } + + // Vorherige und nächste Turnierdisziplin ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE turnier_id = $turnierid AND status > 0 AND EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)" + . "\n ORDER BY reihenfolge, disziplin, beginn"; + /* + $query = "SELECT turnier_id, turnierdisziplin_id" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE " . kategorieFilter("kategorie IN", "AND ") . "EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AND" + . "\n turnier_id = $turnierid AND status > 0" + . "\n ORDER BY reihenfolge, disziplin, kategorie, beginn"; + */ + /* + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n LEFT JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n WHERE " . kategorieFilter("kategorie IN", "AND ") . "(SELECT COUNT(*) FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) > 0" + . " AND #__sportsmanager_turnierdisziplin.status > 0" + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY #__sportsmanager_turnier.erster_tag DESC, reihenfolge, #__sportsmanager_turnierdisziplin.disziplin, kategorie, beginn"; // LIMIT 6, 18446744073709551615 + */ + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_turnierdisziplin_id = 0; + $naechste_turnierdisziplin_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->turnierdisziplin_id == $id) { + if ($i > 0) + $vorherige_turnierdisziplin_id = $rows[$i - 1]->turnierdisziplin_id; + if ($i + 1 < $n) + $naechste_turnierdisziplin_id = $rows[$i + 1]->turnierdisziplin_id; + break; + } + } + + HTML_sportsmanager::turnierdisziplin($turnier, $disziplin, $meldungen, $meldungenSpielerIds, $meldungenSpielerGeschlechter, $meldungenSpielerNamen, $meldungenSpielerBilderAusblenden, $spiele, $vorherige_turnierdisziplin_id, $naechste_turnierdisziplin_id, $platzierung_anzeigen, $filter_saison_id, $details_anzeigen); +} + +function spieler() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $details_anzeigen = currentUserHasAccessToDetails(); + $beginn = $jinput->get('beginn', 0, 'INT'); + $filter = $jinput->get('filter', '', 'RAW'); + $kategorie = $jinput->get('kategorie', '', 'RAW'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $einstufungid = $jinput->get('einstufungid', 0, 'INT'); + $sortierung = $jinput->get('sortierung', '', 'RAW'); + if ($sortierung == "vorname") + $sortierung_query = "vorname, nachname"; + else if ($sortierung == "geschlecht") + $sortierung_query = "geschlecht, nachname, vorname"; + else if ($sortierung == "kategorie") + $sortierung_query = "kategorie, nachname, vorname"; + else if ($sortierung == "pseudonym") + $sortierung_query = "ISNULL(pseudonym) OR pseudonym = '', pseudonym, nachname, vorname"; + else if ($sortierung == "elo_einzel") + $sortierung_query = "elo_einzel DESC, nachname, vorname"; + else if ($sortierung == "elo_einzel_spiele") + $sortierung_query = "elo_einzel_spiele DESC, nachname, vorname"; + else if ($sortierung == "elo_doppel") + $sortierung_query = "elo_doppel DESC, nachname, vorname"; + else if ($sortierung == "elo_doppel_spiele") + $sortierung_query = "elo_doppel_spiele DESC, nachname, vorname"; + else + $sortierung_query = "nachname, vorname"; + + if ($veranstaltungid != 0) { + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid AND status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + $veranstaltungid = 0; + } + + if ($veranstalterid != 0) { + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstalter WHERE veranstalter_id = $veranstalterid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + $veranstalterid = 0; + } + + $search = stripslashes($filter); + /* Ursprüngliche Methode um Suchstring mit Wildcards zuzulassen */ + // $searchEscapedWildcards = strpos($search, "*") !== false ? ($db->escape( trim( mb_strtolower( str_replace("*", "%", $search), 'UTF-8' ) ) )) : ("%" . $db->escape( trim( mb_strtolower( $search, 'UTF-8' ) ) ) . "%"); + /* Keine Wildcards im Suchstring zulassen */ + $searchEscapedWildcards = $db->escape("%" . trim(mb_strtolower(str_replace("%", "\\%", str_replace("_", "\\_", $search)), 'UTF-8')) . "%"); + $searchEscaped = $db->escape(trim($search)); + + // Gesamtzahl an Spielern ermitteln + $jahr = date("Y"); + $kategorieFilter = kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN"); + $veranstalterFilter = $veranstalterid != 0 ? " AND #__sportsmanager_veranstalter.veranstalter_id = $veranstalterid " : ""; + + $query = "SELECT COUNT(*)"; + $query .= "\n FROM #__sportsmanager_spieler"; + if (!empty($kategorieFilter) || !empty($veranstalterFilter)) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($veranstaltungid != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if (!empty($kategorie)) + $query .= " AND IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) = '" . $db->escape($kategorie) . "'"; + if (!empty($search)) + $query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; + if ($einstufungid != 0) + $query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahl_gefundener_spieler = $db->loadResult(); + + // Anzuzeigende Spieler ermitteln + if ($beginn < 0 || $beginn >= $anzahl_gefundener_spieler) + $beginn = 0; + + if (strlen(trim($search)) >= 3 && $anzahl_gefundener_spieler <= 50) { + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, bild_ausblenden, elo_einzel, elo_doppel, elo_einzel_spiele, elo_doppel_spiele, einstufung_allgemein_id, einstufung_einzel_id, einstufung_doppel_id," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie"; + if ($veranstaltungid != 0) + $query .= ", teamname"; + $query .= ", vereinsname, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_spieler"; + if (!empty($kategorieFilter) || !empty($veranstalterFilter)) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($veranstaltungid != 0) + $query .= "\n INNER JOIN (SELECT spieler_id, teamname FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)"; + $query .= "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if (!empty($search)) + $query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; + if ($einstufungid != 0) + $query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)"; + if (!empty($kategorie)) + $query .= "\n HAVING kategorie = '" . $db->escape($kategorie) . "'"; + $query .= "\n ORDER BY " . $sortierung_query + . "\n LIMIT $beginn, 50"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + } else { + $spieler = array(); + } + + // Veranstaltungen ermitteln + $query = "SELECT #__sportsmanager_veranstaltung.*" + . "\n FROM #__sportsmanager_veranstaltung, #__sportsmanager_mitglied_von_team" + . "\n WHERE status > 0 AND CURDATE() BETWEEN erster_tag AND letzter_tag" + . "\n GROUP BY veranstaltung_id" + . "\n ORDER BY Year(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + // Einstufungen ermitteln + $query = "SELECT einstufung_id, bezeichnung" + . "\n FROM #__sportsmanager_einstufung" + . "\n ORDER BY prioritaet"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $einstufungen = array(); + foreach ($rows as $row) + $einstufungen[$row->einstufung_id] = $row->bezeichnung; + + // Veranstalter ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstalter" + . "\n WHERE " . kategorieFilter("#__sportsmanager_veranstalter.kategorie IN", "AND ") . "(SELECT COUNT(*) FROM #__sportsmanager_verein WHERE NOT ausgetreten AND #__sportsmanager_verein.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id) > 0" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + // Statistiken ermitteln + $statistik = array(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT(ISNULL(pseudonym)) AND pseudonym != ''), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["pseudonym"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE NOT ausgetreten), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["verein"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(einstufung_allgemein_id)), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["einstufung_allgemein"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(einstufung_einzel_id)), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["einstufung_einzel"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(einstufung_doppel_id)), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["einstufung_doppel"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_verein WHERE NOT ausgetreten AND NOT ISNULL(veranstalter_id)), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["veranstalter"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE elo_einzel_spiele > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["elo_einzel"] = $db->loadResult() && einstellungswert("spielerliste_elo") == "1"; + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE elo_doppel_spiele > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["elo_doppel"] = $db->loadResult() && einstellungswert("spielerliste_elo") == "1"; + + HTML_sportsmanager::spieler($params->get('titel'), $params->get('beschreibung'), $spieler, $sortierung, $statistik, $beginn, $anzahl_gefundener_spieler, $kategorie, $filter, $veranstaltungid, $einstufungid, $veranstaltungen, $veranstalterid, $veranstalter, $einstufungen, $details_anzeigen); + + administrationFooter(); +} + +function spielerDetails() { + $db = & getDatabase(); + global $params; + global $content; + $jinput = JFactory::getApplication()->input; + + $beginn = $jinput->get('beginn', 0, 'INT'); + $kategorie = $jinput->get('kategorie', '', 'RAW'); + $filter = $jinput->get('filter', '', 'RAW'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + $veranstalterid = $jinput->get('veranstalterid', 0, 'INT'); + $einstufungid = $jinput->get('einstufungid', 0, 'INT'); + $sortierung = $jinput->get('sortierung', '', 'RAW'); + $elo_detailliert = $jinput->get('elo_detailliert', 0, 'INT'); + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $jahr = date("Y"); + $elo_anzeigen = einstellungswert("spielerliste_elo") == "1" || einstellungswert("spielerliste_elo") == "2"; + $berechtigt_spieler_aendern = benutzerZugriff("spieler_aendern"); + + $details_anzeigen = currentUserHasAccessToDetails(); + $unabhaengige_ansicht = $content != "players" || $jinput->get('ua', 0, 'INT') != 0; + + if ($veranstaltungid != 0 && $veranstaltungid != -1) { + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + $veranstaltungid = 0; + } + + $search = stripslashes($filter); + $searchEscapedWildcards = $db->escape("%" . trim(mb_strtolower(str_replace("%", "\\%", str_replace("_", "\\_", $search)), 'UTF-8')) . "%"); + $searchEscaped = $db->escape(trim($search)); + + // Spielerdaten ermitteln + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, spielernr, lizenznr, pseudonym, bild_ausblenden, elo_einzel, elo_einzel_spiele, elo_doppel, elo_doppel_spiele, erstmals_gespielt, zuletzt_gespielt, einstufung_allgemein_id, einstufung_einzel_id, einstufung_doppel_id," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE #__sportsmanager_spieler.spieler_id = $id" . ($berechtigt_spieler_aendern ? "" : " AND NOT ISNULL(aktueller_verein_id)"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + redirectSportsManagerURL(NULL, "Zum Spieler sind in dieser Ansicht keine Daten vorhanden."); + return; + } + $spieler = $rows[0]; + + // Aktive Vereinsmitgliedschaften ermitteln + $query = "SELECT vereinsname" + . "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" + . "\n ORDER BY vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + // Aktive Organisationen ermitteln + $query = "SELECT veranstalterbezeichnung" + . "\n FROM #__sportsmanager_mitglied_von_verein, #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE #__sportsmanager_mitglied_von_verein.spieler_id = $id AND NOT #__sportsmanager_verein.ausgetreten AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND #__sportsmanager_verein.verein_id = #__sportsmanager_mitglied_von_verein.verein_id" + . "\n ORDER BY veranstalterbezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstalter = $db->loadObjectList(); + + // Einstufungen ermitteln + $query = "SELECT einstufung_id, bezeichnung" + . "\n FROM #__sportsmanager_einstufung" + . "\n ORDER BY prioritaet"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $einstufungen = array(); + foreach ($rows as $row) + $einstufungen[$row->einstufung_id] = $row->bezeichnung; + + if ($unabhaengige_ansicht || strlen(trim($search)) < 3) { + $vorheriger_spieler_id = 0; + $naechster_spieler_id = 0; + } else { + $kategorieFilter = kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN"); + $veranstalterFilter = $veranstalterid != 0 ? " AND #__sportsmanager_veranstalter.veranstalter_id = $veranstalterid " : ""; + + $query = "SELECT COUNT(*)"; + $query .= "\n FROM #__sportsmanager_spieler"; + if (!empty($kategorieFilter) || !empty($veranstalterFilter)) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($veranstaltungid != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if (!empty($kategorie)) + $query .= " AND IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) = '" . $db->escape($kategorie) . "'"; + if (!empty($search)) + $query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; + if ($einstufungid != 0) + $query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahl_gefundener_spieler = $db->loadResult(); + + if ($anzahl_gefundener_spieler <= 50) { + // Vorherigen und nächsten Spieler ermitteln + if ($sortierung == "vorname") + $sortierung_query = "vorname, nachname"; + else if ($sortierung == "geschlecht") + $sortierung_query = "geschlecht, nachname, vorname"; + else if ($sortierung == "kategorie") + $sortierung_query = "kategorie, nachname, vorname"; + else if ($sortierung == "pseudonym") + $sortierung_query = "ISNULL(pseudonym) OR pseudonym = '', pseudonym, nachname, vorname"; + else if ($sortierung == "elo_einzel") + $sortierung_query = "elo_einzel DESC, nachname, vorname"; + else if ($sortierung == "elo_einzel_spiele") + $sortierung_query = "elo_einzel_spiele DESC, nachname, vorname"; + else if ($sortierung == "elo_doppel") + $sortierung_query = "elo_doppel DESC, nachname, vorname"; + else if ($sortierung == "elo_doppel_spiele") + $sortierung_query = "elo_doppel_spiele DESC, nachname, vorname"; + else + $sortierung_query = "nachname, vorname"; + + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, elo_einzel, elo_doppel, elo_einzel_spiele, elo_doppel_spiele," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler"; + if (!empty($kategorieFilter) || !empty($veranstalterFilter)) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $veranstalterFilter . $kategorieFilter . "GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)"; + if ($veranstaltungid != 0) + $query .= "\n INNER JOIN (SELECT spieler_id FROM #__sportsmanager_veranstaltung INNER JOIN #__sportsmanager_team USING (veranstaltung_id) INNER JOIN #__sportsmanager_mitglied_von_team USING (team_id) WHERE status > 0 AND veranstaltung_id = $veranstaltungid AND NOT ausgetreten GROUP BY spieler_id ORDER BY YEAR(letzter_tag) DESC, reihenfolge, letzter_tag DESC, bezeichnung, teamname) AS mannschaftsmitglied USING (spieler_id)"; + $query .= "\n WHERE NOT ISNULL(aktueller_verein_id)"; + if (!empty($search)) + $query .= "\n AND (CONCAT_WS(', ', nachname, vorname) LIKE '$searchEscapedWildcards' OR CONCAT_WS(' ', vorname, nachname) LIKE '$searchEscapedWildcards' OR spielernr = '$searchEscaped' OR lizenznr = '$searchEscaped')"; + if ($einstufungid != 0) + $query .= "\n AND (einstufung_allgemein_id = $einstufungid OR einstufung_einzel_id = $einstufungid OR einstufung_doppel_id = $einstufungid)"; + if (!empty($kategorie)) + $query .= "\n HAVING kategorie = '" . $db->escape($kategorie) . "'"; + $query .= "\n ORDER BY " . $sortierung_query + . "\n LIMIT $beginn, 50"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorheriger_spieler_id = 0; + $naechster_spieler_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->spieler_id == $id) { + if ($i > 0) + $vorheriger_spieler_id = $rows[$i - 1]->spieler_id; + if ($i + 1 < $n) + $naechster_spieler_id = $rows[$i + 1]->spieler_id; + break; + } + } + } else { + $vorheriger_spieler_id = 0; + $naechster_spieler_id = 0; + } + } + + // Spielernamen ermitteln + $query = "SELECT spieler_id, vorname, nachname" + . "\n FROM #__sportsmanager_spieler"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $spielerNamen = array(); + foreach ($rows as $row) + $spielerNamen[$row->spieler_id] = $row->nachname . ", " . $row->vorname; + + // Teamnamen ermitteln + $query = "SELECT team_id, teamname" + . "\n FROM #__sportsmanager_team"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $teamNamen = array(); + foreach ($rows as $row) + $teamNamen[$row->team_id] = $row->teamname; + + // Veranstaltungsbezeichnungen ermitteln + $query = "SELECT veranstaltung_id, bezeichnung" + . "\n FROM #__sportsmanager_veranstaltung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $veranstaltungBezeichnungen = array(); + foreach ($rows as $row) + $veranstaltungBezeichnungen[$row->veranstaltung_id] = $row->bezeichnung; + + // Turnierdisziplinenbezeichnungen ermitteln + $query = "SELECT turnierdisziplin_id, disziplin, turnierbezeichnung" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_turnier USING (turnier_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $turnierdisziplinBezeichnungen = array(); + foreach ($rows as $row) + $turnierdisziplinBezeichnungen[$row->turnierdisziplin_id] = $row->turnierbezeichnung; + + // Individualwettbewerbsbezeichnungen ermitteln + $query = "SELECT individualwettbewerb_id, bezeichnung" + . "\n FROM #__sportsmanager_individualwettbewerb"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + $individualwettbewerbBezeichnungen = array(); + foreach ($rows as $row) + $individualwettbewerbBezeichnungen[$row->individualwettbewerb_id] = $row->bezeichnung; + + // Ranglistenplatzierungen ermitteln + $query = "SELECT bezeichnung, saisonbezeichnung, platz, punkte," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id) AS teilnehmer" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n INNER JOIN #__sportsmanager_rangliste USING (rangliste_id)" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE #__sportsmanager_rangliste.status > 0 AND #__sportsmanager_rangliste_punkte.spieler_id = $id AND #__sportsmanager_rangliste.rangliste_id = #__sportsmanager_rangliste_punkte.rangliste_id" + . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglistenplatzierungen = $db->loadObjectList(); + + // Turnierplatzierungen ermitteln + $query = "SELECT *, saisonbezeichnung," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung WHERE turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AS teilnehmer" + . "\n FROM #__sportsmanager_turniermeldung_spieler, #__sportsmanager_turniermeldung, #__sportsmanager_turnierdisziplin, #__sportsmanager_turnier" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE #__sportsmanager_turniermeldung_spieler.spieler_id = $id AND #__sportsmanager_turniermeldung_spieler.turniermeldung_id = #__sportsmanager_turniermeldung.turniermeldung_id AND #__sportsmanager_turnierdisziplin.status > 0 AND rundenstufe = 0 AND platz > 0 AND #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND #__sportsmanager_turnierdisziplin.turnier_id = #__sportsmanager_turnier.turnier_id" +// . "\n ORDER BY saisonbezeichnung DESC, reihenfolge, disziplin, kategorie, DATE(beginn) DESC"; + . "\n ORDER BY saisonbezeichnung DESC, erster_tag DESC, turnierbezeichnung, reihenfolge, disziplin"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierplatzierungen = $db->loadObjectList(); + + // Teammitgliedschaften ermitteln + $query = "SELECT t1.teamname, t3.bezeichnung, saisonbezeichnung," + . " GROUP_CONCAT(DISTINCT t3.bezeichnung ORDER BY t3.reihenfolge, t3.letzter_tag DESC, t3.bezeichnung, t3.kategorie DESC SEPARATOR ', ') AS wettbewerbe" + . "\n FROM #__sportsmanager_team AS t1, #__sportsmanager_mitglied_von_team AS t2, #__sportsmanager_veranstaltung AS t3" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE t2.spieler_id = $id AND t1.team_id = t2.team_id AND t3.status > 0 AND t1.veranstaltung_id = t3.veranstaltung_id" + . "\n GROUP BY saison_id, teamname" + . "\n ORDER BY saisonbezeichnung DESC, t3.reihenfolge, t3.bezeichnung, t1.teamname, t3.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + // Elo-Verläufe ermitteln + $elo_einzel = array(); + $elo_doppel = array(); + $spiele_einzel = array(); + $spiele_doppel = array(); + $spieler_elo_verlauf_einzel = array(); + $spieler_elo_verlauf_doppel = array(); + + if ($elo_anzeigen && ($spieler->elo_einzel_spiele > 0 || $spieler->elo_doppel_spiele > 0)) + eloGenerieren(NULL, $elo_einzel, $elo_doppel, $spiele_einzel, $spiele_doppel, $id, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel); + else { + spieleVerlauf($id, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel); + $spieler_elo_verlauf_einzel = array_reverse($spieler_elo_verlauf_einzel); + $spieler_elo_verlauf_doppel = array_reverse($spieler_elo_verlauf_doppel); + } + + $statistik = array(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_mitglied_von_verein WHERE NOT ausgetreten), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["verein"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(spielernr) AND spielernr <> ''), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["spielernr_national"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(lizenznr) AND lizenznr <> ''), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["spielernr_international"] = $db->loadResult(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE elo_einzel_spiele > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["elo_einzel"] = $db->loadResult() && $elo_anzeigen; + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE elo_doppel_spiele > 0), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $statistik["elo_doppel"] = $db->loadResult() && $elo_anzeigen; + + if (isJson()) { + JSON_sportsmanager::spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert, $statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid, $einstufungid, $unabhaengige_ansicht, $details_anzeigen); + } else { + HTML_sportsmanager::spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert, $statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid, $einstufungid, $unabhaengige_ansicht, $details_anzeigen); + } +} + +function mannschaften($ansicht_vereinigt) { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + + + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + + if (!isJson()) { + HTML_sportsmanager::teamsHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + } + if ($ansicht_vereinigt) { + $query = "SELECT teamname, teamgruppe_id, team_id, veranstaltung_id, verein_id, vereinsname, #__sportsmanager_spielort.name, #__sportsmanager_veranstaltung.bezeichnung" + . "\n FROM #__sportsmanager_team" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_spielort ON #__sportsmanager_spielort.spielort_id = #__sportsmanager_team.heimspielort_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n GROUP BY IF(teamgruppe_id <> 0 AND NOT ISNULL(teamgruppe_id), teamgruppe_id, team_id)" + . "\n ORDER BY teamname, bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + if (isJSON()) { + $json = JSON_sportsmanager::mannschaften(NULL, $teams); + } else { + HTML_sportsmanager::mannschaften(NULL, $teams); + } + } else { + $query = "SELECT #__sportsmanager_veranstaltung.*, #__sportsmanager_veranstalter.veranstalterbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_veranstalter ON #__sportsmanager_veranstaltung.veranstalter_id = #__sportsmanager_veranstalter.veranstalter_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id) " . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n GROUP BY veranstaltung_id" + . "\n ORDER BY reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + foreach ($veranstaltungen as $veranstaltung) { + $query = "SELECT teamname, teamgruppe_id, team_id, veranstaltung_id, verein_id, vereinsname, #__sportsmanager_verein.vereinsname, #__sportsmanager_spielort.name" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_spielort ON #__sportsmanager_spielort.spielort_id = #__sportsmanager_team.heimspielort_id" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + $veranstaltung->teams = $teams; + if (isJson()) { + $json[] = JSON_sportsmanager::mannschaften($veranstaltung, $teams); + } else { + HTML_sportsmanager::mannschaften($veranstaltung, $teams); + } + + } + } + + + if (isJson()) { + JSON_sportsmanager::JSON($json); + } else { + administrationFooter(); + } + +} + + +function mannschaftDetails($ansicht_vereinigt, $unabhaengige_ansicht = false) { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) { + abortWithError("Missing id!"); + } + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_team WHERE #__sportsmanager_team.veranstaltung_id = #__sportsmanager_veranstaltung.veranstaltung_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) { + $filter_saison_id = $saisons[0]->saison_id; + } + } + + $details_anzeigen = currentUserHasAccessToDetails(); + $ansprechpartner_anzeigen = einstellungswert("ansprechpartner_ausblenden") != "1" || $details_anzeigen; + + // Team ermitteln + $query = "SELECT #__sportsmanager_team.*, #__sportsmanager_spielort.*, #__sportsmanager_verein.vereinsname, veranstalterbezeichnung, verein_id" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_verein USING (verein_id)" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_spielort ON heimspielort_id = spielort_id" + . "\n WHERE team_id = $id" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $team = $rows[0]; + $teamgruppe_id = $team->teamgruppe_id != NULL ? $team->teamgruppe_id : $id; + + $veranstaltungid = $team->veranstaltung_id; + + // Veranstaltung ermitteln + $query = "SELECT *, IF(NOT ISNULL(letzter_tag) AND letzter_tag < CURDATE(), 1, 0) AS ist_vergangen" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE veranstaltung_id = $veranstaltungid AND status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + $ist_vergangen = $veranstaltung->ist_vergangen; + + // Weitere Wettbewerbe aktualisieren + $query = "SELECT team_id, veranstaltung_id, bezeichnung, IF(NOT ISNULL(letzter_tag) AND letzter_tag < CURDATE(), 1, 0) AS ist_vergangen" + . "\n FROM #__sportsmanager_team" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE team_id != $id AND teamgruppe_id = $teamgruppe_id AND #__sportsmanager_veranstaltung.status > 0" + . "\n ORDER BY bezeichnung"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $weitere_veranstaltungen = $db->loadObjectList(); + + $veranstaltungsbezeichnungen = array(); + $veranstaltungsbezeichnungen[$veranstaltung->veranstaltung_id] = $veranstaltung->bezeichnung; + foreach ($weitere_veranstaltungen as $weitere_veranstaltung) { + $veranstaltungsbezeichnungen[$weitere_veranstaltung->veranstaltung_id] = $weitere_veranstaltung->bezeichnung; + if ($ist_vergangen && !$weitere_veranstaltung->ist_vergangen) + $ist_vergangen = 0; + } + + $team_moderator = benutzerMannschaftModerator($id) || ($team->verein_id != 0 && benutzerVereinModerator($team->verein_id)) || benutzerZugriff("spieler_lesen_erweiterte_daten"); + + // Mitglieder ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_team USING (team_id)" + . "\n WHERE (team_id = $id OR teamgruppe_id = $teamgruppe_id) AND NOT #__sportsmanager_mitglied_von_team.ausgetreten" + . "\n GROUP BY spieler_id" + . "\n ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $mitglieder = $db->loadObjectList(); + + $spielberechtigungen = array(); + foreach ($mitglieder as $mitglied) { + $query = "SELECT mitglied_von_team_id, veranstaltung_id, unterteilung, erster_spieltag, letzter_spieltag" + . "\n FROM #__sportsmanager_team" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team ON #__sportsmanager_mitglied_von_team.team_id = #__sportsmanager_team.team_id AND #__sportsmanager_mitglied_von_team.spieler_id = $mitglied->spieler_id" + . "\n WHERE (#__sportsmanager_team.team_id = $id OR #__sportsmanager_team.teamgruppe_id = $teamgruppe_id) AND (unterteilung = 0 OR unterteilung = 1)" + . "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $mitgliedschaften = $db->loadObjectList(); + + foreach ($mitgliedschaften as $mitgliedschaft) { + if (empty($mitgliedschaft->mitglied_von_team_id) || (!empty($mitgliedschaft->erster_spieltag) && $mitgliedschaft->erster_spieltag >= 2) || !empty($mitgliedschaft->letzter_spieltag)) { + if (!isset($spielberechtigungen[$mitglied->spieler_id])) { + $spielberechtigungen[$mitglied->spieler_id] = array(); + } + array_push($spielberechtigungen[$mitglied->spieler_id], array($mitgliedschaft->veranstaltung_id, $mitgliedschaft->unterteilung, !empty($mitgliedschaft->mitglied_von_team_id) ? $mitgliedschaft->erster_spieltag : -1, !empty($mitgliedschaft->mitglied_von_team_id) ? $mitgliedschaft->letzter_spieltag : -1)); + } + } + } + + $query = "SELECT vorname, nachname, email" + . "\n FROM #__sportsmanager_mitglied_von_team" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_team USING (team_id)" + . "\n WHERE team_id = $id OR teamgruppe_id = $teamgruppe_id AND NOT #__sportsmanager_mitglied_von_team.ausgetreten" + . "\n GROUP BY spieler_id" + . "\n ORDER BY vorname, nachname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $mitglieder_sortiert_vorname = $db->loadObjectList(); + + $mailverteiler = array(); + $mailverteiler["u"] = ""; + $mailverteiler["p"] = ""; + foreach ($mitglieder_sortiert_vorname as $row) { + if (empty($row->email)) { + continue; + } + $mailverteiler["u"] .= (!empty($mailverteiler["u"]) ? "; " : "") . urlencode($row->email); + $mailverteiler["p"] .= (!empty($mailverteiler["p"]) ? ", " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; + } + + // Mitgliederstatistik ermitteln + // Mitgliederstaatistik entfernt, da Berechnung teilweise 10 Sekunden beansprucht hat +// if (!$team_moderator) + $mitglieder_statistiken = NULL; + /* + else { + $query = "SELECT vorname, nachname," + . "\n werte.*," + . "\n einzel_siege + einzel_unentschieden + einzel_niederlagen AS einzel_spiele," + . "\n doppel_siege + doppel_unentschieden + doppel_niederlagen AS doppel_spiele," + . "\n einzel_siege + doppel_siege AS gesamt_siege," + . "\n einzel_unentschieden + doppel_unentschieden AS gesamt_unentschieden," + . "\n einzel_niederlagen + doppel_niederlagen AS gesamt_niederlagen," + . "\n einzel_siege + einzel_unentschieden + einzel_niederlagen + doppel_siege + doppel_unentschieden + doppel_niederlagen AS gesamt_spiele," + . "\n einzel_punkte + doppel_punkte AS gesamt_punkte," + . "\n einzel_punkte_gesamt + doppel_punkte_gesamt AS gesamt_punkte_gesamt," + . "\n elo_einzel, elo_einzel_spiele, elo_doppel, elo_doppel_spiele" + . "\n FROM #__sportsmanager_spieler," + . "\n (SELECT t1.spieler_id," + . "\n (SELECT COALESCE(SUM(IF(heim_spieler_1_id = t1.spieler_id, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte)), 0) AS punkte FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_1_id = t1.spieler_id AND ISNULL(heim_spieler_2_id)) OR (gast_spieler_1_id = t1.spieler_id AND ISNULL(gast_spieler_2_id)))) AS einzel_punkte," + . "\n (SELECT COALESCE(SUM(teamspiel_heim_spielpunkte + teamspiel_gast_spielpunkte), 0) AS punkte FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_1_id = t1.spieler_id AND ISNULL(heim_spieler_2_id)) OR (gast_spieler_1_id = t1.spieler_id AND ISNULL(gast_spieler_2_id)))) AS einzel_punkte_gesamt," + . "\n (SELECT COALESCE(SUM(IF(heim_spieler_1_id = t1.spieler_id OR heim_spieler_2_id = t1.spieler_id, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte)), 0) AS punkte FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_2_id = t1.spieler_id OR (heim_spieler_1_id = t1.spieler_id AND NOT ISNULL(heim_spieler_2_id))) OR (gast_spieler_2_id = t1.spieler_id OR (gast_spieler_1_id = t1.spieler_id AND NOT ISNULL(gast_spieler_2_id))))) AS doppel_punkte," + . "\n (SELECT COALESCE(SUM(teamspiel_heim_spielpunkte + teamspiel_gast_spielpunkte), 0) AS punkte FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_2_id = t1.spieler_id OR (heim_spieler_1_id = t1.spieler_id AND NOT ISNULL(heim_spieler_2_id))) OR (gast_spieler_2_id = t1.spieler_id OR (gast_spieler_1_id = t1.spieler_id AND NOT ISNULL(gast_spieler_2_id))))) AS doppel_punkte_gesamt," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_1_id = t1.spieler_id AND ISNULL(heim_spieler_2_id) AND teamspiel_heim_spielpunkte > teamspiel_gast_spielpunkte) OR (gast_spieler_1_id = t1.spieler_id AND ISNULL(gast_spieler_2_id) AND teamspiel_heim_spielpunkte < teamspiel_gast_spielpunkte))) AS einzel_siege," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_1_id = t1.spieler_id AND ISNULL(heim_spieler_2_id) AND teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte) OR (gast_spieler_1_id = t1.spieler_id AND ISNULL(gast_spieler_2_id) AND teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte))) AS einzel_unentschieden," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND ((heim_spieler_1_id = t1.spieler_id AND ISNULL(heim_spieler_2_id) AND teamspiel_heim_spielpunkte < teamspiel_gast_spielpunkte) OR (gast_spieler_1_id = t1.spieler_id AND ISNULL(gast_spieler_2_id) AND teamspiel_heim_spielpunkte > teamspiel_gast_spielpunkte))) AS einzel_niederlagen," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND (((heim_spieler_2_id = t1.spieler_id OR (heim_spieler_1_id = t1.spieler_id AND NOT ISNULL(heim_spieler_2_id))) AND teamspiel_heim_spielpunkte > teamspiel_gast_spielpunkte) OR ((gast_spieler_2_id = t1.spieler_id OR (gast_spieler_1_id = t1.spieler_id AND NOT ISNULL(gast_spieler_2_id))) AND teamspiel_heim_spielpunkte < teamspiel_gast_spielpunkte))) AS doppel_siege," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND (((heim_spieler_2_id = t1.spieler_id OR (heim_spieler_1_id = t1.spieler_id AND NOT ISNULL(heim_spieler_2_id))) AND teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte) OR ((gast_spieler_2_id = t1.spieler_id OR (gast_spieler_1_id = t1.spieler_id AND NOT ISNULL(gast_spieler_2_id))) AND teamspiel_heim_spielpunkte = teamspiel_gast_spielpunkte))) AS doppel_unentschieden," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_teamspiel LEFT JOIN #__sportsmanager_begegnung USING (begegnung_id) LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis USING (begegnung_id) WHERE ISNULL(unbestaetigtes_ergebnis_id) AND (heim_team_id = $id OR gast_team_id = $id) AND (((heim_spieler_2_id = t1.spieler_id OR (heim_spieler_1_id = t1.spieler_id AND NOT ISNULL(heim_spieler_2_id))) AND teamspiel_heim_spielpunkte < teamspiel_gast_spielpunkte) OR ((gast_spieler_2_id = t1.spieler_id OR (gast_spieler_1_id = t1.spieler_id AND NOT ISNULL(gast_spieler_2_id))) AND teamspiel_heim_spielpunkte > teamspiel_gast_spielpunkte))) AS doppel_niederlagen" + . "\n FROM #__sportsmanager_mitglied_von_team AS t1" + . "\n WHERE team_id = $id AND NOT ISNULL(aktueller_verein_id)" + . "\n GROUP BY spieler_id)" + . "\n AS werte" + . "\n WHERE #__sportsmanager_spieler.spieler_id = werte.spieler_id" + . "\n ORDER BY nachname, vorname"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $mitglieder_statistiken = $db->loadObjectList(); + } + */ + + // Teamansprechpartner ermitteln + $query = "SELECT * FROM #__sportsmanager_teamansprechpartner WHERE team_id = $id ORDER BY kontaktperson_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $teamansprechpartner = $db->loadObjectList(); + + // Begegnungen in der Veranstaltung ermitteln + $query = "SELECT t2.veranstaltung_id, #__sportsmanager_begegnung.*, t2.tischtyp, t2.tischeigenschaften, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, s1.spielort_id, unbestaetigtes_ergebnis_id, zwischenergebnis, spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, unterteilung, " + . "\n IF(heim_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id, t3.teamname, t2.teamname) AS gegner," + . "\n IF(heim_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id, t3.team_id, t2.team_id) AS gegner_id," + . "\n IF(heim_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id, t3.teamgruppe_id, t2.teamgruppe_id) AS gegner_teamgruppe_id," + . "\n IF(heim_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id, t3.verein_id, t2.verein_id) AS gegner_verein_id," + . "\n IF(heim_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id, 0, 1) AS auswaerts," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen," + . "\n (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verantwortlich_team_id" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON #__sportsmanager_begegnung.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n INNER JOIN #__sportsmanager_veranstaltung ON #__sportsmanager_veranstaltung.veranstaltung_id = t2.veranstaltung_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel_modus ON teamspiel_modus_id = modus_id" + . "\n WHERE heim_team_id = $id OR gast_team_id = $id OR t2.teamgruppe_id = $teamgruppe_id OR t3.teamgruppe_id = $teamgruppe_id" + . "\n ORDER BY reihenfolge, letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung, kategorie, IF ((unterteilung = 0 OR unterteilung = 1) AND (heim_punkte != 0 OR gast_punkte != 0), 0, 1), IF ((unterteilung = 0 OR unterteilung = 1) AND (heim_punkte != 0 OR gast_punkte != 0), spieltag, 0), IF ((unterteilung = 0 OR unterteilung = 1) AND (heim_punkte != 0 OR gast_punkte != 0), 0, zeitpunkt), zeitpunkt, spieltag, gegner"; // Sortierung nach Spieltag für den Fall, dass noch keine Zeitpunkte eingetragen sind + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + if ($unabhaengige_ansicht) { + $vorheriges_team_id = 0; + $naechstes_team_id = 0; + } else { + // Vorheriges und nächstes Team ermitteln + if ($ansicht_vereinigt) { + $query = "SELECT team_id" + . "\n FROM #__sportsmanager_team" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0" . kategorieFilter("AND #__sportsmanager_veranstaltung.kategorie IN") + . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n GROUP BY IF(teamgruppe_id <> 0 AND NOT ISNULL(teamgruppe_id), teamgruppe_id, team_id)" + . "\n ORDER BY teamname"; + } else { + $query = "SELECT team_id" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltungid" + . "\n ORDER BY teamname"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorheriges_team_id = 0; + $naechstes_team_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->team_id == $id) { + if ($i > 0) { + $vorheriges_team_id = $rows[$i - 1]->team_id; + } + if ($i + 1 < $n) { + $naechstes_team_id = $rows[$i + 1]->team_id; + } + break; + } + } + } + + if (isJson()) { + JSON_sportsmanager::JSON( + JSON_sportsmanager::mannschaftDetails($veranstaltung, $team, $mitglieder, $mailverteiler, $mitglieder_statistiken, $teamansprechpartner, $begegnungen, $vorheriges_team_id, $naechstes_team_id, $team_moderator, $details_anzeigen, $ansprechpartner_anzeigen, $weitere_veranstaltungen, $veranstaltungsbezeichnungen, $spielberechtigungen, $ansicht_vereinigt, $ist_vergangen) + ); + } else { + HTML_sportsmanager::mannschaftDetails($veranstaltung, $team, $mitglieder, $mailverteiler, $mitglieder_statistiken, $teamansprechpartner, $begegnungen, $vorheriges_team_id, $naechstes_team_id, $team_moderator, $details_anzeigen, $ansprechpartner_anzeigen, $weitere_veranstaltungen, $veranstaltungsbezeichnungen, $spielberechtigungen, $ansicht_vereinigt, $ist_vergangen); + } +} + +function veranstaltungBegegnungeniCal() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $trigger = $jinput->get('alarm', 0, 'INT'); + + // Team ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n WHERE veranstaltung_id = $id AND status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $veranstaltung = $rows[0]; + + // Begegnungen in der Veranstaltung ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, t2.tischtyp, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, s1.spielort_id, unbestaetigtes_ergebnis_id, zwischenergebnis, t5.bezeichnung, t5.unterteilung," + . "\n t2.teamname AS heim_teamname," + . "\n t3.teamname AS gast_teamname," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON #__sportsmanager_begegnung.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.veranstaltung_id = $id" + . "\n ORDER BY zeitpunkt, heim_teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + begegnungeniCal($veranstaltung->bezeichnung, SportsManagerURL('&task=veranstaltung_begegnungen_ical&id=' . $veranstaltung->veranstaltung_id, -1), $begegnungen, $trigger); +} + +function teamBegegnungeniCal() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $trigger = $jinput->get('alarm', 0, 'INT'); + + // Team ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE team_id = $id AND status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $team = $rows[0]; + + // Begegnungen in der Veranstaltung ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, t2.tischtyp, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, s1.spielort_id, unbestaetigtes_ergebnis_id, zwischenergebnis, t5.bezeichnung, t5.unterteilung," + . "\n t2.teamname AS heim_teamname," + . "\n t3.teamname AS gast_teamname," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON #__sportsmanager_begegnung.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE heim_team_id = $id OR gast_team_id = $id" . ($team->teamgruppe_id != NULL ? " OR t2.teamgruppe_id = $team->teamgruppe_id OR t3.teamgruppe_id = $team->teamgruppe_id" : "") + . "\n ORDER BY zeitpunkt, heim_teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + begegnungeniCal($team->teamname, SportsManagerURL('&task=team_begegnungen_ical&id=' . $team->team_id, -1), $begegnungen, $trigger); +} + +function vereinBegegnungeniCal() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $trigger = $jinput->get('alarm', 0, 'INT'); + + // Verein ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_verein" + . "\n WHERE verein_id = $id AND NOT ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $verein = $rows[0]; + + // Begegnungen des Vereins ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, t2.tischtyp, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, s1.spielort_id, unbestaetigtes_ergebnis_id, zwischenergebnis, t5.bezeichnung, t5.unterteilung," + . "\n t2.teamname AS heim_teamname," + . "\n t3.teamname AS gast_teamname," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON #__sportsmanager_begegnung.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 AND (t2.verein_id = $id OR t3.verein_id = $id) AND ABS(DATEDIFF(zeitpunkt, CURDATE())) <= 366" + . "\n ORDER BY zeitpunkt, heim_teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + begegnungeniCal($verein->vereinsname, SportsManagerURL('&task=verein_begegnungen_ical&id=' . $verein->verein_id, -1), $begegnungen, $trigger); +} + +function spielortBegegnungeniCal() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $trigger = $jinput->get('alarm', 0, 'INT'); + + // Verein ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n WHERE status > 0 AND spielort_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $spielort = $rows[0]; + + // Begegnungen am Spielort ermitteln + $query = "SELECT #__sportsmanager_begegnung.*, t2.tischtyp, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(#__sportsmanager_begegnung.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, s1.spielort_id, unbestaetigtes_ergebnis_id, zwischenergebnis, t5.bezeichnung, t5.unterteilung," + . "\n t2.teamname AS heim_teamname," + . "\n t3.teamname AS gast_teamname," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = #__sportsmanager_begegnung.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON #__sportsmanager_begegnung.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 AND (#__sportsmanager_begegnung.spielort_id = $id OR (ISNULL(#__sportsmanager_begegnung.spielort_id) AND t2.heimspielort_id = $id)) AND ABS(DATEDIFF(zeitpunkt, CURDATE())) <= 366" + . "\n ORDER BY zeitpunkt, heim_teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + begegnungeniCal($spielort->name, SportsManagerURL('&task=spielort_begegnungen_ical&id=' . $id, -1), $begegnungen, $trigger); +} + +function begegnungeniCal($titel, $url, &$begegnungen, $trigger = 0) { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('Content-type: text/calendar; charset=utf-8'); + header('Content-Disposition: inline; filename=calendar.ics'); + echo "BEGIN:VCALENDAR\r\n"; + echo "VERSION:2.0\r\n"; + echo "PRODID:PHP\r\n"; + echo "METHOD:REQUEST\r\n"; + echo "X-ORIGINAL-URL:" . $url . "\r\n"; + echo "X-WR-CALNAME;VALUE=TEXT:" . $titel . "\r\n"; + $dtstamp = gmdate('Ymd') . 'T' . gmdate('His'); +// $dttrans = array("-" => "", " " => "", ":" => ""); + foreach ($begegnungen as $begegnung) { + echo "BEGIN:VEVENT\r\n"; + echo "CLASS:PUBLIC\r\n"; + $timestamp = strtotime($begegnung->zeitpunkt); + echo "DTSTART:" . gmdate('Ymd', $timestamp) . 'T' . gmdate('His', $timestamp) . "Z\r\n"; +// $zeitpunkt = strtr($begegnung->zeitpunkt, $dttrans); +// echo "DTSTART:" . substr($zeitpunkt, 0, 8) . "T". substr($zeitpunkt, 8) . "Z\r\n"; + echo "DURATION:PT2H30M\r\n"; + echo "STATUS:" . ($begegnung->verlegung_eingetragen != NULL ? "TENTATIVE" : "CONFIRMED") . "\r\n"; + echo "SUMMARY:" . $begegnung->heim_teamname . " vs. " . $begegnung->gast_teamname . ($begegnung->verlegung_eingetragen != NULL ? " (wird verlegt)" : "") . "\r\n"; + $beschreibung = $begegnung->bezeichnung; + if ($begegnung->spieltag != null) + $beschreibung .= " (" . Rundenbezeichnung($begegnung->spieltag, $begegnung->unterteilung == 0) . ")"; + if ($begegnung->heim_spielpunkte != 0 || $begegnung->gast_spielpunkte != 0) + $beschreibung .= (empty($beschreibung) ? "" : "\\n") . "Ergebnis: " . $begegnung->heim_spielpunkte . ":" . $begegnung->gast_spielpunkte . " (" . $begegnung->heim_punkte . ":" . $begegnung->gast_punkte . ")"; + if (!empty($beschreibung)) + echo "DESCRIPTION:" . $beschreibung . "\r\n"; + $anschrift = (!empty($begegnung->heimspielort_name) ? ($begegnung->heimspielort_name . ", ") : "") . $begegnung->heimspielort_strasse . (!empty($begegnung->heimspielort_strasse) && (!empty($begegnung->heimspielort_plz) || !empty($begegnung->heimspielort_ortsname) || !empty($begegnung->heimspielort_ortsteil)) ? ", " : "") . $begegnung->heimspielort_plz . (!empty($begegnung->heimspielort_plz) ? " " : "") . $begegnung->heimspielort_ortsname . (!empty($begegnung->heimspielort_ortsname) && !empty($begegnung->heimspielort_ortsteil) ? "-" : "") . $begegnung->heimspielort_ortsteil; + if (!empty($anschrift)) + echo "LOCATION:" . $anschrift . "\r\n"; +// echo "UID:" . md5(uniqid(mt_rand(), true)) . "@sportsmanager\r\n"; + $url = parse_url(JURI::base()); + echo "UID:SM-B" . $begegnung->begegnung_id . rtrim($url["path"], "/") . "@" . $url["host"] . "\r\n"; + echo "PRIORITY:5\r\n"; + echo "SEQUENCE:" . ($begegnung->heim_spielpunkte != 0 || $begegnung->gast_spielpunkte != 0 ? "1" : "0") . "\r\n"; + echo "CATEGORIES:SPORT\r\n"; + echo "DTSTAMP:" . $dtstamp . "\r\n"; + if ($trigger != 0) { + echo "BEGIN:VALARM\r\n"; + echo "ACTION:DISPLAY\r\n"; + echo "TRIGGER:-PT" . ($trigger > 60 ? (floor($trigger / 60) . "H") : "") . ($trigger % 60 != 0 ? (($trigger % 60) . "M") : "") . "\r\n"; + echo "END:VALARM\r\n"; + } + echo "END:VEVENT\r\n"; + } + echo "END:VCALENDAR\r\n"; + die(); +} + +function teamSpielplanXML() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) + die("Missing id!"); + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $veranstaltungid AND status > 0" . kategorieFilter("AND kategorie IN"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $veranstaltung = $rows[0]; + + // Team ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_team" + . "\n WHERE team_id = $id" + . "\n ORDER BY teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); +// $team = $rows[0]; + // Begegnungen in der Veranstaltung ermitteln + $query = "SELECT t1.*, IF(ISNULL(t1.spielort_id), s2.name, s1.name) as heimspielort_name, IF(ISNULL(t1.spielort_id), s2.url, s1.url) as heimspielort_url, IF(ISNULL(t1.spielort_id), s2.strasse, s1.strasse) as heimspielort_strasse, IF(ISNULL(t1.spielort_id), s2.plz, s1.plz) as heimspielort_plz, IF(ISNULL(t1.spielort_id), s2.ortsname, s1.ortsname) as heimspielort_ortsname, IF(ISNULL(t1.spielort_id), s2.ortsteil, s1.ortsteil) as heimspielort_ortsteil, t4.unbestaetigtes_ergebnis_id," + . "\n IF(t1.heim_team_id = $id, t3.teamname, t2.teamname) AS gegner," + . "\n IF(t1.heim_team_id = $id, 0, 1) AS auswaerts," + . "\n (SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_spielort AS s1 ON t1.spielort_id = s1.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_spielort AS s2 ON t2.heimspielort_id = s2.spielort_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n WHERE t2.veranstaltung_id = $veranstaltung->veranstaltung_id AND t1.heim_team_id = $id OR t1.gast_team_id = $id" + . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, 0, 1), IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, t1.spieltag, 0), IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, 0, t1.zeitpunkt), " : "") . "t1.zeitpunkt, gegner"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + echo "<"; + ?>?xml version="1.0" encoding="utf-8"?> + + + + + + + + + ]> + + heim_punkte != NULL || $row->gast_punkte != NULL) ? true : false; + echo " spieltag . "\">\r\n"; + echo " " . ($row->verlegung_eingetragen ? "wird verlegt" : FormatiertesDatum($row->zeitpunkt)) . "\r\n"; + echo " " . utf8_encode(htmlspecialchars($row->gegner)) . "\r\n"; + echo " " . utf8_encode(htmlspecialchars($row->heimspielort_name)) . "\r\n"; + echo " "; + if ($ergebnis_vorhanden) + echo $row->auswaerts ? ($row->gast_punkte . " : " . $row->heim_punkte) : ($row->heim_punkte . " : " . $row->gast_punkte); + echo "\r\n"; + echo " "; + if ($ergebnis_vorhanden) + echo $row->auswaerts ? ($row->gast_spielpunkte . " : " . $row->heim_spielpunkte) : ($row->heim_spielpunkte . " : " . $row->gast_spielpunkte); + echo "\r\n"; + echo " \r\n"; + $id++; + } + ?> + + = $quelle_proportionen) { + $quelle_teilhoehe = round($quelle_breite / $ziel_proportionen); + if (!imagecopyresampled($ziel_image, $quelle_image, 0, 0, 0, round(($quelle_hoehe - $quelle_teilhoehe) / 2), $ziel_breite, $ziel_hoehe, $quelle_breite, $quelle_teilhoehe)) + return false; + } else { + $quelle_teilbreite = round($quelle_hoehe * $ziel_proportionen); + if (!imagecopyresampled($ziel_image, $quelle_image, 0, 0, round(($quelle_breite - $quelle_teilbreite) / 2), 0, $ziel_breite, $ziel_hoehe, $quelle_teilbreite, $quelle_hoehe)) + return false; + } + } else { + if ($ziel_proportionen >= $quelle_proportionen) { + $ziel_teilbreite = round($ziel_hoehe * $quelle_proportionen); + if (!imagecopyresampled($ziel_image, $quelle_image, round(($ziel_breite - $ziel_teilbreite) / 2), 0, 0, 0, $ziel_teilbreite, $ziel_hoehe, $quelle_breite, $quelle_hoehe)) + return false; + } else { + $ziel_teilhoehe = round($ziel_breite / $quelle_proportionen); + if (!imagecopyresampled($ziel_image, $quelle_image, 0, round(($ziel_hoehe - $ziel_teilhoehe) / 2), 0, 0, $ziel_breite, $ziel_teilhoehe, $quelle_breite, $quelle_hoehe)) + return false; + } + } + ob_start(); + if ($ext == "png") { + imagesavealpha($ziel_image, true); + if (!imagepng($ziel_image)) + return false; + } else { + if (!imagejpeg($ziel_image)) + return false; + } + $output = ob_get_contents(); + ob_end_clean(); + JFile::write($ziel, $output); + return true; + } + + function bildAnpassen($typ, $id = 0) { + global $sportsmanager_joomla_path; + $jinput = JFactory::getApplication()->input; + + if (empty($id)) + $id = $jinput->get('id', 0, 'INT'); + $fixed_width = $jinput->get('w', 0, 'INT'); + $fixed_height = $jinput->get('h', 0, 'INT'); + $max_width = $jinput->get('mw', 0, 'INT'); + $max_height = $jinput->get('mh', 0, 'INT'); + $no_cache = $jinput->get('nc', 0, 'INT'); + + $pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . $typ . DIRECTORY_SEPARATOR . $id . '.'; + if (JFile::exists($pfad . 'png')) + $ext = "png"; + else if (JFile::exists($pfad . 'jpg')) + $ext = "jpg"; + else { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('HTTP/1.1 404 Not Found'); + die(); + } + + $filemtime = filemtime($pfad . $ext); + $last_modified = gmdate('D, d M Y H:i:s', $filemtime) . " GMT"; + $etag = md5($id . '.' . $ext . $filemtime); + + // Prüfung, ob die im Browsercache vorhandene Datei der hiesigen entspricht + if ($_SERVER['HTTP_IF_NONE_MATCH'] == '"' . $etag . '"' || $last_modified == $_SERVER['HTTP_IF_MODIFIED_SINCE']) { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('HTTP/1.1 304 Not Modified'); + if ($no_cache) + header("Cache-Control: must-revalidate"); // Bewirkt, dass der Browser jedesmal die Datei neu prüft + else + header("Cache-Control: max-age=2592000"); // Bewirkt, dass nach dreißig Tagen die Datei vom Browser auf eine Aktualisierung geprüft wird. + header("Last-Modified: " . $last_modified); + header('ETag: "' . $etag . '"'); + die(); + } + + $image = $ext == "png" ? imagecreatefrompng($pfad . $ext) : imagecreatefromjpeg($pfad . $ext); + if ($image === false) { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('HTTP/1.1 404 Not Found'); + die(); + } + + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header("Content-type: image/" . ($ext == "png" ? "png" : "jpeg")); + if ($no_cache) + header("Cache-Control: must-revalidate"); // Bewirkt, dass der Browser jedesmal die Datei neu prüft + else + header("Cache-Control: max-age=2592000"); // Bewirkt, dass nach dreißig Tagen die Datei vom Browser auf eine Aktualisierung geprüft wird. + header("Last-Modified: " . $last_modified); + header('ETag: "' . $etag . '"'); + + $width = imagesx($image); + $height = imagesy($image); + + if (($fixed_width == 0 || $width == $fixed_width) && ($fixed_height == 0 || $height == $fixed_height) && ($fixed_width != 0 || $max_width == 0 || $width <= $max_width) && ($fixed_height != 0 || $max_height == 0 || $height <= $max_height)) { + if ($ext == "png") { + imagesavealpha($image, true); + imagepng($image); + } else + imagejpeg($image); + die(); + } + + $new_width = $width; + $new_height = $height; + + if ($max_height > 0 && $new_height > $max_height) { + $new_width = max(round($new_width * $max_height / $new_height), 1); + $new_height = $max_height; + } + if ($max_width > 0 && $new_width > $max_width) { + $new_height = max(round($new_height * $max_width / $new_width), 1); + $new_width = $max_width; + } + + if ($max_width > 0 && (($max_width - $new_width) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_width += 1; + if ($max_height > 0 && (($max_height - $new_height) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_height += 1; + + $image_resized = imagecreatetruecolor(max($fixed_width, $new_width), max($fixed_height, $new_height)); + $color = $ext == "png" ? imagecolorallocatealpha($image_resized, 0, 0, 0, 127) : imagecolorallocate($image_resized, 64, 64, 64); + imagefill($image_resized, 0, 0, $color); + imagecopyresampled($image_resized, $image, round((imagesx($image_resized) - $new_width) / 2), round((imagesy($image_resized) - $new_height) / 2), 0, 0, $new_width, $new_height, $width, $height); + if ($ext == "png") { + imagesavealpha($image_resized, true); + imagepng($image_resized); + } else + imagejpeg($image_resized); + die(); + } + + function spielerbild() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $spielernr = $db->escape(trim($jinput->get('spielernr', '', 'RAW'))); + $lizenznr = $db->escape(trim($jinput->get('lizenznr', '', 'RAW'))); + + if (empty($spielernr) && empty($lizenznr)) { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('HTTP/1.1 404 Not Found'); + die(); + } + + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id) AND NOT bild_ausblenden" . (!empty($spielernr) ? " AND spielernr = '$spielernr'" : " AND lizenznr = '$lizenznr'") + . "\n ORDER BY spieler_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + ob_end_clean(); // Wegen UTF-8-Zeichen, die in der ausgabe vorhanden sind + header('HTTP/1.1 404 Not Found'); + die(); + } + + $id = $rows[0]->spieler_id; + bildAnpassen("spieler", $id); + } + + function vereine() { + $db = & getDatabase(); + global $params; + + $query = "SELECT COUNT(DISTINCT veranstalter_id) FROM #__sportsmanager_verein WHERE NOT ausgetreten"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $organisationAnzeigen = $db->loadResult() > 1; + + $query = "SELECT *, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten" . kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN") + . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereine = $db->loadObjectList(); + + HTML_sportsmanager::vereine($params->get('titel'), $params->get('beschreibung'), $vereine, $organisationAnzeigen); + + administrationFooter(); + } + + function vereinDetails() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + + $vereins_moderator = benutzerVereinModerator($id) || benutzerZugriff("spieler_lesen_erweiterte_daten"); + $details_anzeigen = currentUserHasAccessToDetails(); + $ansprechpartner_anzeigen = einstellungswert("ansprechpartner_ausblenden") != "1" || $details_anzeigen; + + // Verein ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten AND verein_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $verein = $rows[0]; + + // Mitglieder ermitteln + $query = "SELECT * FROM #__sportsmanager_mitglied_von_verein LEFT JOIN #__sportsmanager_spieler ON #__sportsmanager_mitglied_von_verein.spieler_id = #__sportsmanager_spieler.spieler_id WHERE #__sportsmanager_mitglied_von_verein.verein_id = $verein->verein_id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten ORDER BY nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $mitglieder = $db->loadObjectList(); + + $query = "SELECT vorname, nachname, email" + . "\n FROM #__sportsmanager_mitglied_von_verein" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE verein_id = $id AND NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND email != ''" + . "\n ORDER BY vorname, nachname, email"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $mailverteiler = array(); + $mailverteiler["u"] = ""; + $mailverteiler["p"] = ""; + foreach ($rows as $row) { + $mailverteiler["u"] .= (!empty($mailverteiler["u"]) ? "; " : "") . urlencode($row->email); + $mailverteiler["p"] .= (!empty($mailverteiler["p"]) ? ", " : "") . "\"" . $row->vorname . " " . $row->nachname . "\" <" . $row->email . ">"; + } + + // Vereinsansprechpartner ermitteln + $query = "SELECT * FROM #__sportsmanager_vereinsansprechpartner WHERE verein_id = $verein->verein_id ORDER BY vereinsansprechpartner_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $vereinsansprechpartner = $db->loadObjectList(); + + // Vorherigen und nächsten Verein ermitteln + $query = "SELECT *, veranstalterbezeichnung" + . "\n FROM #__sportsmanager_verein" + . "\n LEFT JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n WHERE NOT ausgetreten" . kategorieFilter("AND #__sportsmanager_veranstalter.kategorie IN") + . "\n ORDER BY IF(ISNULL(#__sportsmanager_veranstalter.veranstalter_id), 1, 0), veranstalterbezeichnung, vereinsname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorheriger_verein_id = 0; + $naechster_verein_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->verein_id == $id) { + if ($i > 0) + $vorheriger_verein_id = $rows[$i - 1]->verein_id; + if ($i + 1 < $n) + $naechster_verein_id = $rows[$i + 1]->verein_id; + break; + } + } + + // Teammitgliedschaften ermitteln + $query = "SELECT #__sportsmanager_team.teamname, #__sportsmanager_team.team_id, #__sportsmanager_team.tischtyp, #__sportsmanager_team.tischeigenschaften, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_veranstaltung.erster_tag, #__sportsmanager_veranstaltung.letzter_tag, #__sportsmanager_spielort.*," + . " GROUP_CONCAT(DISTINCT #__sportsmanager_veranstaltung.bezeichnung ORDER BY #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung DESC SEPARATOR ', ') AS wettbewerbe" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_spielort ON heimspielort_id = spielort_id" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE #__sportsmanager_team.verein_id = $id AND erster_tag <= CURDATE() AND letzter_tag >= CURDATE() AND #__sportsmanager_veranstaltung.status > 0" + . "\n GROUP BY #__sportsmanager_team.teamname" + . "\n ORDER BY #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktuelle_teams = $db->loadObjectList(); + + $query = "SELECT t1.teamname, saisonbezeichnung," + . " GROUP_CONCAT(DISTINCT t3.bezeichnung ORDER BY t3.reihenfolge, t3.letzter_tag DESC, t3.bezeichnung, t3.kategorie DESC SEPARATOR ', ') AS wettbewerbe" + . "\n FROM #__sportsmanager_team AS t1" + . "\n INNER JOIN #__sportsmanager_veranstaltung AS t3 USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE t1.verein_id = $id AND t3.status > 0 AND (t3.erster_tag > CURDATE() OR t3.letzter_tag < CURDATE())" + . "\n GROUP BY YEAR(t3.letzter_tag), t1.teamname" + . "\n ORDER BY saisonbezeichnung DESC, t3.reihenfolge, t3.letzter_tag DESC, t3.bezeichnung, t1.teamname, t3.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $fruehere_teams = $db->loadObjectList(); + + HTML_sportsmanager::vereinDetails($verein, $mitglieder, $vereinsansprechpartner, $aktuelle_teams, $vorheriger_verein_id, $naechster_verein_id, $vereins_moderator, $details_anzeigen, $ansprechpartner_anzeigen); + begegnungenAnzeigen(NULL, $id, NULL, 92, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true); + begegnungenAnzeigen(NULL, $id, NULL, 62, true, false, true, "Begegnungen der kommenden zwei Monate", false, true); + begegnungenAnzeigen(NULL, $id, NULL, 366, false, true, true, "Begegnungen des vergangenen Jahres", true, true); + HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=verein_begegnungen_ical&id=' . $verein->verein_id)); + HTML_sportsmanager::vereinDetailsErgaenzung($mailverteiler, $fruehere_teams, $vereins_moderator); + } + + function spielorte() { + $db = & getDatabase(); + global $params; + + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n WHERE status > 0" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielorte = $db->loadObjectList(); + + if (isJson()) { + echo json_encode($spielorte); + } else { + HTML_sportsmanager::spielorte($params->get('titel'), $params->get('beschreibung'), $spielorte); + + administrationFooter(); + } + } + + function spielort() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + + // Spielort ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_spielort" + . "\n WHERE spielort_id = $id AND status > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $spielort = $rows[0]; + + // Vorherigen und nächsten Spielort ermitteln + $query = "SELECT spielort_id" + . "\n FROM #__sportsmanager_spielort" + . "\n WHERE status > 0" + . "\n ORDER BY ortsname, name, ortsteil"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorheriger_spielort_id = 0; + $naechster_spielort_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->spielort_id == $id) { + if ($i > 0) + $vorheriger_spielort_id = $rows[$i - 1]->spielort_id; + if ($i + 1 < $n) + $naechster_spielort_id = $rows[$i + 1]->spielort_id; + break; + } + } + + // Teammitgliedschaften ermitteln + $query = "SELECT #__sportsmanager_team.teamname, #__sportsmanager_team.team_id, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_veranstaltung.erster_tag, #__sportsmanager_veranstaltung.letzter_tag, #__sportsmanager_spielort.*, #__sportsmanager_team.heimspiel_wochentag, #__sportsmanager_team.tischtyp," + . " GROUP_CONCAT(DISTINCT #__sportsmanager_veranstaltung.bezeichnung ORDER BY #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.letzter_tag DESC, #__sportsmanager_veranstaltung.bezeichnung DESC SEPARATOR ', ') AS wettbewerbe" + . "\n FROM #__sportsmanager_team" + . "\n LEFT JOIN #__sportsmanager_spielort ON heimspielort_id = spielort_id" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE #__sportsmanager_team.heimspielort_id = $id AND erster_tag <= CURDATE() AND letzter_tag >= CURDATE() AND #__sportsmanager_veranstaltung.status > 0" + . "\n GROUP BY #__sportsmanager_team.teamname, #__sportsmanager_team.teamgruppe_id, #__sportsmanager_team.heimspiel_wochentag" + . "\n ORDER BY #__sportsmanager_team.heimspiel_wochentag, #__sportsmanager_team.teamname, #__sportsmanager_veranstaltung.reihenfolge, #__sportsmanager_veranstaltung.bezeichnung, #__sportsmanager_veranstaltung.kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $aktuelle_teams = $db->loadObjectList(); + + // Letzte Begegnung ermitteln + $query = "SELECT IF(ISNULL(MAX(zeitpunkt)), -99999, DATEDIFF(MAX(zeitpunkt), CURDATE()))" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t2.veranstaltung_id = t5.veranstaltung_id" + . "\n WHERE t5.status > 0 AND (t1.spielort_id = $id OR (ISNULL(t1.spielort_id) AND t2.heimspielort_id = $id)) AND NOT ISNULL(zeitpunkt)" + . "\n ORDER BY t1.zeitpunkt DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnung_zeitpunkt = $db->loadResult(); + + HTML_sportsmanager::spielort($spielort, $begegnung_zeitpunkt, $aktuelle_teams, $vorheriger_spielort_id, $naechster_spielort_id); + begegnungenAnzeigen(NULL, NULL, $id, 92, true, true, false, JText::_('COM_SPORTSMANAGER_RUNNING_MATCHES'), true, true); + begegnungenAnzeigen(NULL, NULL, $id, 62, true, false, true, "Begegnungen der kommenden zwei Monate", false, true); + begegnungenAnzeigen(NULL, NULL, $id, 62, false, true, true, "Begegnungen des vergangenen zwei Monate", true, true); + HTML_sportsmanager::iCalBegegnungen(SportsManagerURL('&task=spielort_begegnungen_ical&id=' . $id)); + } + + function begegnungSpielplan($teamansicht = false) { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) { + abortWithError("Missing id!"); + } + if ($teamansicht) { + $teamid = $jinput->get('teamid', 0, 'INT'); + if ($teamid == 0) { + abortWithError("Missing id!"); + } + } + + $details_anzeigen = currentUserHasAccessToDetails(); + + // Begegnung ermitteln + $query = + "SELECT t1.*, unbestaetigtes_ergebnis_id, zwischenergebnis, vorschlagendes_team_id, #__sportsmanager_team.teamname, " + . "(SELECT IF(aktion NOT IN (0, 3, 4), NULL, tt1.eingetragen) FROM #__sportsmanager_begegnung_historie AS tt1 USE INDEX (begegnung_id) WHERE tt1.begegnung_id = t1.begegnung_id ORDER BY begegnung_historie_id DESC LIMIT 1) AS verlegung_eingetragen " + . "FROM #__sportsmanager_begegnung as t1 " + . "LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON t1.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id " + . "LEFT JOIN #__sportsmanager_team ON #__sportsmanager_unbestaetigtes_ergebnis.vorschlagendes_team_id = #__sportsmanager_team.team_id " + . "WHERE t1.begegnung_id = $id"; + + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + if ($teamansicht) { + // Ursprüngliches Team für Teamansicht ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $teamid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $teamansicht_team = $rows[0]; + $teamansicht_teamgruppe_id = $teamansicht_team->teamgruppe_id != NULL ? $teamansicht_team->teamgruppe_id : $id; + } + + // Heimteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + // Gastteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + + // Veranstaltung ermitteln + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $heim_team->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + + // Modus ermitteln + $modus_id = $veranstaltung->modus_id; + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 1) { + $modus = $rows[0]; + } + + // Spiele ermitteln + $query = "SELECT t1.*, theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname, theim1.geschlecht AS heim_spieler_1_geschlecht, theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname, theim2.geschlecht AS heim_spieler_2_geschlecht, tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname, tgast1.geschlecht AS gast_spieler_1_geschlecht, tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname, tgast2.geschlecht AS gast_spieler_2_geschlecht, " + . "mheim1.mitglied_von_team_id AS heim_spieler_1_mitglied_id, mheim2.mitglied_von_team_id AS heim_spieler_2_mitglied_id, " + . "mgast1.mitglied_von_team_id AS gast_spieler_1_mitglied_id, mgast2.mitglied_von_team_id AS gast_spieler_2_mitglied_id, " + . "theim1.bild_ausblenden AS heim_spieler_1_bild_ausblenden, theim2.bild_ausblenden AS heim_spieler_2_bild_ausblenden, " + . "tgast1.bild_ausblenden AS gast_spieler_1_bild_ausblenden, tgast2.bild_ausblenden AS gast_spieler_2_bild_ausblenden" + . "\n FROM #__sportsmanager_teamspiel AS t1" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = t1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mheim1 ON mheim1.team_id = $begegnung->heim_team_id AND mheim1.spieler_id = t1.heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = t1.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mheim2 ON mheim2.team_id = $begegnung->heim_team_id AND mheim2.spieler_id = t1.heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = t1.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mgast1 ON mgast1.team_id = $begegnung->gast_team_id AND mgast1.spieler_id = t1.gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = t1.gast_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_mitglied_von_team AS mgast2 ON mgast2.team_id = $begegnung->gast_team_id AND mgast2.spieler_id = t1.gast_spieler_2_id" + . "\n WHERE begegnung_id = $id" + . "\n GROUP BY teamspiel_id" + . "\n ORDER BY teamspiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + // Vorherige und nächste Begegnung ermitteln + if ($teamansicht) { + $query = "SELECT t1.*," + . "\n IF(t1.heim_team_id = $id, t3.teamname, t2.teamname) AS gegner" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n WHERE t2.veranstaltung_id = $veranstaltung->veranstaltung_id AND (t1.heim_team_id = $teamid OR t1.gast_team_id = $teamid OR t2.teamgruppe_id = $teamansicht_teamgruppe_id OR t3.teamgruppe_id = $teamansicht_teamgruppe_id) AND (heim_punkte != 0 OR gast_punkte != 0)" + . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, 0, 1), IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, t1.spieltag, 0), IF (t1.heim_punkte != 0 OR t1.gast_punkte != 0, 0, t1.zeitpunkt), " : "") . "t1.zeitpunkt, gegner"; + } else { + $query = "SELECT t1.*, t2.teamname AS heim_name" + . "\n FROM #__sportsmanager_begegnung AS t1" + . "\n LEFT JOIN #__sportsmanager_team AS t2 ON t1.heim_team_id = t2.team_id" + . "\n LEFT JOIN #__sportsmanager_team AS t3 ON t1.gast_team_id = t3.team_id" + . "\n WHERE t2.veranstaltung_id = $veranstaltung->veranstaltung_id AND (heim_punkte != 0 OR gast_punkte != 0)" + . "\n ORDER BY " . (($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) ? "t1.spieltag, " : "") . "t1.zeitpunkt, heim_name"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_begegnung_id = 0; + $naechste_begegnung_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->begegnung_id == $id) { + if ($i > 0) + $vorherige_begegnung_id = $rows[$i - 1]->begegnung_id; + if ($i + 1 < $n) + $naechste_begegnung_id = $rows[$i + 1]->begegnung_id; + break; + } + } + // Spielort ermitteln + $spielortQuery = "SELECT * FROM #__sportsmanager_spielort WHERE spielort_id = " + . (JFactory::getApplication()->input->getCmd('spielort_heim') == 1 + ? $heim_team->heimspielort_id + : (isset($begegnung->spielort_id) ? $begegnung->spielort_id : '0')); + $db->setQuery($spielortQuery); + if ($db->execute()) { + $spielort = $db->loadObject(); + $begegnung->spielort_name = $spielort->name; + } + if (isJson()) { + +// $json = JSON_sportsmanager::begegnungSpielplan($veranstaltung, $modus, $begegnung, $heim_team, $gast_team, $spiele, $vorherige_begegnung_id, $naechste_begegnung_id, $teamansicht ? $teamansicht_team : NULL, $details_anzeigen); + + // spieler ermitteln + $query = 'SELECT * ' + . 'FROM #__sportsmanager_mitglied_von_team as t1 ' + . 'INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id) ' + . 'WHERE team_id = ' . $begegnung->heim_team_id . ' AND NOT t1.ausgetreten ' . ($begegnung->spieltag != NULL ? 'AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= ' . $begegnung->spieltag . ') AND (ISNULL(t1.letzter_spieltag) OR ' . $begegnung->spieltag . ' <= t1.letzter_spieltag) ' : '') + . 'ORDER BY nachname, vorname'; + $db->setQuery($query); + if ($db->execute()) { + $heim_spieler = $db->loadObjectList(); + } + $query = 'SELECT * ' + . 'FROM #__sportsmanager_mitglied_von_team as t1 ' + . 'INNER JOIN #__sportsmanager_spieler AS t2 USING (spieler_id) ' + . 'WHERE team_id = ' . $begegnung->gast_team_id . ' AND NOT t1.ausgetreten ' . ($begegnung->spieltag != NULL ? 'AND (ISNULL(t1.erster_spieltag) OR t1.erster_spieltag <= ' . $begegnung->spieltag . ') AND (ISNULL(t1.letzter_spieltag) OR ' . $begegnung->spieltag . ' <= t1.letzter_spieltag) ' : '') + . 'ORDER BY nachname, vorname'; + $db->setQuery($query); + if ($db->execute()) { + $gast_spieler = $db->loadObjectList(); + } + $json = JSON_sportsmanager::adminEditBegegnungSpielplan(0, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler,$modus, NULL, NULL, NULL, NULL); + + // ergebnis hinspiel + $query = 'SELECT * ' + . 'FROM #__sportsmanager_begegnung ' + . 'WHERE heim_team_id = ' . $begegnung->gast_team_id . ' AND gast_team_id = ' . $begegnung->heim_team_id; + $db->setQuery($query); + if ($db->execute()) { + $hinspiel = $db->loadObjectList(); + if (sizeof($hinspiel) > 0) { + $json['hinspiel'] = $hinspiel[0]; + } + } + if (isset($spielort)) { + $json['spielort'] = $spielort; + } + JSON_sportsmanager::JSON($json); + } else { + HTML_sportsmanager::begegnungSpielplan($veranstaltung, $modus, $begegnung, $heim_team, $gast_team, $spiele, $vorherige_begegnung_id, $naechste_begegnung_id, $teamansicht ? $teamansicht_team : NULL, $details_anzeigen); + + if ($begegnung->zwischenergebnis) + HTML_sportsmanager::automatischAktualisieren(60); + } + } + + function begegnungVerlegenForm() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) + die("Missing id!"); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + + $query = "SELECT #__sportsmanager_veranstaltung.*, initial_ohne_termin, keine_gegenvorschlaege, vorlaufzeit_tage, termine_minimal, termine_maximal, ablehnen FROM #__sportsmanager_veranstaltung LEFT JOIN #__sportsmanager_verschieberegel USING (verschieberegel_id) WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $veranstaltung = $rows[0]; + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $query = "SELECT t1.*, t2.unbestaetigtes_ergebnis_id," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_berechtigt_fuer_team AS tt1 WHERE tt1.berechtigt_user_id = $user_id AND ((tt1.berechtigt_team_id = t1.heim_team_id AND t4.vorschlagendes_team_id = t1.gast_team_id) OR (tt1.berechtigt_team_id = t1.gast_team_id AND t4.vorschlagendes_team_id = t1.heim_team_id))) AS berechtigt_fuer_team_akzeptieren," + . "\n " . ($veranstaltung->verschieberegel_id != 0 ? "IF($veranstaltung->vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= $veranstaltung->vorlaufzeit_tage, 1, 0)" : "0") . " AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung AS t1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t2 ON t1.begegnung_id = t2.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS t4 ON t1.begegnung_id = t4.begegnung_id" + . "\n WHERE t1.begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + if ($begegnung->heim_punkte != 0 || $begegnung->gast_punkte != 0) + keinZugriff(); + + $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) { + keinZugriff(TRUE); + } + $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + + // Vorgeschlagene Termine ermitteln + $query = "SELECT #__sportsmanager_begegnung_historie.*, team.teamname as team, user.username, user.name, verantwortlich_team.teamname as verantwortlich_team" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n LEFT JOIN #__sportsmanager_team AS team USING (team_id)" + . "\n LEFT JOIN #__sportsmanager_team AS verantwortlich_team ON verantwortlich_team.team_id = verantwortlich_team_id" + . "\n LEFT JOIN #__users AS user ON user.id = user_id" + . "\n WHERE begegnung_id = $id" + . "\n ORDER BY begegnung_historie_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $verlegen_aktionen = $db->loadObjectList(); + + if (!$begegnung->verschieberegel_erfuellt && (count($verlegen_aktionen) == 0 || $verlegen_aktionen[count($verlegen_aktionen) - 1]->aktion == 1)) + keinZugriff(); + + // Ermitteln, ob Benutzer berechtigt für das Akzeptieren eines Termins ist + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_berechtigt_fuer_team" + . "\n WHERE (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = $id ORDER BY begegnung_historie_id DESC LIMIT 1) = berechtigt_team_id AND berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $berechtigt_fuer_akzeptieren = $db->loadResult(); + + if (isJson()) { + JSON_sportsmanager::begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $verlegen_aktionen, $berechtigt_fuer_akzeptieren, $aus_uebersicht, $vorschlagendes_team_id); + } else { + HTML_sportsmanager::begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $verlegen_aktionen, $berechtigt_fuer_akzeptieren, $aus_uebersicht, $vorschlagendes_team_id); + HTML_sportsmanager_admin::adminVerlegenVerlauf($verlegen_aktionen); + } + } + + function begegnungVerlegen() { + $app = &JFactory::getApplication(); + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + $termine_input = isJson() ? $jinput->json : $jinput; + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) { + abortWithError("Missing id!"); + } + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + $angefordert = $jinput->get('anfordern', false, 'BOOL'); + $abgelehnt = $jinput->get('ablehnen', false, 'BOOL'); + + if ($jinput->get('cancel', false, 'BOOL')) { + redirectSportsManagerURL('&task=' . ($aus_uebersicht ? 'veranstaltungen' : 'veranstaltung') . '&veranstaltungid=' . $veranstaltungid); + return; + } + + $termine = array(); + $kommentare = array(); + for ($i = 1; $i <= 5; $i++) { + $datum = normalisiertesDatum($termine_input->get('datum_jahr_' . $i, 0, 'INT') == 0 ? NULL : sprintf("%04d-%02d-%02d", $termine_input->get('datum_jahr_' . $i, 0, 'INT'), $termine_input->get('datum_monat_' . $i, 0, 'INT'), $termine_input->get('datum_tag_' . $i, 0, 'INT'))); + $uhrzeit = normalisierteUhrzeit(sprintf("%02d:%02d:00", $termine_input->get('uhrzeit_stunden_' . $i, 0, 'INT'), $termine_input->get('uhrzeit_minuten_' . $i, 0, 'INT'))); + if ($datum == NULL || $uhrzeit == NULL) + continue; + array_push($termine, $datum . " " . $uhrzeit); + array_push($kommentare, $termine_input->get('kommentar_' . $i, '', 'RAW')); + } + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) { + keinZugriff(); + } + $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; + + $query = "LOCK TABLES #__sportsmanager_begegnung_historie WRITE, #__sportsmanager_veranstaltung READ, #__sportsmanager_begegnung READ, #__sportsmanager_verschieberegel READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + // Veranstaltung ermitteln + $query = "SELECT #__sportsmanager_veranstaltung.*," + . "\n #__sportsmanager_verschieberegel.verschieberegel_id," + . "\n #__sportsmanager_verschieberegel.initial_ohne_termin," + . "\n #__sportsmanager_verschieberegel.keine_gegenvorschlaege," + . "\n #__sportsmanager_verschieberegel.vorlaufzeit_tage," + . "\n #__sportsmanager_verschieberegel.termine_minimal," + . "\n #__sportsmanager_verschieberegel.termine_maximal" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_verschieberegel USING (verschieberegel_id)" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + + // Begegnung ermitteln + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung_historie WHERE #__sportsmanager_begegnung_historie.begegnung_id = #__sportsmanager_begegnung.begegnung_id) AS verlegen_aktionen," + . "\n " . ($veranstaltung->verschieberegel_id != 0 ? "IF($veranstaltung->vorlaufzeit_tage = 0 OR DATEDIFF(zeitpunkt, CURDATE()) >= $veranstaltung->vorlaufzeit_tage, 1, 0)" : "0") . " AS verschieberegel_erfuellt" + . "\n FROM #__sportsmanager_begegnung" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + // Vorgeschlagene Termine ermitteln + $query = "SELECT #__sportsmanager_begegnung_historie.aktion" + . "\n FROM #__sportsmanager_begegnung_historie" + . "\n WHERE begegnung_id = $id" + . "\n ORDER BY begegnung_historie_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $verlegen_aktionen = $db->loadObjectList(); + + if (!$begegnung->verschieberegel_erfuellt && (count($verlegen_aktionen) == 0 || $verlegen_aktionen[0]->aktion == 1 || $verlegen_aktionen[0]->aktion == 5 || $verlegen_aktionen[0]->aktion == 10)) { + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + keinZugriff(); + } + + $aktueller_zeitpunkt = date('Y-m-d H:i:s'); + if (count($verlegen_aktionen) == 0 || $verlegen_aktionen[0]->aktion == 1 || $verlegen_aktionen[0]->aktion == 5 || $verlegen_aktionen[0]->aktion == 10) { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 2, '$begegnung->zeitpunkt', NULL, NULL, NULL, NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + + if ($angefordert) { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 3, NULL, '$user_id', '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } else if ($abgelehnt) { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 10, NULL, '$user_id', '$vorschlagendes_team_id', NULL, NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } else if (count($termine) == 0) { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 4, NULL, '$user_id', '$vorschlagendes_team_id', '$vorschlagendes_team_id', NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } else { + for ($i = count($termine) - 1; $i >= 0; $i--) { + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 0, '" . $termine[$i] . "', '$user_id', '$vorschlagendes_team_id', '" . ($vorschlagendes_team_id == $begegnung->heim_team_id ? $begegnung->gast_team_id : $begegnung->heim_team_id) . "', '" . $db->escape($kommentare[$i]) . "', '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + } + } + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + // Benachrichtigung schreiben + // Heimteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + // Gastteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $subject = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_SUBJECT', $heim_team->teamname, $gast_team->teamname); + + if ($angefordert) { + $body = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REQUESTED_BODY', $heim_team->teamname, $gast_team->teamname, FormatiertesDatum($begegnung->zeitpunkt), $veranstaltung->bezeichnung, ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname), SportsManagerURL('&task=begegnung_verlegen_form&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1)); + } else if ($abgelehnt) { + $subject = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REJECTED_SUBJECT', $heim_team->teamname, $gast_team->teamname); + $body = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_REJECTED_BODY', $heim_team->teamname, $gast_team->teamname, FormatiertesDatum($begegnung->zeitpunkt), $veranstaltung->bezeichnung, ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname), SportsManagerURL('&task=begegnung_verlegen_form&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1)); + } else if (count($termine) == 0) { + $body = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_PENDING_BODY', $heim_team->teamname, $gast_team->teamname, FormatiertesDatum($begegnung->zeitpunkt), $veranstaltung->bezeichnung, ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname), SportsManagerURL('&task=begegnung_verlegen_form&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1)); + } else { + $body = JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY', $heim_team->teamname, $gast_team->teamname, FormatiertesDatum($begegnung->zeitpunkt), $veranstaltung->bezeichnung, ($vorschlagendes_team_id == $heim_team->team_id ? $heim_team->teamname : $gast_team->teamname)); + foreach ($termine as $termin) + $body .= " " . FormatiertesDatum($termin) . "\n"; + $body .= JText::sprintf('COM_SPORTSMANAGER_EMAIL_SHIFT_GAME_APPOINTMENT_BODY2', SportsManagerURL('&task=begegnung_verlegen_form&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1)); + } + + $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + foreach ($rows as $row) { + JFactory::getMailer()->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + } + + begegnungVerlegenNotify($begegnung, $rows, $vorschlagendes_team_id, $heim_team, $gast_team); + + if (isJson()) { + begegnungVerlegenForm(); + } else { + redirectSportsManagerURL('&task=' . ($aus_uebersicht ? 'veranstaltungen' : 'veranstaltung') . '&veranstaltungid=' . $veranstaltungid); + } + } + + function begegnungVerlegenBestaetigen() { + $app = &JFactory::getApplication(); + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + $veranstaltungid = $jinput->get('veranstaltungid', 0, 'INT'); + if ($veranstaltungid == 0) { + abortWithError("Missing id!"); + } + $begegnung_historie_id = isJson() ? $jinput->json->get('begegnung_historie_id', 0, 'INT') : $jinput->get('begegnung_historie_id', 0, 'INT'); + $aus_uebersicht = $jinput->get('aus_uebersicht', 0, 'INT'); + + $user_id = isExternalDatabase() ? 0 : (isJson() ? getUserID() : JFactory::getUser()->id); + // Ermitteln, ob Benutzer berechtigt für das Akzeptieren eines Termins ist + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_berechtigt_fuer_team" + . "\n WHERE (SELECT verantwortlich_team_id FROM #__sportsmanager_begegnung_historie USE INDEX (begegnung_id) WHERE #__sportsmanager_begegnung_historie.begegnung_id = $id ORDER BY begegnung_historie_id DESC LIMIT 1) = berechtigt_team_id AND berechtigt_user_id = $user_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $berechtigt_fuer_akzeptieren = $db->loadResult(); + if ($berechtigt_fuer_akzeptieren == 0) { + keinZugriff(); + } + + $query = "SELECT t1.berechtigt_team_id FROM #__sportsmanager_berechtigt_fuer_team AS t1, #__sportsmanager_begegnung WHERE begegnung_id = $id AND berechtigt_user_id = $user_id AND (berechtigt_team_id = heim_team_id OR berechtigt_team_id = gast_team_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) == 0) { + keinZugriff(); + } + $vorschlagendes_team_id = $rows[0]->berechtigt_team_id; + + // Akzeptierten Termine ermitteln + $query = "SELECT * FROM #__sportsmanager_begegnung_historie WHERE begegnung_historie_id = $begegnung_historie_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $termin = $rows[0]; + + $aktueller_zeitpunkt = date('Y-m-d H:i:s'); + $query = "INSERT INTO #__sportsmanager_begegnung_historie (begegnung_id, aktion, zeitpunkt, user_id, team_id, verantwortlich_team_id, kommentar, eingetragen)" + . "\n VALUES ($id, 1, '$termin->zeitpunkt', '$user_id', '$vorschlagendes_team_id', NULL, NULL, '$aktueller_zeitpunkt');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET zeitpunkt = '$termin->zeitpunkt'" + . "\n WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + + // Benachrichtigung schreiben + // Veranstaltung ermitteln + $query = "SELECT #__sportsmanager_veranstaltung.*," + . "\n #__sportsmanager_verschieberegel.verschieberegel_id," + . "\n #__sportsmanager_verschieberegel.initial_ohne_termin," + . "\n #__sportsmanager_verschieberegel.keine_gegenvorschlaege," + . "\n #__sportsmanager_verschieberegel.vorlaufzeit_tage," + . "\n #__sportsmanager_verschieberegel.termine_minimal," + . "\n #__sportsmanager_verschieberegel.termine_maximal" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n LEFT JOIN #__sportsmanager_verschieberegel USING (verschieberegel_id)" + . "\n WHERE veranstaltung_id = $veranstaltungid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $veranstaltung = $rows[0]; + + // Begegnung ermitteln + $query = "SELECT * FROM #__sportsmanager_begegnung WHERE begegnung_id = $id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $begegnung = $rows[0]; + + // Heimteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $heim_team = $rows[0]; + + // Gastteam ermitteln + $query = "SELECT * FROM #__sportsmanager_team WHERE team_id = $begegnung->gast_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $gast_team = $rows[0]; + + $mailfrom = $app->getCfg('mailfrom'); + $fromname = $app->getCfg('fromname'); + $subject = JText::sprintf('COM_SPORTSMANAGER_EMAIL_GAME_APPOINTMENT_SHIFTED_SUBJECT', $heim_team->teamname, $gast_team->teamname); + $body = JText::sprintf('COM_SPORTSMANAGER_EMAIL_GAME_APPOINTMENT_SHIFTED_BODY', $heim_team->teamname, $gast_team->teamname, "termin", $veranstaltung->bezeichnung, FormatiertesDatum($begegnung->zeitpunkt), SportsManagerURL('&task=begegnung_verlegen_form&veranstaltungid=' . $veranstaltungid . '&id=' . $id, -1)); + $query = "SELECT * FROM #__users AS t1, #__sportsmanager_berechtigt_fuer_team AS t2 WHERE t1.id = t2.berechtigt_user_id AND (t2.berechtigt_team_id = " . $begegnung->heim_team_id . " OR t2.berechtigt_team_id = " . $begegnung->gast_team_id . ")"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + foreach ($rows as $row) { + JFactory::getMailer()->sendMail($mailfrom, $fromname, $row->email, $subject, $body); + } + + if (isJson()) { + JSON_sportsmanager::JSON([]); +// adminEditBegegnungSpielplan(0); + } else { + redirectSportsManagerURL('&task=' . ($aus_uebersicht ? 'veranstaltungen' : 'veranstaltung') . '&veranstaltungid=' . $veranstaltungid); + } + } + + function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaenderter_teamspiel_modus_id = 0) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_veranstaltung READ, #__sportsmanager_team AS t1 READ," + . "#__sportsmanager_begegnung AS ttb1 READ, " + . "#__sportsmanager_begegnung AS ttb2 READ, " + . "#__sportsmanager_begegnung AS ttb3 READ, " + . "#__sportsmanager_begegnung AS ttb4 READ, " + . "#__sportsmanager_begegnung AS ttb5 READ, " + . "#__sportsmanager_begegnung AS ttb6 READ, " + . "#__sportsmanager_begegnung AS ttb7 READ, " + . "#__sportsmanager_begegnung AS ttb8 READ, " + . "#__sportsmanager_begegnung AS ttb9 READ, " + . "#__sportsmanager_begegnung AS ttb10 READ, " + . "#__sportsmanager_begegnung AS ttb11 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu1 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu2 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu3 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu4 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu5 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu6 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu7 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu8 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu9 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu10 READ, " + . "#__sportsmanager_unbestaetigtes_ergebnis AS ttu11 READ, " + . "#__sportsmanager_team WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_veranstaltung"; + if ($geaenderte_veranstaltung_id != 0) + $query .= "\n WHERE veranstaltung_id = $geaenderte_veranstaltung_id"; + else if ($geaenderter_teamspiel_modus_id != 0) + $query .= "\n WHERE $geaenderter_teamspiel_modus_id = modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + foreach ($veranstaltungen as $veranstaltung) { + if ($veranstaltung->tabellenwertung > 0) { + $query = "UPDATE #__sportsmanager_team" + . "\n LEFT JOIN" + . "\n (SELECT t1.team_id," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS ttb1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu1 ON ttb1.begegnung_id = ttu1.begegnung_id WHERE ISNULL(ttu1.unbestaetigtes_ergebnis_id) AND ((ttb1.heim_team_id = t1.team_id AND ttb1.heim_spielpunkte > ttb1.gast_spielpunkte) OR (ttb1.gast_team_id = t1.team_id AND ttb1.gast_spielpunkte > ttb1.heim_spielpunkte)) AND (ttb1.heim_punkte != 0 OR ttb1.gast_punkte != 0)) AS siege," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS ttb2 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu2 ON ttb2.begegnung_id = ttu2.begegnung_id WHERE ISNULL(ttu2.unbestaetigtes_ergebnis_id) AND (ttb2.heim_team_id = t1.team_id OR ttb2.gast_team_id = t1.team_id) AND ttb2.heim_spielpunkte = ttb2.gast_spielpunkte AND (ttb2.heim_punkte != 0 OR ttb2.gast_punkte != 0)) AS unentschieden," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_begegnung AS ttb3 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu3 ON ttb3.begegnung_id = ttu3.begegnung_id WHERE ISNULL(ttu3.unbestaetigtes_ergebnis_id) AND ((ttb3.heim_team_id = t1.team_id AND ttb3.heim_spielpunkte < ttb3.gast_spielpunkte) OR (ttb3.gast_team_id = t1.team_id AND ttb3.gast_spielpunkte < ttb3.heim_spielpunkte)) AND (ttb3.heim_punkte != 0 OR ttb3.gast_punkte != 0)) AS niederlagen," + . "\n (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb4 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu4 ON ttb4.begegnung_id = ttu4.begegnung_id WHERE ISNULL(ttu4.unbestaetigtes_ergebnis_id) AND ttb4.heim_team_id = t1.team_id AND (ttb4.heim_punkte != 0 OR ttb4.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb5 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu5 ON ttb5.begegnung_id = ttu5.begegnung_id WHERE ISNULL(ttu5.unbestaetigtes_ergebnis_id) AND ttb5.gast_team_id = t1.team_id AND (ttb5.heim_punkte != 0 OR ttb5.gast_punkte != 0)), 0)) AS spielpunkte_gewonnen," + . "\n (COALESCE((SELECT SUM(gast_spielpunkte) FROM #__sportsmanager_begegnung AS ttb6 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu6 ON ttb6.begegnung_id = ttu6.begegnung_id WHERE ISNULL(ttu6.unbestaetigtes_ergebnis_id) AND ttb6.heim_team_id = t1.team_id AND (ttb6.heim_punkte != 0 OR ttb6.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_spielpunkte) FROM #__sportsmanager_begegnung AS ttb7 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu7 ON ttb7.begegnung_id = ttu7.begegnung_id WHERE ISNULL(ttu7.unbestaetigtes_ergebnis_id) AND ttb7.gast_team_id = t1.team_id AND (ttb7.heim_punkte != 0 OR ttb7.gast_punkte != 0)), 0)) AS spielpunkte_verloren," + . "\n (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb8 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu8 ON ttb8.begegnung_id = ttu8.begegnung_id WHERE ISNULL(ttu8.unbestaetigtes_ergebnis_id) AND ttb8.heim_team_id = t1.team_id AND (ttb8.heim_punkte != 0 OR ttb8.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb9 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu9 ON ttb9.begegnung_id = ttu9.begegnung_id WHERE ISNULL(ttu9.unbestaetigtes_ergebnis_id) AND ttb9.gast_team_id = t1.team_id AND (ttb9.heim_punkte != 0 OR ttb9.gast_punkte != 0)), 0)) AS punkte_gewonnen," + . "\n (COALESCE((SELECT SUM(gast_punkte) FROM #__sportsmanager_begegnung AS ttb10 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu10 ON ttb10.begegnung_id = ttu10.begegnung_id WHERE ISNULL(ttu10.unbestaetigtes_ergebnis_id) AND ttb10.heim_team_id = t1.team_id AND (ttb10.heim_punkte != 0 OR ttb10.gast_punkte != 0)), 0)) + (COALESCE((SELECT SUM(heim_punkte) FROM #__sportsmanager_begegnung AS ttb11 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu11 ON ttb11.begegnung_id = ttu11.begegnung_id WHERE ISNULL(ttu11.unbestaetigtes_ergebnis_id) AND ttb11.gast_team_id = t1.team_id AND (ttb11.heim_punkte != 0 OR ttb11.gast_punkte != 0)), 0)) AS punkte_verloren" + . "\n FROM #__sportsmanager_team AS t1 WHERE veranstaltung_id = $veranstaltung->veranstaltung_id)" + . "\n AS werte USING (team_id)" + . "\n SET #__sportsmanager_team.siege = werte.siege," + . "\n #__sportsmanager_team.gesamtpunkte = werte.siege * " . ($veranstaltung->tabellenwertung % 20 <= 3 ? "2" : ($veranstaltung->tabellenwertung % 20 <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung % 20 <= 6 ? " + werte.unentschieden" : "") . " + COALESCE(zusatzpunkte, 0)," + . "\n #__sportsmanager_team.begegnungspunkte = werte.siege * " . ($veranstaltung->tabellenwertung % 20 <= 3 ? "2" : ($veranstaltung->tabellenwertung % 20 <= 6 ? "3" : "1")) . ($veranstaltung->tabellenwertung % 20 <= 6 ? " + werte.unentschieden" : "") . "," + . "\n #__sportsmanager_team.unentschieden = werte.unentschieden," + . "\n #__sportsmanager_team.niederlagen = werte.niederlagen," + . "\n #__sportsmanager_team.punkte_gewonnen = werte.punkte_gewonnen," + . "\n #__sportsmanager_team.punkte_verloren = werte.punkte_verloren," + . "\n #__sportsmanager_team.punkte_differenz = werte.punkte_gewonnen - werte.punkte_verloren," + . "\n #__sportsmanager_team.punkte_quotient = IF(werte.punkte_verloren = 0, -1, werte.punkte_gewonnen / werte.punkte_verloren)," + . "\n #__sportsmanager_team.spielpunkte_gewonnen = werte.spielpunkte_gewonnen," + . "\n #__sportsmanager_team.spielpunkte_verloren = werte.spielpunkte_verloren," + . "\n #__sportsmanager_team.spielpunkte_differenz = werte.spielpunkte_gewonnen - werte.spielpunkte_verloren," + . "\n #__sportsmanager_team.spielpunkte_quotient = IF(werte.spielpunkte_verloren = 0, -1, werte.spielpunkte_gewonnen / werte.spielpunkte_verloren)," + . "\n #__sportsmanager_team.buchholz1 = 0," + . "\n #__sportsmanager_team.buchholz2 = 0" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($veranstaltung->tabellenwertung >= 21) { + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $punkte = array(); + $buchholz1 = array(); + $buchholz2 = array(); + foreach ($teams as $team) { + $punkte[$team->team_id] = $team->gesamtpunkte; + $buchholz1[$team->team_id] = 0; + $buchholz2[$team->team_id] = 0; + } + + $query = "SELECT heim_team_id, gast_team_id" + . "\n FROM #__sportsmanager_begegnung AS ttb1" + . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = team_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu1 ON ttb1.begegnung_id = ttu1.begegnung_id" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id AND ISNULL(ttu1.unbestaetigtes_ergebnis_id) AND (ttb1.heim_punkte != 0 OR ttb1.gast_punkte != 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $paarungen = $db->loadObjectList(); + + foreach ($paarungen as $paarung) { + $buchholz1[$paarung->heim_team_id] += $punkte[$paarung->gast_team_id]; + $buchholz1[$paarung->gast_team_id] += $punkte[$paarung->heim_team_id]; + } + foreach ($paarungen as $paarung) { + $buchholz2[$paarung->heim_team_id] += $buchholz1[$paarung->gast_team_id]; + $buchholz2[$paarung->gast_team_id] += $buchholz1[$paarung->heim_team_id]; + } + + foreach ($teams as $team) { + $buchholz1_wert = $buchholz1[$team->team_id]; + $buchholz2_wert = $buchholz2[$team->team_id]; + $team_id = $team->team_id; + $query = "UPDATE #__sportsmanager_team" + . "\n SET #__sportsmanager_team.buchholz1 = $buchholz1_wert," + . "\n #__sportsmanager_team.buchholz2 = $buchholz2_wert" + . "\n WHERE team_id = $team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "SELECT * FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; + if ($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7) + $query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8) + $query .= "\n ORDER BY gesamtpunkte DESC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) + $query .= "\n ORDER BY gesamtpunkte DESC, buchholz1 DESC, buchholz2 DESC, spielpunkte_differenz DESC, punkte_differenz DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) + $query .= "\n ORDER BY gesamtpunkte DESC, buchholz1 DESC, buchholz2 DESC, spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 10) + $query .= "\n ORDER BY spielpunkte_differenz DESC, punkte_differenz DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 11) + $query .= "\n ORDER BY spielpunkte_quotient DESC, punkte_quotient DESC, teamname"; + else if ($veranstaltung->tabellenwertung == 23 || $veranstaltung->tabellenwertung == 26 || $veranstaltung->tabellenwertung == 29) + $query .= "\n ORDER BY gesamtpunkte DESC, buchholz1 DESC, buchholz2 DESC, teamname"; + else // ($veranstaltung->tabellenwertung == 3, 6, 9) + $query .= "\n ORDER BY gesamtpunkte DESC, teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $platz = 1; + $tatsaechlicher_platz = 0; + $gesamtpunkte = 0; + $spielpunkte_differenz = 0; + $spielpunkte_quotient = 0; + $punkte_differenz = 0; + $punkte_quotient = 0; + $buchholz1_wert = 0; + $buchholz2_wert = 0; + foreach ($teams as $team) { + if ($platz == 1 || (($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte) || (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz)) || (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11 || $veranstaltung->tabellenwertung == 22 || $veranstaltung->tabellenwertung == 25 || $veranstaltung->tabellenwertung == 28) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient)) || (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert))) + $tatsaechlicher_platz = $platz; + $query = "UPDATE #__sportsmanager_team" + . "\n SET platz = $tatsaechlicher_platz"; + $query .= "\n WHERE team_id = $team->team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $gesamtpunkte = $team->gesamtpunkte; +// $begegnungspunkte = $team->begegnungspunkte; +// $zusatzpunkte = $team->zusatzpunkte; + $punkte_quotient = $team->punkte_quotient; + $punkte_differenz = $team->punkte_differenz; +// $punkte_gewonnen = $team->punkte_gewonnen; +// $punkte_verloren = $team->punkte_verloren; + $spielpunkte_quotient = $team->spielpunkte_quotient; + $spielpunkte_differenz = $team->spielpunkte_differenz; +// $spielpunkte_gewonnen = $team->spielpunkte_gewonnen; +// $spielpunkte_verloren = $team->spielpunkte_verloren; + $buchholz1_wert = $team->buchholz1; + $buchholz2_wert = $team->buchholz2; + $platz++; + } + } else if ($veranstaltung->tabellenwertung == -1) { + $query = "SELECT #__sportsmanager_team.*," + . "\n (SELECT spieltag FROM #__sportsmanager_begegnung AS ttb1 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu1 ON ttb1.begegnung_id = ttu1.begegnung_id WHERE ISNULL(ttu1.unbestaetigtes_ergebnis_id) AND (ttb1.heim_spielpunkte != 0 OR ttb1.gast_spielpunkte != 0) AND (ttb1.heim_team_id = #__sportsmanager_team.team_id OR ttb1.gast_team_id = #__sportsmanager_team.team_id) ORDER BY spieltag DESC LIMIT 1) AS letzter_spieltag," + . "\n (SELECT IF((heim_team_id = team_id AND heim_spielpunkte > gast_spielpunkte) OR (gast_team_id = team_id AND heim_spielpunkte < gast_spielpunkte), TRUE, FALSE) FROM #__sportsmanager_begegnung AS ttb2 LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis AS ttu2 ON ttb2.begegnung_id = ttu2.begegnung_id WHERE ISNULL(ttu2.unbestaetigtes_ergebnis_id) AND (ttb2.heim_spielpunkte != 0 OR ttb2.gast_spielpunkte != 0) AND (ttb2.heim_team_id = #__sportsmanager_team.team_id OR ttb2.gast_team_id = #__sportsmanager_team.team_id) ORDER BY spieltag DESC LIMIT 1) AS zuletzt_gewonnen" + . "\n FROM #__sportsmanager_team" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id" + . "\n ORDER BY letzter_spieltag DESC, zuletzt_gewonnen DESC, teamname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teams = $db->loadObjectList(); + + $query = "UPDATE #__sportsmanager_team" + . "\n SET #__sportsmanager_team.platz = NULL," + . "\n #__sportsmanager_team.siege = NULL," + . "\n #__sportsmanager_team.gesamtpunkte = NULL," + . "\n #__sportsmanager_team.begegnungspunkte = NULL," + . "\n #__sportsmanager_team.unentschieden = NULL," + . "\n #__sportsmanager_team.niederlagen = NULL," + . "\n #__sportsmanager_team.punkte_gewonnen = NULL," + . "\n #__sportsmanager_team.punkte_verloren = NULL," + . "\n #__sportsmanager_team.punkte_differenz = NULL," + . "\n #__sportsmanager_team.punkte_quotient = NULL," + . "\n #__sportsmanager_team.spielpunkte_gewonnen = NULL," + . "\n #__sportsmanager_team.spielpunkte_verloren = NULL," + . "\n #__sportsmanager_team.spielpunkte_differenz = NULL," + . "\n #__sportsmanager_team.spielpunkte_quotient = NULL," + . "\n #__sportsmanager_team.buchholz1 = NULL," + . "\n #__sportsmanager_team.buchholz2 = NULL" + . "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (count($teams) > 0 && $teams[0]->letzter_spieltag >= 19992) { + $letzter_spieltag = 0; + $spieltag_einmal_vollstaendig = FALSE; + $spieltag_verlorene_begegnungen = 0; + $letzter_gespielter_spieltag_platz = 0; + $letzter_gespielter_spieltag_mannschaften = 0; + $teams_aufgefuehrt = 0; + $spieltag_mannschaften = 0; + foreach ($teams as $team) { + if ($team->letzter_spieltag >= 20000) { + if (99 - floor(($team->letzter_spieltag - 20000) / 100) != 1) + continue; + $neuer_platz = 99 - ($team->letzter_spieltag % 100) + ($team->zuletzt_gewonnen ? 0 : 1); + } + else if ($team->letzter_spieltag == 19999) + $neuer_platz = $team->zuletzt_gewonnen ? 1 : 2; + else if ($team->letzter_spieltag == 19998) + $neuer_platz = $team->zuletzt_gewonnen ? 3 : 4; + else if ($team->letzter_spieltag >= 19992) { + if ($team->zuletzt_gewonnen) + continue; + $neuer_platz = pow(2, 19998 - $team->letzter_spieltag) + 1; + } + else { + if ($team->letzter_spieltag == NULL && !$spieltag_einmal_vollstaendig) + break; + if ($team->letzter_spieltag != $letzter_spieltag) + $neuer_platz = $letzter_gespielter_spieltag_platz + $letzter_gespielter_spieltag_mannschaften; + } + + if ($team->letzter_spieltag != $letzter_spieltag) + $spieltag_mannschaften = 1; + else + $spieltag_mannschaften++; + + if ($team->letzter_spieltag != $letzter_spieltag) + $spieltag_verlorene_begegnungen = $team->zuletzt_gewonnen ? 0 : 1; + else if (!$team->zuletzt_gewonnen) + $spieltag_verlorene_begegnungen++; + if ($team->letzter_spieltag == 19999 || $team->letzter_spieltag == 19998 || + ($team->letzter_spieltag >= 19992 && $team->letzter_spieltag <= 19997 && $spieltag_verlorene_begegnungen == pow(2, 19998 - $team->letzter_spieltag))) + $spieltag_einmal_vollstaendig = TRUE; + + $query = "UPDATE #__sportsmanager_team" + . "\n SET #__sportsmanager_team.platz = $neuer_platz" + . "\n WHERE team_id = $team->team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $letzter_spieltag = $team->letzter_spieltag; + if ($letzter_spieltag != NULL && $neuer_platz >= $letzter_gespielter_spieltag_platz) { + if ($letzter_gespielter_spieltag_platz != $neuer_platz) { + $letzter_gespielter_spieltag_mannschaften = 1; + $letzter_gespielter_spieltag_platz = $neuer_platz; + } else + $letzter_gespielter_spieltag_mannschaften++; + } + $teams_aufgefuehrt++; + } + } + } else { // $veranstaltung->tabellenwertung == -2 + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnierdisziplin_id = 0, $geaenderte_spieler_id = 0, $berechnungen_auswerten = FALSE) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_berechnung WRITE, #__sportsmanager_rangliste READ, #__sportsmanager_rangliste AS r2 READ, #__sportsmanager_spieler READ, #__sportsmanager_rangliste_system READ, #__sportsmanager_rangliste_system_punkte READ, #__sportsmanager_rangliste_turnierdisziplin READ, #__sportsmanager_rangliste_punkte WRITE, #__sportsmanager_rangliste_turnierdisziplin_punkte WRITE, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_turniermeldung READ, #__sportsmanager_turnierdisziplin READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($geaenderte_spieler_id != 0) { + $query = "SELECT DISTINCT #__sportsmanager_rangliste.*" + . "\n FROM #__sportsmanager_turniermeldung_spieler" + . "\n INNER JOIN #__sportsmanager_turniermeldung USING (turniermeldung_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n INNER JOIN #__sportsmanager_rangliste_turnierdisziplin USING (turnierdisziplin_id)" + . "\n INNER JOIN #__sportsmanager_rangliste USING (rangliste_id)" + . "\n WHERE spieler_id = $geaenderte_spieler_id AND rundenstufe = 0"; + } else if ($berechnungen_auswerten) { + $session_id = redirectRequestGetSessionId(); + $query = "SELECT DISTINCT #__sportsmanager_rangliste.*" + . "\n FROM #__sportsmanager_berechnung" + . "\n INNER JOIN #__sportsmanager_rangliste ON id = rangliste_id" + . "\n WHERE typ = 'rangliste' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $berechnungen = $db->loadObjectList(); + } else if ($geaenderte_rangliste_id != 0) { + $query = "SELECT * FROM #__sportsmanager_rangliste" + . "\n WHERE rangliste_id = $geaenderte_rangliste_id"; + } else if ($geaenderte_turnierdisziplin_id != 0) { + $query = "SELECT DISTINCT #__sportsmanager_rangliste.*" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_rangliste USING (rangliste_id)" + . "\n WHERE turnierdisziplin_id = $geaenderte_turnierdisziplin_id" + . "\nUNION" + . "\nSELECT DISTINCT r2.*" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin_punkte" + . "\n INNER JOIN #__sportsmanager_rangliste AS r2 USING (rangliste_id)" + . "\n WHERE turnierdisziplin_id = $geaenderte_turnierdisziplin_id"; + } else { + $query = "SELECT * FROM #__sportsmanager_rangliste"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + $error_level = error_reporting(E_ERROR); + $math = new MathParserSM; + + foreach ($ranglisten as $rangliste_index => $rangliste) { + $rangliste_id = $rangliste->rangliste_id; + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n WHERE #__sportsmanager_turnierdisziplin.status > 0 AND rangliste_id = $rangliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierdisziplinen = $db->loadObjectList(); + + $query = "DELETE FROM #__sportsmanager_rangliste_punkte WHERE rangliste_id = $rangliste_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "DELETE FROM #__sportsmanager_rangliste_turnierdisziplin_punkte WHERE rangliste_id = $rangliste_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $punkte = array(); + $teilnahmen = array(); + + $systeme = array(); + $systemepunkte = array(); + foreach ($turnierdisziplinen as $turnierdisziplin) { + $systemid = $turnierdisziplin->system_id != NULL ? $turnierdisziplin->system_id : $rangliste->system_id; + if ($systemid == 0) + continue; + if (!isset($systeme[$systemid])) { + $query = "SELECT * FROM #__sportsmanager_rangliste_system WHERE rangliste_system_id = $systemid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $systeme[$systemid] = $rows[0]; + + $query = "SELECT * FROM #__sportsmanager_rangliste_system_punkte WHERE system_id = $systemid"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $systemepunkte[$systemid] = $db->loadObjectList(); + } + $system = $systeme[$systemid]; + $systempunkte = $systemepunkte[$systemid]; + + $query = "SELECT turniermeldung_id, platz, spieler_id, geburtsjahr, geschlecht" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE turnierdisziplin_id = $turnierdisziplin->turnierdisziplin_id AND rundenstufe = 0" // AND NOT ISNULL(spieler_id) + . "\n ORDER BY turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierplatzierungen = $db->loadObjectList(); + + $jahr = $turnierdisziplin->beginn != NULL ? intval(substr($turnierdisziplin->beginn, 0, 4)) : 0; + $teilnehmer = 0; + $turniermeldung_id = 0; + foreach ($turnierplatzierungen as $turnierplatzierung) { + if ($turnierplatzierung->turniermeldung_id != $turniermeldung_id) { + $teilnehmer++; + $turniermeldung_id = $turnierplatzierung->turniermeldung_id; + } + } + + $math->setVariable('n', $teilnehmer); + $wertung_multiplikator_normal = $turnierdisziplin->wertung > 0 ? $turnierdisziplin->wertung : (1 / abs($turnierdisziplin->wertung)); + $wertung_multiplikator_reduziert = $turnierdisziplin->doppel_teilwertung == 0 ? 0 : ($turnierdisziplin->doppel_teilwertung > 0 ? ($wertung_multiplikator_normal * $turnierdisziplin->doppel_teilwertung) : ($wertung_multiplikator_normal / abs($turnierdisziplin->doppel_teilwertung))); + $wertung_multiplikator_einheitlich = $wertung_multiplikator_normal == $wertung_multiplikator_reduziert; + $math->setVariable('m', $wertung_multiplikator_normal); + if ($systemid != 0 && $system->funktion != NULL) + $math->setExpression($system->funktion); + + $db->transactionStart(); + $meldungen = array(); + foreach ($turnierplatzierungen as $index => $turnierplatzierung) { + if (empty($turnierplatzierung->spieler_id)) + continue; + + if (!$rangliste->ohnealter && (empty($jahr) || empty($turnierplatzierung->geburtsjahr))) + continue; + if (!empty($turnierplatzierung->geburtsjahr) && !empty($jahr) && (!empty($rangliste->minalter) || !empty($rangliste->maxalter))) { + if (!empty($rangliste->minalter) && $jahr - $turnierplatzierung->geburtsjahr - 1 < $rangliste->minalter) + continue; + if (!empty($rangliste->maxalter) && $jahr - $turnierplatzierung->geburtsjahr - 1 > $rangliste->maxalter) + continue; + } + if (!empty($rangliste->geschlecht)) { + if ($rangliste->geschlecht == 1 && $turnierplatzierung->geschlecht != 'M') + continue; + if ($rangliste->geschlecht == 2 && $turnierplatzierung->geschlecht == 'M') + continue; + } + + $meldung_einzelner_doppelspieler_gewertet = FALSE; + if (!isset($meldungen[$turnierplatzierung->turniermeldung_id])) { + if ($turnierdisziplin->typ == 1) { + if (isset($turnierplatzierungen[$index + 1]) && $turnierplatzierungen[$index + 1]->turniermeldung_id == $turnierplatzierung->turniermeldung_id) { + $naechste_turnierplatzierung = $turnierplatzierungen[$index + 1]; + + if (empty($naechste_turnierplatzierung->spieler_id)) + $meldung_einzelner_doppelspieler_gewertet = TRUE; + else if (!$rangliste->ohnealter && empty($naechste_turnierplatzierung->geburtsjahr)) + $meldung_einzelner_doppelspieler_gewertet = TRUE; + else { + if (!empty($naechste_turnierplatzierung->geburtsjahr) && !empty($jahr) && (!empty($rangliste->minalter) || !empty($rangliste->maxalter))) { + if (!empty($rangliste->minalter) && $jahr - $naechste_turnierplatzierung->geburtsjahr - 1 < $rangliste->minalter) + $meldung_einzelner_doppelspieler_gewertet = TRUE; + else if (!empty($rangliste->maxalter) && $jahr - $naechste_turnierplatzierung->geburtsjahr - 1 > $rangliste->maxalter) + $meldung_einzelner_doppelspieler_gewertet = TRUE; + } + if (!$meldung_einzelner_doppelspieler_gewertet && !empty($rangliste->geschlecht)) { + if ($rangliste->geschlecht == 1 && $naechste_turnierplatzierung->geschlecht != 'M') + $meldung_einzelner_doppelspieler_gewertet = TRUE; + if ($rangliste->geschlecht == 2 && $naechste_turnierplatzierung->geschlecht == 'M') + $meldung_einzelner_doppelspieler_gewertet = TRUE; + } + } + } else + $meldung_einzelner_doppelspieler_gewertet = TRUE; + + if ($meldung_einzelner_doppelspieler_gewertet && $wertung_multiplikator_reduziert == 0) + continue; + } + $meldungen[$turnierplatzierung->turniermeldung_id] = array($turnierplatzierung->spieler_id); + } else if (!in_array($turnierplatzierung->spieler_id, $meldungen[$turnierplatzierung->turniermeldung_id])) + array_push($meldungen[$turnierplatzierung->turniermeldung_id], $turnierplatzierung->spieler_id); + + if (!isset($punkte[$turnierplatzierung->spieler_id])) { + $punkte[$turnierplatzierung->spieler_id] = array(); + $teilnahmen[$turnierplatzierung->spieler_id] = 1; + } else + $teilnahmen[$turnierplatzierung->spieler_id] ++; + + $p = 0; + if ($systemid != 0 && $system->funktion == NULL) { + foreach ($systempunkte as $sp) { + if (($sp->platz_min == 0 || $sp->platz_min <= $turnierplatzierung->platz) && ($sp->platz_max == 0 || $turnierplatzierung->platz <= $sp->platz_max) && ($sp->teilnehmer_min == 0 || $sp->teilnehmer_min <= $teilnehmer) && ($sp->teilnehmer_max == 0 || $teilnehmer <= $sp->teilnehmer_max)) { + + if ($turnierdisziplin->typ == 1 && $meldung_einzelner_doppelspieler_gewertet && $turnierdisziplin->doppel_teilwertung < 0) // Doppel + $p = round($sp->punkte * $wertung_multiplikator_reduziert); + else + $p = round($sp->punkte * $wertung_multiplikator_normal); + break; + } + } + } else { + $math->setVariable('p', $turnierplatzierung->platz); + if ($meldung_einzelner_doppelspieler_gewertet && !$wertung_multiplikator_einheitlich) { + $math->setVariable('m', $wertung_multiplikator_reduziert); + try { + $p = round($math->getValue()); + } catch (Exception $e) { + + } + $math->setVariable('m', $wertung_multiplikator_normal); + } else { + try { + $p = round($math->getValue()); + } catch (Exception $e) { + + } + } + } + array_push($punkte[$turnierplatzierung->spieler_id], $p); + $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin_punkte (rangliste_id, spieler_id, turnierdisziplin_id, platz, punkte) VALUES ('$rangliste_id', '$turnierplatzierung->spieler_id', '$turnierdisziplin->turnierdisziplin_id', '$turnierplatzierung->platz', '$p') ON DUPLICATE KEY UPDATE punkte = punkte + VALUES(punkte);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + $db->transactionCommit(); + } + + $punkte_summe = array(); + $anzahl_turnierdisziplinen = count($turnierdisziplinen); + $bewertete_turnierdisziplinen = $rangliste->streichergebnisse < 0 ? min($anzahl_turnierdisziplinen, abs($rangliste->streichergebnisse)) : ($anzahl_turnierdisziplinen - floor($anzahl_turnierdisziplinen * min(max($rangliste->streichergebnisse, 0), 100) / 100)); + foreach ($punkte as $spieler_id => $spieler_punkte) { + rsort($spieler_punkte, SORT_NUMERIC); + $spieler_punkte_summe = 0; + + for ($i = 0; $i < min($bewertete_turnierdisziplinen, count($spieler_punkte)); $i++) + $spieler_punkte_summe += $spieler_punkte[$i]; + + $punkte_summe[$spieler_id] = $spieler_punkte_summe; + } + + arsort($punkte_summe, SORT_NUMERIC); + $platz = 1; + $tatsaechlicher_platz = 1; + $spieler_punkte = 0; + + $db->transactionStart(); + foreach ($punkte_summe as $spieler_id => $spieler_punkte_summe) { + $spieler_teilnahmen = $teilnahmen[$spieler_id]; + if ($platz == 1 || $spieler_punkte != $spieler_punkte_summe) + $tatsaechlicher_platz = $platz; + + $query = "INSERT INTO #__sportsmanager_rangliste_punkte (rangliste_id, spieler_id, punkte, teilnahmen, platz) VALUES ('$rangliste_id', '$spieler_id', '$spieler_punkte_summe', '$spieler_teilnahmen', '$tatsaechlicher_platz') ON DUPLICATE KEY UPDATE punkte = VALUES(punkte), teilnahmen = VALUES(teilnahmen), platz = VALUES(platz);"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $spieler_punkte = $spieler_punkte_summe; + $platz++; + } + $db->transactionCommit(); + + // Unabhängig von $berechnungen_auswerten ausführen, um ggf. vorhandene Inhalte zu entfernen + $query = "DELETE FROM #__sportsmanager_berechnung WHERE typ = 'rangliste' AND id = $rangliste->rangliste_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (laufzeit() >= 10) { + if (!$berechnungen_auswerten) { + $session_id = redirectSessionIdSetzen(); + $db->transactionStart(); + for ($i = $rangliste_index + 1; $i < count($ranglisten); $i++) { + $rangliste_id = $ranglisten[$i]->rangliste_id; + $query = "INSERT INTO #__sportsmanager_berechnung (session_id, typ, id) VALUES ('$session_id', 'rangliste', '$rangliste_id');"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + $db->transactionCommit(); + } + break; + } + } + + error_reporting($error_level); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_modus_id = 0) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_veranstaltung READ, #__sportsmanager_teamspiel_modus READ, #__sportsmanager_team READ, #__sportsmanager_begegnung WRITE, #__sportsmanager_teamspiel WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($geaendert_veranstaltung_id != 0) { + $query = "SELECT * FROM #__sportsmanager_veranstaltung WHERE veranstaltung_id = $geaendert_veranstaltung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $veranstaltung = $rows[0]; + + $teamspiel_modus_id = $veranstaltung->modus_id; + } else + $teamspiel_modus_id = $geaendert_modus_id; + + $query = "SELECT * FROM #__sportsmanager_teamspiel_modus WHERE teamspiel_modus_id = $teamspiel_modus_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $teamspiel_modus = $rows[0]; + + $spielpunkte_wertung_einzel = $teamspiel_modus->spielpunkte_wertung_einzel; + $spielpunkte_wertung_doppel = $teamspiel_modus->spielpunkte_wertung_doppel; + + if ($geaendert_veranstaltung_id != 0) + $query = "SELECT #__sportsmanager_begegnung.begegnung_id, #__sportsmanager_veranstaltung.tabellenwertung FROM #__sportsmanager_veranstaltung, #__sportsmanager_team, #__sportsmanager_begegnung WHERE #__sportsmanager_veranstaltung.veranstaltung_id = $geaendert_veranstaltung_id AND #__sportsmanager_veranstaltung.veranstaltung_id = #__sportsmanager_team.veranstaltung_id AND #__sportsmanager_team.team_id = #__sportsmanager_begegnung.heim_team_id"; + else + $query = "SELECT #__sportsmanager_begegnung.begegnung_id, #__sportsmanager_veranstaltung.tabellenwertung FROM #__sportsmanager_veranstaltung, #__sportsmanager_team, #__sportsmanager_begegnung WHERE modus_id = $geaendert_modus_id AND #__sportsmanager_veranstaltung.veranstaltung_id = #__sportsmanager_team.veranstaltung_id AND #__sportsmanager_team.team_id = #__sportsmanager_begegnung.heim_team_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + foreach ($begegnungen as $begegnung) { + $query = "SELECT * FROM #__sportsmanager_teamspiel WHERE begegnung_id = $begegnung->begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + $total_heim_spielpunkte = 0; + $total_gast_spielpunkte = 0; + + foreach ($spiele as $spiel) { + $spiel_heim_punkte = $spiel->teamspiel_heim_punkte; + $spiel_gast_punkte = $spiel->teamspiel_gast_punkte; + + if ($spiel->heim_spieler_2_id === NULL && $spiel->gast_spieler_2_id === NULL) { + if ($spielpunkte_wertung_einzel == 2) { + $spiel_heim_spielpunkte = $spiel_heim_punkte; + $spiel_gast_spielpunkte = $spiel_gast_punkte; + } else { + if ($spiel_heim_punkte > $spiel_gast_punkte) { + $spiel_heim_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); + $spiel_gast_spielpunkte = 0; + } else if ($spiel_heim_punkte < $spiel_gast_punkte) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = $spielpunkte_wertung_einzel == 0 ? 2 : ($spielpunkte_wertung_einzel == 1 ? 3 : 1); + } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } else if ($spielpunkte_wertung_einzel != 3) { + $spiel_heim_spielpunkte = 1; + $spiel_gast_spielpunkte = 1; + } else { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + } + } else { + if ($spielpunkte_wertung_doppel == 2) { + $spiel_heim_spielpunkte = $spiel_heim_punkte; + $spiel_gast_spielpunkte = $spiel_gast_punkte; + } else { + if ($spiel_heim_punkte > $spiel_gast_punkte) { + $spiel_heim_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); + $spiel_gast_spielpunkte = 0; + } else if ($spiel_heim_punkte < $spiel_gast_punkte) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = $spielpunkte_wertung_doppel == 0 ? 2 : ($spielpunkte_wertung_doppel == 1 ? 3 : 1); + } else if ($spiel_heim_punkte == 0 && $spiel_gast_punkte == 0) { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } else if ($spielpunkte_wertung_doppel != 3) { + $spiel_heim_spielpunkte = 1; + $spiel_gast_spielpunkte = 1; + } else { + $spiel_heim_spielpunkte = 0; + $spiel_gast_spielpunkte = 0; + } + } + } + + $total_heim_spielpunkte += $spiel_heim_spielpunkte; + $total_gast_spielpunkte += $spiel_gast_spielpunkte; + + $query = "UPDATE #__sportsmanager_teamspiel" + . "\n SET teamspiel_heim_spielpunkte = '$spiel_heim_spielpunkte'," + . "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte'" + . "\n WHERE teamspiel_id = $spiel->teamspiel_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UPDATE #__sportsmanager_begegnung" + . "\n SET heim_spielpunkte = '$total_heim_spielpunkte'," + . "\n gast_spielpunkte = '$total_gast_spielpunkte'" + . "\n WHERE begegnung_id = $begegnung->begegnung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function spielerstatistikAktualisieren($geaenderte_spielerstatistik_id = 0, $geaenderte_veranstaltung_id = 0, $geaenderter_individualwettbewerb_id = 0, $geaenderter_teamspiel_modus_id = 0) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_bestenliste READ, #__sportsmanager_bestenliste_veranstaltung READ, #__sportsmanager_bestenliste_individualwettbewerb READ, #__sportsmanager_bestenliste_punkte WRITE, #__sportsmanager_veranstaltung READ, #__sportsmanager_begegnung READ, #__sportsmanager_team READ, #__sportsmanager_teamspiel READ, #__sportsmanager_unbestaetigtes_ergebnis READ, #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_spiel READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT * FROM #__sportsmanager_bestenliste"; + if ($geaenderte_spielerstatistik_id != 0) + $query .= "\n WHERE bestenliste_id = $geaenderte_spielerstatistik_id"; + else if ($geaenderte_veranstaltung_id != 0) + $query .= "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_veranstaltung WHERE $geaenderte_veranstaltung_id = veranstaltung_id AND #__sportsmanager_bestenliste_veranstaltung.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id) > 0"; + else if ($geaenderter_individualwettbewerb_id != 0) + $query .= "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_individualwettbewerb WHERE $geaenderter_individualwettbewerb_id = individualwettbewerb_id AND #__sportsmanager_bestenliste_individualwettbewerb.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id) > 0"; + else if ($geaenderter_teamspiel_modus_id != 0) + $query .= "\n WHERE (SELECT COUNT(*) FROM #__sportsmanager_bestenliste_veranstaltung INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id) WHERE $geaenderter_teamspiel_modus_id = modus_id AND #__sportsmanager_bestenliste_veranstaltung.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id) > 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + + foreach ($spielerstatistiken as $spielerstatistik) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste_veranstaltung" + . "\n INNER JOIN #__sportsmanager_veranstaltung USING (veranstaltung_id)" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND bestenliste_id = $spielerstatistik->bestenliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $veranstaltungen = $db->loadObjectList(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND bestenliste_id = $spielerstatistik->bestenliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + $punkte = array(); + + foreach ($veranstaltungen as $veranstaltung) { + $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte" + . "\n FROM #__sportsmanager_begegnung" + . "\n LEFT JOIN #__sportsmanager_team ON heim_team_id = #__sportsmanager_team.team_id" + . "\n LEFT JOIN #__sportsmanager_teamspiel ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_teamspiel.begegnung_id" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE ISNULL(unbestaetigtes_ergebnis_id) AND veranstaltung_id = $veranstaltung->veranstaltung_id"; + if ($spielerstatistik->typ == 1) + $query .= "\n AND ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id)"; + else if ($spielerstatistik->typ == 2 || $spielerstatistik->typ == 3) + $query .= "\n AND NOT (ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $begegnungen = $db->loadObjectList(); + + foreach ($begegnungen as $begegnung) { + $beteiligte = array(); + if ($spielerstatistik->typ != 3) { + if ($begegnung->heim_spieler_1_id != 0) + array_push($beteiligte, array($begegnung->heim_spieler_1_id, "H")); + if ($begegnung->heim_spieler_2_id != 0) + array_push($beteiligte, array($begegnung->heim_spieler_2_id, "H")); + if ($begegnung->gast_spieler_1_id != 0) + array_push($beteiligte, array($begegnung->gast_spieler_1_id, "G")); + if ($begegnung->gast_spieler_2_id != 0) + array_push($beteiligte, array($begegnung->gast_spieler_2_id, "G")); + } else { + if ($begegnung->heim_spieler_1_id != 0 && $begegnung->heim_spieler_2_id != 0) { + if ($begegnung->heim_spieler_1_id < $begegnung->heim_spieler_2_id) + $spieler_id = $begegnung->heim_spieler_1_id . "-" . $begegnung->heim_spieler_2_id; + else + $spieler_id = $begegnung->heim_spieler_2_id . "-" . $begegnung->heim_spieler_1_id; + array_push($beteiligte, array($spieler_id, "H")); + } + if ($begegnung->gast_spieler_1_id != 0 && $begegnung->gast_spieler_2_id != 0) { + if ($begegnung->gast_spieler_1_id < $begegnung->gast_spieler_2_id) + $spieler_id = $begegnung->gast_spieler_1_id . "-" . $begegnung->gast_spieler_2_id; + else + $spieler_id = $begegnung->gast_spieler_2_id . "-" . $begegnung->gast_spieler_1_id; + array_push($beteiligte, array($spieler_id, "G")); + } + } + $heim_punkte = $begegnung->teamspiel_heim_punkte; + $gast_punkte = $begegnung->teamspiel_gast_punkte; + $heim_spielpunkte = $begegnung->teamspiel_heim_spielpunkte; + $gast_spielpunkte = $begegnung->teamspiel_gast_spielpunkte; + $ergebnis = $heim_punkte > $gast_punkte ? 1 : ($heim_punkte < $gast_punkte ? 2 : 0); + $heim_saetze = $ergebnis == 1 ? 1 : 0; + $unentschieden_saetze = $ergebnis == 0 ? 1 : 0; + $gast_saetze = $ergebnis == 2 ? 1 : 0; + + foreach ($beteiligte as $beteiligter) { + $spieler_id = $beteiligter[0]; + $typ = $beteiligter[1]; + if (!isset($punkte[$spieler_id])) { + $punkte[$spieler_id] = array(); + $punkte[$spieler_id]["s"] = 0; + $punkte[$spieler_id]["u"] = 0; + $punkte[$spieler_id]["n"] = 0; + $punkte[$spieler_id]["spg"] = 0; + $punkte[$spieler_id]["spv"] = 0; + $punkte[$spieler_id]["sg"] = 0; + $punkte[$spieler_id]["su"] = 0; + $punkte[$spieler_id]["sv"] = 0; + $punkte[$spieler_id]["pg"] = 0; + $punkte[$spieler_id]["pv"] = 0; + } + if (($ergebnis == 1 && $typ == "H") || ($ergebnis == 2 && $typ != "H")) + $punkte[$spieler_id]["s"] += 1; + else if ($ergebnis != 0) + $punkte[$spieler_id]["n"] += 1; + else + $punkte[$spieler_id]["u"] += 1; + $punkte[$spieler_id]["spg"] += $typ == "H" ? $heim_spielpunkte : $gast_spielpunkte; + $punkte[$spieler_id]["spv"] += $typ != "H" ? $heim_spielpunkte : $gast_spielpunkte; + $punkte[$spieler_id]["sg"] += $typ == "H" ? $heim_saetze : $gast_saetze; + $punkte[$spieler_id]["su"] += $unentschieden_saetze; + $punkte[$spieler_id]["sv"] += $typ != "H" ? $heim_saetze : $gast_saetze; + $punkte[$spieler_id]["pg"] += $typ == "H" ? $heim_punkte : $gast_punkte; + $punkte[$spieler_id]["pv"] += $typ != "H" ? $heim_punkte : $gast_punkte; + } + } + } + + foreach ($individualwettbewerbe as $individualwettbewerb) { + $query = "SELECT heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis, ergebnis_detailliert" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n WHERE individualwettbewerb_id = $individualwettbewerb->individualwettbewerb_id"; + if ($spielerstatistik->typ == 1) + $query .= "\n AND ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id)"; + else if ($spielerstatistik->typ == 2 || $spielerstatistik->typ == 3) + $query .= "\n AND NOT (ISNULL(heim_spieler_2_id) AND ISNULL(gast_spieler_2_id))"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + foreach ($spiele as $spiel) { + $beteiligte = array(); + if ($spielerstatistik->typ != 3) { + if ($spiel->heim_spieler_1_id != 0) + array_push($beteiligte, array($spiel->heim_spieler_1_id, "H")); + if ($spiel->heim_spieler_2_id != 0) + array_push($beteiligte, array($spiel->heim_spieler_2_id, "H")); + if ($spiel->gast_spieler_1_id != 0) + array_push($beteiligte, array($spiel->gast_spieler_1_id, "G")); + if ($spiel->gast_spieler_2_id != 0) + array_push($beteiligte, array($spiel->gast_spieler_2_id, "G")); + } else { + if ($spiel->heim_spieler_1_id != 0 && $spiel->heim_spieler_2_id != 0) { + if ($spiel->heim_spieler_1_id < $spiel->heim_spieler_2_id) + $spieler_id = $spiel->heim_spieler_1_id . "-" . $spiel->heim_spieler_2_id; + else + $spieler_id = $spiel->heim_spieler_2_id . "-" . $spiel->heim_spieler_1_id; + array_push($beteiligte, array($spieler_id, "H")); + } + if ($spiel->gast_spieler_1_id != 0 && $spiel->gast_spieler_2_id != 0) { + if ($spiel->gast_spieler_1_id < $spiel->gast_spieler_2_id) + $spieler_id = $spiel->gast_spieler_1_id . "-" . $spiel->gast_spieler_2_id; + else + $spieler_id = $spiel->gast_spieler_2_id . "-" . $spiel->gast_spieler_1_id; + array_push($beteiligte, array($spieler_id, "G")); + } + } + $ergebnis_detailliert = $spiel->ergebnis_detailliert; + $ergebnis_auswertung = runden_detailliert_auswertung($ergebnis_detailliert); + $ergebnis = $ergebnis_auswertung[0]; + $heim_saetze = $ergebnis_auswertung[1]; + $unentschieden_saetze = $ergebnis_auswertung[2]; + $gast_saetze = $ergebnis_auswertung[3]; + $heim_punkte = $ergebnis_auswertung[4]; + $gast_punkte = $ergebnis_auswertung[5]; + $heim_spielpunkte = $ergebnis == 1 ? 2 : ($ergebnis == 2 ? 0 : 1); + $gast_spielpunkte = $ergebnis == 2 ? 2 : ($ergebnis == 1 ? 0 : 1); + + foreach ($beteiligte as $beteiligter) { + $spieler_id = $beteiligter[0]; + $typ = $beteiligter[1]; + if (!isset($punkte[$spieler_id])) { + $punkte[$spieler_id] = array(); + $punkte[$spieler_id]["s"] = 0; + $punkte[$spieler_id]["u"] = 0; + $punkte[$spieler_id]["n"] = 0; + $punkte[$spieler_id]["spg"] = 0; + $punkte[$spieler_id]["spv"] = 0; + $punkte[$spieler_id]["sg"] = 0; + $punkte[$spieler_id]["su"] = 0; + $punkte[$spieler_id]["sv"] = 0; + $punkte[$spieler_id]["pg"] = 0; + $punkte[$spieler_id]["pv"] = 0; + } + if (($ergebnis == 1 && $typ == "H") || ($ergebnis == 2 && $typ != "H")) + $punkte[$spieler_id]["s"] += 1; + else if ($ergebnis != 0) + $punkte[$spieler_id]["n"] += 1; + else + $punkte[$spieler_id]["u"] += 1; + $punkte[$spieler_id]["spg"] += $typ == "H" ? $heim_spielpunkte : $gast_spielpunkte; + $punkte[$spieler_id]["spv"] += $typ != "H" ? $heim_spielpunkte : $gast_spielpunkte; + $punkte[$spieler_id]["sg"] += $typ == "H" ? $heim_saetze : $gast_saetze; + $punkte[$spieler_id]["su"] += $unentschieden_saetze; + $punkte[$spieler_id]["sv"] += $typ != "H" ? $heim_saetze : $gast_saetze; + $punkte[$spieler_id]["pg"] += $typ == "H" ? $heim_punkte : $gast_punkte; + $punkte[$spieler_id]["pv"] += $typ != "H" ? $heim_punkte : $gast_punkte; + } + } + } + + $query = "SELECT bestenliste_punkte_id, spieler_id, spieler_2_id FROM #__sportsmanager_bestenliste_punkte WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + if ($spielerstatistik->typ != 3) + $spieler_id = $row->spieler_id; + else + $spieler_id = $row->spieler_id . "-" . $row->spieler_2_id; + + if (!isset($punkte[$spieler_id])) { + $query = "DELETE FROM #__sportsmanager_bestenliste_punkte WHERE bestenliste_id = $spielerstatistik->bestenliste_id AND spieler_id = $row->spieler_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } else { + $spieler_punkte = $punkte[$spieler_id]; + $spieler_punkte_siege = $spieler_punkte["s"]; + $spieler_punkte_unentschieden = $spieler_punkte["u"]; + $spieler_punkte_niederlagen = $spieler_punkte["n"]; + $spieler_punkte_spielpunkte_gewonnen = $spieler_punkte["spg"]; + $spieler_punkte_spielpunkte_verloren = $spieler_punkte["spv"]; + $spieler_punkte_saetze_gewonnen = $spieler_punkte["sg"]; + $spieler_punkte_saetze_unentschieden = $spieler_punkte["su"]; + $spieler_punkte_saetze_verloren = $spieler_punkte["sv"]; + $spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"]; + $spieler_punkte_punkte_verloren = $spieler_punkte["pv"]; + $query = "UPDATE #__sportsmanager_bestenliste_punkte" + . "\n SET siege = $spieler_punkte_siege," + . "\n unentschieden = $spieler_punkte_unentschieden," + . "\n niederlagen = $spieler_punkte_niederlagen," + . "\n spielpunkte_gewonnen = $spieler_punkte_spielpunkte_gewonnen," + . "\n spielpunkte_verloren = $spieler_punkte_spielpunkte_verloren," + . "\n saetze_gewonnen = $spieler_punkte_saetze_gewonnen," + . "\n saetze_unentschieden = $spieler_punkte_saetze_unentschieden," + . "\n saetze_verloren = $spieler_punkte_saetze_verloren," + . "\n punkte_gewonnen = $spieler_punkte_punkte_gewonnen," + . "\n punkte_verloren = $spieler_punkte_punkte_verloren" + . "\n WHERE bestenliste_punkte_id = $row->bestenliste_punkte_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + unset($punkte[$spieler_id]); + } + } + + foreach ($punkte as $spieler_id => $spieler_punkte) { + if ($spielerstatistik->typ != 3) { + $spieler_1_id = $spieler_id; + $spieler_2_id = NULL; + } else { + list($spieler_1_id, $spieler_2_id) = explode("-", $spieler_id); + } + $spieler_punkte_siege = $spieler_punkte["s"]; + $spieler_punkte_unentschieden = $spieler_punkte["u"]; + $spieler_punkte_niederlagen = $spieler_punkte["n"]; + $spieler_punkte_spielpunkte_gewonnen = $spieler_punkte["spg"]; + $spieler_punkte_spielpunkte_verloren = $spieler_punkte["spv"]; + $spieler_punkte_saetze_gewonnen = $spieler_punkte["sg"]; + $spieler_punkte_saetze_unentschieden = $spieler_punkte["su"]; + $spieler_punkte_saetze_verloren = $spieler_punkte["sv"]; + $spieler_punkte_punkte_gewonnen = $spieler_punkte["pg"]; + $spieler_punkte_punkte_verloren = $spieler_punkte["pv"]; + $query = "INSERT #__sportsmanager_bestenliste_punkte" + . "\n SET siege = $spieler_punkte_siege," + . "\n unentschieden = $spieler_punkte_unentschieden," + . "\n niederlagen = $spieler_punkte_niederlagen," + . "\n spielpunkte_gewonnen = $spieler_punkte_spielpunkte_gewonnen," + . "\n spielpunkte_verloren = $spieler_punkte_spielpunkte_verloren," + . "\n saetze_gewonnen = $spieler_punkte_saetze_gewonnen," + . "\n saetze_unentschieden = $spieler_punkte_saetze_unentschieden," + . "\n saetze_verloren = $spieler_punkte_saetze_verloren," + . "\n punkte_gewonnen = $spieler_punkte_punkte_gewonnen," + . "\n punkte_verloren = $spieler_punkte_punkte_verloren," + . "\n spieler_id = $spieler_1_id," + . "\n spieler_2_id = " . ($spieler_2_id != NULL ? "$spieler_2_id" : "NULL") . "," + . "\n bestenliste_id = $spielerstatistik->bestenliste_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function wannGespieltAktualisieren() { + $db = & getDatabase(); + + $query = "UPDATE #__sportsmanager_spieler" + . "\n LEFT JOIN" + . "\n (SELECT spieler_id, DATE(MAX(termin)) AS letzter_termin, DATE(MIN(termin)) AS erster_termin" + . "\n FROM" + . "\n (SELECT heim_spieler_1_id AS spieler_id, #__sportsmanager_begegnung.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id) AND heim_spieler_1_id != 0" + . "\n UNION" + . "\n SELECT heim_spieler_2_id AS spieler_id, #__sportsmanager_begegnung.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id) AND NOT ISNULL(heim_spieler_2_id) AND heim_spieler_2_id != 0" + . "\n UNION" + . "\n SELECT gast_spieler_1_id AS spieler_id, #__sportsmanager_begegnung.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id) AND gast_spieler_1_id != 0" + . "\n UNION" + . "\n SELECT gast_spieler_2_id AS spieler_id, #__sportsmanager_begegnung.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id) AND NOT ISNULL(gast_spieler_2_id) AND gast_spieler_2_id != 0" + . "\n UNION" + . "\n SELECT spieler_id, beginn AS termin" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n WHERE NOT ISNULL(spieler_id) AND status > 0 AND rundenstufe = 0" + . "\n UNION" + . "\n SELECT heim_spieler_1_id AS spieler_id, #__sportsmanager_individualwettbewerb_spiel.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND heim_spieler_1_id != 0" + . "\n UNION" + . "\n SELECT heim_spieler_2_id AS spieler_id, #__sportsmanager_individualwettbewerb_spiel.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND NOT ISNULL(heim_spieler_2_id) AND heim_spieler_2_id != 0" + . "\n UNION" + . "\n SELECT gast_spieler_1_id AS spieler_id, #__sportsmanager_individualwettbewerb_spiel.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND gast_spieler_1_id != 0" + . "\n UNION" + . "\n SELECT gast_spieler_2_id AS spieler_id, #__sportsmanager_individualwettbewerb_spiel.zeitpunkt AS termin" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND NOT ISNULL(gast_spieler_2_id) AND gast_spieler_2_id != 0" + . "\n ) AS spieltermine" + . "\n GROUP BY spieler_id) AS letzte_spieltermine" + . "\n USING (spieler_id)" + . "\n SET erstmals_gespielt = erster_termin," + . "\n zuletzt_gespielt = letzter_termin"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function aktuellerVereinAktualisieren($spieler_id = 0) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_spieler WRITE, #__sportsmanager_mitglied_von_verein READ, #__sportsmanager_verein READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UPDATE #__sportsmanager_spieler" + . "\n LEFT JOIN (SELECT spieler_id, verein_id FROM #__sportsmanager_mitglied_von_verein INNER JOIN #__sportsmanager_verein USING (verein_id) WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten GROUP BY spieler_id ORDER BY spieler_id, verein_id) AS mitgliedschaft USING (spieler_id)" + . "\n SET aktueller_verein_id = mitgliedschaft.verein_id"; + if ($spieler_id != 0) + $query .= "\n WHERE spieler_id = $spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function eloAktualisieren($datum_beginn = NULL) { + $db = & getDatabase(); + + $query = "SELECT IF (EXISTS (SELECT * FROM #__sportsmanager_veranstaltung WHERE status > 0 AND elo_wertung > 0)" + . " OR EXISTS (SELECT * FROM #__sportsmanager_turnierdisziplin WHERE status > 0 AND elo_wertung > 0)" + . " OR EXISTS (SELECT * FROM #__sportsmanager_spieler WHERE NOT ISNULL(elo_einzel_spiele) OR NOT ISNULL(elo_doppel_spiele)), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $elo_ermitteln = $db->loadResult(); + + if ($elo_ermitteln == 0) + return; + + $elo_einzel = array(); + $elo_doppel = array(); + $spiele_einzel = array(); + $spiele_doppel = array(); + + $dummy_array_einzel = array(); + $dummy_array_doppel = array(); + + eloGenerieren($datum_beginn, $elo_einzel, $elo_doppel, $spiele_einzel, $spiele_doppel, NULL, $dummy_array_einzel, $dummy_array_doppel); + + $query = "LOCK TABLES #__sportsmanager_spieler WRITE;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT spieler_id, elo_einzel, elo_einzel_spiele, elo_doppel, elo_doppel_spiele" + . "\n FROM #__sportsmanager_spieler"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + foreach ($spieler as $row) { + $spieler_id = $row->spieler_id; + $spieler_elo_einzel = isset($elo_einzel[$spieler_id]) ? $elo_einzel[$spieler_id] : NULL; + $spieler_elo_doppel = isset($elo_doppel[$spieler_id]) ? $elo_doppel[$spieler_id] : NULL; + $spieler_spiele_einzel = isset($spiele_einzel[$spieler_id]) ? $spiele_einzel[$spieler_id] : NULL; + $spieler_spiele_doppel = isset($spiele_doppel[$spieler_id]) ? $spiele_doppel[$spieler_id] : NULL; + + if ($row->elo_einzel != $spieler_elo_einzel || + $row->elo_doppel != $spieler_elo_doppel || + $row->elo_einzel_spiele != $spieler_spiele_einzel || + $row->elo_doppel_spiele != $spieler_spiele_doppel) { + + $query = "UPDATE #__sportsmanager_spieler" + . "\n SET elo_einzel = " . (isset($elo_einzel[$spieler_id]) ? $spieler_elo_einzel : "NULL") . "," + . "\n elo_doppel = " . (isset($elo_doppel[$spieler_id]) ? $spieler_elo_doppel : "NULL") . "," + . "\n elo_einzel_spiele = " . (isset($spiele_einzel[$spieler_id]) ? $spieler_spiele_einzel : "NULL") . "," + . "\n elo_doppel_spiele = " . (isset($spiele_doppel[$spieler_id]) ? $spieler_spiele_doppel : "NULL") + . "\n WHERE spieler_id = $spieler_id;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function eloGenerieren($datum_beginn, &$elo_einzel, &$elo_doppel, &$spiele_einzel, &$spiele_doppel, $spieler_id, &$spieler_elo_verlauf_einzel, &$spieler_elo_verlauf_doppel) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_teamspiel READ, #__sportsmanager_begegnung READ, #__sportsmanager_team READ, #__sportsmanager_veranstaltung READ, #__sportsmanager_unbestaetigtes_ergebnis READ, #__sportsmanager_turnierdisziplin READ, #__sportsmanager_spieler READ, #__sportsmanager_turniermeldung READ, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_turnierspiel READ, #__sportsmanager_elo_cache WRITE, #__sportsmanager_individualwettbewerb_spiel READ, #__sportsmanager_individualwettbewerb READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $cache_datum_beginn = NULL; + if (!empty($datum_beginn)) { + $query = "SELECT MAX(cache_datum)" + . "\n FROM #__sportsmanager_elo_cache" + . "\n WHERE cache_datum <= '$datum_beginn'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $cache_datum_beginn = $db->loadResult(); + + $query = "SELECT spieler_id, elo_einzel, elo_doppel, elo_einzel_spiele, elo_doppel_spiele" + . "\n FROM #__sportsmanager_elo_cache" + . "\n WHERE cache_datum = '$cache_datum_beginn'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + if ($row->elo_einzel != NULL) { + $elo_einzel[$row->spieler_id] = $row->elo_einzel; + $spiele_einzel[$row->spieler_id] = $row->elo_einzel_spiele; + } + if ($row->elo_doppel != NULL) { + $elo_doppel[$row->spieler_id] = $row->elo_doppel; + $spiele_doppel[$row->spieler_id] = $row->elo_doppel_spiele; + } + } + } + + $query = "SELECT spieler_id, elo_einzel_startwert, elo_doppel_startwert" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(elo_einzel_startwert) OR NOT ISNULL(elo_doppel_startwert)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + foreach ($rows as $row) { + if ((!isset($elo_einzel[$row->spieler_id]) || $elo_einzel[$row->spieler_id] == 0) && $row->elo_einzel_startwert != NULL) + $elo_einzel[$row->spieler_id] = $row->elo_einzel_startwert; + if ((!isset($elo_doppel[$row->spieler_id]) || $elo_doppel[$row->spieler_id] == 0) && $row->elo_doppel_startwert != NULL) + $elo_doppel[$row->spieler_id] = $row->elo_doppel_startwert; + } + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id)"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_veranstaltung.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teamspiele_anzahl = $db->loadResult(); + $teamspiele_offset = 0; + + $query = "SELECT #__sportsmanager_begegnung.begegnung_id, zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, heim_team_id, gast_team_id, #__sportsmanager_veranstaltung.veranstaltung_id, spieltag, #__sportsmanager_veranstaltung.unterteilung, elo_wertung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id)"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_veranstaltung.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $query .= "\n ORDER BY zeitpunkt, begegnung_id, teamspiel_nummer" + . "\n LIMIT 0, 5000"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teamspiele = $db->loadObjectList(); + $teamspiele_nr = 0; + + $query = "SELECT turnierdisziplin_id, beginn, typ, elo_wertung" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n WHERE status > 0"; + if ($spieler_id == NULL) + $query .= " AND elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND DATE(beginn) >= '$cache_datum_beginn'"; + $query .= "\n ORDER BY beginn"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplinen = $db->loadObjectList(); + $disziplinen_anzahl = count($disziplinen); + $disziplinen_nr = 0; + + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb_spiel USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_individualwettbewerb.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerb_spiele_anzahl = $db->loadResult(); + $individualwettbewerb_spiele_offset = 0; + + $query = "SELECT zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis, #__sportsmanager_individualwettbewerb.individualwettbewerb_id, elo_wertung" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb_spiel USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_individualwettbewerb.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $query .= "\n ORDER BY zeitpunkt, individualwettbewerb_spiel_id" + . "\n LIMIT 0, 5000"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerb_spiele = $db->loadObjectList(); + $individualwettbewerb_spiele_nr = 0; + + /* + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(zuletzt_gespielt) AND elo_wertung AND DATEDIFF(CURDATE(), zuletzt_gespielt) <= 365"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $rows = $db->loadObjectList(); + + $aktiver_spieler = array(); + foreach($rows as $row) + $aktiver_spieler[$row->spieler_id] = true; + */ + + if ($spieler_id == NULL) { + $query = "DELETE FROM #__sportsmanager_elo_cache"; + if (!empty($cache_datum_beginn)) + $query .= " WHERE cache_datum > '$cache_datum_beginn'"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + $spieler_elo_verlauf_einzel_nr = 0; + $spieler_elo_verlauf_doppel_nr = 0; + + $anfangswert = 1500; + $k = 25; + + $zeitpunkt_aktuell = NULL; + while ($teamspiele_nr < $teamspiele_anzahl || $disziplinen_nr < $disziplinen_anzahl || $individualwettbewerb_spiele_nr < $individualwettbewerb_spiele_anzahl) { + // Als nächstes Mannschaftsbegegnung, Turnierdisziplin oder Individualwettbewerb-Spiel? + $elo_einzel_neu = $elo_einzel; + $elo_doppel_neu = $elo_doppel; + + $zeitpunkt_vorher = $zeitpunkt_aktuell; + /* + if ($disziplinen_nr >= $disziplinen_anzahl || ($teamspiele_nr < $teamspiele_anzahl && $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt < $disziplinen[$disziplinen_nr]->beginn)) + $zeitpunkt_aktuell = $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt; + else + $zeitpunkt_aktuell = $disziplinen[$disziplinen_nr]->beginn; + */ + if ($teamspiele_nr < $teamspiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt <= $disziplinen[$disziplinen_nr]->beginn) && ($individualwettbewerb_spiele_nr >= $individualwettbewerb_spiele_anzahl || $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt <= $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr - $individualwettbewerb_spiele_offset]->zeitpunkt)) + $zeitpunkt_aktuell = $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt; + else if ($individualwettbewerb_spiele_nr < $individualwettbewerb_spiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr - $individualwettbewerb_spiele_offset]->zeitpunkt <= $disziplinen[$disziplinen_nr]->beginn)) + $zeitpunkt_aktuell = $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr]->zeitpunkt; + else + $zeitpunkt_aktuell = $disziplinen[$disziplinen_nr]->beginn; + + if ($spieler_id == NULL && !empty($zeitpunkt_vorher) && !empty($zeitpunkt_aktuell) && substr($zeitpunkt_vorher, 0, 4) != substr($zeitpunkt_aktuell, 0, 4)) { + $cache_spieler = array_keys($elo_einzel) + array_keys($elo_doppel); + $cache_datum = substr($zeitpunkt_aktuell, 0, 4) . "-01-01"; + foreach ($cache_spieler as $cache_spieler_id) { + $spieler_elo_einzel = isset($elo_einzel[$cache_spieler_id]) ? $elo_einzel[$cache_spieler_id] : NULL; + $spieler_elo_doppel = isset($elo_doppel[$cache_spieler_id]) ? $elo_doppel[$cache_spieler_id] : NULL; + $spieler_spiele_einzel = isset($spiele_einzel[$cache_spieler_id]) ? $spiele_einzel[$cache_spieler_id] : NULL; + $spieler_spiele_doppel = isset($spiele_doppel[$cache_spieler_id]) ? $spiele_doppel[$cache_spieler_id] : NULL; + + $query = "REPLACE #__sportsmanager_elo_cache" + . "\n SET spieler_id = $cache_spieler_id," + . "\n cache_datum = '$cache_datum'," + . "\n elo_einzel = " . ($spieler_elo_einzel != NULL ? $spieler_elo_einzel : "NULL") . "," + . "\n elo_doppel = " . ($spieler_elo_doppel != NULL ? $spieler_elo_doppel : "NULL") . "," + . "\n elo_einzel_spiele = " . ($spieler_spiele_einzel != NULL ? $spieler_spiele_einzel : "NULL") . "," + . "\n elo_doppel_spiele = " . ($spieler_spiele_doppel != NULL ? $spieler_spiele_doppel : "NULL"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + } + +// if ($disziplinen_nr >= $disziplinen_anzahl || ($teamspiele_nr < $teamspiele_anzahl && $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt < $disziplinen[$disziplinen_nr]->beginn)) { + if ($teamspiele_nr < $teamspiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt <= $disziplinen[$disziplinen_nr]->beginn) && ($individualwettbewerb_spiele_nr >= $individualwettbewerb_spiele_anzahl || $teamspiele[$teamspiele_nr - $teamspiele_offset]->zeitpunkt <= $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr - $individualwettbewerb_spiele_offset]->zeitpunkt)) { + // Begegnung auswerten + $begegnung_id = $teamspiele[$teamspiele_nr - $teamspiele_offset]->begegnung_id; + do { + $teamspiel = $teamspiele[$teamspiele_nr++ - $teamspiele_offset]; + if ($teamspiele_nr - $teamspiele_offset == 5000) { + $teamspiele_offset += 5000; + $query = "SELECT #__sportsmanager_begegnung.begegnung_id, zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, heim_team_id, gast_team_id, #__sportsmanager_veranstaltung.veranstaltung_id, spieltag, #__sportsmanager_veranstaltung.unterteilung, elo_wertung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id)"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_veranstaltung.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $query .= "\n ORDER BY zeitpunkt, begegnung_id, teamspiel_nummer" + . "\n LIMIT $teamspiele_offset, 5000"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teamspiele = $db->loadObjectList(); + } + $heim_spieler_1_id = $teamspiel->heim_spieler_1_id; + $heim_spieler_2_id = $teamspiel->heim_spieler_2_id; + $gast_spieler_1_id = $teamspiel->gast_spieler_1_id; + $gast_spieler_2_id = $teamspiel->gast_spieler_2_id; + + if ($heim_spieler_2_id == NULL && $gast_spieler_2_id == NULL) { + // Einzel-Spiel + if ($heim_spieler_1_id == 0 || $gast_spieler_1_id == 0) + continue; + // if (!isset($aktiver_spieler[$heim_spieler_1_id]) || !isset($aktiver_spieler[$gast_spieler_1_id])) + // continue; + + if ($teamspiel->teamspiel_heim_punkte > $teamspiel->teamspiel_gast_punkte) + $sa = 1; + else if ($teamspiel->teamspiel_heim_punkte < $teamspiel->teamspiel_gast_punkte) + $sa = 0; + else + $sa = 0.5; + + // if ($teamspiel->elo_wertung > 0 && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_1_id])) { + if ($teamspiel->elo_wertung > 0) { + $ra = isset($elo_einzel[$heim_spieler_1_id]) ? $elo_einzel[$heim_spieler_1_id] : $anfangswert; + $rb = isset($elo_einzel[$gast_spieler_1_id]) ? $elo_einzel[$gast_spieler_1_id] : $anfangswert; + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr] = array(); + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["z"] = $teamspiel->zeitpunkt; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["th"] = $teamspiel->heim_team_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["tg"] = $teamspiel->gast_team_id; + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1r"] = isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1r"] = isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["v"] = $teamspiel->veranstaltung_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["r"] = $teamspiel->spieltag; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["u"] = $teamspiel->unterteilung; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + } + + $elo_einzel_neu[$heim_spieler_1_id] = (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_einzel_neu[$gast_spieler_1_id] = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $spiele_einzel[$heim_spieler_1_id] = isset($spiele_einzel[$heim_spieler_1_id]) ? $spiele_einzel[$heim_spieler_1_id] + 1 : 1; + $spiele_einzel[$gast_spieler_1_id] = isset($spiele_einzel[$gast_spieler_1_id]) ? $spiele_einzel[$gast_spieler_1_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1rn"] = $elo_einzel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1rn"] = $elo_einzel_neu[$gast_spieler_1_id]; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_elo_verlauf_einzel_nr++; + } + } + } else { + // Doppel-Spiel + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + if ($teamspiel->teamspiel_heim_punkte > $teamspiel->teamspiel_gast_punkte) + $sa = 1; + else if ($teamspiel->teamspiel_heim_punkte < $teamspiel->teamspiel_gast_punkte) + $sa = 0; + else + $sa = 0.5; + + // if ($teamspiel->elo_wertung > 0 && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$heim_spieler_2_id]) && isset($aktiver_spieler[$gast_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_2_id])) { + if ($teamspiel->elo_wertung > 0) { + $ra_1 = isset($elo_doppel[$heim_spieler_1_id]) ? $elo_doppel[$heim_spieler_1_id] : $anfangswert; + $ra_2 = isset($elo_doppel[$heim_spieler_2_id]) ? $elo_doppel[$heim_spieler_2_id] : $anfangswert; + $ra = ($ra_1 + $ra_2) / 2; + $rb_1 = isset($elo_doppel[$gast_spieler_1_id]) ? $elo_doppel[$gast_spieler_1_id] : $anfangswert; + $rb_2 = isset($elo_doppel[$gast_spieler_2_id]) ? $elo_doppel[$gast_spieler_2_id] : $anfangswert; + $rb = ($rb_1 + $rb_2) / 2; + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr] = array(); + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["z"] = $teamspiel->zeitpunkt; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["th"] = $teamspiel->heim_team_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["tg"] = $teamspiel->gast_team_id; + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1r"] = isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2r"] = isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1r"] = isset($elo_doppel_neu[$gast_spieler_1_id]) != NULL ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2r"] = isset($elo_doppel_neu[$gast_spieler_2_id]) != NULL ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["v"] = $teamspiel->veranstaltung_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["r"] = $teamspiel->spieltag; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["u"] = $teamspiel->unterteilung; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 9999; + } + + $elo_doppel_neu[$heim_spieler_1_id] = (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$heim_spieler_2_id] = (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_1_id] = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_2_id] = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra; + $spiele_doppel[$heim_spieler_1_id] = isset($spiele_doppel[$heim_spieler_1_id]) ? $spiele_doppel[$heim_spieler_1_id] + 1 : 1; + $spiele_doppel[$heim_spieler_2_id] = isset($spiele_doppel[$heim_spieler_2_id]) ? $spiele_doppel[$heim_spieler_2_id] + 1 : 1; + $spiele_doppel[$gast_spieler_1_id] = isset($spiele_doppel[$gast_spieler_1_id]) ? $spiele_doppel[$gast_spieler_1_id] + 1 : 1; + $spiele_doppel[$gast_spieler_2_id] = isset($spiele_doppel[$gast_spieler_2_id]) ? $spiele_doppel[$gast_spieler_2_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1rn"] = $elo_doppel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2rn"] = $elo_doppel_neu[$heim_spieler_2_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1rn"] = $elo_doppel_neu[$gast_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2rn"] = $elo_doppel_neu[$gast_spieler_2_id]; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_elo_verlauf_doppel_nr++; + } + } + } + } while ($teamspiele_nr < $teamspiele_anzahl && $begegnung_id == $teamspiele[$teamspiele_nr - $teamspiele_offset]->begegnung_id); + } else if ($individualwettbewerb_spiele_nr < $individualwettbewerb_spiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr - $individualwettbewerb_spiele_offset]->zeitpunkt <= $disziplinen[$disziplinen_nr]->beginn)) { + // Individualwettbewerbspiel auswerten + $individualwettbewerb_spiel = $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr++ - $individualwettbewerb_spiele_offset]; + if ($individualwettbewerb_spiele_nr - $individualwettbewerb_spiele_offset == 5000) { + $individualwettbewerb_spiele_offset += 5000; + $query = "SELECT zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis, #__sportsmanager_individualwettbewerb.individualwettbewerb_id, elo_wertung" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb_spiel USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND (heim_spieler_1_id = $spieler_id OR heim_spieler_2_id = $spieler_id OR gast_spieler_1_id = $spieler_id OR gast_spieler_2_id = $spieler_id)"; + if ($spieler_id == NULL) + $query .= " AND #__sportsmanager_individualwettbewerb.elo_wertung > 0"; + if (!empty($cache_datum_beginn)) + $query .= " AND zeitpunkt >= '$cache_datum_beginn'"; + $query .= "\n ORDER BY zeitpunkt, individualwettbewerb_spiel_id" + . "\n LIMIT $individualwettbewerb_spiele_offset, 5000"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerb_spiele = $db->loadObjectList(); + } + $heim_spieler_1_id = $individualwettbewerb_spiel->heim_spieler_1_id; + $heim_spieler_2_id = $individualwettbewerb_spiel->heim_spieler_2_id; + $gast_spieler_1_id = $individualwettbewerb_spiel->gast_spieler_1_id; + $gast_spieler_2_id = $individualwettbewerb_spiel->gast_spieler_2_id; + + if ($individualwettbewerb_spiel->ergebnis == 1) + $sa = 1; + else if ($individualwettbewerb_spiel->ergebnis == 2) + $sa = 0; + else + $sa = 0.5; + + if ($heim_spieler_2_id == NULL && $gast_spieler_2_id == NULL) { + // Einzel-Spiel + if ($heim_spieler_1_id == 0 || $gast_spieler_1_id == 0) + continue; + // if (!isset($aktiver_spieler[$heim_spieler_1_id]) || !isset($aktiver_spieler[$gast_spieler_1_id])) + // continue; + // if ($teamspiel->elo_wertung > 0 && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_1_id])) { + if ($individualwettbewerb_spiel->elo_wertung > 0) { + $ra = isset($elo_einzel[$heim_spieler_1_id]) ? $elo_einzel[$heim_spieler_1_id] : $anfangswert; + $rb = isset($elo_einzel[$gast_spieler_1_id]) ? $elo_einzel[$gast_spieler_1_id] : $anfangswert; + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr] = array(); + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["z"] = $individualwettbewerb_spiel->zeitpunkt; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1r"] = isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1r"] = isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["i"] = $individualwettbewerb_spiel->individualwettbewerb_id; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + } + + $elo_einzel_neu[$heim_spieler_1_id] = (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_einzel_neu[$gast_spieler_1_id] = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $spiele_einzel[$heim_spieler_1_id] = isset($spiele_einzel[$heim_spieler_1_id]) ? $spiele_einzel[$heim_spieler_1_id] + 1 : 1; + $spiele_einzel[$gast_spieler_1_id] = isset($spiele_einzel[$gast_spieler_1_id]) ? $spiele_einzel[$gast_spieler_1_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1rn"] = $elo_einzel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1rn"] = $elo_einzel_neu[$gast_spieler_1_id]; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["s"] = $individualwettbewerb_spiel->ergebnis; + $spieler_elo_verlauf_einzel_nr++; + } + } + } else { + // Doppel-Spiel + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + // if ($teamspiel->elo_wertung > 0 && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$heim_spieler_2_id]) && isset($aktiver_spieler[$gast_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_2_id])) { + if ($individualwettbewerb_spiel->elo_wertung > 0) { + $ra_1 = isset($elo_doppel[$heim_spieler_1_id]) ? $elo_doppel[$heim_spieler_1_id] : $anfangswert; + $ra_2 = isset($elo_doppel[$heim_spieler_2_id]) ? $elo_doppel[$heim_spieler_2_id] : $anfangswert; + $ra = ($ra_1 + $ra_2) / 2; + $rb_1 = isset($elo_doppel[$gast_spieler_1_id]) ? $elo_doppel[$gast_spieler_1_id] : $anfangswert; + $rb_2 = isset($elo_doppel[$gast_spieler_2_id]) ? $elo_doppel[$gast_spieler_2_id] : $anfangswert; + $rb = ($rb_1 + $rb_2) / 2; + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr] = array(); + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["z"] = $individualwettbewerb_spiel->zeitpunkt; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1r"] = isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2r"] = isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1r"] = isset($elo_doppel_neu[$gast_spieler_1_id]) != NULL ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2r"] = isset($elo_doppel_neu[$gast_spieler_2_id]) != NULL ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["i"] = $individualwettbewerb_spiel->individualwettbewerb_id; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 9999; + } + + $elo_doppel_neu[$heim_spieler_1_id] = (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$heim_spieler_2_id] = (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_1_id] = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_2_id] = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra; + $spiele_doppel[$heim_spieler_1_id] = isset($spiele_doppel[$heim_spieler_1_id]) ? $spiele_doppel[$heim_spieler_1_id] + 1 : 1; + $spiele_doppel[$heim_spieler_2_id] = isset($spiele_doppel[$heim_spieler_2_id]) ? $spiele_doppel[$heim_spieler_2_id] + 1 : 1; + $spiele_doppel[$gast_spieler_1_id] = isset($spiele_doppel[$gast_spieler_1_id]) ? $spiele_doppel[$gast_spieler_1_id] + 1 : 1; + $spiele_doppel[$gast_spieler_2_id] = isset($spiele_doppel[$gast_spieler_2_id]) ? $spiele_doppel[$gast_spieler_2_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1rn"] = $elo_doppel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2rn"] = $elo_doppel_neu[$heim_spieler_2_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1rn"] = $elo_doppel_neu[$gast_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2rn"] = $elo_doppel_neu[$gast_spieler_2_id]; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["s"] = $individualwettbewerb_spiel->ergebnis; + $spieler_elo_verlauf_doppel_nr++; + } + } + } + } else { + // Turnierdisziplin auswerten + $disziplin = $disziplinen[$disziplinen_nr++]; + + $query = "SELECT turniermeldung_id, spieler_id" + . "\n FROM #__sportsmanager_turniermeldung INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerIds = array(); + foreach ($meldungenSpieler as $s) { + if (!isset($meldungenSpielerIds[$s->turniermeldung_id])) + $meldungenSpielerIds[$s->turniermeldung_id] = array(); + array_push($meldungenSpielerIds[$s->turniermeldung_id], $s->spieler_id); + } + + $query = "SELECT heim_meldung_id, gast_meldung_id, runde, rundenstufe, ergebnis" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id" + . "\n ORDER BY spiel_nummer"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + foreach ($spiele as $spiel) { + if ($disziplin->typ == 0) { // Einzel + if (empty($spiel->heim_meldung_id) || empty($spiel->gast_meldung_id) || count($meldungenSpielerIds[$spiel->heim_meldung_id]) != 1 || count($meldungenSpielerIds[$spiel->gast_meldung_id]) != 1) + continue; + + $heim_spieler_1_id = $meldungenSpielerIds[$spiel->heim_meldung_id][0]; + $gast_spieler_1_id = $meldungenSpielerIds[$spiel->gast_meldung_id][0]; + if ($heim_spieler_1_id == 0 || $gast_spieler_1_id == 0) + continue; + + if ($spiel->ergebnis == 1) + $sa = 1; + else if ($spiel->ergebnis == 2) + $sa = 0; + else + $sa = 0.5; + + // if ($disziplin->elo_wertung > 0 && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_1_id])) { + if ($disziplin->elo_wertung > 0) { + $ra = isset($elo_einzel[$heim_spieler_1_id]) ? $elo_einzel[$heim_spieler_1_id] : $anfangswert; + $rb = isset($elo_einzel[$gast_spieler_1_id]) ? $elo_einzel[$gast_spieler_1_id] : $anfangswert; + + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr] = array(); + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["z"] = $disziplin->beginn; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1r"] = isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1r"] = isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["t"] = $disziplin->turnierdisziplin_id; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["r"] = $spiel->runde; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["rs"] = $spiel->rundenstufe; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + } + + $elo_einzel_neu[$heim_spieler_1_id] = (isset($elo_einzel_neu[$heim_spieler_1_id]) ? $elo_einzel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_einzel_neu[$gast_spieler_1_id] = (isset($elo_einzel_neu[$gast_spieler_1_id]) ? $elo_einzel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $spiele_einzel[$heim_spieler_1_id] = isset($spiele_einzel[$heim_spieler_1_id]) ? $spiele_einzel[$heim_spieler_1_id] + 1 : 1; + $spiele_einzel[$gast_spieler_1_id] = isset($spiele_einzel[$gast_spieler_1_id]) ? $spiele_einzel[$gast_spieler_1_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $gast_spieler_1_id) { + if ($elo_werten) { + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["h1rn"] = $elo_einzel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["g1rn"] = $elo_einzel_neu[$gast_spieler_1_id]; + } + $spieler_elo_verlauf_einzel[$spieler_elo_verlauf_einzel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_elo_verlauf_einzel_nr++; + } + } + } else { // Doppel + if (empty($spiel->heim_meldung_id) || empty($spiel->gast_meldung_id) || count($meldungenSpielerIds[$spiel->heim_meldung_id]) != 2 || count($meldungenSpielerIds[$spiel->gast_meldung_id]) != 2) + continue; + + $heim_spieler_1_id = $meldungenSpielerIds[$spiel->heim_meldung_id][0]; + $heim_spieler_2_id = $meldungenSpielerIds[$spiel->heim_meldung_id][1]; + $gast_spieler_1_id = $meldungenSpielerIds[$spiel->gast_meldung_id][0]; + $gast_spieler_2_id = $meldungenSpielerIds[$spiel->gast_meldung_id][1]; + + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + if ($spiel->ergebnis == 1) + $sa = 1; + else if ($spiel->ergebnis == 2) + $sa = 0; + else + $sa = 0.5; + + // if ($disziplin->elo_wertung && isset($aktiver_spieler[$heim_spieler_1_id]) && isset($aktiver_spieler[$heim_spieler_2_id]) && isset($aktiver_spieler[$gast_spieler_1_id]) && isset($aktiver_spieler[$gast_spieler_2_id])) { + if ($disziplin->elo_wertung) { + $ra_1 = isset($elo_doppel[$heim_spieler_1_id]) ? $elo_doppel[$heim_spieler_1_id] : $anfangswert; + $ra_2 = isset($elo_doppel[$heim_spieler_2_id]) ? $elo_doppel[$heim_spieler_2_id] : $anfangswert; + $ra = ($ra_1 + $ra_2) / 2; + $rb_1 = isset($elo_doppel[$gast_spieler_1_id]) ? $elo_doppel[$gast_spieler_1_id] : $anfangswert; + $rb_2 = isset($elo_doppel[$gast_spieler_2_id]) ? $elo_doppel[$gast_spieler_2_id] : $anfangswert; + $rb = ($rb_1 + $rb_2) / 2; + + $ea = 1 / (1 + pow(10, ($rb - $ra) / 400)); + $zuwachs_ra = round($k * ($sa - $ea)); + $elo_werten = TRUE; + } else + $elo_werten = FALSE; + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr] = array(); + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["z"] = $disziplin->beginn; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1r"] = isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2r"] = isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1r"] = isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2r"] = isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["t"] = $disziplin->turnierdisziplin_id; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["r"] = $spiel->runde; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["rs"] = $spiel->rundenstufe; + } + } + + // Sicherstellen, dass kein Spieler weniger als einen oder mehr als 9999 Punkte hat + if ($elo_werten) { + if ($zuwachs_ra > 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra > 9999) + $zuwachs_ra = 9999 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 1; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra < 1) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 1; + } + else if ($zuwachs_ra < 0) { + if ((isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert); + if ((isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra < 1) + $zuwachs_ra = 1 - (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert); + if ((isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - 9999; + if ((isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra > 9999) + $zuwachs_ra = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - 9999; + } + + $elo_doppel_neu[$heim_spieler_1_id] = (isset($elo_doppel_neu[$heim_spieler_1_id]) ? $elo_doppel_neu[$heim_spieler_1_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$heim_spieler_2_id] = (isset($elo_doppel_neu[$heim_spieler_2_id]) ? $elo_doppel_neu[$heim_spieler_2_id] : $anfangswert) + $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_1_id] = (isset($elo_doppel_neu[$gast_spieler_1_id]) ? $elo_doppel_neu[$gast_spieler_1_id] : $anfangswert) - $zuwachs_ra; + $elo_doppel_neu[$gast_spieler_2_id] = (isset($elo_doppel_neu[$gast_spieler_2_id]) ? $elo_doppel_neu[$gast_spieler_2_id] : $anfangswert) - $zuwachs_ra; + $spiele_doppel[$heim_spieler_1_id] = isset($spiele_doppel[$heim_spieler_1_id]) ? $spiele_doppel[$heim_spieler_1_id] + 1 : 1; + $spiele_doppel[$heim_spieler_2_id] = isset($spiele_doppel[$heim_spieler_2_id]) ? $spiele_doppel[$heim_spieler_2_id] + 1 : 1; + $spiele_doppel[$gast_spieler_1_id] = isset($spiele_doppel[$gast_spieler_1_id]) ? $spiele_doppel[$gast_spieler_1_id] + 1 : 1; + $spiele_doppel[$gast_spieler_2_id] = isset($spiele_doppel[$gast_spieler_2_id]) ? $spiele_doppel[$gast_spieler_2_id] + 1 : 1; + } + + if ($spieler_id != NULL) { + if ($spieler_id == $heim_spieler_1_id || $spieler_id == $heim_spieler_2_id || $spieler_id == $gast_spieler_1_id || $spieler_id == $gast_spieler_2_id) { + if ($elo_werten) { + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h1rn"] = $elo_doppel_neu[$heim_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["h2rn"] = $elo_doppel_neu[$heim_spieler_2_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g1rn"] = $elo_doppel_neu[$gast_spieler_1_id]; + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["g2rn"] = $elo_doppel_neu[$gast_spieler_2_id]; + } + $spieler_elo_verlauf_doppel[$spieler_elo_verlauf_doppel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_elo_verlauf_doppel_nr++; + } + } + } + } + } + $elo_einzel = $elo_einzel_neu; + $elo_doppel = $elo_doppel_neu; + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function spieleVerlauf($spieler_id, &$spieler_verlauf_einzel, &$spieler_verlauf_doppel) { + $db = & getDatabase(); + + $query = "LOCK TABLES #__sportsmanager_teamspiel READ, #__sportsmanager_begegnung READ, #__sportsmanager_team READ, #__sportsmanager_veranstaltung READ, #__sportsmanager_unbestaetigtes_ergebnis READ, #__sportsmanager_turnierdisziplin READ, #__sportsmanager_spieler READ, #__sportsmanager_turniermeldung READ, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_turnierspiel READ, #__sportsmanager_individualwettbewerb_spiel READ, #__sportsmanager_individualwettbewerb READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $query = "SELECT #__sportsmanager_begegnung.begegnung_id, zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, heim_team_id, gast_team_id, #__sportsmanager_veranstaltung.veranstaltung_id, spieltag, #__sportsmanager_veranstaltung.unterteilung" + . "\n FROM #__sportsmanager_veranstaltung" + . "\n INNER JOIN #__sportsmanager_team USING (veranstaltung_id)" + . "\n INNER JOIN #__sportsmanager_begegnung ON heim_team_id = team_id" + . "\n INNER JOIN #__sportsmanager_teamspiel USING (begegnung_id)" + . "\n LEFT JOIN #__sportsmanager_unbestaetigtes_ergebnis ON #__sportsmanager_begegnung.begegnung_id = #__sportsmanager_unbestaetigtes_ergebnis.begegnung_id" + . "\n WHERE #__sportsmanager_veranstaltung.status > 0 AND ISNULL(unbestaetigtes_ergebnis_id) AND (heim_spieler_1_id = $spieler_id OR heim_spieler_2_id = $spieler_id OR gast_spieler_1_id = $spieler_id OR gast_spieler_2_id = $spieler_id)" + . "\n ORDER BY zeitpunkt DESC, begegnung_id DESC, teamspiel_nummer DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $teamspiele = $db->loadObjectList(); + $teamspiele_anzahl = count($teamspiele); + $teamspiele_nr = 0; + + $query = "SELECT DISTINCT turnierdisziplin_id, beginn, typ" + . "\n FROM #__sportsmanager_turniermeldung_spieler" + . "\n INNER JOIN #__sportsmanager_turniermeldung USING (turniermeldung_id)" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n WHERE spieler_id = $spieler_id AND status > 0 AND rundenstufe = 0" + . "\n ORDER BY beginn DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplinen = $db->loadObjectList(); + $disziplinen_anzahl = count($disziplinen); + $disziplinen_nr = 0; + + $query = "SELECT zeitpunkt, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, ergebnis, #__sportsmanager_individualwettbewerb.individualwettbewerb_id" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb_spiel USING (individualwettbewerb_id)" + . "\n WHERE #__sportsmanager_individualwettbewerb.status > 0 AND (heim_spieler_1_id = $spieler_id OR heim_spieler_2_id = $spieler_id OR gast_spieler_1_id = $spieler_id OR gast_spieler_2_id = $spieler_id)" + . "\n ORDER BY zeitpunkt DESC, individualwettbewerb_spiel_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerb_spiele = $db->loadObjectList(); + $individualwettbewerb_spiele_anzahl = count($individualwettbewerb_spiele); + $individualwettbewerb_spiele_nr = 0; + + $spieler_verlauf_einzel_nr = 0; + $spieler_verlauf_doppel_nr = 0; + + while ($spieler_verlauf_einzel_nr <= 100 && $spieler_verlauf_doppel_nr <= 100 && ($teamspiele_nr < $teamspiele_anzahl || $disziplinen_nr < $disziplinen_anzahl || $individualwettbewerb_spiele_nr < $individualwettbewerb_spiele_anzahl)) { + // Als nächstes Mannschaftsbegegnung oder Turnierdisziplin? +// if ($disziplinen_nr >= $disziplinen_anzahl || ($teamspiele_nr < $teamspiele_anzahl && $teamspiele[$teamspiele_nr]->zeitpunkt > $disziplinen[$disziplinen_nr]->beginn)) { + if ($teamspiele_nr < $teamspiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $teamspiele[$teamspiele_nr]->zeitpunkt > $disziplinen[$disziplinen_nr]->beginn) && ($individualwettbewerb_spiele_nr >= $individualwettbewerb_spiele_anzahl || $teamspiele[$teamspiele_nr]->zeitpunkt > $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr]->zeitpunkt)) { + // Begegnung auswerten + $begegnung_id = $teamspiele[$teamspiele_nr]->begegnung_id; + do { + $teamspiel = $teamspiele[$teamspiele_nr++]; + $heim_spieler_1_id = $teamspiel->heim_spieler_1_id; + $heim_spieler_2_id = $teamspiel->heim_spieler_2_id; + $gast_spieler_1_id = $teamspiel->gast_spieler_1_id; + $gast_spieler_2_id = $teamspiel->gast_spieler_2_id; + + if ($heim_spieler_2_id == NULL && $gast_spieler_2_id == NULL) { + // Einzel-Spiel + if ($teamspiel->teamspiel_heim_punkte > $teamspiel->teamspiel_gast_punkte) + $sa = 1; + else if ($teamspiel->teamspiel_heim_punkte < $teamspiel->teamspiel_gast_punkte) + $sa = 0; + else + $sa = 0.5; + + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr] = array(); + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["z"] = $teamspiel->zeitpunkt; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["th"] = $teamspiel->heim_team_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["tg"] = $teamspiel->gast_team_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["v"] = $teamspiel->veranstaltung_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["r"] = $teamspiel->spieltag; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["u"] = $teamspiel->unterteilung; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_verlauf_einzel_nr++; + } + else { + // Doppel-Spiel + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + if ($teamspiel->teamspiel_heim_punkte > $teamspiel->teamspiel_gast_punkte) + $sa = 1; + else if ($teamspiel->teamspiel_heim_punkte < $teamspiel->teamspiel_gast_punkte) + $sa = 0; + else + $sa = 0.5; + + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr] = array(); + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["z"] = $teamspiel->zeitpunkt; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["th"] = $teamspiel->heim_team_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["tg"] = $teamspiel->gast_team_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["v"] = $teamspiel->veranstaltung_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["r"] = $teamspiel->spieltag; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["u"] = $teamspiel->unterteilung; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_verlauf_doppel_nr++; + } + } + while ($teamspiele_nr < $teamspiele_anzahl && $begegnung_id == $teamspiele[$teamspiele_nr]->begegnung_id); + } else if ($individualwettbewerb_spiele_nr < $individualwettbewerb_spiele_anzahl && ($disziplinen_nr >= $disziplinen_anzahl || $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr]->zeitpunkt > $disziplinen[$disziplinen_nr]->beginn)) { + // Individualwettbewerb-Spiel auswerten + $individualwettbewerb_spiel = $individualwettbewerb_spiele[$individualwettbewerb_spiele_nr++]; + $heim_spieler_1_id = $individualwettbewerb_spiel->heim_spieler_1_id; + $heim_spieler_2_id = $individualwettbewerb_spiel->heim_spieler_2_id; + $gast_spieler_1_id = $individualwettbewerb_spiel->gast_spieler_1_id; + $gast_spieler_2_id = $individualwettbewerb_spiel->gast_spieler_2_id; + + if ($heim_spieler_2_id == NULL && $gast_spieler_2_id == NULL) { + // Einzel-Spiel + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr] = array(); + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["z"] = $individualwettbewerb_spiel->zeitpunkt; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["i"] = $individualwettbewerb_spiel->individualwettbewerb_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["s"] = $individualwettbewerb_spiel->ergebnis; + $spieler_verlauf_einzel_nr++; + } else { + // Doppel-Spiel + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr] = array(); + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["z"] = $individualwettbewerb_spiel->zeitpunkt; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["i"] = $individualwettbewerb_spiel->individualwettbewerb_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["s"] = $individualwettbewerb_spiel->ergebnis; + $spieler_verlauf_doppel_nr++; + } + } else { + // Turnierdisziplin auswerten + $disziplin = $disziplinen[$disziplinen_nr++]; + + $query = "SELECT turniermeldung_id, spieler_id" + . "\n FROM #__sportsmanager_turniermeldung INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = 0"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerIds = array(); + foreach ($meldungenSpieler as $s) { + if (!isset($meldungenSpielerIds[$s->turniermeldung_id])) + $meldungenSpielerIds[$s->turniermeldung_id] = array(); + array_push($meldungenSpielerIds[$s->turniermeldung_id], $s->spieler_id); + } + + $query = "SELECT heim_meldung_id, gast_meldung_id, runde, rundenstufe, ergebnis" + . "\n FROM #__sportsmanager_turnierspiel" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id" + . "\n ORDER BY spiel_nummer DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + foreach ($spiele as $spiel) { + if ($disziplin->typ == 0) { // Einzel + if (!isset($meldungenSpielerIds[$spiel->heim_meldung_id]) || !isset($meldungenSpielerIds[$spiel->gast_meldung_id]) || !isset($meldungenSpielerIds[$spiel->heim_meldung_id]) || !isset($meldungenSpielerIds[$spiel->gast_meldung_id]) || count($meldungenSpielerIds[$spiel->heim_meldung_id]) != 1 || count($meldungenSpielerIds[$spiel->gast_meldung_id]) != 1) + continue; + + $heim_spieler_1_id = $meldungenSpielerIds[$spiel->heim_meldung_id][0]; + $gast_spieler_1_id = $meldungenSpielerIds[$spiel->gast_meldung_id][0]; + if ($heim_spieler_1_id == 0 || $gast_spieler_1_id == 0) + continue; + + if ($spieler_id != $heim_spieler_1_id && $spieler_id != $gast_spieler_1_id) + continue; + + if ($spiel->ergebnis == 1) + $sa = 1; + else if ($spiel->ergebnis == 2) + $sa = 0; + else + $sa = 0.5; + + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr] = array(); + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["z"] = $disziplin->beginn; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["t"] = $disziplin->turnierdisziplin_id; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["r"] = $spiel->runde; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["rs"] = $spiel->rundenstufe; + $spieler_verlauf_einzel[$spieler_verlauf_einzel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_verlauf_einzel_nr++; + } + else { // Doppel + if (empty($spiel->heim_meldung_id) || empty($spiel->gast_meldung_id) || !isset($meldungenSpielerIds[$spiel->heim_meldung_id]) || !isset($meldungenSpielerIds[$spiel->gast_meldung_id]) || count($meldungenSpielerIds[$spiel->heim_meldung_id]) != 2 || count($meldungenSpielerIds[$spiel->gast_meldung_id]) != 2) + continue; + + $heim_spieler_1_id = $meldungenSpielerIds[$spiel->heim_meldung_id][0]; + $heim_spieler_2_id = $meldungenSpielerIds[$spiel->heim_meldung_id][1]; + $gast_spieler_1_id = $meldungenSpielerIds[$spiel->gast_meldung_id][0]; + $gast_spieler_2_id = $meldungenSpielerIds[$spiel->gast_meldung_id][1]; + if ($heim_spieler_1_id == 0 || $heim_spieler_2_id == 0 || $gast_spieler_1_id == 0 || $gast_spieler_2_id == 0) + continue; + + if ($spieler_id != $heim_spieler_1_id && $spieler_id != $heim_spieler_2_id && $spieler_id != $gast_spieler_1_id && $spieler_id != $gast_spieler_2_id) + continue; + + if ($spiel->ergebnis == 1) + $sa = 1; + else if ($spiel->ergebnis == 2) + $sa = 0; + else + $sa = 0.5; + + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr] = array(); + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["z"] = $disziplin->beginn; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h1"] = $heim_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["h2"] = $heim_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g1"] = $gast_spieler_1_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["g2"] = $gast_spieler_2_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["t"] = $disziplin->turnierdisziplin_id; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["r"] = $spiel->runde; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["rs"] = $spiel->rundenstufe; + $spieler_verlauf_doppel[$spieler_verlauf_doppel_nr]["s"] = $sa == 1 ? 1 : ($sa == 0 ? 2 : 0); + $spieler_verlauf_doppel_nr++; + } + } + } + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + } + + function turniervoranmeldungen() { + $db = & getDatabase(); + global $params; + + $details_anzeigen = currentUserHasAccessToDetails(); + + $query = "SELECT *" + . "\n FROM #__sportsmanager_turnierdisziplin" + . "\n LEFT JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n WHERE " . kategorieFilter("kategorie IN", "AND ") . "NOT EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0) AND" + . "\n status > 0 AND (NOT ISNULL(voranmeldung) OR EXISTS (SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 20))" + . "\n ORDER BY beginn, reihenfolge, disziplin, kategorie"; // LIMIT 6, 18446744073709551615 + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $disziplinen = $db->loadObjectList(); + + HTML_sportsmanager::turniervoranmeldungenHeader($params->get('titel'), $params->get('beschreibung')); + + foreach ($disziplinen as $disziplin) { + $query = "SELECT platz, turniermeldung_id" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n WHERE turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = '20'" + . "\n ORDER BY platz, turniermeldung_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungen = $db->loadObjectList(); + + $query = "SELECT turniermeldung_id, #__sportsmanager_spieler.spieler_id, geschlecht, bild_ausblenden, " . ($disziplin->voranmeldungen_rangliste_id != 0 ? "punkte, " : "") . "IF(ISNULL(#__sportsmanager_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.nachname, #__sportsmanager_spieler.nachname) AS nachname, IF(ISNULL(#__sportsmanager_spieler.spieler_id), #__sportsmanager_turniermeldung_spieler_name.vorname, #__sportsmanager_spieler.vorname) AS vorname" + . "\n FROM #__sportsmanager_turniermeldung" + . "\n INNER JOIN #__sportsmanager_turniermeldung_spieler USING (turniermeldung_id)" + . "\n LEFT JOIN #__sportsmanager_turniermeldung_spieler_name USING (turniermeldung_spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)"; + if ($disziplin->voranmeldungen_rangliste_id != 0) + $query .= "\n LEFT JOIN #__sportsmanager_rangliste_punkte ON (NOT ISNULL(#__sportsmanager_spieler.spieler_id)) AND rangliste_id = $disziplin->voranmeldungen_rangliste_id AND #__sportsmanager_rangliste_punkte.spieler_id = #__sportsmanager_spieler.spieler_id"; + $query .= "\n WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = $disziplin->turnierdisziplin_id AND rundenstufe = '20'" + . "\n ORDER BY turniermeldung_spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $meldungenSpieler = $db->loadObjectList(); + + $meldungenSpielerIds = array(); + $meldungenSpielerNamen = array(); + $meldungenSpielerGeschlechter = array(); + $meldungenSpielerBilderAusblenden = array(); + $meldungenSpielerPunkte = array(); + foreach ($meldungenSpieler as $s) { + $turniermeldung_id = $s->turniermeldung_id; + $spielerId = $s->spieler_id; + $spielername = $s->nachname . ", " . $s->vorname; + $spielerGeschlecht = $s->geschlecht; + $spielerBilderAusblenden = $s->bild_ausblenden; + $spielerPunkte = $s->punkte; + if (!isset($meldungenSpielerIds[$turniermeldung_id])) { + $meldungenSpielerIds[$turniermeldung_id] = array(); + $meldungenSpielerNamen[$turniermeldung_id] = array(); + $meldungenSpielerGeschlechter[$turniermeldung_id] = array(); + $meldungenSpielerBilderAusblenden[$turniermeldung_id] = array(); + $meldungenSpielerPunkte[$turniermeldung_id] = array(); + } + array_push($meldungenSpielerIds[$turniermeldung_id], $spielerId); + array_push($meldungenSpielerNamen[$turniermeldung_id], $spielername); + array_push($meldungenSpielerGeschlechter[$turniermeldung_id], $spielerGeschlecht); + array_push($meldungenSpielerBilderAusblenden[$turniermeldung_id], $spielerBilderAusblenden); + array_push($meldungenSpielerPunkte[$turniermeldung_id], !empty($spielerPunkte) ? $spielerPunkte : 0); + } + + $meldungenSpielerSortiert = array(); + if ($disziplin->voranmeldungen_rangliste_id != 0) { + foreach ($meldungen as $meldung) { + $spieler = $meldungenSpielerNamen[$meldung->turniermeldung_id]; + $spielerPunkte = $meldungenSpielerPunkte[$meldung->turniermeldung_id]; + if ($disziplin->typ == 0 || !isset($spielerPunkte[1])) { + $meldungenSpielerSortiert[$meldung->turniermeldung_id] = $spielerPunkte[0]; + } else if ($disziplin->voranmeldungen_reihenfolge == 1) { + $meldungenSpielerSortiert[$meldung->turniermeldung_id] = $spielerPunkte[0] + $spielerPunkte[1]; + } else { + $meldungenSpielerSortiert[$meldung->turniermeldung_id] = max($spielerPunkte[0], $spielerPunkte[1]); + } + } + arsort($meldungenSpielerSortiert); + } else { + foreach ($meldungen as $meldung) { + $spieler = $meldungenSpielerNamen[$meldung->turniermeldung_id]; + $meldungenSpielerSortiert[$meldung->turniermeldung_id] = $spieler[0]; + if (isset($spieler[1])) + $meldungenSpielerSortiert[$meldung->turniermeldung_id] .= " / " . $spieler[1]; + } + asort($meldungenSpielerSortiert); + } + + HTML_sportsmanager::turniervoranmeldungen($disziplin, $meldungenSpielerSortiert, $meldungenSpielerIds, $meldungenSpielerGeschlechter, $meldungenSpielerNamen, $meldungenSpielerBilderAusblenden, $details_anzeigen); + } + + administrationFooter(); + } + + function spielerstatistiken() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $details_anzeigen = currentUserHasAccessToDetails(); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_bestenliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_bestenliste_punkte WHERE #__sportsmanager_bestenliste_punkte.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_bestenliste_punkte WHERE #__sportsmanager_bestenliste_punkte.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id)" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistiken = $db->loadObjectList(); + + HTML_sportsmanager::spielerstatistikenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + + foreach ($spielerstatistiken as $spielerstatistik) { + $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden, spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2, spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2"; + if ($spielerstatistik->tabellenwertung == 1) + $query .= ", IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex"; + else if ($spielerstatistik->tabellenwertung == 2) + $query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren), 0) AS leistungsindex"; + $query .= "\n FROM #__sportsmanager_bestenliste_punkte" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" + . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; + if ($spielerstatistik->tabellenwertung == 0) + $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; + else + $query .= "\n ORDER BY leistungsindex DESC, spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spielerstatistik_punkte = $db->loadObjectList(); + + HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, FALSE, $filter_saison_id, 0, 0, $details_anzeigen); + } + + /* + if ($filter_saison_id == $aktuelles_jahr) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste" + . "\n WHERE status > 0 AND erster_tag > CURDATE() OR letzter_tag < CURDATE()" . kategorieFilter("AND kategorie IN"); + if ($filter_saison_id != NULL) + $query .= " AND (ISNULL(erster_tag) OR (ISNULL(letzter_tag) AND YEAR(erster_tag) = $filter_saison_id) OR (NOT ISNULL(letzter_tag) AND YEAR(erster_tag) <= $filter_saison_id AND YEAR(letzter_tag) >= $filter_saison_id))"; + $query .= "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $spielerstatistik_uebrige = $db->loadObjectList(); + + if (count($spielerstatistik_uebrige) > 0) + HTML_sportsmanager::spielerstatistikenListe($spielerstatistiken_uebrige); + } + */ + + administrationFooter(); + } + + function spielerstatistik() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) { + abortWithError("Missing id!"); + } + if (isJson()) { + // get id from db + $query = "select bestenliste_id from #__sportsmanager_bestenliste_veranstaltung where veranstaltung_id = " . $id; + $db->setQuery($query); + $id = $db->loadResult(); + } + $details_anzeigen = currentUserHasAccessToDetails(); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) { + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + } + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_bestenliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_bestenliste_punkte WHERE #__sportsmanager_bestenliste_punkte.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) { + $filter_saison_id = $saisons[0]->saison_id; + } + } + + // Spielerstatistik ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste" + . "\n WHERE bestenliste_id = $id AND status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_bestenliste_punkte WHERE #__sportsmanager_bestenliste_punkte.bestenliste_id = #__sportsmanager_bestenliste.bestenliste_id)" . kategorieFilter("AND kategorie IN"); + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) { + abortWithError("Wrong id!"); + } + $spielerstatistik = $rows[0]; + + // Spielerstatistikpunkte ermitteln + $query = "SELECT #__sportsmanager_bestenliste_punkte.*, #__sportsmanager_spieler.nachname, #__sportsmanager_spieler.vorname, #__sportsmanager_spieler.geschlecht, #__sportsmanager_spieler.aktueller_verein_id, #__sportsmanager_spieler.bild_ausblenden, spieler_2.nachname AS nachname_2, spieler_2.vorname AS vorname_2, spieler_2.geschlecht AS geschlecht_2, spieler_2.aktueller_verein_id AS aktueller_verein_id_2, spieler_2.bild_ausblenden AS bild_ausblenden_2"; + if ($spielerstatistik->tabellenwertung == 1) { + $query .= ", IF(spielpunkte_gewonnen > 0 OR spielpunkte_verloren > 0, spielpunkte_gewonnen * spielpunkte_gewonnen * 100 / (spielpunkte_gewonnen + spielpunkte_verloren), 0) AS leistungsindex"; + } else if ($spielerstatistik->tabellenwertung == 2) { + $query .= ", IF(punkte_gewonnen > 0 OR punkte_verloren > 0, siege * punkte_gewonnen * 10 / (punkte_gewonnen + punkte_verloren), 0) AS leistungsindex"; + } + $query .= "\n FROM #__sportsmanager_bestenliste_punkte" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_spieler AS spieler_2 ON spieler_2.spieler_id = spieler_2_id" + . "\n WHERE bestenliste_id = $spielerstatistik->bestenliste_id"; + if ($spielerstatistik->tabellenwertung == 0) { + $query .= "\n ORDER BY spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; + } + else { + $query .= "\n ORDER BY leistungsindex DESC, spielpunkte_gewonnen DESC, spielpunkte_verloren, punkte_gewonnen - punkte_verloren DESC, nachname, vorname"; + } + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $spielerstatistik_punkte = $db->loadObjectList(); + + // Vorherige und nächste Spielerstatistik ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_bestenliste" + . "\n WHERE status > 0" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + abortWithError($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_spielerstatistik_id = 0; + $naechste_spielerstatistik_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->bestenliste_id == $id) { + if ($i > 0) { + $vorherige_spielerstatistik_id = $rows[$i - 1]->bestenliste_id; + } + if ($i + 1 < $n) { + $naechste_spielerstatistik_id = $rows[$i + 1]->bestenliste_id; + } + break; + } + } + + // Anzeigen + if (isJson()) { + JSON_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $filter_saison_id, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen); + } else { + HTML_sportsmanager::spielerstatistik($spielerstatistik, $spielerstatistik_punkte, TRUE, $filter_saison_id, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen); + } + + } + + function eloRanglisten() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $typ = $jinput->get('typ', '', 'RAW'); + $kategorie = $jinput->get('kategorie', '', 'RAW'); + $jahr = date("Y"); + $kategorieFilter = kategorieFilter("AND kategorie IN"); + $details_anzeigen = currentUserHasAccessToDetails(); + + $query = "LOCK TABLES #__sportsmanager_spieler READ, #__sportsmanager_mitglied_von_verein READ, #__sportsmanager_verein READ, #__sportsmanager_verein AS kategorie_verein READ, #__sportsmanager_veranstalter READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $elo_rangliste_typ = $params->get('typ'); + $elo_rangliste_einstufung_herrendamen = $params->get('kategorie_einstufung_herrendamen'); + $ansicht_kategorien = array("" => "alle", ($elo_rangliste_einstufung_herrendamen == "inklusive" ? "M" : "H") => "herren", ($elo_rangliste_einstufung_herrendamen == "inklusive" ? "W" : "D") => "damen", "J" => "junioren", "S" => "senioren"); + $ansicht_typen = array(); + if ($elo_rangliste_typ != "doppel") + array_push($ansicht_typen, "einzel"); + if ($elo_rangliste_typ != "einzel") + array_push($ansicht_typen, "doppel"); + $ansichten = array(); + foreach ($ansicht_kategorien as $ansicht_kategorie => $ansicht_kategorie_bezeichnung) { + if ($params->get('kategorie_' . $ansicht_kategorie_bezeichnung) == "an") { + // TODO: Prüfen, ob Spieler in dieser Einstufung vorhanden sind + $ansicht_typ = $typ; + + foreach ($ansicht_typen as $ansicht_typ) { + if (empty($kategorieFilter)) { + $query = "SELECT IF(EXISTS(SELECT geschlecht," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id) AND " . ($ansicht_typ != "doppel" ? "elo_einzel" : "elo_doppel") . " <> 0"; + } else { + $query = "SELECT IF(EXISTS(SELECT geschlecht," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler" + . "\n INNER JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_verein AS kategorie_verein USING (verein_id)" + . "\n INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = #__sportsmanager_verein.verein_id" + . "\n WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $kategorieFilter . "AND NOT ISNULL(aktueller_verein_id) AND " . ($ansicht_typ != "doppel" ? "elo_einzel" : "elo_doppel") . " <> 0" + . "\n GROUP BY spieler_id"; + } + if (!empty($ansicht_kategorie)) + $query .= "\n HAVING " . ($ansicht_kategorie == "M" || $ansicht_kategorie == "W" ? "geschlecht" : "kategorie") . " = '" . $db->escape($ansicht_kategorie) . "'"; + $query .= "), 1, 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $n = $db->loadResult(); + if ($n == 0) + continue; + + array_push($ansichten, array($ansicht_typ, $ansicht_kategorie)); + } + } + } + + $vorherige_ansicht = NULL; + $naechste_ansicht = NULL; + if (count($ansichten) > 1 && !empty($typ)) { + foreach ($ansichten as $index => $ansicht) { + if ($ansicht[0] == $typ && $ansicht[1] == $kategorie) { + if ($index != 0) + $vorherige_ansicht = $ansichten[$index - 1]; + if (isset($ansichten[$index + 1])) + $naechste_ansicht = $ansichten[$index + 1]; + $ansichten = array(array($typ, $kategorie)); + break; + } + } + } + $allein_angezeigt = count($ansichten) == 1; + + if (empty($vorherige_ansicht) && empty($naechste_ansicht)) + HTML_sportsmanager::eloRanglistenHeader($params->get('titel'), $params->get('beschreibung')); + foreach ($ansichten as $ansicht) { + $ansicht_typ = $ansicht[0]; + $ansicht_kategorie = $ansicht[1]; + if (empty($kategorieFilter)) { + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, bild_ausblenden, aktueller_verein_id, elo_einzel, elo_doppel, elo_einzel_spiele, elo_doppel_spiele," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler" + . "\n WHERE NOT ISNULL(aktueller_verein_id) AND " . ($ansicht_typ != "doppel" ? "elo_einzel" : "elo_doppel") . " <> 0"; + } else { + $query = "SELECT #__sportsmanager_spieler.spieler_id, vorname, nachname, geschlecht, pseudonym, bild_ausblenden, aktueller_verein_id, elo_einzel, elo_doppel, elo_einzel_spiele, elo_doppel_spiele," + . "\n IF(ISNULL(geburtsjahr), IF(geschlecht = 'M', 'H', 'D'), IF(" . ($jahr - 18) . " <= geburtsjahr, 'J', IF(" . ($jahr - 50) . " > geburtsjahr, 'S', IF(geschlecht = 'M', 'H', 'D')))) AS kategorie" + . "\n FROM #__sportsmanager_spieler" + . "\n INNER JOIN #__sportsmanager_mitglied_von_verein USING (spieler_id)" + . "\n INNER JOIN #__sportsmanager_verein AS kategorie_verein USING (verein_id)" + . "\n INNER JOIN #__sportsmanager_veranstalter USING (veranstalter_id)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = #__sportsmanager_verein.verein_id" + . "\n WHERE NOT #__sportsmanager_mitglied_von_verein.ausgetreten AND NOT #__sportsmanager_verein.ausgetreten" . $kategorieFilter . "AND NOT ISNULL(aktueller_verein_id) AND " . ($ansicht_typ != "doppel" ? "elo_einzel" : "elo_doppel") . " <> 0" + . "\n GROUP BY spieler_id"; + } + if (!empty($ansicht_kategorie)) + $query .= "\n HAVING " . ($ansicht_kategorie == "M" || $ansicht_kategorie == "W" ? "geschlecht" : "kategorie") . " = '" . $db->escape($ansicht_kategorie) . "'"; + $query .= "\n ORDER BY " . ($ansicht_typ != "doppel" ? "elo_einzel DESC, nachname, vorname" : "elo_doppel DESC, nachname, vorname"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spieler = $db->loadObjectList(); + + if (!empty($spieler)) + HTML_sportsmanager::eloRangliste($spieler, $ansicht_typ, $ansicht_kategorie, $allein_angezeigt, $vorherige_ansicht, $naechste_ansicht, $details_anzeigen); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if (empty($vorherige_ansicht) && empty($naechste_ansicht)) + administrationFooter(); + } + + function individualwettbewerbe() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + $ansicht = $params->get('ansicht'); + $id = $jinput->get('id', 0, 'INT'); + $kategorieFilter = kategorieFilter("AND kategorie IN"); + $details_anzeigen = currentUserHasAccessToDetails(); + + $query = "LOCK TABLES #__sportsmanager_saison READ, #__sportsmanager_spieler READ, #__sportsmanager_spieler AS theim1 READ, #__sportsmanager_spieler AS theim2 READ, #__sportsmanager_spieler AS tgast1 READ, #__sportsmanager_spieler AS tgast2 READ, #__sportsmanager_verein READ, #__sportsmanager_individualwettbewerb READ, #__sportsmanager_individualwettbewerb_spiel READ, #__sportsmanager_individualwettbewerb_platzierung READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE #__sportsmanager_individualwettbewerb_spiel.individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id" . $kategorieFilter . ")" + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n WHERE status > 0" . $kategorieFilter . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") . " AND EXISTS(SELECT * FROM #__sportsmanager_individualwettbewerb_spiel WHERE #__sportsmanager_individualwettbewerb_spiel.individualwettbewerb_id = #__sportsmanager_individualwettbewerb.individualwettbewerb_id)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $individualwettbewerbe = $db->loadObjectList(); + + if ($ansicht != "spiele") { + $vorheriger_individualwettbewerb_id = 0; + $naechster_individualwettbewerb_id = 0; + if (count($individualwettbewerbe) > 1 && !empty($id)) { + foreach ($individualwettbewerbe as $index => $individualwettbewerb) { + if ($individualwettbewerb->individualwettbewerb_id == $id) { + if ($index != 0) + $vorheriger_individualwettbewerb_id = $individualwettbewerbe[$index - 1]->individualwettbewerb_id; + if (isset($individualwettbewerbe[$index + 1])) + $naechster_individualwettbewerb_id = $individualwettbewerbe[$index + 1]->individualwettbewerb_id; + $individualwettbewerbe = array($individualwettbewerb); + break; + } + } + } + $allein_angezeigt = count($individualwettbewerbe) == 1; + + if (empty($vorheriger_individualwettbewerb_id) && empty($naechster_individualwettbewerb_id)) + HTML_sportsmanager::individualwettbewerbHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + + foreach ($individualwettbewerbe as $individualwettbewerb) { + $individualwettbewerbid = $individualwettbewerb->individualwettbewerb_id; + $query = "SELECT #__sportsmanager_individualwettbewerb_spiel.*," + . " theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname, theim1.geschlecht AS heim_spieler_1_geschlecht, theim1.bild_ausblenden AS heim_spieler_1_bild_ausblenden," + . " theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname, theim2.geschlecht AS heim_spieler_2_geschlecht, theim2.bild_ausblenden AS heim_spieler_2_bild_ausblenden," + . " tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname, tgast1.geschlecht AS gast_spieler_1_geschlecht, tgast1.bild_ausblenden AS gast_spieler_1_bild_ausblenden," + . " tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname, tgast2.geschlecht AS gast_spieler_2_geschlecht, tgast2.bild_ausblenden AS gast_spieler_2_bild_ausblenden" + . "\n FROM #__sportsmanager_individualwettbewerb_spiel" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = gast_spieler_2_id" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY zeitpunkt DESC, individualwettbewerb_spiel_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + if ($individualwettbewerb->tabellenwertung) { + $query = "SELECT spieler_id, nachname, vorname, geschlecht, vereinsname, aktueller_verein_id, platz, bild_ausblenden" + . "\n FROM #__sportsmanager_individualwettbewerb_platzierung" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n LEFT JOIN #__sportsmanager_verein ON aktueller_verein_id = verein_id" + . "\n WHERE individualwettbewerb_id = $individualwettbewerbid" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $platzierungen = $db->loadObjectList(); + } else { + $platzierungen = NULL; + } + + HTML_sportsmanager::individualwettbewerb($individualwettbewerb, $spiele, $platzierungen, $allein_angezeigt, $vorheriger_individualwettbewerb_id, $naechster_individualwettbewerb_id, $details_anzeigen); + } + } else { + HTML_sportsmanager::individualwettbewerbHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + + $individualwettbewerbe_bezeichnungen = array(); + foreach ($individualwettbewerbe as $individualwettbewerb) + $individualwettbewerbe_bezeichnungen[$individualwettbewerb->individualwettbewerb_id] = $individualwettbewerb->bezeichnung; + + $query = "SELECT #__sportsmanager_individualwettbewerb_spiel.*," + . " theim1.vorname AS heim_spieler_1_vorname, theim1.nachname AS heim_spieler_1_nachname, theim1.bild_ausblenden AS heim_spieler_1_bild_ausblenden," + . " theim2.vorname AS heim_spieler_2_vorname, theim2.nachname AS heim_spieler_2_nachname, theim2.bild_ausblenden AS heim_spieler_2_bild_ausblenden," + . " tgast1.vorname AS gast_spieler_1_vorname, tgast1.nachname AS gast_spieler_1_nachname, tgast1.bild_ausblenden AS gast_spieler_1_bild_ausblenden," + . " tgast2.vorname AS gast_spieler_2_vorname, tgast2.nachname AS gast_spieler_2_nachname, tgast2.bild_ausblenden AS gast_spieler_2_bild_ausblenden" + . "\n FROM #__sportsmanager_individualwettbewerb" + . "\n INNER JOIN #__sportsmanager_individualwettbewerb_spiel USING (individualwettbewerb_id)" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim1 ON theim1.spieler_id = heim_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS theim2 ON theim2.spieler_id = heim_spieler_2_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast1 ON tgast1.spieler_id = gast_spieler_1_id" + . "\n LEFT JOIN #__sportsmanager_spieler AS tgast2 ON tgast2.spieler_id = gast_spieler_2_id" + . "\n WHERE status > 0" . $kategorieFilter . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY zeitpunkt DESC, individualwettbewerb_spiel_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $spiele = $db->loadObjectList(); + + HTML_sportsmanager::individualwettbewerbSpiele($individualwettbewerbe_bezeichnungen, $spiele, $details_anzeigen); + } + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + if ($ansicht != "spiele" || (empty($vorheriger_individualwettbewerb_id) && empty($naechster_individualwettbewerb_id))) + administrationFooter(); + + return; + } + + function ranglisten() { + $db = & getDatabase(); + global $params; + $jinput = JFactory::getApplication()->input; + + /* + $error_level = error_reporting(E_ERROR); + $math = new MathParserSM; + $math->setVariable('m', 1); + try { + // normal bisher online + $math->setExpression("MAX(ROUND(IF(m >= 0, m, 1 / -m) * ROUND((((POW(n * 10, 0.7) - 1) * (-LN(p / n) * (1 - (p / n)))) / (-LN(1 / n) * (1 - (1 / n)))) + 1)), 1)"); + + $math->setVariable('n', 15); + $math->setVariable('p', 1); + // echo $math->getValue() . "
"; + + // SOLL + // - Rohpunkte(#Teams)=((10*#Teams)0.7)-1 + // - Punktefaktor(Platz, #Teams) = - LOG(Platz/#Teams)*(1-(Platz/#Teams))/(-LOG(1/#Teams)*(1-(1/#Teams))) + // - PunkteHerren(Platz, #Teams) = Rohpunkte(#Teams) * PunkteFaktor(Platz, #Teams) + 1 + + // Rohpunkte + $math->setExpression("POW(10 * n, 0.7) - 1"); + // Punktefaktor + $math->setExpression("-LOG(p / n) * (1 - (p / n)) / (-LOG(1 / n) * (1 - (1 / n)))"); + // Zusammen + $math->setExpression("ROUND(IF(m >= 0, m, 1 / -m) * (POW(10 * n, 0.7) - 1) * -LOG(p / n) * (1 - (p / n)) / (-LOG(1 / n) * (1 - (1 / n))) + 1)"); + + $math->setVariable('n', 105); + $math->setVariable('p', 9); + // echo $math->getValue() . "
"; + + // 2/3 + $math->setExpression("MAX(ROUND(IF(m >= 0, m, 1 / -m) * ROUND((((POW(n * 10, 0.7) - 1) * (-LN(p / n) * (1 - (p / n)))) / (-LN(1 / n) * (1 - (1 / n)))) + 1) * 2 / 3), 1)"); + $math->setExpression("ROUND(IF(m >= 0, m, 1 / -m) * 2 / 3 * (POW(10 * n, 0.7) - 1) * -LOG(p / n) * (1 - (p / n)) / (-LOG(1 / n) * (1 - (1 / n))) + 1)"); + + $math->setVariable('n', 22); + $math->setVariable('p', 9); + echo $math->getValue() . "
"; + + // 2/3 * 2/3 + $math->setExpression("MAX(ROUND(IF(m >= 0, m, 1 / -m) * ROUND((((POW(n * 10, 0.7) - 1) * (-LN(p / n) * (1 - (p / n)))) / (-LN(1 / n) * (1 - (1 / n)))) + 1) * 2 / 3), 1)"); + $math->setExpression("ROUND(IF(m >= 0, m, 1 / -m) * 2 / 3 * 2 / 3 * (POW(10 * n, 0.7) - 1) * -LOG(p / n) * (1 - (p / n)) / (-LOG(1 / n) * (1 - (1 / n))) + 1)"); + + + // n+5 + $math->setExpression("MAX(ROUND(IF(m >= 0, m, 1 / -m) * ROUND((((POW((n + 5) * 10, 0.7) - 1) * (-LN(p / (n + 5)) * (1 - (p / (n + 5))))) / (-LN(1 / (n + 5)) * (1 - (1 / (n + 5))))) + 1)), 1)"); + + + } catch (Exception $e) { + } + error_reporting($error_level); + jexit(); + */ + + $details_anzeigen = currentUserHasAccessToDetails(); + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id)" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $ranglisten = $db->loadObjectList(); + + HTML_sportsmanager::ranglistenHeader($params->get('titel'), $params->get('beschreibung'), $saisons, $filter_saison_id); + + foreach ($ranglisten as $rangliste) { + $query = "SELECT spieler_id, platz, punkte, vorname, nachname, geschlecht, aktueller_verein_id, bild_ausblenden" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE rangliste_id = $rangliste->rangliste_id AND platz <= 3" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rangliste_punkte = $db->loadObjectList(); + + $turnierdisziplinen = array(); + $punkte = array(); + $platzierung = array(); + + HTML_sportsmanager::rangliste($rangliste, $rangliste_punkte, FALSE, FALSE, $turnierdisziplinen, $punkte, $platzierung, $filter_saison_id, 0, 0, $details_anzeigen); + } + + /* + if ($filter_saison_id == $aktuelles_jahr) { + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE status > 0 AND erster_tag > CURDATE() OR letzter_tag < CURDATE()" . kategorieFilter("AND kategorie IN"); + if ($filter_saison_id != NULL) + $query .= " AND (ISNULL(erster_tag) OR (ISNULL(letzter_tag) AND YEAR(erster_tag) = $filter_saison_id) OR (NOT ISNULL(letzter_tag) AND YEAR(erster_tag) <= $filter_saison_id AND YEAR(letzter_tag) >= $filter_saison_id))"; + $query .= "\n ORDER BY reihenfolge, letzter_tag DESC, bezeichnung, kategorie"; + $db->setQuery( $query ); + if (!$result = $db->execute()) { die($db->stderr(true)); } + $ranglisten_uebrige = $db->loadObjectList(); + + if (count($ranglisten_uebrige) > 0) + HTML_sportsmanager::ranglistenListe($ranglisten_uebrige); + } s + */ + + administrationFooter(); + } + + function rangliste() { + $db = & getDatabase(); + $jinput = JFactory::getApplication()->input; + + $id = $jinput->get('id', 0, 'INT'); + if ($id == 0) + die("Missing id!"); + + $details_anzeigen = currentUserHasAccessToDetails(); + + $filter_saison_id = $jinput->get('filter_saison_id', 0, 'INT'); + if ($filter_saison_id == 0) + $filter_saison_id = $jinput->cookie->get('sportsmanager_filter_saison_id', 0, 'INT'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + // Rangliste ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE rangliste_id = $id AND status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id)" . kategorieFilter("AND kategorie IN"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $rangliste = $rows[0]; + + // Ranglistenpunkte ermitteln + $query = "SELECT spieler_id, platz, punkte, vorname, nachname, geschlecht, aktueller_verein_id, bild_ausblenden" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE rangliste_id = $rangliste->rangliste_id" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rangliste_punkte = $db->loadObjectList(); + + // Vorherige und nächste Rangliste ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE status > 0" . kategorieFilter("AND kategorie IN") . ($filter_saison_id != 0 ? " AND saison_id = $filter_saison_id" : "") + . "\n ORDER BY reihenfolge, bezeichnung, kategorie"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $n = count($rows); + $vorherige_rangliste_id = 0; + $naechste_rangliste_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->rangliste_id == $id) { + if ($i > 0) + $vorherige_rangliste_id = $rows[$i - 1]->rangliste_id; + if ($i + 1 < $n) + $naechste_rangliste_id = $rows[$i + 1]->rangliste_id; + break; + } + } + + // Anzeigen +// HTML_sportsmanager::rangliste($rangliste, $rangliste_punkte, TRUE, $rangliste_detailliert, $turnierdisziplinen, $punkte, $platzierung, $vereine_anzeigen, $filter_saison_id, $vorherige_rangliste_id, $naechste_rangliste_id, $details_anzeigen ); + HTML_sportsmanager::rangliste($rangliste, $rangliste_punkte, TRUE, $filter_saison_id, $vorherige_rangliste_id, $naechste_rangliste_id, $details_anzeigen); + } + + function ranglistenpunkte() { + $db = & getDatabase(); + + $rangliste_id = JRequest::getInt('rangliste_id', 0); + if ($rangliste_id == 0) + die("Missing id!"); + $spieler_id = JRequest::getInt('spieler_id', 0); + if ($spieler_id == 0) + die("Missing id!"); + + $filter_saison_id = JRequest::getInt('filter_saison_id', 0); + if ($filter_saison_id == 0) + $filter_saison_id = JRequest::getInt('sportsmanager_filter_saison_id', 0, 'cookie'); + + $query = "SELECT saison_id, saisonbezeichnung" + . "\n FROM #__sportsmanager_rangliste" + . "\n INNER JOIN #__sportsmanager_saison USING (saison_id)" + . "\n WHERE status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id)" . kategorieFilter("AND kategorie IN") + . "\n GROUP BY saison_id" + . "\n ORDER BY saisonbezeichnung DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $saisons = $db->loadObjectList(); + + if (count($saisons) != 0) { + $gefunden = FALSE; + foreach ($saisons as $saison) { + if ($saison->saison_id == $filter_saison_id) { + $gefunden = TRUE; + break; + } + } + if (!$gefunden) + $filter_saison_id = $saisons[0]->saison_id; + } + + $query = "LOCK TABLES #__sportsmanager_rangliste READ, #__sportsmanager_rangliste_punkte READ, #__sportsmanager_rangliste_turnierdisziplin_punkte READ, #__sportsmanager_rangliste_system READ, #__sportsmanager_rangliste_system_punkte READ, #__sportsmanager_rangliste_turnierdisziplin READ, #__sportsmanager_turniermeldung_spieler READ, #__sportsmanager_turniermeldung READ, #__sportsmanager_turnierdisziplin READ, #__sportsmanager_turnier READ, #__sportsmanager_spieler READ;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + // Rangliste ermitteln + $query = "SELECT *," + . "\n (SELECT COUNT(*) FROM #__sportsmanager_rangliste_punkte WHERE #__sportsmanager_rangliste_punkte.rangliste_id = #__sportsmanager_rangliste.rangliste_id) AS teilnehmer" + . "\n FROM #__sportsmanager_rangliste" + . "\n WHERE rangliste_id = $rangliste_id AND status > 0" . kategorieFilter("AND kategorie IN"); + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $rangliste = $rows[0]; + + // Ranglistenpunkte ermitteln + $query = "SELECT *" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n INNER JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE rangliste_id = $rangliste_id AND spieler_id = $spieler_id"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + if (count($rows) < 1) + die("Wrong id!"); + $rangliste_punkte = $rows[0]; + + $query = "SELECT *" + . ", (SELECT COUNT(*) FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_rangliste_turnierdisziplin_punkte.turnierdisziplin_id AND rundenstufe = 0) AS teilnehmer" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin_punkte" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n INNER JOIN #__sportsmanager_turnier USING (turnier_id)" + . "\n WHERE rangliste_id = $rangliste_id AND spieler_id = $spieler_id AND #__sportsmanager_turnierdisziplin.status > 0 " + . "\n ORDER BY beginn DESC, turnier_id DESC, turnierdisziplin_id DESC"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $turnierdisziplinen = $db->loadObjectList(); + + $streichergebnisse = array(); + if ($rangliste->streichergebnisse != 0) { + $query = "SELECT COUNT(*)" + . "\n FROM #__sportsmanager_rangliste_turnierdisziplin" + . "\n INNER JOIN #__sportsmanager_turnierdisziplin USING (turnierdisziplin_id)" + . "\n WHERE rangliste_id = $rangliste_id AND #__sportsmanager_turnierdisziplin.status > 0 AND EXISTS(SELECT * FROM #__sportsmanager_turniermeldung WHERE #__sportsmanager_turniermeldung.turnierdisziplin_id = #__sportsmanager_rangliste_turnierdisziplin.turnierdisziplin_id AND rundenstufe = 0)"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $anzahl_turnierdisziplinen = $db->loadResult(); + ; + + $spieler_anzahl_turnierdisziplinen = count($turnierdisziplinen); + $bewertete_turnierdisziplinen = $rangliste->streichergebnisse < 0 ? min($anzahl_turnierdisziplinen, abs($rangliste->streichergebnisse)) : ($anzahl_turnierdisziplinen - floor($anzahl_turnierdisziplinen * min(max($rangliste->streichergebnisse, 0), 100) / 100)); + + if ($spieler_anzahl_turnierdisziplinen > $bewertete_turnierdisziplinen) { + foreach ($turnierdisziplinen as $turnierdisziplin) + $streichergebnisse[$turnierdisziplin->turnierdisziplin_id] = $turnierdisziplin->punkte; + + arsort($streichergebnisse, SORT_NUMERIC); + $streichergebnisse_iterieren = $streichergebnisse; + + $anzahl_gewertet = 0; + foreach ($streichergebnisse_iterieren as $turnierdisziplin_id => $punkte) { + unset($streichergebnisse[$turnierdisziplin_id]); + $anzahl_gewertet++; + if ($anzahl_gewertet == $bewertete_turnierdisziplinen) + break; + } + } + } + + // Vorherige und nächste Ranglistenpunkte ermitteln + $query = "SELECT spieler_id" + . "\n FROM #__sportsmanager_rangliste_punkte" + . "\n LEFT JOIN #__sportsmanager_spieler USING (spieler_id)" + . "\n WHERE rangliste_id = $rangliste_id" + . "\n ORDER BY platz, nachname, vorname"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + $rows = $db->loadObjectList(); + + $query = "UNLOCK TABLES;"; + $db->setQuery($query); + if (!$result = $db->execute()) { + die($db->stderr(true)); + } + + $n = count($rows); + $vorherige_spieler_id = 0; + $naechste_spieler_id = 0; + for ($i = 0; $i < $n; $i++) { + if ($rows[$i]->spieler_id == $spieler_id) { + if ($i > 0) { + $vorherige_spieler_id = $rows[$i - 1]->spieler_id; + } + if ($i + 1 < $n) { + $naechste_spieler_id = $rows[$i + 1]->spieler_id; + } + break; + } + } + + HTML_sportsmanager::ranglistenpunkte($rangliste, $rangliste_punkte, $turnierdisziplinen, $streichergebnisse, $vorherige_spieler_id, $naechste_spieler_id); + } + ?> diff --git a/src/structure/components/com_sportsmanager/tools.php b/src/structure/components/com_sportsmanager/tools.php new file mode 100644 index 0000000..c5d0929 --- /dev/null +++ b/src/structure/components/com_sportsmanager/tools.php @@ -0,0 +1,393 @@ +createFunc("ROUND", round, 1); + $this->createFunc("VERTEILUNG", mathParserVerteilung, 4); + $this->createFunc("VERTEILUNGR", mathParserVerteilungR, 4); + } +} + +function keinZugriff($login = FALSE) { + if (isJson()) { + abortWithError(401 . ' Unauthorized'); + } + if (!$login || JFactory::getUser()->id) { + JError::raiseError(500, JText::_('JERROR_ALERTNOAUTHOR')); + jexit(); + } + $version = new JVersion; + $joomla = $version->getShortVersion(); + $u =& JFactory::getURI(); + $redirectUrl = urlencode(base64_encode($u->toString())); + $redirectUrl = '&return='.$redirectUrl; + $joomlaLoginUrl = 'index.php?option=' . (substr($joomla, 0, 3) != '1.5' ? 'com_users' : 'com_user') . '&view=login'; + $finalUrl = $joomlaLoginUrl . $redirectUrl; + $app = &JFactory::getApplication(); + $app->redirect(JRoute::_($finalUrl)); + jexit(); +} + +function bereinigterDateiname($dateiname) { + $_convertTable = array( + '&' => 'and', '@' => 'at', '©' => 'c', '®' => 'r', 'À' => 'a', + 'Á' => 'a', 'Â' => 'a', 'Ä' => 'a', 'Å' => 'a', 'Æ' => 'ae','Ç' => 'c', + 'È' => 'e', 'É' => 'e', 'Ë' => 'e', 'Ì' => 'i', 'Í' => 'i', 'Î' => 'i', + 'Ï' => 'i', 'Ò' => 'o', 'Ó' => 'o', 'Ô' => 'o', 'Õ' => 'o', 'Ö' => 'o', + 'Ø' => 'o', 'Ù' => 'u', 'Ú' => 'u', 'Û' => 'u', 'Ü' => 'u', 'Ý' => 'y', + 'ß' => 'ss','à' => 'a', 'á' => 'a', 'â' => 'a', 'ä' => 'a', 'å' => 'a', + 'æ' => 'ae','ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', + 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ò' => 'o', 'ó' => 'o', + 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', + 'û' => 'u', 'ü' => 'u', 'ý' => 'y', 'þ' => 'p', 'ÿ' => 'y', 'Ā' => 'a', + 'ā' => 'a', 'Ă' => 'a', 'ă' => 'a', 'Ą' => 'a', 'ą' => 'a', 'Ć' => 'c', + 'ć' => 'c', 'Ĉ' => 'c', 'ĉ' => 'c', 'Ċ' => 'c', 'ċ' => 'c', 'Č' => 'c', + 'č' => 'c', 'Ď' => 'd', 'ď' => 'd', 'Đ' => 'd', 'đ' => 'd', 'Ē' => 'e', + 'ē' => 'e', 'Ĕ' => 'e', 'ĕ' => 'e', 'Ė' => 'e', 'ė' => 'e', 'Ę' => 'e', + 'ę' => 'e', 'Ě' => 'e', 'ě' => 'e', 'Ĝ' => 'g', 'ĝ' => 'g', 'Ğ' => 'g', + 'ğ' => 'g', 'Ġ' => 'g', 'ġ' => 'g', 'Ģ' => 'g', 'ģ' => 'g', 'Ĥ' => 'h', + 'ĥ' => 'h', 'Ħ' => 'h', 'ħ' => 'h', 'Ĩ' => 'i', 'ĩ' => 'i', 'Ī' => 'i', + 'ī' => 'i', 'Ĭ' => 'i', 'ĭ' => 'i', 'Į' => 'i', 'į' => 'i', 'İ' => 'i', + 'ı' => 'i', 'IJ' => 'ij','ij' => 'ij','Ĵ' => 'j', 'ĵ' => 'j', 'Ķ' => 'k', + 'ķ' => 'k', 'ĸ' => 'k', 'Ĺ' => 'l', 'ĺ' => 'l', 'Ļ' => 'l', 'ļ' => 'l', + 'Ľ' => 'l', 'ľ' => 'l', 'Ŀ' => 'l', 'ŀ' => 'l', 'Ł' => 'l', 'ł' => 'l', + 'Ń' => 'n', 'ń' => 'n', 'Ņ' => 'n', 'ņ' => 'n', 'Ň' => 'n', 'ň' => 'n', + 'ʼn' => 'n', 'Ŋ' => 'n', 'ŋ' => 'n', 'Ō' => 'o', 'ō' => 'o', 'Ŏ' => 'o', + 'ŏ' => 'o', 'Ő' => 'o', 'ő' => 'o', 'Œ' => 'oe','œ' => 'oe','Ŕ' => 'r', + 'ŕ' => 'r', 'Ŗ' => 'r', 'ŗ' => 'r', 'Ř' => 'r', 'ř' => 'r', 'Ś' => 's', + 'ś' => 's', 'Ŝ' => 's', 'ŝ' => 's', 'Ş' => 's', 'ş' => 's', 'Š' => 's', + 'š' => 's', 'Ţ' => 't', 'ţ' => 't', 'Ť' => 't', 'ť' => 't', 'Ŧ' => 't', + 'ŧ' => 't', 'Ũ' => 'u', 'ũ' => 'u', 'Ū' => 'u', 'ū' => 'u', 'Ŭ' => 'u', + 'ŭ' => 'u', 'Ů' => 'u', 'ů' => 'u', 'Ű' => 'u', 'ű' => 'u', 'Ų' => 'u', + 'ų' => 'u', 'Ŵ' => 'w', 'ŵ' => 'w', 'Ŷ' => 'y', 'ŷ' => 'y', 'Ÿ' => 'y', + 'Ź' => 'z', 'ź' => 'z', 'Ż' => 'z', 'ż' => 'z', 'Ž' => 'z', 'ž' => 'z', + 'ſ' => 'z', 'Ə' => 'e', 'ƒ' => 'f', 'Ơ' => 'o', 'ơ' => 'o', 'Ư' => 'u', + 'ư' => 'u', 'Ǎ' => 'a', 'ǎ' => 'a', 'Ǐ' => 'i', 'ǐ' => 'i', 'Ǒ' => 'o', + 'ǒ' => 'o', 'Ǔ' => 'u', 'ǔ' => 'u', 'Ǖ' => 'u', 'ǖ' => 'u', 'Ǘ' => 'u', + 'ǘ' => 'u', 'Ǚ' => 'u', 'ǚ' => 'u', 'Ǜ' => 'u', 'ǜ' => 'u', 'Ǻ' => 'a', + 'ǻ' => 'a', 'Ǽ' => 'ae','ǽ' => 'ae','Ǿ' => 'o', 'ǿ' => 'o', 'ə' => 'e', + 'Ё' => 'jo','Є' => 'e', 'І' => 'i', 'Ї' => 'i', 'А' => 'a', 'Б' => 'b', + 'В' => 'v', 'Г' => 'g', 'Д' => 'd', 'Е' => 'e', 'Ж' => 'zh','З' => 'z', + 'И' => 'i', 'Й' => 'j', 'К' => 'k', 'Л' => 'l', 'М' => 'm', 'Н' => 'n', + 'О' => 'o', 'П' => 'p', 'Р' => 'r', 'С' => 's', 'Т' => 't', 'У' => 'u', + 'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c', 'Ч' => 'ch','Ш' => 'sh','Щ' => 'sch', + 'Ъ' => '-', 'Ы' => 'y', 'Ь' => '-', 'Э' => 'je','Ю' => 'ju','Я' => 'ja', + 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', + 'ж' => 'zh','з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', + 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', + 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', + 'ш' => 'sh','щ' => 'sch','ъ' => '-','ы' => 'y', 'ь' => '-', 'э' => 'je', + 'ю' => 'ju','я' => 'ja','ё' => 'jo','є' => 'e', 'і' => 'i', 'ї' => 'i', + 'Ґ' => 'g', 'ґ' => 'g', 'א' => 'a', 'ב' => 'b', 'ג' => 'g', 'ד' => 'd', + 'ה' => 'h', 'ו' => 'v', 'ז' => 'z', 'ח' => 'h', 'ט' => 't', 'י' => 'i', + 'ך' => 'k', 'כ' => 'k', 'ל' => 'l', 'ם' => 'm', 'מ' => 'm', 'ן' => 'n', + 'נ' => 'n', 'ס' => 's', 'ע' => 'e', 'ף' => 'p', 'פ' => 'p', 'ץ' => 'C', + 'צ' => 'c', 'ק' => 'q', 'ר' => 'r', 'ש' => 'w', 'ת' => 't', '™' => 'tm', + ); + $bad = array_merge( + array_map('chr', range(0,31)), + array("<", ">", ":", '"', "/", "\\", "|", "?", "*")); + + return str_replace($bad, "", strtr($dateiname, $_convertTable)); +} + +function setMinMemoryLimit($memDestSize) { + if (getBytes(ini_get('memory_limit')) < getBytes($memDestSize)) + ini_set('memory_limit', $memDestSize); +} + +function getBytes($val) { + $val = trim($val); + $last = strtolower($val{strlen($val)-1}); + switch($last) { + // The 'G' modifier is available since PHP 5.1.0 + case 'g': + $val *= 1024; + case 'm': + $val *= 1024; + case 'k': + $val *= 1024; + } + return $val; +} + +function encrypt($str, $key){ + $result=""; + for($i=0; $iid; + return " " . $prefix . " (SELECT berechtigt_individualwettbewerb_id FROM #__sportsmanager_berechtigt_fuer_individualwettbewerb INNER JOIN #__sportsmanager_individualwettbewerb ON individualwettbewerb_id = berechtigt_individualwettbewerb_id WHERE berechtigt_user_id = $user_id) "; +} + +function kategorieFilter($prefix, $suffix = "") { + global $params; + $kategorien = explode(",", $params->get( 'kategorien' )); + $filter = ""; + foreach ($kategorien as $s) { + $kategorie = intval(trim($s)); + if ($kategorie == 0) + continue; + if (!empty($filter)) + $filter .= ", "; + $filter .= $kategorie; + } + return empty($filter) ? "" : (" " . $prefix . " (" . $filter . ") " . $suffix); +} + +function turnierFilter($prefix) { + $db =& getDatabase(); + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + return " " . $prefix . " (SELECT berechtigt_turnier_id FROM #__sportsmanager_berechtigt_fuer_turnier WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) "; +} + +function vereinFilter($prefix) { + $db =& getDatabase(); + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + return " " . $prefix . " (SELECT berechtigt_verein_id FROM #__sportsmanager_berechtigt_fuer_verein INNER JOIN #__sportsmanager_verein ON berechtigt_verein_id = verein_id WHERE berechtigt_user_id = $user_id AND NOT ausgetreten) "; +} + +function veranstalterFilter($prefix) { + $db =& getDatabase(); + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + return " " . $prefix . " (SELECT berechtigt_veranstalter_id FROM #__sportsmanager_berechtigt_fuer_veranstalter WHERE berechtigt_user_id = $user_id) "; +} + +function veranstaltungFilter($prefix) { + $db =& getDatabase(); + $user_id = isExternalDatabase() ? 0 : JFactory::getUser()->id; + return " " . $prefix . " (SELECT berechtigt_veranstaltung_id FROM #__sportsmanager_berechtigt_fuer_veranstaltung INNER JOIN #__sportsmanager_veranstaltung ON veranstaltung_id = berechtigt_veranstaltung_id WHERE berechtigt_user_id = $user_id AND DATEDIFF(letzter_tag, NOW()) >= -14) "; +} + +// Berechnet Datum zum Montag der ersten Kalenderwoche eines Jahres +function firstkw($jahr) { + $erster = mktime(0,0,0,1,1,$jahr); + $wtag = date('w',$erster); + if ($wtag <= 4) { + /** + * Donnerstag oder kleiner: auf den Montag zurückrechnen. + */ + $montag = mktime(0,0,0,1,1-($wtag-1),$jahr); + } + else { + /** + * auf den Montag nach vorne rechnen. + */ + $montag = mktime(0,0,0,1,1+(7-$wtag+1),$jahr); + } + return $montag; +} + +// Berechnet Wochentag über Kalenderwoche, Jahr und Wochentag (0 = Montag, ..., 6 = Sonntag) +function mondaykw($kw, $jahr, $weekday) { + $firstmonday = firstkw($jahr); + $mon_monat = date('m',$firstmonday); + $mon_jahr = date('Y',$firstmonday); + $mon_tage = date('d',$firstmonday); + $tage = ($kw-1)*7; + $daykw = mktime(0,0,0,$mon_monat,$mon_tage+$tage+$weekday,$mon_jahr); + return $daykw; +} + +// Berechnet Termin am Wochentag (0 = Montag, ..., 6 = Sonntag) in Kalenderwoche zum Datum +function geaenderterWochentag($datum, $wochentag) { + $wtag = date('w', $datum); + if ($wtag == 0) // Sonntag + $wtag = 7; + $mon_monat = date('m', $datum); + $mon_jahr = date('Y', $datum); + $mon_tage = date('d', $datum); + return mktime(0,0,0, $mon_monat, $mon_tage + 1 - $wtag + $wochentag, $mon_jahr); +} + +function normalisiertesDatum($datum) { + if ($datum == NULL) + return NULL; + + if (strpos($datum, "-") !== false) + $trennzeichen = "-"; + else + $trennzeichen = "."; + + $t = explode($trennzeichen, $datum); + $n = count($t); + if ($n == 1) { + $s = $t[0]; + if (strlen($s) < 8) + return NULL; + $jahr = intval(substr($s, 0, 4)); + $monat = intval(substr($s, 4, 2)); + $tag = intval(substr($s, 6, 2)); + } + else if ($n == 3) { + if ($trennzeichen != ".") { + $jahr = intval($t[0]); + if (strlen($t[0]) <= 2) + $jahr += 1900; + $monat = intval($t[1]); + $tag = intval($t[2]); + } + else { + $tag = intval($t[0]); + $monat = intval($t[1]); + $jahr = intval($t[2]); + if (strlen($t[2]) <= 2) + $jahr += 1900; + } + } + else + return NULL; + + if (!checkdate($monat, $tag, $jahr)) + return NULL; + + return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);; +} + +function normalisierteUhrzeit($uhrzeit) { + if ($uhrzeit == NULL) + return NULL; + + if (strpos($uhrzeit, "-") !== FALSE) + $trennzeichen = "-"; + else + $trennzeichen = ":"; + + $t = explode($trennzeichen, $uhrzeit); + $n = count($t); + if ($n == 1) { + $s = $t[0]; + $len = strlen($s); + if ($len != 4 && $len != 6) + return NULL; + $stunden = intval(substr($s, 0, 2)); + $minuten = intval(substr($s, 2, 2)); + $sekunden = $len != 6 ? 0 : intval(substr($s, 4, 2)); + } + else if ($n == 2 || $n == 3) { + $stunden = intval($t[0]); + $minuten = intval($t[1]); + $sekunden = $n != 3 ? 0 : intval($t[2]); + } + else + return NULL; + + if ($stunden < 0 || $stunden > 23 || $minuten < 0 || $minuten > 59 || $sekunden < 0 || $sekunden > 59) + return NULL; + + return sprintf("%02d:%02d:%02d", $stunden, $minuten, $sekunden);; +} + +function runden_detailliert_invers($runden) { + if ($runden == null) + return null; + $runden_invers = ""; + $saetze = explode(" ", $runden); + foreach ($saetze as $satz) { + $punkte = explode(":", $satz); + if (!empty($runden_invers)) + $runden_invers .= " "; + $runden_invers .= $punkte[1] . ":" . $punkte[0]; + } + return $runden_invers; +} + +function runden_detailliert_auswertung($runden) { + $ergebnis = 0; + $heim_saetze = 0; + $unentschieden_saetze = 0; + $gast_saetze = 0; + $heim_punkte = 0; + $gast_punkte = 0; + if ($runden != null) { + $saetze = explode(" ", $runden); + foreach ($saetze as $satz) { + $punkte = explode(":", $satz); + $heim_punkte += (int)$punkte[0]; + $gast_punkte += (int)$punkte[1]; + if ($punkte[0] > $punkte[1]) + $heim_saetze++; + else if ($punkte[0] < $punkte[1]) + $gast_saetze++; + else + $unentschieden_saetze++; + } + if ($heim_saetze > $gast_saetze) + $ergebnis = 1; + else if ($heim_saetze < $gast_saetze) + $ergebnis = 2; + } + return array($ergebnis, $heim_saetze, $unentschieden_saetze, $gast_saetze, $heim_punkte, $gast_punkte); +} + +// pass two file names +// returns TRUE if files are the same, FALSE otherwise +function files_identical($fn1, $fn2) { + if(!is_file($fn1) || !is_file($fn2)) + return FALSE; + + if(filesize($fn1) !== filesize($fn2)) + return FALSE; + + if(!$fp1 = fopen($fn1, 'rb')) + return FALSE; + + if(!$fp2 = fopen($fn2, 'rb')) { + fclose($fp1); + return FALSE; + } + + $same = TRUE; + while (!feof($fp1) and !feof($fp2)) + if(fread($fp1, 4096) !== fread($fp2, 4096)) { + $same = FALSE; + break; + } + + if(feof($fp1) !== feof($fp2)) + $same = FALSE; + + fclose($fp1); + fclose($fp2); + + return $same; +} +?> diff --git a/src/structure/components/com_sportsmanager/views/desktop.ini b/src/structure/components/com_sportsmanager/views/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/index.html b/src/structure/components/com_sportsmanager/views/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/border-radius.htc b/src/structure/components/com_sportsmanager/views/sportsmanager/border-radius.htc new file mode 100644 index 0000000..c3ae104 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/border-radius.htc @@ -0,0 +1,143 @@ +--Do not remove this if you are using-- +Original Author: Remiz Rahnas +Original Author URL: http://www.htmlremix.com +Published date: 2008/09/24 + +Changes by Nick Fetchak: +- IE8 standards mode compatibility +- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage +Published date : 2009/11/18 + + + + + diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/desktop.ini b/src/structure/components/com_sportsmanager/views/sportsmanager/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/index.html b/src/structure/components/com_sportsmanager/views/sportsmanager/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/metadata.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/metadata.xml new file mode 100644 index 0000000..69dc792 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/metadata.xml @@ -0,0 +1,6 @@ + + + + Wählen Sie ein Layout für den Inhalt + + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.php b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.php new file mode 100644 index 0000000..cb4fad2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.php @@ -0,0 +1,4 @@ + diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml new file mode 100644 index 0000000..dcc238d --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/default.xml @@ -0,0 +1,47 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/desktop.ini b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/desktop.ini new file mode 100644 index 0000000..02fb9d2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/desktop.ini @@ -0,0 +1,5 @@ +[.ShellClassInfo] +InfoTip=Dieser Ordner wird online freigegeben. +IconFile=C:\Program Files (x86)\Google\Drive\googledrivesync.exe +IconIndex=16 + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.php b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.php new file mode 100644 index 0000000..cb4fad2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.php @@ -0,0 +1,4 @@ + diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.xml new file mode 100644 index 0000000..4485544 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/elorangliste.xml @@ -0,0 +1,91 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/index.html b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/index.html new file mode 100644 index 0000000..9f8c6ad --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.php b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.php new file mode 100644 index 0000000..cb4fad2 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.php @@ -0,0 +1,4 @@ + diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.xml b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.xml new file mode 100644 index 0000000..fef9c4f --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/tmpl/individualwettbewerbe.xml @@ -0,0 +1,42 @@ + + + + + + +
+ + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php new file mode 100644 index 0000000..f5f7b08 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.html.php @@ -0,0 +1,7198 @@ + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ +
+ + + + + + + + +
+ : + + +     + +
+
+ +
+   + + + + + +
+ +
+
+   + + + + + + + +
+ + +
+ +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) || $ticker_anzeigen) { + ?> +
+ + + 0) { + ?> + + + + + +
+ : + + +     + +
+ + ',screen.width,725);" class="readonget( 'pageclass_sfx' ); ?>"> + …(no menu) + */ + ?> +
+ +
+   + + + + + + + + + + + + + + + +
+ + + > bezeichnung); ?> +   + + < +   + + > +
+ + + + + +
+
+

+ bezeichnung); + $bild = bildHTML("mannschaftswettbewerbe/logo", $veranstaltung->veranstaltung_id, 0, 0, 0, 0, 'border="0" hspace="8" style="vertical-align:bottom"'); + if ($bild != null) { + if (!empty($veranstaltung->logo_url)) { + if (strpos($veranstaltung->logo_url, "://") === false) + $logo_url = "http://" . $veranstaltung->logo_url; + else + $logo_url = $veranstaltung->logo_url; + echo "" . $bild . ""; + } + else + echo $bild; + } + ?> +

+
+
+ + + + +
+ bezeichnung); + $bild = bildHTML("mannschaftswettbewerbe/logo", $veranstaltung->veranstaltung_id, 0, 0, 0, 0, 'border="0" hspace="8" style="vertical-align:bottom"'); + if ($bild != null) { + if (!empty($veranstaltung->logo_url)) { + if (strpos($veranstaltung->logo_url, "://") === false) + $logo_url = "http://" . $veranstaltung->logo_url; + else + $logo_url = $veranstaltung->logo_url; + echo "" . $bild . ""; + } + else + echo $bild; + } + ?> +
+ + + + + +
+
+ +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ + + + + +
+ + disziplin); ?> +
+ + + + + + + + + + +
+ : + + beginn); ?> +
+ : + + teilnehmer; ?> +
+
+ + +
") !== FALSE ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ turnierort)) { + $ort_anzeigen = true; + break; + } + } + + if (!empty($turniere)) { + ?> + + + + + + + + + + + + + + + + + +
+ erster_tag, $turnier->letzter_tag, true))); ?> + + turnierbezeichnung)); + if (!empty($turnier->disziplinen)) { + ?> +
+ disziplinen; ?> + +
+ turnierort)); ?> +
+ +   + + + + + + + + + + + + + + + +
+ + + > turnierbezeichnung) . (!empty($turnier->turnierort) ? (" in " . $turnier->turnierort) : ""); ?> +   + + < +   + + > +
+ + + + + + + + +
+ turnierort)) echo $turnier->turnierort . ", "; + echo FormatierterTermin($turnier->erster_tag, $turnier->letzter_tag, true); + ?> +
+
+

turnierbezeichnung); ?>

+
+
+ 0) { + $bilder_anzeigen_1 = false; + $bilder_anzeigen_2 = false; + foreach ($meldungen as $meldung) { + $spieler = $meldungenSpielerNamen[$meldung->turniermeldung_id]; + $spielerIds = $meldungenSpielerIds[$meldung->turniermeldung_id]; + $spielerGeschlechter = $meldungenSpielerGeschlechter[$meldung->turniermeldung_id]; + $spielerBilderAusblenden = $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id]; + if (isset($spieler[0]) && bildHTML("spieler", !isset($spielerIds[0]) || (!$details_anzeigen && $spielerBilderAusblenden[0]) ? '' : $spielerIds[0], 30, 40, 0, 0, '', $spielerGeschlechter[0] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_1 = true; + if (isset($spieler[1]) && bildHTML("spieler", !isset($spielerIds[1]) || (!$details_anzeigen && $spielerBilderAusblenden[1]) ? '' : $spielerIds[1], 30, 40, 0, 0, '', $spielerGeschlechter[1] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen_1 && $bilder_anzeigen_2) + break; + } + + ?> + + + + + + + + + + + + + + + +
+ platz != 0 ? $meldung->platz : JText::_('COM_SPORTSMANAGER_NONE'); + ?> + + + + + + + + + + + +
+ turniermeldung_id]; + $spielerIds = $meldungenSpielerIds[$meldung->turniermeldung_id]; + $spielerGeschlechter = $meldungenSpielerGeschlechter[$meldung->turniermeldung_id]; + $spielerBilderAusblenden = $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id]; + if (!isset($spielerIds[0])) + echo htmlentities_utf8($spieler[0]); + else { + ?> + + "; + if (!isset($spielerIds[1])) + echo htmlentities_utf8($spieler[1]); + else { + ?> + + + + + + +
+ +
+ + + + +
+ + +
+   + + + + + + + + + + + + + + + +
+ + > turnierbezeichnung) . (!empty($turnier->turnierort) ? (" in " . $turnier->turnierort) : ""); ?> + > disziplin); ?> +   + + < +   + + > +
+ + + + + + + + +
+ turnierort)) echo $turnier->turnierort . ", "; + echo FormatiertesDatum($disziplin->beginn) . " " . JText::_('COM_SPORTSMANAGER_HOUR') . ", " . $disziplin->teilnehmer . JText::_('COM_SPORTSMANAGER_MESSAGES'); + ?> +
+
+

turnierbezeichnung) . ": " . htmlentities_utf8($disziplin->disziplin); ?>

+
+
+ + 0) || ($rundenstufe != 0 && count($spiele[$rundenstufe]) > 0)) { + ?> + + + + +
+ turniermeldung_id]; + $spielerIds = $meldungenSpielerIds[$meldung->turniermeldung_id]; + $spielerGeschlechter = $meldungenSpielerGeschlechter[$meldung->turniermeldung_id]; + $spielerBilderAusblenden = $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id]; + if (isset($spieler[0]) && bildHTML("spieler", !isset($spielerIds[0]) || (!$details_anzeigen && $spielerBilderAusblenden[0]) ? '' : $spielerIds[0], 30, 40, 0, 0, '', $spielerGeschlechter[0] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_1 = true; + if (isset($spieler[1]) && bildHTML("spieler", !isset($spielerIds[1]) || (!$details_anzeigen && $spielerBilderAusblenden[1]) ? '' : $spielerIds[1], 30, 40, 0, 0, '', $spielerGeschlechter[1] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen_1 && $bilder_anzeigen_2) + break; + } + + if (($rundenstufe == 0 || $rundenstufe == 10) && count($meldungen[$rundenstufe]) > 0) { + ?> + + + + + + + + + + + + + + + +
+ platz != 0 ? $meldung->platz : JText::_('COM_SPORTSMANAGER_NONE'); + ?> + + + + + + + + + + + +
+ turniermeldung_id]; + $spielerIds = $meldungenSpielerIds[$meldung->turniermeldung_id]; + $spielerGeschlechter = $meldungenSpielerGeschlechter[$meldung->turniermeldung_id]; + $spielerBilderAusblenden = $meldungenSpielerBilderAusblenden[$meldung->turniermeldung_id]; + if (!isset($spielerIds[0])) + echo htmlentities_utf8($spieler[0]); + else { + ?> + + "; + if (!isset($spielerIds[1])) + echo htmlentities_utf8($spieler[1]); + else { + ?> + + + + + + +
+ +
+   + 0) { + $ergebnis_detailliert_anzeigen = false; + foreach ($spiele[$rundenstufe] as $spiel) { + if (!empty($spiel->ergebnis_detailliert)) { + $ergebnis_detailliert_anzeigen = true; + break; + } + } + ?> + + + + + + + + + runde) { + $runde = $spiel->runde; + ?> + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + +
+ ergebnis == 1) { + $gewinner_meldung_id = $spiel->heim_meldung_id; + $verlierer_meldung_id = $spiel->gast_meldung_id; + } + else { + $gewinner_meldung_id = $spiel->gast_meldung_id; + $verlierer_meldung_id = $spiel->heim_meldung_id; + } + if (isset($meldungenSpielerNamen[$gewinner_meldung_id])) { + $gewinner = $meldungenSpielerNamen[$gewinner_meldung_id]; + $gewinnerIds = $meldungenSpielerIds[$gewinner_meldung_id]; + $gewinnerGeschlechter = $meldungenSpielerGeschlechter[$gewinner_meldung_id]; + $gewinnerBilderAusblenden = $meldungenSpielerBilderAusblenden[$gewinner_meldung_id]; + } + else { + $gewinner = null; + $gewinnerIds = null; + $gewinnerGeschlechter = null; + $gewinnerBilderAusblenden = null; + } + if (isset($meldungenSpielerNamen[$verlierer_meldung_id])) { + $verlierer = $meldungenSpielerNamen[$verlierer_meldung_id]; + $verliererIds = $meldungenSpielerIds[$verlierer_meldung_id]; + $verliererGeschlechter = $meldungenSpielerGeschlechter[$verlierer_meldung_id]; + $verliererBilderAusblenden = $meldungenSpielerBilderAusblenden[$verlierer_meldung_id]; + } + else { + $verlierer = null; + $verliererIds = null; + $verliererGeschlechter = null; + $verliererBilderAusblenden = null; + } + if (isset($gewinner)) { + echo htmlentities_utf8($gewinner[0]); + if (isset($gewinner[1])) + echo "
" . htmlentities_utf8($gewinner[1]); + } + ?> +
+ + + +
+ +
ergebnis_detailliert)) echo str_replace(" ", " | ", $spiel->ergebnis == 1 ? $spiel->ergebnis_detailliert : runden_detailliert_invers($spiel->ergebnis_detailliert)); ?> + + + + + + + + + + +
+ " . htmlentities_utf8($verlierer[1]); + } + ?> + + + + +
+ +
+   + 0) { + ?> + + + + +
Spiele der Zusatzunde
+ + + + + + runde) { + $runde = $spiel->runde; + ?> + + + + + + + + + +
GewinnerVerlierer
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->heim_meldung_id] : $meldungenSpielerNamen[$spiel->gast_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->gast_meldung_id] : $meldungenSpielerNamen[$spiel->heim_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+   + 0) { + ?> + + + + +
Spiele der 2. Zusatzunde
+ + + + + + runde) { + $runde = $spiel->runde; + ?> + + + + + + + + + +
GewinnerVerlierer
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->heim_meldung_id] : $meldungenSpielerNamen[$spiel->gast_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->gast_meldung_id] : $meldungenSpielerNamen[$spiel->heim_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+   + 0) { + ?> + + + + +
Spiele der Vorrunde
+ + + + + + runde) { + $runde = $spiel->runde; + ?> + + + + + + + + + +
GewinnerVerlierer
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->heim_meldung_id] : $meldungenSpielerNamen[$spiel->gast_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->heim_meldung_id : $spiel->gast_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+ + + + + + + + + + +
+ ergebnis == 1 ? $meldungenSpielerNamen[$spiel->gast_meldung_id] : $meldungenSpielerNamen[$spiel->heim_meldung_id]; + echo htmlentities_utf8($spieler[0]); + if (isset($spieler[1])) + echo "
" . htmlentities_utf8($spieler[1]); + ?> +
+ ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][0], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> + + ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1]) && ($bild = bildHTML("spieler", $meldungenSpielerIds[$spiel->ergebnis == 1 ? $spiel->gast_meldung_id : $spiel->heim_meldung_id][1], 30, 40, 0, 0, 'border="1"')) != NULL) { + echo $bild; + } + ?> +
+ +
+   + 0) { + $zeitpunkt_anzeigen = false; + foreach ($rows as $begegnung) { + if (!empty($begegnung->zeitpunkt)) { + $zeitpunkt_anzeigen = true; + break; + } + } + + if (strlen($titel) > 0) { + ?> + + + +
+ veranstaltung_id . "\">"; + echo $titel; + if (!empty($veranstaltung) && ($bild = bildHTML("mannschaftswettbewerbe/logo", $veranstaltung->veranstaltung_id, 0, 0, 0, 0, 'border="0" hspace="8" style="vertical-align:bottom"')) != null) { + if (!empty($veranstaltung->logo_url)) { + if (strpos($veranstaltung->logo_url, "://") === false) + $logo_url = "http://" . $veranstaltung->logo_url; + else + $logo_url = $veranstaltung->logo_url; + echo "" . $bild . ""; + } + else + echo $bild; + } + ?> +
+ + + + + + + + + + + + punktetyp == 0) { + ?> + + + + + heim_punkte != null || $row->gast_punkte != null) ? true : false; +// if ($monat == NULL) +// $monat = substr($row->zeitpunkt, 0, 7); + if ($zeitfenster == 0 && $veranstaltung != null) { + if ($veranstaltung->unterteilung == 0 || $veranstaltung->unterteilung == 1) { + if ($spieltag != $row->spieltag || $spielort_name != $row->spielort_name) { + $spieltag = $row->spieltag; + $spielort_name = $row->spielort_name; + ?> + + + + + + + zeitpunkt, 0, 7)) { // Freundschaftsspiel + $monat = substr($row->zeitpunkt, 0, 7); + if (strlen($monat) == 0) + $monatsbezeichnung = "N/A"; + else { + $monatsname = array(JText::_('COM_SPORTSMANAGER_JANUARY'), JText::_('COM_SPORTSMANAGER_FEBRUARY'), JText::_('COM_SPORTSMANAGER_MARCH'), JText::_('COM_SPORTSMANAGER_APRIL'), JText::_('COM_SPORTSMANAGER_MAY'), JText::_('COM_SPORTSMANAGER_JUNE'), JText::_('COM_SPORTSMANAGER_JULY'), JText::_('COM_SPORTSMANAGER_AUGUST'), JText::_('COM_SPORTSMANAGER_SEPTEMBER'), JText::_('COM_SPORTSMANAGER_OCTOBER'), JText::_('COM_SPORTSMANAGER_NOVEMBER'), JText::_('COM_SPORTSMANAGER_DECEMBER')); + $monatsbezeichnung = $monatsname[substr($monat, 5, 2) - 1] . " " . substr($monat, 0, 4); + } + /* ?> + + + + + + + + + + + + + + punktetyp == 0) { + ?> + + + + + +
+ Wettbewerb
+/- Tage
+ unterteilung == 0)); + if (!empty($spielort_name)) + echo "
" . htmlentities_utf8($spielort_name); + ?> +
+
+ + veranstaltung_id . '&id=' . $row->begegnung_id) . "\">" . FormatiertesDatum($row->zeitpunkt) . ""; + else if (($row->verschieberegel_erfuellt || $row->verlegung_eingetragen) && $row->berechtigt_fuer_team_eintragen > 0 && ($row->heim_punkte == 0 && $row->gast_punkte == 0)) + echo "veranstaltung_id . '&id=' . $row->begegnung_id . ($aus_uebersicht ? "&aus_uebersicht=1" : "")) . "\">" . ($row->verlegung_eingetragen != null ? ("bisher " . FormatiertesDatum($row->zeitpunkt)) : FormatiertesDatum($row->zeitpunkt)) . ""; + else + echo $row->verlegung_eingetragen != null ? ("bisher " . FormatiertesDatum($row->zeitpunkt)) : FormatiertesDatum($row->zeitpunkt); + ?> + +
+ + spielort_name)) + echo htmlentities_utf8($row->spielort_name) . "
"; + echo htmlentities_utf8($row->bezeichnung); + if ($row->spieltag != null) + echo htmlentities_utf8(" (" . Rundenbezeichnung($row->spieltag, $row->unterteilung == 0) . ")"); + ?> +
+ unterteilung != 0 && $veranstaltung->unterteilung != 1) || $zeitfenster != 0) && !empty($row->spielort_name)) { + ?> +
+ + spielort_name)) + echo htmlentities_utf8($row->spielort_name) . "
"; + ?> +
+ tisch) && (!$ergebnis_vorhanden || ($ergebnis_vorhanden && $row->zwischenergebnis))) + echo "
" . JText::_('COM_SPORTSMANAGER_MATCH_TABLE') . ": " . htmlentities_utf8($row->tisch) . ""; + ?> +
+ heim_team_id) . "\">" . htmlentities_utf8(NichtLeererString($row->heim_name)) . ""; + if (!$row->zwischenergebnis && ((!$ergebnis_vorhanden && $row->verantwortlich_team_id == $row->heim_team_id) || $row->unbestaetigtes_ergebnis_team_id == $row->gast_team_id)) { + echo "
verantwortlich"; + if ($row->ergebnis_vorgeschlagen != null) + echo " seit " . FormatiertesDatum($row->ergebnis_vorgeschlagen, false, false) . ""; + else if ($row->verlegung_eingetragen != null) + echo " seit " . FormatiertesDatum($row->verlegung_eingetragen, false, false) . ""; + } + ?> +
+ gast_team_id) . "\">" . htmlentities_utf8(NichtLeererString($row->gast_name)) . ""; + if (!$row->zwischenergebnis && ((!$ergebnis_vorhanden && $row->verantwortlich_team_id == $row->gast_team_id) || $row->unbestaetigtes_ergebnis_team_id == $row->heim_team_id)) { + echo "
verantwortlich"; + if ($row->ergebnis_vorgeschlagen != null) + echo " seit " . FormatiertesDatum($row->ergebnis_vorgeschlagen, false, false) . ""; + else if ($row->verlegung_eingetragen != null) + echo " seit " . FormatiertesDatum($row->verlegung_eingetragen, false, false) . ""; + } + ?> +
bezeichnung); ?> + heim_punkte . ":" . $row->gast_punkte) : "_:_"; + ?> + + berechtigt_fuer_team_eintragen > 0 && ($row->unbestaetigtes_ergebnis_id != null || ($row->heim_punkte == 0 && $row->gast_punkte == 0))) { + echo "veranstaltung_id . '&id=' . $row->begegnung_id . ($aus_uebersicht ? '&aus_uebersicht=1' : '')) . "\">" . ($ergebnis_vorhanden ? ($row->heim_spielpunkte . ":" . $row->gast_spielpunkte) : "_:_") . ""; + } + else if ($ergebnis_vorhanden) { + echo "veranstaltung_id . '&id=' . $row->begegnung_id) . "\">" . ($row->heim_spielpunkte . ":" . $row->gast_spielpunkte) . ""; + } + else { + echo "_:_"; + } + if ($row->unbestaetigtes_ergebnis_id != null) + echo "
" . ($row->zwischenergebnis ? "live" : "unbestätigt") . ""; + ?> +
+ +   + +
+
+ +
+   + + + + + + + + + + + + + + + +
+ + + + > + + teamname); ?>bezeichnung); ?> > + teamname); ?>teamname); ?> + + + > + + bezeichnung); ?> > + teamname); ?>teamname); ?> + +   + +   + > +
+ + + + + +
+ zeitpunkt); + if ($begegnung->spieltag != null) + echo ", " . htmlentities_utf8(Rundenbezeichnung($begegnung->spieltag, $veranstaltung->unterteilung == 0)); + if ($begegnung->unbestaetigtes_ergebnis_id != null) + echo $begegnung->zwischenergebnis ? JText::_('COM_SPORTSMANAGER_PROVISIONAL_RESULT') : JText::_('COM_SPORTSMANAGER_UNCONFIRMED_RESULT'); + if (!empty($begegnung->tisch)) + echo ", " . JText::_('COM_SPORTSMANAGER_MATCH_TABLE') . ": " . htmlentities_utf8($begegnung->tisch); + ?> +
+ + + + + + + + +
+ + + + + + + + + +
+ team_id, 48, 48, 0, 0, 'border="0" align="right"'); + if ($bild == null && $heim_team->verein_id != null) + $bild = bildHTML("vereine", $heim_team->verein_id, 48, 48, 0, 0, 'border="0" align="right"'); + if ($bild != null) + echo $bild; + ?> + +

teamname); ?>

+
+ team_id, 48, 48, 0, 0, 'border="0" align="left"'); + if ($bild != null) + echo $bild; + else if ($heim_team->verein_id != null) { + $bild = bildHTML("vereine", $gast_team->verein_id, 48, 48, 0, 0, 'border="0" align="left"'); + if ($bild != null) + echo $bild; + } + ?> + +

teamname); ?>

+
+
+

heim_spielpunkte . ":" . $begegnung->gast_spielpunkte; ?>

spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2) echo "

(" . $begegnung->heim_punkte . ":" . $begegnung->gast_punkte . ")

"; ?> +
+ + 0) { + $bilder_anzeigen = false; + foreach ($spiele as $spiel) { + if (bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_mitglied_id, 30, 40, 0, 0) != null || bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_id, 30, 40, 0, 0, $spiel->heim_spieler_1_geschlecht == 'M' ? 'm' : 'w') != null) { + $bilder_anzeigen = true; + break; + } + if (!(empty($spiel->heim_spieler_2_id) && empty($spiel->gast_spieler_2_id)) && (bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_mitglied_id, 30, 40, 0, 0) != null || bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_id, 30, 40, 0, 0, $spiel->heim_spieler_2_geschlecht == 'M' ? 'm' : 'w') != null)) { + $bilder_anzeigen = true; + break; + } + if (bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_mitglied_id, 30, 40, 0, 0) != null || bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_id, 30, 40, 0, 0, $spiel->gast_spieler_1_geschlecht == 'M' ? 'm' : 'w') != null) { + $bilder_anzeigen = true; + break; + } + if (!(empty($spiel->heim_spieler_2_id) && empty($spiel->gast_spieler_2_id)) && (bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_mitglied_id, 30, 40, 0, 0) != null || bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_id, 30, 40, 0, 0, $spiel->gast_spieler_2_geschlecht == 'M' ? 'm' : 'w') != null)) { + $bilder_anzeigen = true; + break; + } + } + + ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
teamspiel_nummer ?> + + + + + heim_spieler_2_id) && empty($spiel->gast_spieler_2_id))) { + ?> + + + +
" + align="center"> + heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_mitglied_id, 30, 40, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_id, 30, 40, 0, 0, 'border="1"', $spiel->heim_spieler_1_geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) + echo $bild; + ?> + + heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_mitglied_id, 30, 40, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_id, 30, 40, 0, 0, 'border="1"', $spiel->heim_spieler_2_geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) + echo $bild; + ?> +
+
+ heim_spieler_1_id != null && $spiel->heim_spieler_1_id != 0) { + ?>heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); ?> + heim_spieler_2_id != null && $spiel->heim_spieler_2_id != 0) { + ?>
heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); ?> + +
ergebnis_detailliert); ?> + gast_spieler_1_id != null && $spiel->gast_spieler_1_id != 0) { + ?>gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); ?> + gast_spieler_2_id != null && $spiel->gast_spieler_2_id != 0) { + ?>
gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); ?> + +
+ + + + + heim_spieler_2_id) && empty($spiel->gast_spieler_2_id))) { + ?> + + + +
" + align="center"> + gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_mitglied_id, 30, 40, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_id, 30, 40, 0, 0, 'border="1"', $spiel->gast_spieler_1_geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) + echo $bild; + ?> + + gast_spieler_2_bild_ausblenden) && ($spiel->gast_spieler_2_mitglied_id != null || ($spiel->gast_spieler_2_id != null && $spiel->gast_spieler_2_id != 0))) { + $bild = bildHTML("mannschaftsmitglieder", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_mitglied_id, 30, 40, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_id, 30, 40, 0, 0, 'border="1"', $spiel->gast_spieler_2_geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) + echo $bild; + } + ?> +
+
+   + 0) { + if ($alleine_angezeigt && $veranstaltung->tabellenwertung >= -1 && $veranstaltung->tabellenwertung <= 11 && count($spieltage) > 1) { + ?> +
+ + + + +
+ +
+ + +
+ team_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + else if (bildHTML("vereine", $team->verein_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + } + + $zusatzpunkte_anzeigen = false; + if ($veranstaltung->tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) { + foreach ($teams as $team) { + if ($team->zusatzpunkte != 0) { + $zusatzpunkte_anzeigen = true; + break; + } + } + } + + ?> + + + + + + + + + + + + + tabellenwertung != 3 && $veranstaltung->tabellenwertung != 6 && $veranstaltung->tabellenwertung != 9 && $veranstaltung->tabellenwertung != 23 && $veranstaltung->tabellenwertung != 26 && $veranstaltung->tabellenwertung != 29) { + if ($alleine_angezeigt && $praesentation == 0) { + ?> + + + + tabellenwertung != 3 && $veranstaltung->tabellenwertung != 6 && $veranstaltung->tabellenwertung != 9 && $veranstaltung->tabellenwertung != 23 && $veranstaltung->tabellenwertung != 26 && $veranstaltung->tabellenwertung != 29 && ($modus->spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2)) { + if ($alleine_angezeigt && $praesentation == 0 && ($modus->spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2)) { + ?> + + + + tabellenwertung >= 21) { + ?> + + + tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) { + ?> + + + + + + + gesamtpunkte); + $begegnungspunkte = $team->begegnungspunkte; + $zusatzpunkte = floatval($team->zusatzpunkte); + $punkte_quotient = $team->punkte_quotient; + $punkte_differenz = $team->punkte_differenz; + $punkte_gewonnen = $team->punkte_gewonnen; + $punkte_verloren = $team->punkte_verloren; + $spielpunkte_quotient = $team->spielpunkte_quotient; + $spielpunkte_differenz = $team->spielpunkte_differenz; + $spielpunkte_gewonnen = $team->spielpunkte_gewonnen; + $spielpunkte_verloren = $team->spielpunkte_verloren; + if ($veranstaltung->tabellenwertung >= 21) { + $buchholz1_wert = $team->buchholz1; + $buchholz2_wert = $team->buchholz2; + } + ?> + + + + + + + + + + tabellenwertung != 3 && $veranstaltung->tabellenwertung != 6 && $veranstaltung->tabellenwertung != 9 && $veranstaltung->tabellenwertung != 23 && $veranstaltung->tabellenwertung != 26 && $veranstaltung->tabellenwertung != 29) { + $title = ""; + if ($alleine_angezeigt && $praesentation == 0) { + ?> + + + + tabellenwertung != 3 && $veranstaltung->tabellenwertung != 6 && $veranstaltung->tabellenwertung != 9 && $veranstaltung->tabellenwertung != 23 && $veranstaltung->tabellenwertung != 26 && $veranstaltung->tabellenwertung != 29 && ($modus->spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2)) { + $title = ""; + if ($modus->spielpunkte_wertung_einzel != 2 || $modus->spielpunkte_wertung_doppel != 2) { + if ($alleine_angezeigt && $praesentation == 0) { + ?> + + + + tabellenwertung >= 21) { + ?> + + + tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) { + ?> + + + + +
+ + + + + + punktetyp == 0 ? JText::_('COM_SPORTSMANAGER_GOALS') : JText::_('COM_SPORTSMANAGER_SETS'); ?>
+ +
+ punktetyp == 0 ? JText::_('COM_SPORTSMANAGER_GOALS') : JText::_('COM_SPORTSMANAGER_SETS'); ?> + +
+ +
+ + +
+ tabellenwertung <= 9 || $veranstaltung->tabellenwertung >= 21) && $gesamtpunkte != $team->gesamtpunkte) + || (($veranstaltung->tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10) && ($spielpunkte_differenz != $team->spielpunkte_differenz || $punkte_differenz != $team->punkte_differenz)) + || (($veranstaltung->tabellenwertung == 2 || $veranstaltung->tabellenwertung == 5 || $veranstaltung->tabellenwertung == 8 || $veranstaltung->tabellenwertung == 11) && ($spielpunkte_quotient != $team->spielpunkte_quotient || $punkte_quotient != $team->punkte_quotient)) + || (($veranstaltung->tabellenwertung >= 21) && ($team->buchholz1 != $buchholz1_wert || $team->buchholz2 != $buchholz2_wert))) + $tatsaechlicher_platz = $platz; + echo $tatsaechlicher_platz; + ?> + + + + + + + + + +
+ team_id) . "\">" . htmlentities_utf8(NichtLeererString($team->teamname)) . ""; + ?> + + team_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) { + echo $bild; + } + else if ($team->verein_id != null) { + $bild = bildHTML("vereine", $team->verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + } + ?> +
+ +
siege + $team->unentschieden + $team->niederlagen; ?>siege; ?>unentschieden; ?>niederlagen; ?> + + > + tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) + echo ($punkte_differenz >= 0 ? "+" : "") . $punkte_differenz; + else + echo $punkte_quotient == -1 ? "∞" : sprintf("%.2f", $punkte_quotient); + ?> + + + > + tabellenwertung == 1 || $veranstaltung->tabellenwertung == 4 || $veranstaltung->tabellenwertung == 7 || $veranstaltung->tabellenwertung == 10 || $veranstaltung->tabellenwertung == 21 || $veranstaltung->tabellenwertung == 24 || $veranstaltung->tabellenwertung == 27) + echo ($spielpunkte_differenz >= 0 ? "+" : "") . $spielpunkte_differenz; + else + echo $spielpunkte_quotient == -1 ? "∞" : sprintf("%.2f", $spielpunkte_quotient); + ?> + buchholz2; ?>buchholz1; ?>
+ + + + + +
+ + +
+ +   + 0) { + $bilder_anzeigen = false; + foreach ($teams as $team) { + if (bildHTML("mannschaften", $team->team_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + else if (bildHTML("vereine", $team->verein_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + } + + ?> + + + + + + platz == null; + $platz = -1; + $k = 0; + foreach ($teams + + as $team) { + if ($laufende_veranstaltung && $team->platz != $platz && $team->platz == null) { // ($team->platz == null || $platz == -1)) { + ?> + + + + + + + + + + + + letzter_spieltag); + ?> + + + + + + +
platz == null ? "offen" : "abgeschlossen"; ?> +
+ platz != $platz) { + if ($team->platz != null) + echo $team->platz; + $platz = $team->platz; + } + ?> + + + + + + + + + +
+ team_id) . "\">" . htmlentities_utf8(NichtLeererString($team->teamname)) . ""; + ?> + + team_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) { + echo $bild; + } + else if ($team->verein_id != null) { + $bild = bildHTML("vereine", $team->verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + } + ?> +
+ +
+ letzter_spieltag; + ?> + + zuletzt_gewonnen; + ?> + + +
+ + + + + +
+ + +
+ 0 || !$alleine_angezeigt) { + ?> +   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ + + + + +
+ bezeichnung); ?> +
+ 0) { + $bilder_anzeigen = false; + foreach ($rows as $team) { + if (bildHTML("mannschaften", $team->team_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + else if ($team->verein_id != null && bildHTML("vereine", $team->verein_id, 0, 0, 240, 240, 'border="0"') != null) { + $bilder_anzeigen = true; + break; + } + } + + $heimspielort_anzeigen = false; + foreach ($rows as $team) { + if (!empty($team->name)) { + $heimspielort_anzeigen = true; + break; + } + } + + $tischtyp_anzeigen = false; + foreach ($rows as $team) { + if (!empty($team->tischtyp)) { + $tischtyp_anzeigen = true; + break; + } + } + + $wettbewerb_anzeigen = false; + $team_name = null; + $team_veranstaltung_id = 0; + foreach ($rows as $team) { + if ($team->teamname == $team_name && $team->veranstaltung_id != $team_veranstaltung_id) { + $wettbewerb_anzeigen = true; + break; + } + $team_name = $team->teamname; + $team_veranstaltung_id = $team->veranstaltung_id; + } + + ?> + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ teamname)); ?> + + team_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + else if ($row->verein_id != null) { + $bild = bildHTML("vereine", $row->verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + } + + ?> +
+ +
bezeichnung)) echo htmlentities_utf8($row->bezeichnung); ?>name)) echo htmlentities_utf8($row->name); ?>tischtyp)) echo htmlentities_utf8($row->tischtyp); ?>
+ +   + + + + + + + + + + + + + + + +
+ + > bezeichnung); ?> > teamname); ?> +   + + < +   + + > +
+ + + + + +
+
+

teamname); ?>

+
+
+ + team_id, 0, 0, 240, 240, 'border="0"'); + if ($bild != null) { + ?> + + + + +
+   + verein_id != null) { + $bild = bildHTML("vereine", $team->verein_id, 0, 0, 240, 240, 'border="0"'); + if ($bild != null) { + ?> + + + + +
+   + spieler_id])) { + foreach ($spielberechtigungen[$row->spieler_id] as $spielberechtigung) { + if ($spielberechtigung[2] == -1 || !empty($spielberechtigung[3])) { + $mitglied_dauerhaft = false; + break; + } + } + } + $mitglieder_ist_dauerhaft[$row->spieler_id] = $mitglied_dauerhaft; + if ($mitglied_dauerhaft) + $mitglieder_dauerhaft++; + else + $mitglieder_voruebergehend++; + } + + for ($mitglieder_modus = 0; $mitglieder_modus <= 1; $mitglieder_modus++) { + if (($mitglieder_modus == 0 && $mitglieder_dauerhaft > 0) + || ($mitglieder_modus == 1 && $mitglieder_voruebergehend > 0)) { + ?> + + + + +
+ + + + spieler_id]) + || ($mitglieder_modus == 1 && $mitglieder_ist_dauerhaft[$row->spieler_id])) + continue; + if ($n % 3 == 0 && $n != 0) + echo ""; + + echo ""; + echo " +
get('pageclass_sfx') . "\">"; + echo ""; + echo ""; + if ($team_moderator) { + if (!empty($row->geburtsdatum)) { + echo ""; + } + if (!empty($row->strasse) || + !empty($row->plz) || !empty($row->ort)) { + echo ""; + } + if (!empty($row->telefon) || + !empty($row->mobil) || + !empty($row->email)) { + echo ""; + } + } + if (isset($spielberechtigungen[$row->spieler_id])) { + echo ""; + } + echo "
"; + if (empty($row->aktueller_verein_id)) + echo htmlentities_utf8($row->nachname . ", " . $row->vorname); + else { + ?>nachname . ", " . $row->vorname)); ?>spielernr)) + echo "
" . htmlentities_utf8($row->spielernr) . ""; + echo "
"; + echo "" . htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, false)) . ""; + echo "
"; + if (!empty($row->strasse)) + echo "" . htmlentities_utf8($row->strasse) . "
"; + if (!empty($row->plz) || !empty($row->ort)) + echo "" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . ""; + echo "
"; + if (!empty($row->telefon)) + echo "" . htmlentities_utf8($row->telefon) . "
"; + if (!empty($row->mobil)) + echo "" . htmlentities_utf8($row->mobil) . "
"; + if (!empty($row->email)) { + $replacement = JHTML::_('email.cloak', $row->email, 1, $row->email, 0); + echo "" . $replacement . ""; + } + echo "
"; + foreach ($spielberechtigungen[$row->spieler_id] as $spielberechtigung) { + echo ""; + if (isset($veranstaltungsbezeichnungen[$spielberechtigung[0]])) { + echo htmlentities_utf8($veranstaltungsbezeichnungen[$spielberechtigung[0]]) . ": "; + } + if ($spielberechtigung[2] == -1) // Ohne Spielberechtigung + echo "Nicht spielberechtigt"; + else if (empty($spielberechtigung[3])) // Letzter Spieltag ohne Einschränkung + echo "Ab " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)); + else if ($spielberechtigung[2] < 2) // Erster Spieltag ohne Einschränkung + echo "Bis " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[3], $spielberechtigung[1] == 0)); + else if ($spielberechtigung[2] == $spielberechtigung[3]) // Erster Spieltag und letzter Spieltag gleich + echo "Während " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)); + else + echo htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)) . " bis " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[3], $spielberechtigung[1] == 0)); + echo "
"; + } + echo "
get('pageclass_sfx') . "\">"; + $bild = bildHTML("mannschaftsmitglieder", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->mitglied_von_team_id, 90, 120, 0, 0, 'border="1"'); + if ($bild == null) + $bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 90, 120, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) { + ?> + + + + +
+ "; + $n++; + } + ?> +
+   + + + + + + +
+ Informationen +
+ + + + + + + + verein_id != null) { + ?> + + + + + veranstalterbezeichnung != null) { + ?> + + + + + tischtyp) || !empty($team->tischeigenschaften)) { + ?> + + + + + heimspiel_wochentag >= 1 && $team->heimspiel_wochentag <= 7) { + ?> + + + + + name)) { + ?> + + + + + nichtraucherschutz != 0) { + ?> + + + + + 0 && $ansprechpartner_anzeigen) { + ?> + + + + + heimspielort_name)) { + ?> + + + + + 0) { + ?> + + + + + +
+ zusatzpunkte != 0) { + ?> +
: + zusatzpunkte); ?>
:vereinsname); ?>
: + veranstalterbezeichnung); ?>
: + + tischtyp)) + echo htmlentities_utf8($team->tischtyp); + if (!empty($team->tischeigenschaften)) { + if (!empty($team->tischtyp)) + echo "
"; + echo htmlentities_utf8($team->tischeigenschaften); + } + ?> +
: + heimspiel_wochentag - 1] . " ab " . sprintf("%2d:%02d", floor($team->heimspiel_uhrzeit / 100), $team->heimspiel_uhrzeit % 100) . " " . JText::_('COM_SPORTSMANAGER_HOUR'); + ?> +
: + url; + if (!empty($heimspielort_url) && strpos($heimspielort_url, "://") === false) + $heimspielort_url = "http://" . $heimspielort_url; + if (!empty($heimspielort_url)) + echo "" . htmlentities_utf8($team->name) . ""; + else + echo htmlentities_utf8($team->name); + $anschrift = $team->strasse . (!empty($team->strasse) && (!empty($team->plz) || !empty($team->ortsname) || !empty($team->ortsteil)) ? ", " : "") . $team->plz . (!empty($team->plz) ? " " : "") . $team->ortsname . (!empty($team->ortsname) && !empty($team->ortsteil) ? "-" : "") . $team->ortsteil; + echo (!empty($team->name) ? "
" : "") . htmlentities_utf8($anschrift); + ?> +
: + nichtraucherschutz]); + ?> +
: + + = 2) + echo JText::_('COM_SPORTSMANAGER_REPRESENTATION') . ": "; + echo htmlentities_utf8($row->vorname . " " . $row->nachname); + if (strlen($row->email) > 0) + echo ", " . JHTML::_('email.cloak', $row->email); + if ($details_anzeigen && $row->telefon) + echo ", " . htmlentities_utf8($row->telefon); + if ($details_anzeigen && $row->mobil) + echo ", " . htmlentities_utf8($row->mobil); + echo "
"; + $nummer++; + } + ?> +
Heimspielstätte: + heimspielort_name); ?> +
: + bezeichnung) . "
"; + ?> +
+   + + 0) { + $zeitpunkt_anzeigen = false; + foreach ($begegnungen as $begegnung) { + if (!empty($begegnung->zeitpunkt)) { + $zeitpunkt_anzeigen = true; + break; + } + } + $bilder_anzeigen = false; + foreach ($begegnungen as $begegnung) { + if (bildHTML("mannschaften", $begegnung->gegner_id, 28, 28, 0, 0)) { + $bilder_anzeigen = true; + break; + } + else if ($begegnung->gegner_verein_id != null && bildHTML("vereine", $begegnung->gegner_verein_id, 28, 28, 0, 0)) { + $bilder_anzeigen = true; + break; + } + } + $heimspielort_anzeigen = false; + foreach ($begegnungen as $begegnung) { + if (!empty($begegnung->heimspielort_name)) { + $heimspielort_anzeigen = true; + break; + } + } + + ?> + veranstaltung_id) { + if ($veranstaltung_id != -1) { + ?> + +   + veranstaltung_id; + ?> + + + + +
+ + + + unterteilung == 0 || $row->unterteilung == 1) { + ?> + + + + + + + + spielpunkte_wertung_einzel != 2 || $row->spielpunkte_wertung_doppel != 2) { + ?> + + + + + heim_punkte != null || $row->gast_punkte != null) ? true : false; + ?> + + unterteilung == 0 || $row->unterteilung == 1) { + ?> + + + + + + + + + + + spielpunkte_wertung_einzel != 2 || $row->spielpunkte_wertung_doppel != 2) { + ?> + + + + + +
unterteilung == 0 ? "Spieltag" : "Runde"; ?>KontrahentPunkte
+ spieltag, $row->unterteilung == 0, true)); + ?> + + veranstaltung_id . '&teamid=' . $team->team_id . '&id=' . $row->begegnung_id) . "\">" . FormatiertesDatum($row->zeitpunkt) . ""; + else + echo $row->verlegung_eingetragen != null ? ("bisher " . FormatiertesDatum($row->zeitpunkt)) : FormatiertesDatum($row->zeitpunkt); + if (!empty($row->tisch) && (!$ergebnis_vorhanden || ($ergebnis_vorhanden && $row->zwischenergebnis))) + echo "
" . JText::_('COM_SPORTSMANAGER_MATCH_TABLE') . ": " . htmlentities_utf8($row->tisch) . ""; + echo "
" . htmlentities_utf8($row->auswaerts ? JText::_('COM_SPORTSMANAGER_AWAY_MATCH') : JText::_('COM_SPORTSMANAGER_HOME_MATCH')) . ($row->nichtraucherschutz != 0 ? htmlentities_utf8($row->nichtraucherschutz == 1 ? JText::_('COM_SPORTSMANAGER_NON_SMOKING_PROTECTION_MARK_NO') : JText::_('COM_SPORTSMANAGER_NON_SMOKING_PROTECTION_MARK_YES')) : "") . ""; + ?> +
+ + + + + + + + + +
gegner_id) . "\">" . htmlentities_utf8(NichtLeererString($row->gegner)) . ""; + ?> + + gegner_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + else if ($row->gegner_verein_id != null) { + $bild = bildHTML("vereine", $row->gegner_verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + } + ?> +
+ +
+ heimspielort_url; + if (!empty($heimspielort_url) && strpos($heimspielort_url, "://") === false) + $heimspielort_url = "http://" . $heimspielort_url; + if (!empty($heimspielort_url)) + echo "" . htmlentities_utf8($row->heimspielort_name) . ""; + else + echo htmlentities_utf8($row->heimspielort_name); + $anschrift = $row->heimspielort_strasse . (!empty($row->heimspielort_strasse) && (!empty($row->heimspielort_plz) || !empty($row->heimspielort_ortsname) || !empty($row->heimspielort_ortsteil)) ? ", " : "") . $row->heimspielort_plz . (!empty($row->heimspielort_plz) ? " " : "") . $row->heimspielort_ortsname . (!empty($row->heimspielort_ortsname) && !empty($row->heimspielort_ortsteil) ? "-" : "") . $row->heimspielort_ortsteil; + if (!empty($anschrift)) + echo (!empty($row->heimspielort_name) ? "
" : "") . "" . htmlentities_utf8($anschrift) . ""; + + if ($row->spielort_id == 0 && !empty($row->tischtyp)) + echo "
" . htmlentities_utf8($row->tischtyp) . ""; + if ($row->spielort_id == 0 && !empty($row->tischeigenschaften)) + echo "
" . htmlentities_utf8($row->tischeigenschaften) . ""; + } + else { + echo htmlentities_utf8($row->heimspielort_name); + if ($row->spielort_id == 0 && !empty($row->tischtyp)) + echo "
" . htmlentities_utf8($row->tischtyp) . ""; + if ($row->spielort_id == 0 && !empty($row->tischeigenschaften)) + echo "
" . htmlentities_utf8($row->tischeigenschaften) . ""; + } + ?> +
+ veranstaltung_id . '&teamid=' . $team->team_id . '&id=' . $row->begegnung_id) . "\">" . ($row->auswaerts ? ($row->gast_punkte . ":" . $row->heim_punkte) : ($row->heim_punkte . ":" . $row->gast_punkte)) . ""; + if ($row->unbestaetigtes_ergebnis_id != null) echo "
" . ($row->zwischenergebnis ? "live" : "unbestätigt") . ""; + } + ?> +
+ veranstaltung_id . '&teamid=' . $team->team_id . '&id=' . $row->begegnung_id) . "\">" . ($row->auswaerts ? ($row->gast_spielpunkte . ":" . $row->heim_spielpunkte) : ($row->heim_spielpunkte . ":" . $row->gast_spielpunkte)) . ""; + if ($row->unbestaetigtes_ergebnis_id != null) echo "
" . ($row->zwischenergebnis ? "live" : "unbestätigt") . ""; + } + ?> +
+   + team_id)); + } + + if ($team_moderator && count($mitglieder_statistiken) > 0) { + $elo_einzel = false; + $elo_doppel = false; + foreach ($mitglieder_statistiken as $mitglied) { + if ($mitglied->elo_einzel_spiele != 0) + $elo_einzel = true; + if ($mitglied->elo_doppel_spiele != 0) + $elo_doppel = true; + if ($elo_einzel && $elo_doppel) + break; + } + ?> + + + + +
+ Mitgliederstatistik zum Wettbewerb +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
nachname) . ", " . htmlentities_utf8($row->vorname); ?>einzel_spiele; ?>einzel_punkte_gesamt > 0 ? round($row->einzel_punkte * 100 / $row->einzel_punkte_gesamt, 0) . "%" : "-"; ?>einzel_siege; ?>einzel_unentschieden; ?>einzel_niederlagen; ?>elo_einzel_spiele != 0 ? $row->elo_einzel : "-"; ?>doppel_spiele; ?>doppel_punkte_gesamt > 0 ? round($row->doppel_punkte * 100 / $row->doppel_punkte_gesamt, 0) . "%" : "-"; ?>doppel_siege; ?>doppel_unentschieden; ?>doppel_niederlagen; ?>elo_doppel_spiele != 0 ? $row->elo_doppel : "-"; ?>gesamt_spiele; ?>gesamt_punkte_gesamt > 0 ? round($row->gesamt_punkte * 100 / $row->gesamt_punkte_gesamt, 0) . "%" : "-"; ?>gesamt_siege; ?>gesamt_unentschieden; ?>gesamt_niederlagen; ?>
+   + + + + + +
+ +
+ + + + + + + + + + + + +
+ + + + "> + + + +
+   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + $bilder_anzeigen = false; + foreach ($rows as $verein) { + if (bildHTML("vereine", $verein->verein_id, 28, 28, 0, 0) != null) { + $bilder_anzeigen = true; + break; + } + } + + if ($organisationAnzeigen) { + $organisation = $rows[0]->veranstalterbezeichnung; + ?> + + + + +
+ +
+ + + + + + + veranstalterbezeichnung != $organisation) { + $organisation = $row->veranstalterbezeichnung; + ?> +
+   + + + + + +
+ +
+ + + + + + + + + + + + +
+ + + + + + + + +
+ vereinsname)); ?> + + verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != null) + echo $bild; + ?> +
+ +
vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?>
+ +   + + + + + + + + + + + + + + + +
+ + + > vereinsname); ?> +   + + < +   + + > +
+ + + + + +
+
+

vereinsname); ?>

+
+
+ + verein_id, 0, 0, 240, 240, 'border="0"'); + if ($bild != null) { + ?> + + + + +
+   + + + + + + + + + veranstalterbezeichnung != null) { + ?> + + + + + url)) { + ?> + + + + + beschreibung)) { + ?> + + + + + + + */ + if (count($vereinsansprechpartner) > 0 && $ansprechpartner_anzeigen) { + ?> + + + + + +
+ vereinssitz)) { + ?> +
:vereinssitz . (!empty($verein->vereinssitz_ortsteil) ? ("-" . $verein->vereinssitz_ortsteil) : "")); ?>
: + veranstalterbezeichnung); ?>
: + url, "://") === false) { + $verein_url_anzeige = $verein->url; + $verein_url = "http://" . $verein->url; + } + else { + $verein_url_anzeige = substr($verein->url, 0, 7) == "http://" ? substr($verein->url, 7) : $verein->url; + $verein_url = $verein->url; + } + echo "" . htmlentities_utf8($verein_url_anzeige) . ""; + ?> +
: + beschreibung)); ?>
Heimspielstätte: + heimspielort_url) > 0) + echo "heimspielort_url) . "\">" . htmlentities_utf8($verein->heimspielort_name) . ""; + else + echo htmlentities_utf8($verein->heimspielort_name); + + if (strlen($verein->heimspielort_anschrift) > 0) { + if (strlen($verein->heimspielort_anschrift_url) > 0) + echo "
heimspielort_anschrift_url) . "\">" . htmlentities_utf8($verein->heimspielort_anschrift) . ""; + else + echo "
" . htmlentities_utf8($verein->heimspielort_anschrift); + } + ?> +
: + = 2) + echo JText::_('COM_SPORTSMANAGER_REPRESENTATION') . ": "; + echo htmlentities_utf8($row->vorname . " " . $row->nachname); + if (strlen($row->email) > 0) + echo "," . JHTML::_('email.cloak', $row->email); + if ($details_anzeigen && $row->telefon) + echo ", " . htmlentities_utf8($row->telefon); + if ($details_anzeigen && $row->mobil) + echo ", " . htmlentities_utf8($row->mobil); + echo "
"; + $nummer++; + } + ?> +
+   + + 0) { + $heimspielort_anzeigen = false; + foreach ($aktuelle_teams as $team) { + if (!empty($team->name)) { + $heimspielort_anzeigen = true; + break; + } + } + ?> + + + + +
+ + + + + + + + + + + + + + + + + + +
teamname); ?>wettbewerbe); ?> + name); + $anschrift = $team->strasse . (!empty($team->strasse) && (!empty($team->plz) || !empty($team->ortsname) || !empty($team->ortsteil)) ? ", " : "") . $team->plz . (!empty($team->plz) ? " " : "") . $team->ortsname . (!empty($team->ortsname) && !empty($team->ortsteil) ? "-" : "") . $team->ortsteil; + if (!empty($anschrift)) + echo "
" . htmlentities_utf8($anschrift) . ""; + if (!empty($team->tischtyp)) + echo "
" . htmlentities_utf8($team->tischtyp) . ""; + if (!empty($team->tischeigenschaften)) + echo "
" . htmlentities_utf8($team->tischeigenschaften) . ""; + ?> +
+   + 0) { + ?> + + + + +
+ + + + "; + + echo ""; + echo " +
get('pageclass_sfx') . "\">"; + echo ""; + echo ""; + if ($vereins_moderator) { + if (!empty($row->geburtsdatum)) { + echo ""; + } + if (!empty($row->strasse) || + !empty($row->plz) || !empty($row->ort)) { + echo ""; + } + if (!empty($row->telefon) || + !empty($row->mobil) || + !empty($row->email)) { + echo ""; + } + } + echo "
"; + ?>nachname . ", " . $row->vorname); ?>spielernr)) + echo "
" . htmlentities_utf8($row->spielernr) . ""; + echo "
"; + echo "" . htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, false)) . ""; + echo "
"; + if (!empty($row->strasse)) + echo "" . htmlentities_utf8($row->strasse) . "
"; + if (!empty($row->plz) || !empty($row->ort)) + echo "" . (!empty($row->plz) ? (htmlentities_utf8($row->plz) . " ") : "") . htmlentities_utf8($row->ort) . ""; + echo "
"; + if (!empty($row->telefon)) + echo "" . htmlentities_utf8($row->telefon) . "
"; + if (!empty($row->mobil)) + echo "" . htmlentities_utf8($row->mobil) . "
"; + if (!empty($row->email)) { + $replacement = JHTML::_('email.cloak', $row->email, 1, $row->email, 0); + echo "" . $replacement . ""; + } + echo "
get('pageclass_sfx') . "\">"; + $bild = bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 90, 120, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) { + ?> + + + + +
+ "; + $n++; + } + ?> +
+ +   + + + + + +
+ + +
" + class="readonget('pageclass_sfx'); ?>"> + +
+   + 0) { + ?> + + + + +
+ + + + + + + saisonbezeichnung) { + $saisonbezeichnung = $team->saisonbezeichnung; + ?> + + + + + + + + + + + + +
+ +
teamname); ?>wettbewerbe); ?>
+   + + + + + +
+ +
+ + + + + + + + + + + + +
+ + + + "> + + + +
+   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + $ortsname = $rows[0]->ortsname; + if (!empty($ortsname)) { + ?> + + + + +
+ +
+ + + + + + + ortsname != $ortsname) { + $ortsname = $row->ortsname; + ?> +
+   + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + + +
+ name)); ?> +
+
ortsname)) echo htmlentities_utf8($row->ortsname . (!empty($row->ortsteil) ? ("-" . $row->ortsteil) : "")); ?>
+ +   + + + + + + + + + + + + + + + +
+ + + > name); ?> +   + + < +   + + > +
+ + + + + +
+
+

name); ?>

+
+
+ + + + + +
+ + + + + + + + url)) { + ?> + + + + + + + + + + beschreibung)) { + ?> + + + + + +
+ strasse . (!empty($spielort->strasse) && (!empty($spielort->plz) || !empty($spielort->ortsname) || !empty($spielort->ortsteil)) ? ", " : "") . $spielort->plz . (!empty($spielort->plz) ? " " : "") . $spielort->ortsname . (!empty($spielort->ortsname) && !empty($spielort->ortsteil) ? "-" : "") . $spielort->ortsteil; + if (!empty($anschrift)) { + ?> +
Anschrift:
Webseite: + url, "://") === false) { + $spielort_url_anzeige = $spielort->url; + $spielort_url = "http://" . $spielort->url; + } + else { + $spielort_url_anzeige = substr($spielort->url, 0, 7) == "http://" ? substr($spielort->url, 7) : $spielort->url; + $spielort_url = $spielort->url; + } + echo "" . htmlentities_utf8($spielort_url_anzeige) . ""; + ?> +
:
: + beschreibung)); ?>
+   + + 0) { + $tischtyp_anzeigen = false; + foreach ($aktuelle_teams as $team) { + if (!empty($team->tischtyp)) { + $tischtyp_anzeigen = true; + break; + } + } + + ?> + + + + +
+ + + + + + + + + + heimspiel_wochentag) { + if ($team->heimspiel_wochentag >= 1 && $team->heimspiel_wochentag <= 7) { + ?> + + + + + + + heimspiel_wochentag; + } + ?> + + + + + + + + +
+ heimspiel_wochentag - 1]); + ?> +
teamname); ?> + tischtyp)) + echo htmlentities_utf8($team->tischtyp); + ?> + wettbewerbe); ?>
+   + 0; + + if (!empty($titel)) { ?> +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0 || $statistik["einstufung_einzel"] > 0 || $statistik["einstufung_doppel"] > 0) && !empty($einstufungid)) || (count($veranstaltungen) > 0 && !empty($veranstaltungid)) || (count($veranstalter) > 0 && !empty($veranstalterid)); + ?> + +
+ + + + + + + + + + + + 50) { + ?> + + + + + + + + + > + + + + 0 || $statistik["einstufung_einzel"] > 0 || $statistik["einstufung_doppel"] > 0)) { + ?> + > + + + + 1) { + ?> + > + + + + 0) { + ?> + > + + + + + +
+ : + + + + /> + + + + +  <<  + + +  <  + +        + +      + + + + +  >  + + +  >>  + +      + +        +
+ + + +
+ 0) { + $bilder_anzeigen = false; + foreach ($rows as $spieler) { + if (bildHTML("spieler", !$details_anzeigen && $spieler->bild_ausblenden ? '' : $spieler->spieler_id, 30, 40, 0, 0, '', $spieler->geschlecht == 'M' ? 'm' : 'w') != null) { + $bilder_anzeigen = true; + break; + } + } + + ?> + + + + + + + + + 0) { + ?> + + 0) { + ?> + + 0) { + ?> + + 0) { + ?> + + 1) { + ?> + + 0) { + ?> + + + + 0) { + ?> + + + 0) { + ?> + + + + + + + + + + + + + + 0) { + ?> + + 0) { + ?> + + 0) { + ?> + + 0) { + ?> + + 1) { + ?> + + 0) { + ?> + + + + 0) { + ?> + + + 0) { + ?> + + + + + +
, + + + + + + + + Pseudonym + + + +
+ + + + + + + + +
+ nachname . ", " . $row->vorname) : ($row->vorname . " " . $row->nachname))); ?> + + bild_ausblenden ? '' : $row->spieler_id, 30, 40, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) + echo $bild; + ?> +
+ +
geschlecht); ?>kategorie); ?>einstufung_allgemein_id != null ? htmlentities_utf8($einstufungen[$row->einstufung_allgemein_id]) : "-"; ?>einstufung_einzel_id != null ? htmlentities_utf8($einstufungen[$row->einstufung_einzel_id]) : "-"; ?>einstufung_doppel_id != null ? htmlentities_utf8($einstufungen[$row->einstufung_doppel_id]) : "-"; ?>vereinsname != null ? htmlentities_utf8($row->vereinsname) : "-"; ?>veranstalterbezeichnung != null ? htmlentities_utf8($row->veranstalterbezeichnung) : "-"; ?>pseudonym != NULL ? htmlentities_utf8($row->pseudonym) : ""; ?>teamname != null ? htmlentities_utf8($row->teamname) : ""; ?>elo_einzel_spiele != 0 ? $row->elo_einzel : "-"; ?>elo_einzel_spiele; ?>elo_doppel_spiele != 0 ? $row->elo_doppel : "-"; ?>elo_doppel_spiele; ?>
+   + + + + + +
+ +
+   + + + + + + + + + + + + + + + +
+ + + + > nachname . ", " . $spieler->vorname); ?> +   + + < +   + + > +
+ + + + + +
+
+

nachname . ", " . $spieler->vorname); ?>

+
+
+ + bild_ausblenden ? '' : $spieler->spieler_id, 0, 0, 180, 240, 'border="1"', $spieler->geschlecht == 'M' ? 'm' : 'w'); + if ($bild != null) { + ?> + + + + +
+   + + + + + + +
+ + JText::_('COM_SPORTSMANAGER_CATEGORY_MEN'), 'D' => JText::_('COM_SPORTSMANAGER_CATEGORY_WOMEN'), 'J' => JText::_('COM_SPORTSMANAGER_CATEGORY_JUNIORS'), 'S' => JText::_('COM_SPORTSMANAGER_CATEGORY_SENIORS')); + if (isset($kategorie_bezeichnung[$spieler->kategorie])) { + ?> + + + + + einstufung_allgemein_id != null) { + ?> + + + + + einstufung_einzel_id != null) { + ?> + + + + + einstufung_doppel_id != null) { + ?> + + + + + 0 && $spieler->elo_einzel_spiele != 0) { + ?> + + + + + 0 && $spieler->elo_doppel_spiele != 0) { + ?> + + + + + 0) { + ?> + + + + + + + + + + + + + + + + + + + spielernr != null && $spieler->spielernr != "") { + ?> + + + + + lizenznr != null && $spieler->lizenznr != "") { + ?> + + + + + pseudonym != NULL) { + ?> + + + elo_wertung && ($statistik["elo_einzel"] > 0 || $statistik["elo_doppel"] > 0)) { + ?> + 0) { + ?> + + + 0) { + ?> + + + + + + + + + +
:kategorie]); ?>
:einstufung_allgemein_id]); ?>
+ :einstufung_einzel_id]); ?>
+ :einstufung_doppel_id]); ?>
+ : + elo_einzel_spiele == 1 ? JText::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_einzel) : JText::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_einzel, elo_einzel_spiele)); + ?> +
+ : + elo_doppel_spiele == 1 ? JText::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_ONE_GAME', $spieler->elo_doppel) : JText::sprintf('COM_SPORTSMANAGER_GAME_ELO_IN_NUMBER_GAMES', $spieler->elo_doppel, elo_doppel_spiele)); + ?> +
:
+ : + vereinsname) . "
"; + ?> +
+ : + veranstalterbezeichnung) . "
"; + ?> +
+ 0) echo JText::_('COM_SPORTSMANAGER_NATIONAL') . " "; echo JText::_('COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT') ?>:spielernr); ?>
+ 0) echo JText::_('COM_SPORTSMANAGER_INTERNATIONAL') . " "; echo JText::_('COM_SPORTSMANAGER_PLAYER_NUMBER_SHORT') ?>:lizenznr); ?>
Pseudonym:pseudonym); ?>
Elo-Wert Einzel:elo_einzel_spiele != 0 ? $spieler->elo_einzel : "ohne"; ?>
Gewertete Einzel-Spiele:elo_einzel_spiele != 0 ? $spieler->elo_einzel_spiele : "keine"; ?>
Elo-Wert Doppel:elo_doppel_spiele != 0 ? $spieler->elo_doppel : "ohne"; ?>
Gewertete Doppel-Spiele:elo_doppel_spiele != 0 ? $spieler->elo_doppel_spiele : "keine"; ?>
Erstmals gespielt:erstmals_gespielt != NULL ? htmlentities_utf8(FormatiertesDatum($spieler->erstmals_gespielt, false)) : "Nie"; ?>
Zuletzt gespielt:zuletzt_gespielt != NULL ? htmlentities_utf8(FormatiertesDatum($spieler->zuletzt_gespielt, false)) : "Nie"; ?>
+   + + 0) { + ?> + + + + +
+ + + + + + + + saisonbezeichnung) { + $saisonbezeichnung = $platzierung->saisonbezeichnung; + ?> + + + + + + + + + + + + erster_tag, false, false)) . " - " . htmlentities_utf8(FormatiertesDatum($platzierung->letzter_tag, false, false)); ?> */ ?> + + +
+ +
bezeichnung != null ? htmlentities_utf8($platzierung->bezeichnung) : ""; ?>platz != null ? htmlentities_utf8($platzierung->platz) : ""; ?>teilnehmer != null ? htmlentities_utf8($platzierung->teilnehmer) : ""; ?>
+   + 0) { + ?> + + + + +
+ + + + + + + + + + + saisonbezeichnung) { + $saisonbezeichnung = $platzierung->saisonbezeichnung; + ?> + + + + + + + + + + + + + + + + +
Meldungen
+ +
turnierbezeichnung != null ? htmlentities_utf8($platzierung->turnierbezeichnung) : ""; ?>turnierort != null ? htmlentities_utf8($platzierung->turnierort) : ""; ?>disziplin != null ? htmlentities_utf8($platzierung->disziplin) : ""; ?>beginn == null ? "" : htmlentities_utf8(FormatiertesDatum($platzierung->beginn, false)); ?>platz != null ? htmlentities_utf8($platzierung->platz) : ""; ?>teilnehmer != null ? htmlentities_utf8($platzierung->teilnehmer) : ""; ?>
+   + 0) { + ?> + + + + +
+ + + + + + + saisonbezeichnung) { + $saisonbezeichnung = $team->saisonbezeichnung; + ?> + + + + + + + + + + + + +
+ +
teamname); ?>wettbewerbe); ?>
+   + 0) { + $n = count($spieler_elo_verlauf_einzel); + + $erstes = max($n - 100, 0); + $elo_anzeigen = false; + for ($i = $n - 1; $i >= $erstes; $i--) { + $spiel = $spieler_elo_verlauf_einzel[$i]; + if (isset($spiel["h1r"])) { + $elo_anzeigen = true; + break; + } + } + ?> + + + + +
+
+ + + + + + + + + + + + + = $erstes; $i--) { + $spiel = $spieler_elo_verlauf_einzel[$i]; + ?> + + + spieler_id) { + ?> + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ + "> + " . htmlentities_utf8($teamNamen[$spiel["th"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
+ + "> + " . htmlentities_utf8($teamNamen[$spiel["tg"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
0 ? "+" : "") . $r_delta; + } else echo "-"; ?> + + "> + " . htmlentities_utf8($teamNamen[$spiel["tg"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
+ + "> + " . htmlentities_utf8($teamNamen[$spiel["th"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
0 ? "+" : "") . $r_delta; + } else echo "-"; ?>
+ ($elo_detailliert ? 100 : 8)) { + ?> + + + + +
+ + +
+ +   + 0) { + $n = count($spieler_elo_verlauf_doppel); + + $erstes = max($n - 100, 0); + $elo_anzeigen = false; + for ($i = $n - 1; $i >= $erstes; $i--) { + $spiel = $spieler_elo_verlauf_doppel[$i]; + if (isset($spiel["h1r"])) { + $elo_anzeigen = true; + break; + } + } + ?> + + + + +
+
+ + + + + + + + + + + + + = $erstes; $i--) { + $spiel = $spieler_elo_verlauf_doppel[$i]; + ?> + + + spieler_id || $spiel["h2"] == $spieler->spieler_id) { + ?> + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ + "> + / "> + " . htmlentities_utf8($teamNamen[$spiel["th"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
+ + "> + / "> + " . htmlentities_utf8($teamNamen[$spiel["tg"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
spieler_id ? ($spiel["h1rn"] - $spiel["h1r"]) : ($spiel["h2rn"] - $spiel["h2r"]); + echo ($r_delta > 0 ? "+" : "") . $r_delta; + } else echo "-"; ?>spieler_id ? $spiel["h1rn"] : $spiel["h2rn"]; else echo "-"; ?> + + "> + / "> + " . htmlentities_utf8($teamNamen[$spiel["tg"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
+ + "> + / "> + " . htmlentities_utf8($teamNamen[$spiel["th"]]) . ""; + if ($elo_wertung) { + ?> +
+ + +
spieler_id ? ($spiel["g1rn"] - $spiel["g1r"]) : ($spiel["g2rn"] - $spiel["g2r"]); + echo ($r_delta > 0 ? "+" : "") . $r_delta; + } else echo "-"; ?>spieler_id ? $spiel["g1rn"] : $spiel["g2rn"]; else echo "-"; ?>
+ ($elo_detailliert ? 100 : 8)) { + ?> + + + + +
+ + +
+ +   + +
teamname; ?> teamname ?> bezeichnung); ?> + :
+ +
+ + + + +
+ + + + + + + aktion == 1 || $aktion->aktion == 5 || $aktion->aktion == 10) // akzeptiert, von Moderator eingetragen oder Verschiebung abgelehnt + break; + array_push($letzte_verlegung_aktionen, $aktion); + } + + $termine = array(); + if (count($letzte_verlegung_aktionen) > 0) { + $eingetragen = $letzte_verlegung_aktionen[0]->eingetragen; + foreach ($letzte_verlegung_aktionen as $aktion) { + if ($aktion->eingetragen != $eingetragen || ($aktion->aktion != 0) || $aktion->zeitpunkt == null) // aktion == 1 <=> Akzeptiert + break; + array_push($termine, $aktion); + } + } + + $berechtigt_anfordern = $veranstaltung->initial_ohne_termin != 1 && (count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion == 1); + $berechtigt_vorschlagen = ($veranstaltung->initial_ohne_termin != 2 || (count($letzte_verlegung_aktionen) != 0 && $letzte_verlegung_aktionen[0]->aktion != 1)) && (!$veranstaltung->keine_gegenvorschlaege || count($letzte_verlegung_aktionen) == 0 || $letzte_verlegung_aktionen[0]->aktion != 3 || $letzte_verlegung_aktionen[0]->team_id != $vorschlagendes_team_id) && (count($termine) == 0 || !$veranstaltung->keine_gegenvorschlaege || $letzte_verlegung_aktionen[0]->team_id == $vorschlagendes_team_id); + $berechtigt_ablehnen = count($letzte_verlegung_aktionen) != 0 && ($letzte_verlegung_aktionen[0]->aktion == 0 || $letzte_verlegung_aktionen[0]->aktion == 3 || $letzte_verlegung_aktionen[0]->aktion == 4) && ((($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 3) && $berechtigt_fuer_akzeptieren) || (($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 2) && $berechtigt_vorschlagen)); + + if ($berechtigt_vorschlagen) { + $anzahl_moegliche_termine = $veranstaltung->termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; + ?> + + + + + + + kommentar)) { + ?> + + + + + + + + + + termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; + for ($termin = 1; + $termin <= count($termine); + $termin++) { + ?> + + + + + kommentar)) { + ?> + + + + + +
+ : + + zeitpunkt != null ? FormatiertesDatum($begegnung->zeitpunkt) : "N/A"; ?> +
+ . : + + + + + + + + + + +
+ : + + kommentar); ?> +
+ : + + +
+ . : + + zeitpunkt)); ?> + +
+ : + + kommentar); ?> +
+
+ + + + + + + + + + + + + + + "/> +
+   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ + + + + +
+ + turnierbezeichnung) . (!empty($disziplin->turnierort) ? (" in " . htmlentities_utf8($disziplin->turnierort)) : "") . ": " . htmlentities_utf8($disziplin->disziplin); ?> +
+ + + + + + + + + + + + voranmeldung != null) { + ?> + + + + + +
+ : + + beginn); ?> +
+ : + + +
+ + : + + voranmeldung); + if (substr($datum, strlen($datum) - 5) == "23:59") + $datum = substr($datum, 0, strlen($datum) - 6); + else + $datum .= " " . JText::_('COM_SPORTSMANAGER_HOUR'); + echo $datum; + ?> +
+ + + + Voranmeldung hinzufügen + + + */ + + if (count($meldungenSpielerSortiert) > 0) { + $bilder_anzeigen_1 = false; + $bilder_anzeigen_2 = false; + foreach ($meldungenSpielerSortiert as $turniermeldung_id => $sortierung) { + $spieler = $meldungenSpielerNamen[$turniermeldung_id]; + $spielerIds = $meldungenSpielerIds[$turniermeldung_id]; + $spielerGeschlechter = $meldungenSpielerGeschlechter[$turniermeldung_id]; + $spielerBilderAusblenden = $meldungenSpielerBilderAusblenden[$turniermeldung_id]; + if (isset($spieler[0]) && bildHTML("spieler", !isset($spielerIds[0]) || (!$details_anzeigen && $spielerBilderAusblenden[0]) ? '' : $spielerIds[0], 30, 40, 0, 0, '', $spielerGeschlechter[0] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_1 = true; + if (isset($spieler[1]) && bildHTML("spieler", !isset($spielerIds[1]) || (!$details_anzeigen && $spielerBilderAusblenden[1]) ? '' : $spielerIds[1], 30, 40, 0, 0, '', $spielerGeschlechter[1] == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen_1 && ($disziplin->typ != 1 || $bilder_anzeigen_2)) + break; + } + ?> + + get( 'pageclass_sfx' ); ?>"> + + */ + ?> + + + $sortierung) { + if ($n % 3 == 0 && $n != 0) + echo ""; + + ?> + + + +
+ + + + voranmeldungen_rangliste_id != 0) { + ?> + + + + + + + + + +
+ + + + + "; + if (!isset($spielerIds[1])) + echo htmlentities_utf8($spieler[1]); + else { + ?> + + + + + + +
+ +
+ +   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ + + + + + + + + + + + + + + +
+ + + > bezeichnung); ?> +   + + + < +   + + + > +
+ + + + + +
+
+

bezeichnung); ?>

+
+
+ + + + + +
+ bezeichnung); ?> +
+ 0) { + // Ermitteln, ob ein Bild von einem der Spieler unter den ersten drei Plätzen vorhanden ist + $bilder_anzeigen = false; + $bilder_anzeigen_2 = false; + $platz = 1; + $tatsaechlicher_platz = 1; + foreach ($spielerstatistik_punkte as $row) { + if ($platz == 1 || $spielpunkte_gewonnen != $row->spielpunkte_gewonnen || $spielpunkte_verloren != $row->spielpunkte_verloren || ($punkte_gewonnen - $punkte_verloren) != ($row->punkte_gewonnen - $row->punkte_verloren)) + $tatsaechlicher_platz = $platz; + if (!$allein_angezeigt && $tatsaechlicher_platz > 3) + break; + if (bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden ? '' : $row->spieler_id, 57, 76, 0, 0, 'border="1"', $row->geschlecht == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen = true; + if ($spielerstatistik->typ == 3 && bildHTML("spieler", !$details_anzeigen && $row->bild_ausblenden_2 ? '' : $row->spieler_2_id, 57, 76, 0, 0, 'border="1"', $row->geschlecht_2 == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen && ($bilder_anzeigen_2 || $spielerstatistik->typ != 3)) + break; + $spielpunkte_gewonnen = $row->spielpunkte_gewonnen; + $spielpunkte_verloren = $row->spielpunkte_verloren; + $punkte_gewonnen = $row->punkte_gewonnen; + $punkte_verloren = $row->punkte_verloren; + $platz++; + } + + ?> + + + + + tabellenwertung > 0) { + ?> + + + + + + + + + + + + + spielpunkte_gewonnen || $spielpunkte_verloren != $row->spielpunkte_verloren || ($punkte_gewonnen - $punkte_verloren) != ($row->punkte_gewonnen - $row->punkte_verloren)) + $tatsaechlicher_platz = $platz; + + if (!$allein_angezeigt && $tatsaechlicher_platz > 3) + break; + ?> + + + + tabellenwertung != 0) { + ?> + + + + + + + + + + + + + spielpunkte_gewonnen; + $spielpunkte_verloren = $row->spielpunkte_verloren; + $punkte_gewonnen = $row->punkte_gewonnen; + $punkte_verloren = $row->punkte_verloren; + $platz++; + } + ?> +
+ + + + + - + + + + - + + +
+ + + + + + + + + + +
+ aktueller_verein_id == null) + echo htmlentities_utf8($row->nachname . ", " . $row->vorname); + else { + ?> + nachname . ", " . $row->vorname); ?> + typ == 3 && $row->spieler_2_id != null) { + ?> +
+ aktueller_verein_id_2 == null) + echo htmlentities_utf8($row->nachname_2 . ", " . $row->vorname_2); + else { + ?> + nachname_2 . ", " . $row->vorname_2); ?> + +
+ bild_ausblenden ? '' : $row->spieler_id, 57, 76, 0, 0, 'border="1" align="right" hspace="8" vspace="2"', $row->geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + ?> + + bild_ausblenden_2 ? '' : $row->spieler_2_id, 57, 76, 0, 0, 'border="1" align="right" hspace="8" vspace="2"', $row->geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + ?> +
+
leistungsindex, 0); ?> + siege + $row->niederlagen + $row->unentschieden; ?>tabellenwertung == 0 ? "" : "") . $row->spielpunkte_gewonnen . ($spielerstatistik->tabellenwertung == 0 ? "" : ""); ?>spielpunkte_verloren; ?>spielpunkte_gewonnen > 0 || $row->spielpunkte_verloren > 0) ? round($row->spielpunkte_gewonnen * 100 / ($row->spielpunkte_gewonnen + $row->spielpunkte_verloren), 0) . "%" : "-"; ?>punkte_gewonnen; ?>punkte_verloren; ?>siege; ?>unentschieden; ?>niederlagen; ?>
+ + + + + + +
+ + +
+ + +   + +
+
+ +
+   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ + + + + + + + + + + + + + +
+ + + > bezeichnung); ?> +   + + < +   + + > +
+ + + + + +
+
+

bezeichnung); ?>

+
+
+ + + + + +
+ bezeichnung); ?> +
+ vereinsname)) { + $vereine_anzeigen = true; + break; + } + } + + $anzahl_eintraege = count($platzierungen); + $anzahl_spalten = 1; + $anzahl_zeilen = 1; + $n = $anzahl_eintraege; + while ($n > $anzahl_spalten) { + $n -= $anzahl_spalten; + $anzahl_spalten++; + $anzahl_zeilen++; + } + + if (!$allein_angezeigt && $anzahl_zeilen > 2) { + $anzahl_spalten = 2; + $anzahl_zeilen = 2; + } + + ?> + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + bild_ausblenden ? '' : $row->spieler_id, 57, 76, 0, 0, 'border="1" hspace="8" vspace="2"', $row->geschlecht == 'M' ? 'm' : 'w')) != null) + echo ""; + ?> +
+ " . $row->platz . ""; + ?> +
+ aktueller_verein_id)) + echo htmlentities_utf8($row->nachname) . "
" . htmlentities_utf8($row->vorname); + else { + ?> + nachname) . "
" . htmlentities_utf8($row->vorname); ?>
+ +
" . $bild . "
+ +
+
+ + get( 'pageclass_sfx' ); ?>"> + + + + + platz; + if (!$allein_angezeigt && $platz_aktuell > 3) + break; + ?> + + + + + + + + +
+ aktueller_verein_id)) + echo htmlentities_utf8($row->nachname . ", " . $row->vorname); + else { + ?> + nachname . ", " . $row->vorname); ?> + +
vereinsname != NULL ? htmlentities_utf8($row->vereinsname) : "Kein Verein"; ?> + +
+ bild_ausblenden) && (($bild = bildHTML("spieler", $row->spieler_id, $platz > 3 ? 30 : 57, $platz > 3 ? 40 : 76, 0, 0, 'border="1" align="right" hspace="8" vspace="2"')) != NULL)) + echo $bild; ?> +
+ + + + + + + + + + +
+ + +
+ +   + heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_id, 30, 40, 0, 0, '', $spiel->heim_spieler_1_geschlecht == 'M' ? 'm' : 'w') != null + || bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_id, 30, 40, 0, 0, '', $spiel->gast_spieler_1_geschlecht == 'M' ? 'm' : 'w') != null) + $bilder_anzeigen_1 = true; + if (($spiel->heim_spieler_2_id != null && bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_id, 30, 40, 0, 0, '', $spiel->heim_spieler_2_geschlecht == 'M' ? 'm' : 'w') != null) + || ($spiel->gast_spieler_2_id != null && bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_id, 30, 40, 0, 0, '', $spiel->gast_spieler_2_geschlecht == 'M' ? 'm' : 'w') != null)) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen_1 && $bilder_anzeigen_2) + break; + } + ?> + + + + + + + + $spiel) { + if (!$allein_angezeigt && $index == 3) + break; + ?> + + + + + + + + + + +
+
+ zeitpunkt)); ?> + + + + + + + + + + + +
+ ergebnis != 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } + else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
+ ergebnis != 2) { + if (($bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_id, 30, 40, 0, 0, '', $spiel->heim_spieler_1_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + else { + if (($bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_id, 30, 40, 0, 0, '', $spiel->gast_spieler_1_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + ?> + + ergebnis != 2) { + if ($spiel->heim_spieler_2_id != null && ($bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_id, 30, 40, 0, 0, '', $spiel->heim_spieler_2_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + else { + if ($spiel->gast_spieler_2_id != null && ($bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_id, 30, 40, 0, 0, '', $spiel->gast_spieler_2_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + ?> +
+ +
ergebnis_detailliert)) echo str_replace(" ", " | ", $spiel->ergebnis != 2 ? $spiel->ergebnis_detailliert : runden_detailliert_invers($spiel->ergebnis_detailliert)); ?> + + + + + + + + + + +
+ ergebnis == 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } + else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
+ ergebnis == 2) { + if (($bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_1_bild_ausblenden ? '' : $spiel->heim_spieler_1_id, 30, 40, 0, 0, '', $spiel->heim_spieler_1_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + else { + if (($bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_1_bild_ausblenden ? '' : $spiel->gast_spieler_1_id, 30, 40, 0, 0, '', $spiel->gast_spieler_1_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + ?> + + ergebnis == 2) { + if ($spiel->heim_spieler_2_id != null && ($bild = bildHTML("spieler", !$details_anzeigen && $spiel->heim_spieler_2_bild_ausblenden ? '' : $spiel->heim_spieler_2_id, 30, 40, 0, 0, '', $spiel->heim_spieler_2_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + else { + if ($spiel->gast_spieler_2_id != null && ($bild = bildHTML("spieler", !$details_anzeigen && $spiel->gast_spieler_2_bild_ausblenden ? '' : $spiel->gast_spieler_2_id, 30, 40, 0, 0, '', $spiel->gast_spieler_2_geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; + } + ?> +
+ +
+ + 3) { + ?> + + + + +
+ + +
+ +   + heim_spieler_1_bild_ausblenden) && bildHTML("spieler", $spiel->heim_spieler_1_id, 30, 40, 0, 0) != null) + || (($details_anzeigen || !$spiel->gast_spieler_1_bild_ausblenden) && bildHTML("spieler", $spiel->gast_spieler_1_id, 30, 40, 0, 0) != null)) + $bilder_anzeigen_1 = true; + if ((($spiel->heim_spieler_2_id != null && ($details_anzeigen || !$spiel->heim_spieler_2_bild_ausblenden) && bildHTML("spieler", $spiel->heim_spieler_2_id, 30, 40, 0, 0) != null)) + || ($spiel->gast_spieler_2_id != null && ($details_anzeigen || !$spiel->gast_spieler_2_bild_ausblenden) && bildHTML("spieler", $spiel->gast_spieler_2_id, 30, 40, 0, 0) != null)) + $bilder_anzeigen_2 = true; + if ($bilder_anzeigen_1 && $bilder_anzeigen_2) + break; + } + ?> + + + + + + + + $spiel) { + ?> + + + + + + + + + + +
+
+ zeitpunkt)); ?> +
+ + individualwettbewerb_id]); ?> + +
+ + + + + + + + + + +
+ ergebnis != 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } + else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
+ ergebnis != 2) { + if (($details_anzeigen || !$spiel->heim_spieler_1_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->heim_spieler_1_id, 30, 40, 0, 0)) != null) + echo $bild; + } + else { + if (($details_anzeigen || !$spiel->gast_spieler_1_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->gast_spieler_1_id, 30, 40, 0, 0)) != null) + echo $bild; + } + ?> + + ergebnis != 2) { + if ($spiel->heim_spieler_2_id != null && ($details_anzeigen || !$spiel->heim_spieler_2_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->heim_spieler_2_id, 30, 40, 0, 0)) != null) + echo $bild; + } + else { + if ($spiel->gast_spieler_2_id != null && ($details_anzeigen || !$spiel->gast_spieler_2_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->gast_spieler_2_id, 30, 40, 0, 0)) != null) + echo $bild; + } + ?> +
+ +
ergebnis_detailliert)) echo str_replace(" ", " | ", $spiel->ergebnis != 2 ? $spiel->ergebnis_detailliert : runden_detailliert_invers($spiel->ergebnis_detailliert)); ?> + + + + + + + + + + +
+ ergebnis == 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } + else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != null) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
+ ergebnis == 2) { + if (($details_anzeigen || !$spiel->heim_spieler_1_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->heim_spieler_1_id, 30, 40, 0, 0)) != null) + echo $bild; + } + else { + if (($details_anzeigen || !$spiel->gast_spieler_1_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->gast_spieler_1_id, 30, 40, 0, 0)) != null) + echo $bild; + } + ?> + + ergebnis == 2) { + if ($spiel->heim_spieler_2_id != null && ($details_anzeigen || !$spiel->heim_spieler_2_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->heim_spieler_2_id, 30, 40, 0, 0)) != null) + echo $bild; + } + else { + if ($spiel->gast_spieler_2_id != null && ($details_anzeigen || !$spiel->gast_spieler_2_bild_ausblenden) && ($bild = bildHTML("spieler", $spiel->gast_spieler_2_id, 30, 40, 0, 0)) != null) + echo $bild; + } + ?> +
+ +
+ +   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ + + + + + + + + + + + + + +
+ + + - + > +   + + < +   + + > +
+ + + + + +
+
+

+
+
+ + + + + +
+ +
+ 0) { + ?> + + + + + + + 3) + break; + ?> + + + + + + +
Elo
+ elo_doppel : $row->elo_einzel; + if ($elo != $elo_aktuell) { + $elo = $elo_aktuell; + echo $platz; + } + ?> + + + + + + +
+ aktueller_verein_id)) + echo htmlentities_utf8($row->nachname . ", " . $row->vorname); + else { + ?> + + nachname . ", " . $row->vorname); ?> + + + bild_ausblenden ? '' : $row->spieler_id, 57, 76, 0, 0, 'border="1" align="right" hspace="8" vspace="2"', $row->geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; ?> +
+
+ + + + + + +
+ + +
+ +   + +
+ + + + +
") !== false ? $beschreibung : htmlentities_utf8($beschreibung); ?>
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ + + + + + + + + + + + + + + +
+ + + > bezeichnung); ?> +   + + + < +   + + + > +
+ + + + + + streichergebnisse != 0) { + ?> + + + + +
+
+

bezeichnung); ?>

+
+
+ + : streichergebnisse > 0 ? (100 - $rangliste->streichergebnisse . "% " . JText::_('COM_SPORTSMANAGER_POSSIBLE_PARTICIPATION')) : (($rangliste->streichergebnisse == -1 ? JText::_('COM_SPORTSMANAGER_BEST_RESULT') : ("maximal " . abs($rangliste->streichergebnisse) . " " . JText::_('COM_SPORTSMANAGER_BEST_RESULTS'))))); ?> +
+ + + + + + streichergebnisse > 0) { + ?> + + + + +
+ bezeichnung); ?> +
+ streichergebnisse)); ?> +
+ +   + 0) { + ?> + + + + + + + platz > 3) + break; + ?> + + + + + + +
+ platz; + ?> + + + + + + +
+ aktueller_verein_id == null) + echo htmlentities_utf8($row->nachname . ", " . $row->vorname); + else { + ?> + + nachname . ", " . $row->vorname); ?> + + + bild_ausblenden ? '' : $row->spieler_id, 57, 76, 0, 0, 'border="1" align="right" hspace="8" vspace="2"', $row->geschlecht == 'M' ? 'm' : 'w')) != null) + echo $bild; ?> +
+
+ punkte; ?> +
+ + + + + + +
+ + +
+ + +   + +
+
+ +
+   + + + + + + + + + + + + + + + +
+ + + Ranglisten > + + bezeichnung); ?> > + nachname . ", " . $rangliste_punkte->vorname); ?> +   + + < +   + + > +
+ + + + + + streichergebnisse != 0) { + ?> + + + + +
+
+

bezeichnung . (empty($rangliste_punkte->platz) ? "" : (" " . $rangliste_punkte->platz . ". Platz")) . ": " . $rangliste_punkte->nachname . ", " . $rangliste_punkte->vorname . " - " . $rangliste_punkte->punkte . " Punkte"); ?>

+
+
+ + : streichergebnisse > 0 ? (100 - $rangliste->streichergebnisse . "% " . JText::_('COM_SPORTSMANAGER_POSSIBLE_PARTICIPATION')) : (($rangliste->streichergebnisse == -1 ? JText::_('COM_SPORTSMANAGER_BEST_RESULT') : ("maximal " . abs($rangliste->streichergebnisse) . " " . JText::_('COM_SPORTSMANAGER_BEST_RESULTS'))))); ?> +
+   + + 0) { + ?> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
turnierbezeichnung != null ? htmlentities_utf8($platzierung->turnierbezeichnung) : ""; ?>turnierort != null ? htmlentities_utf8($platzierung->turnierort) : ""; ?>disziplin != null ? htmlentities_utf8($platzierung->disziplin) : ""; ?>beginn == null ? "" : htmlentities_utf8(FormatiertesDatum($platzierung->beginn, false)); ?>platz != null ? htmlentities_utf8($platzierung->platz) : ""; ?>teilnehmer != null ? htmlentities_utf8($platzierung->teilnehmer) : ""; ?>turnierdisziplin_id]) ? (" " . (empty($platzierung->punkte) ? "0" : $platzierung->punkte) . " ") : (empty($platzierung->punkte) ? "0" : $platzierung->punkte); ?>
+   + diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view.json.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view.json.php new file mode 100644 index 0000000..a8465dc --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view.json.php @@ -0,0 +1,337 @@ +teambild = teamImage($team->team_id, $team->verein_id); + $teams[] = $team; + } + if ($veranstaltung == null) { + return $teams; + } + + return [ + 'veranstaltung' => $veranstaltung, + 'teams' => $teams, + ]; + } + + static function tabelleAnzeigen($veranstaltung, $modus, $teams, $spieltag, $spieltage, $alleine_angezeigt, $praesentation) { + foreach ($teams as $team) { + $team->teambild = teamImage($team->team_id, $team->verein_id); + } + + return [ + 'tabelle' => $teams, + 'modus' => $modus, + ]; + } + + static function tabelleEigeneAnzeigen($veranstaltung, $modus, $teams, $alleine_angezeigt, $praesentation) { + foreach($teams as $team) { + $team->teambild = teamImage($team->team_id, $team->verein_id); + } + return [ + 'tabelle' => $teams, + 'modus' => $modus, + ]; + } + + static function _getPlayerDetails($game, $home_player_map, $away_player_map) { + // TODO dynamisch machen + $game->heim_spieler_1_vorname = isset($home_player_map[$game->heim_spieler_1_id]) + ? $home_player_map[$game->heim_spieler_1_id]->vorname + : NULL; + $game->heim_spieler_1_nachname = isset($home_player_map[$game->heim_spieler_1_id]) + ? $home_player_map[$game->heim_spieler_1_id]->nachname + : NULL; + $game->heim_spieler_1_bild = isset($home_player_map[$game->heim_spieler_1_id]) + ? $home_player_map[$game->heim_spieler_1_id]->bild + : NULL; + + $game->heim_spieler_2_vorname = isset($home_player_map[$game->heim_spieler_2_id]) + ? $home_player_map[$game->heim_spieler_2_id]->vorname + : NULL; + $game->heim_spieler_2_nachname = isset($home_player_map[$game->heim_spieler_2_id]) + ? $home_player_map[$game->heim_spieler_2_id]->nachname + : NULL; + $game->heim_spieler_2_bild = isset($home_player_map[$game->heim_spieler_2_id]) + ? $home_player_map[$game->heim_spieler_2_id]->bild + : NULL; + + $game->gast_spieler_1_vorname = isset($away_player_map[$game->gast_spieler_1_id]) + ? $away_player_map[$game->gast_spieler_1_id]->vorname + : NULL; + $game->gast_spieler_1_nachname = isset($away_player_map[$game->gast_spieler_1_id]) + ? $away_player_map[$game->gast_spieler_1_id]->nachname + : NULL; + $game->gast_spieler_1_bild = isset($away_player_map[$game->gast_spieler_1_id]) + ? $away_player_map[$game->gast_spieler_1_id]->bild + : NULL; + + $game->gast_spieler_2_vorname = isset($away_player_map[$game->gast_spieler_2_id]) + ? $away_player_map[$game->gast_spieler_2_id]->vorname + : NULL; + $game->gast_spieler_2_nachname = isset($away_player_map[$game->gast_spieler_2_id]) + ? $away_player_map[$game->gast_spieler_2_id]->nachname + : NULL; + $game->gast_spieler_2_bild = isset($away_player_map[$game->gast_spieler_2_id]) + ? $away_player_map[$game->gast_spieler_2_id]->bild + : NULL; + + } + + static function adminEditBegegnungSpielplan($bestaetigen, $veranstaltung, $begegnung, $heim_team, $gast_team, $spiele, $heim_spieler, $gast_spieler, $teamspiel_modus, $encrypted_pin, $count_verlegen_aktionen, $erneut_oeffnen, $aus_uebersicht) { + $heim_team->teambild = teamImage($heim_team->team_id, $heim_team->verein_id); + $gast_team->teambild = teamImage($gast_team->team_id, $gast_team->verein_id); + $heim_spieler_map = []; + $gast_spieler_map = []; + foreach ($heim_spieler as $player) { + $player->bild = playerImage($player->spieler_id, $player->geschlecht); + $heim_spieler_map[$player->spieler_id] = $player; + } + foreach ($gast_spieler as $player) { + $player->bild = playerImage($player->spieler_id, $player->geschlecht); + $gast_spieler_map[$player->spieler_id] = $player; + } + $begegnung->bezeichnung = $veranstaltung->bezeichnung; + $begegnung->veranstaltung_id = $veranstaltung->veranstaltung_id; + foreach ($spiele as $game) { + self::_getPlayerDetails($game, $heim_spieler_map, $gast_spieler_map); + } + $begegnung->spieltag = Rundenbezeichnung($begegnung->spieltag, $veranstaltung->unterteilung == 0); + return [ + 'bestaetigen' => $bestaetigen, + 'veranstaltung' => $veranstaltung, + 'begegnung' => $begegnung, + 'heim_team' => $heim_team, + 'gast_team' => $gast_team, + 'spiele' => $spiele, + 'heim_spieler' => $heim_spieler, + 'gast_spieler' => $gast_spieler, + 'modus' => $teamspiel_modus, + ]; + } + + static function mannschaftDetails($veranstaltung, $team, $mitglieder, $mailverteiler, $mitglieder_statistiken, $teamansprechpartner, $begegnungen, $vorheriges_team_id, $naechstes_team_id, $team_moderator, $details_anzeigen, $ansprechpartner_anzeigen, $weitere_veranstaltungen, $veranstaltungsbezeichnungen, $spielberechtigungen, $ansicht_vereinigt, $ist_vergangen) { + global $sportsmanager_joomla_path; + global $sportsmanager_joomla_url; + + $team->teambild = teamImage($team->team_id, $team->verein_id); + $team->color = getColorOfImage(str_replace($sportsmanager_joomla_url, $sportsmanager_joomla_path . '/', $team->teambild)); + foreach ($mitglieder as $m) { + $m->bild = playerImage($m->spieler_id, $m->geschlecht); + } + foreach ($begegnungen as $begegnung) { + $begegnung->heim_name = $begegnung->auswaerts == '1' ? $begegnung->gegner : $team->teamname; + $begegnung->heim_teamgruppe = $begegnung->auswaerts == '1' ? $begegnung->gegner_teamgruppe_id : $team->teamgruppe_id; + $begegnung->gast_name = $begegnung->auswaerts == '1' ? $team->teamname : $begegnung->gegner; + $begegnung->gast_teamgruppe = $begegnung->auswaerts == '1' ? $team->teamgruppe_id : $begegnung->gegner_teamgruppe_id; + $begegnung->spielort_name = $begegnung->heimspielort_name; + $begegnung->heim_bild = $begegnung->auswaerts == '1' ? teamImage($begegnung->gegner_id, $begegnung->gegner_verein_id) : teamImage($team->team_id, $team->verein_id); + $begegnung->gast_bild = $begegnung->auswaerts == '1' ? teamImage($team->team_id, $team->verein_id) : teamImage($begegnung->gegner_id, $begegnung->gegner_verein_id); + $begegnung->bezeichnung = $veranstaltungsbezeichnungen[$begegnung->veranstaltung_id]; + $begegnung->spieltag = Rundenbezeichnung($begegnung->spieltag, $veranstaltung->unterteilung == 0); + } + + if (getUserID() == 0 && $ansprechpartner_anzeigen) { + foreach ($teamansprechpartner as $ansprechpartner) { + unset($ansprechpartner->mobil); + unset($ansprechpartner->telefon); + } + } + + $team->veranstaltung_name = $veranstaltungsbezeichnungen[$team->veranstaltung_id]; + return [ + 'team' => $team, + 'mitglieder' => $mitglieder, + 'kontakt' => $ansprechpartner_anzeigen ? $teamansprechpartner : NULL, + 'begegnungen' => $begegnungen + ]; + } + + static function JSON($data, $meta = NULL) { + $response = [ + 'data' => $data + ]; + if ($meta != NULL) { + $response['meta'] = $meta; + } + header('Content-Type: application/json; charset=utf-8', true); + echo json_encode($response); + jexit(); + } + + static function spielerstatistik($spielerstatistik, $spielerstatistik_punkte, $allein_angezeigt, $filter_saison_id, $vorherige_spielerstatistik_id, $naechste_spielerstatistik_id, $details_anzeigen) { + $rank = 1; + foreach ($spielerstatistik_punkte as $s) { + $s->spieler_bild = playerImage($s->spieler_id, $s->geschlecht); + $s->spieler_2_bild= playerImage($s->spieler_2_id, $s->geschlecht_2); + $s->quote = ($s->spielpunkte_gewonnen > 0 || $s->spielpunkte_verloren > 0) + ? round($s->spielpunkte_gewonnen * 100 / ($s->spielpunkte_gewonnen + $s->spielpunkte_verloren), 0) . '%' + : '-'; + $s->rank = '' . $rank; + $rank++; + } + self::JSON($spielerstatistik_punkte); + } + + static function spielerDetails($spieler, $vereine, $veranstalter, $spieler_elo_verlauf_einzel, $spieler_elo_verlauf_doppel, $spielerNamen, $teamNamen, $veranstaltungBezeichnungen, $turnierdisziplinBezeichnungen, $individualwettbewerbBezeichnungen, $ranglistenplatzierungen, $turnierplatzierungen, $teams, $sortierung, $vorheriger_spieler_id, $naechster_spieler_id, $elo_detailliert, $statistik, $beginn, $kategorie, $einstufungen, $filter, $veranstaltungid, $veranstalterid, $einstufungid, $unabhaengige_ansicht, $details_anzeigen) { + $letzte_einzel = []; + $spieler->bild = playerImage($spieler->spieler_id, $spieler->geschlecht); + for ($i = sizeof($spieler_elo_verlauf_einzel) - 1; $i >= max(sizeof($spieler_elo_verlauf_einzel)-10, 0); $i--) { + $e = $spieler_elo_verlauf_einzel[$i]; + $letzte_einzel[] = [ + 'datum' => $e['z'], + 'spieler_1' => isset($spielerNamen[$e['h1']]) ? [ + 'spieler_id' => $e['h1'], + 'bild' => playerImage($e['h1'], 'M'), + 'vorname' => explode(', ',$spielerNamen[$e['h1']])[1], + 'nachname' => explode(', ',$spielerNamen[$e['h1']])[0], + ] : NULL, + 'spieler_team' => isset($e['th']) ? [ + 'id' => $e['th'], + 'name' => $teamNamen[$e['th']], + ]: NULL, + 'gegner_1' => isset($spielerNamen[$e['g1']]) ? [ + 'spieler_id' => $e['g1'], + 'bild' => playerImage($e['g1'], 'M'), + 'vorname' => explode(', ', $spielerNamen[$e['g1']])[1], + 'nachname' => explode(', ', $spielerNamen[$e['g1']])[0], + ] : NULL, + 'gegner_team' => isset($e['th']) && isset($e['tg']) ? + [ + 'id' => $e['tg'], + 'name' => $teamNamen[$e['tg']], + ] : NULL, + 'veranstaltung' => isset($e['v']) + ? $veranstaltungBezeichnungen[$e['v']] + : (isset($e['t']) + ? $turnierdisziplinBezeichnungen[$e['t']] + : $individualwettbewerbBezeichnungen[$e['i']]), + 'runde' => Rundenbezeichnung(abs($e['r']), isset($e['u']) && $e['u'] == 0), + 'runde_stufe' => !isset($e['u']) ? rundenstufe($e['rs']) : NULL, + 'ergebnis' => $e['s'], + ]; + } + $letzte_doppel = []; + for ($i = sizeof($spieler_elo_verlauf_doppel) - 1; $i >= max(sizeof($spieler_elo_verlauf_doppel) - 10, 0); $i--) { + $d = $spieler_elo_verlauf_doppel[$i]; + $letzte_doppel[] = [ + 'datum' => $d['z'], + 'spieler_1' => isset($spielerNamen[$d['h1']]) ? [ + 'spieler_id' => $d['h1'], + 'bild' => playerImage($d['h1'], 'M'), + 'vorname' => explode(', ', $spielerNamen[$d['h1']])[1], + 'nachname' => explode(', ', $spielerNamen[$d['h1']])[0], + ] : NULL, + 'spieler_2' => isset($spielerNamen[$d['h2']]) ? [ + 'spieler_id' => $d['h2'], + 'bild' => playerImage($d['h2'], 'M'), + 'vorname' => explode(', ', $spielerNamen[$d['h2']])[1], + 'nachname' => explode(', ', $spielerNamen[$d['h2']])[0], + ] : NULL, + 'spieler_team' => isset($d['th']) ? [ + 'id' => $d['th'], + 'name' => $teamNamen[$d['th']], + ] : NULL, + 'gegner_1' => isset($spielerNamen[$d['g1']]) ? [ + 'spieler_id' => $d['g1'], + 'bild' => playerImage($d['g1'], 'M'), + 'vorname' => explode(', ', $spielerNamen[$d['g1']])[1], + 'nachname' => explode(', ', $spielerNamen[$d['g1']])[0], + ] : NULL, + 'gegner_2' => isset($spielerNamen[$d['g2']]) ? [ + 'spieler_id' => $d['g2'], + 'bild' => playerImage($d['g2'], 'M'), + 'vorname' => explode(', ', $spielerNamen[$d['g2']])[1], + 'nachname' => explode(', ', $spielerNamen[$d['g2']])[0], + ]: NULL, + 'gegner_team' => isset($d['th']) && isset($d['tg']) ? + [ + 'id' => $d['tg'], + 'name' => $teamNamen[$d['tg']], + ] : NULL, + 'veranstaltung' => isset($d['v']) + ? $veranstaltungBezeichnungen[$d['v']] + : (isset($d['t']) + ? $turnierdisziplinBezeichnungen[$d['t']] + : $individualwettbewerbBezeichnungen[$d['i']]), + 'runde' => Rundenbezeichnung(abs($d['r']), isset($d['u']) && $d['u'] == 0), + 'runde_stufe' => !isset($d['u']) ? rundenstufe($d['rs']) : NULL, + 'ergebnis' => $d['s'], + ]; + } + self::JSON([ + 'spieler' => $spieler, + 'vereine' => $vereine, + 'teams' => $teams, + 'veranstalter'=> $veranstalter, + 'ranglisten_platzierungen' => $ranglistenplatzierungen, + 'turnier_platzierungen' => $turnierplatzierungen, + 'statistik' => $statistik, + 'elo' => $elo_detailliert, + 'einstufung' => isset($spieler->einstufung_allgemein_id) ? $einstufungen[$spieler->einstufung_allgemein_id] : NULL, + 'einstufung_einzel' => isset($spieler->einstufung_einzel_id) ? $einstufungen[$spieler->einstufung_einzel_id] : NULL, + 'einstufung_doppel' => isset($spieler->einstufung_doppel_id) ? $einstufungen[$spieler->einstufung_doppel_id] : NULL, + 'einzel' => $letzte_einzel, + 'doppel' => $letzte_doppel, + ]); + } + + static function begegnungVerlegen($veranstaltung, $begegnung, $heim_team, $gast_team, $verlegen_aktionen, $berechtigt_fuer_akzeptieren, $aus_uebersicht, $vorschlagendes_team_id) { + $letzte_aktionen = array(); + foreach ($verlegen_aktionen as $aktion) { + if ($aktion->aktion == 1 || $aktion->aktion == 5 || $aktion == 10) { + break; + } + array_push($letzte_aktionen, $aktion); + } + $termine = array(); + if (count($letzte_aktionen) > 0) { + $eingetragen = $letzte_aktionen[0]->eingetragen; + foreach ($letzte_aktionen as $aktion) { + if ($aktion->eingetragen != $eingetragen || $aktion->aktion != 0 || $aktion->zeitpunkt == NULL) { + break; + } + array_push($termine, $aktion); + } + } + + $berechtigt_anfordern = $veranstaltung->initial_ohne_termin != 1 && (count($letzte_aktionen) == 0 || $letzte_aktionen[0]->aktion == 1); + $berechtigt_vorschlagen = ($veranstaltung->initial_ohne_termin != 2 || (count($letzte_aktionen) != 0 && $letzte_aktionen[0]->aktion != 1)) + && (!$veranstaltung->keine_gegenvorschlaege || count($letzte_aktionen) == 0 || $letzte_aktionen[0]->aktion != 3 || $letzte_aktionen[0]->team_id != $vorschlagendes_team_id) + && (count($termine) == 0 || !$veranstaltung->keine_gegenvorschlaege || $letzte_aktionen[0]->team_id == $vorschlagendes_team_id); + $berechtigt_ablehnen = count($letzte_aktionen) != 0 && ($letzte_aktionen[0]->aktion == 0 || $letzte_aktionen[0]->aktion == 3 || $letzte_aktionen[0]->aktion == 4) + && ((($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 3) && $berechtigt_fuer_akzeptieren) || (($veranstaltung->ablehnen == 1 || $veranstaltung->ablehnen == 2) + && $berechtigt_vorschlagen)); + + $response = []; + $anzahl_termine = $veranstaltung->termine_maximal == 0 ? 3 : $veranstaltung->termine_maximal; + + for ($termin = 1; $termin <= $anzahl_termine; $termin++) { + if (isset($termine[$termin-1])) { + $response[] = [ + 'begegnung_historie_id' => $termine[$termin-1]->begegnung_historie_id, + 'zeitpunkt' => $termine[$termin-1]->zeitpunkt + ]; + } + } + + self::JSON([ + 'termine' => $response, + 'berechtigt_anfordern' => $berechtigt_anfordern, + 'berechtigt_ablehnen' => $berechtigt_ablehnen, + 'berechtigt_akzeptieren' => $berechtigt_fuer_akzeptieren ? TRUE : FALSE, + 'termine_minimal' => $veranstaltung->termine_minimal, + 'termine_maximal' => $veranstaltung->termine_maximal, + ]); + + } +} diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php new file mode 100644 index 0000000..1e88c6f --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_admin.php @@ -0,0 +1,12610 @@ +saison_id) { + $filter_saison = $saison->saisonbezeichnung; + break; + } + } + + ?> +
Sports Manager Copyright © 2006 – 2020 Sven Nickel
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 0) { + ?> + + + + + + + + + + + + + +
+ 0) { + ?> +
+ + + + +
+ : + + +
+ +
+ 0 && $statistik["teamspielmodi"] > 0 && $statistik["saisons"] > 0) { + ?> + + + + +
+ + +
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + teams > 1) { ?> + + + + + + teams > 1) { ?> + + + + + + + teams == 0 && !$beschraenkter_zugriff_veranstaltungen) { ?> + + + + +
+ bezeichnung); + } else { + ?> + bezeichnung)); ?>kategorie); ?>reihenfolge); ?>veranstalterkuerzel) ? $row->veranstalterbezeichnung : $row->veranstalterkuerzel); ?>teams; ?>begegnungen; ?>begegnungen; ?>erster_tag, $row->letzter_tag, TRUE))); ?>Mannschaftswechselstatus == 0 ? JText::_( 'COM_SPORTSMANAGER_NO' ) : JText::_( 'COM_SPORTSMANAGER_YES' )); ?>
+ +   + 0 && $statistik["saisons"] > 0) { + ?> + + + + +
+ + +
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + + + + +
+ erster_tag, $row->letzter_tag, TRUE))); + } else { + ?> + erster_tag, $row->letzter_tag, TRUE))); ?> + + + turnierbezeichnung); + if (!empty($row->disziplinen)) { + ?> +
disziplinen; ?> + +
kategorie); ?>turnierort); ?>veranstalterkuerzel) ? $row->veranstalterbezeichnung : $row->veranstalterkuerzel); ?>disziplinen_anzahl . " / " . $row->disziplinen_mit_meldung_anzahl; ?> +
+ +   + 0) { + ?> + + + + +
+ + +
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + + +
bezeichnung)); ?>kategorie); ?>reihenfolge); ?>turnierdisziplinen; ?>erster_tag, $rangliste->letzter_tag, TRUE))); ?>status == 0 ? JText::_( 'COM_SPORTSMANAGER_NO' ) : JText::_( 'COM_SPORTSMANAGER_YES' )); ?>
+ +   + 0 && $statistik["saisons"] > 0) { + ?> + + + + +
+ + +
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
+ bezeichnung); + } else { + ?> + bezeichnung)); ?>kategorie); ?>reihenfolge); ?>veranstalterkuerzel) ? $row->veranstalterbezeichnung : $row->veranstalterkuerzel); ?>spiele; ?>status == 0 ? JText::_( 'COM_SPORTSMANAGER_NO' ) : JText::_( 'COM_SPORTSMANAGER_YES' )); ?>
+ +   + 0) { + ?> + + + + +
+ + +
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + +
bezeichnung)); ?>kategorie); ?>reihenfolge); ?>veranstaltungen; ?>erster_tag, $spielerstatistik->letzter_tag, TRUE))); ?>status == 0 ? JText::_( 'COM_SPORTSMANAGER_NO' ) : JText::_( 'COM_SPORTSMANAGER_YES' )); ?> +
+ +   + +
+:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + " /> +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
API Einstellungen
Key + " /> +
Push-Serveraud)) { + echo _payload($einstellungen['api_push_key'], true)->aud; + } + + ?>" />
Aktivierte Domain + +
+
+ + + + +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + " /> +
+ : + + " /> +
+ : + + " /> +
+ : + + " /> +
+ : + + " /> +
+ : + + " /> +
+ : + + " /> +
  + +
+
+ + + + +
+ +
:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + +
:::
::::
+   + + +
+ + + + +
+ : + " onchange="document.adminForm.spezialfilter.value = '';" /> + + + + +
+ +
+ 0) { + $bilder_anzeigen = false; + foreach ($rows as $spieler) { + if (bildHTML("spieler", $spieler->spieler_id, 30, 40, 0, 0) != NULL) { + $bilder_anzeigen = true; + break; + } + } + ?> + + + + + + + + + + + + + + + + + + + + aktueller_verein_id) || (!$beschraenkter_zugriff && $row->teamspiele == 0 && $row->turniermeldungen == 0 && $row->individualwettbewerbspiele == 0 && $row->individualwettbewerbausgangsplatzierungen == 0 && $row->teammitgliedschaften == 0)) { + ?> + + + + + + + +
+ + + + + + + +
+ nachname . ", " . $row->vorname)); ?> + + spieler_id, 30, 40, 0, 0, 'border="1"'); + if ($bild != NULL) + echo $bild; + ?> +
+
geschlecht); ?>geburtsjahr != NULL) echo $row->geburtsjahr; ?>kategorie); ?>vereinsname != NULL ? htmlentities_utf8($row->vereinsname) : JText::_('COM_SPORTSMANAGER_NONE'); ?>spielernr != NULL ? htmlentities_utf8($row->spielernr) : ""; ?>lizenznr != NULL ? htmlentities_utf8($row->lizenznr) : ""; ?> + aktueller_verein_id)) { ?> + + + teamspiele == 0 && $row->turniermeldungen == 0 && $row->individualwettbewerbspiele == 0 && $row->individualwettbewerbausgangsplatzierungen == 0 && $row->teammitgliedschaften == 0) { ?> + + +
  +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + + + nachname); + ?> +
+ : + + + + vorname); + ?> +
+ : + + + + geschlecht != "M" ? JText::_('COM_SPORTSMANAGER_FEMALE') : JText::_('COM_SPORTSMANAGER_MALE'); + ?> +
+ : + + + + + + geburtsdatum != NULL) + echo htmlentities_utf8(FormatiertesDatum($row->geburtsdatum, FALSE, TRUE)); + ?> +
+ : + + +
+ : + + +
+ : + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + 0) { + ?> + + spielernr); + ?> +
+ : + + + + lizenznr); + ?> +
+ : + + +
+ : + + spieler_id, 0, 0, 320, 240, 'border="1"') : NULL; + if (!$beschraenkter_zugriff || $ansprechpartner_spielerdaten == "1" || $ansprechpartner_spielerdaten == "3") { + if ($bild != NULL) { + ?> + +

+

+

+ + +

+ +
+ : + + + + : + + JText::_('COM_SPORTSMANAGER_ACTIVE'), 2 => JText::_('COM_SPORTSMANAGER_RESTRICTED'), 3 => JText::_('COM_SPORTSMANAGER_PASSIVE'), 0 => JText::_('COM_SPORTSMANAGER_BEATEN')); + foreach ($vereine as $verein) { + if ($verein->verein_id == $vereinsmitgliedschaften[$i]->verein_id) { + echo htmlentities_utf8($verein->vereinsname . ($verein->verein_ausgetreten ? " (".JText::_('COM_SPORTSMANAGER_BEATEN_CLUB').")" : "") . (" (" . $werte[$vereinsmitgliedschaften[$i]->mitgliedsstatus] . ")")); + break; + } + } + } + ?> +
+ : + + +
+ : + + +
  + +
+
+ + + + + + " /> + +
+ +
+ + +
+ + + + +
+ + + + + + + + +
+ : + + + + + + + + + + + +
+ + +
+
+ + + nachname . ", " . $s->vorname) . htmlentities_utf8($s->spielernr != NULL && $s->spielernr != "" ? (" (" . $s->spielernr . ")") : ""); + ?> +
+
  +
+
+ + + + + +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + +
+ : + + +
+ + + +
  + +
+
+ + + + +
+ +
+ +
+ + + + +
+ + + + + + + + +
+ : + + +
  + +
+
+ + + + +
+ vereinsname) { + $verein_import_id = $verein->verein_id; + break; + } + } + } + + ?> +
+ + + + +
+ + + + + +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ + +
+ veranstalterbezeichnung) ? JText::_('COM_SPORTSMANAGER_CLUB_WITHOUT_ORGANISATION') : ( JText::_('COM_SPORTSMANAGER_CLUBS') . $v->veranstalterbezeichnung)); + ?> + + +
  + +
+
+ + + + + + +
+ +
+ + + + +
+ 0) { + ?> + + +
+ + 0) { + ?> + + + + +
+ + + + + + + + + + +
nachname . ", " . $s->vorname); ?>
+   + +
+ + +
+ +
: Importinhalt prüfen
+ + + + +
+ + + + + namensgleich > 0) { + ?> + + +
+ + 0 && $spieler[0]->namensgleich > 0) { + ?> + + + + +
+ + + + + + namensgleich == 0) + break; + ?> + + + + +
nachname . ", " . $s->vorname); ?>
+   + 0 && $spieler[$spieler_anzahl - 1]->namensgleich == 0) { + ?> + + + + +
+ + + + + + + + namensgleich > 0) + continue; + ?> + + + + + + +
nachname . ", " . $s->vorname); ?>nachname_alt != NULL ? $s->nachname_alt : $s->nachname) . ", " . ($s->vorname_alt != NULL ? $s->vorname_alt : $s->vorname)); ?> + nachname_alt != NULL) + similar_text($s->nachname, $s->nachname_alt, $p1); + if ($s->vorname_alt != NULL) + similar_text($s->vorname, $s->vorname_alt, $p2); + echo htmlentities_utf8(floor($p1)."% / ".floor($p2)."%"); + ?> +
+   + +
+ + + + + + + + + + + + + +
+ +
:
+ + + + + +
+ +
+ + + + + +
+ + + + + +
+ + + + + +
:
:
:
+   + + 0 && $spieler_import[0]->namensgleich > 0) { + ?> + + + + +
+ + + + + + namensgleich == 0) + break; + ?> + + + + +
nachname . ", " . $s->vorname); ?>
+   + $n && ($spieler_import[$n]->nachname_alt != NULL || $spieler_import[$n]->vorname_alt != NULL)) { + ?> + + + + +
+ + + + + + + + $n) { + $s = $spieler_import[$n]; + if ($s->nachname_alt == NULL && $s->vorname_alt == NULL) + break; + ?> + + + + + + +
nachname . ", " . $s->vorname); ?>nachname_alt != NULL ? $s->nachname_alt : $s->nachname) . ", " . ($s->vorname_alt != NULL ? $s->vorname_alt : $s->vorname)); ?> + nachname_alt != NULL) + similar_text($s->nachname, $s->nachname_alt, $p1); + if ($s->vorname_alt != NULL) + similar_text($s->vorname, $s->vorname_alt, $p2); + echo htmlentities_utf8(floor($p1)."% / ".floor($p2)."%"); + ?> +
+   + 0) { + ?> + + + + +
+ + + + + + + + + + +
+   + 0) { + ?> + + + + +
+ + + + + + + + + + +
+   + + + + + +
+ + + + + + + + + + + + +
+   + +
+ + + + + + + + + +
+ + +
+ 0) { + ?> + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + bezeichnung)); ?> + bezeichnung)); + } + ?> + + + verteiler); ?>X
+ 0) { + ?> + + + + +
+ +
+ + + + + + + + + + + + + + +
+ veranstalterbezeichnung); ?> + + veranstalter_id]) && !empty($organisationen_mailverteiler[$organisation->veranstalter_id])) { + ?> + + + + veranstalter_id . "p"]) && !empty($organisationen_mailverteiler[$organisation->veranstalter_id . "p"])) + echo htmlentities_utf8($organisationen_mailverteiler[$organisation->veranstalter_id . "p"]); + ?> +
+   + 0) { + ?> + + + + +
+ + saison_id) + echo htmlentities_utf8(JText::_('COM_SPORTSMANAGER_SEASON')." " . $saison->saisonbezeichnung); + } + ?> +
+ + + + + + + + + + + + + + +
+ bezeichnung); ?> + + veranstaltung_id]) && !empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id])) { + ?> + + + + veranstaltung_id . "p"]) && !empty($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"])) + echo htmlentities_utf8($veranstaltungen_mailverteiler[$veranstaltung->veranstaltung_id . "p"]); + ?> +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> +
+ +
saisonbezeichnung); ?>
+ + + + + + + +
+ + +
+ + + + + +
+ +
+ + + + + + +
+ +
+ + + + + +
+ +
+ + + + + + + + + + + + +
+ zuordnungbezeichnung != NULL ? $row->zuordnungbezeichnung : JText::_('COM_SPORTSMANAGER_NONE2')); + ?> + neuzugaenge); ?>
+ +   + + 0) { + ?> + + + + +
+ +
+ + + + + + + + + + + + +
+ zuordnungbezeichnung != NULL ? $row->zuordnungbezeichnung : JText::_('COM_SPORTSMANAGER_NONE2')); + ?> + mitglieder); ?>
+   + 0) { + ?> + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ bezeichnung)); ?> + + zuordnungbezeichnung != NULL ? $row->zuordnungbezeichnung : JText::_('COM_SPORTSMANAGER_NONE2')); + ?> + + notiz)); ?> + mitglieder); ?>X
+ +
Mitgliederrechnung:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + zuordnungbezeichnung != NULL ? $row->zuordnungbezeichnung : JText::_('COM_SPORTSMANAGER_NONE2')); + } + else { + ?> + + + +
+ : + + JText::_('COM_SPORTSMANAGER_ACTIVE'), 2 => JText::_('COM_SPORTSMANAGER_RESTRICTED'), 3 => JText::_('COM_SPORTSMANAGER_PASSIVE')); + foreach ($werte as $wert => $bezeichnung) { + if (pow(2, $wert) & $row->mitgliedsstatus) + array_push($mitgliedsstatus, $bezeichnung); + } + echo htmlentities_utf8(implode(", ", $mitgliedsstatus)); + } else { + ?> + + +
+ : + + JText::_('COM_SPORTSMANAGER_CATEGORY_ALL'), 11 => JText::_('COM_SPORTSMANAGER_ALL_NO_JUNIOR'), 7 => JText::_('COM_SPORTSMANAGER_ALL_NO_SENIOR'), 3 => JText::_('COM_SPORTSMANAGER_ALL_NO_JUNIOR_SENIOR'), 4 => JText::_('COM_SPORTSMANAGER_CATEGORY_JUNIORS'), 8 => JText::_('COM_SPORTSMANAGER_CATEGORY_SENIORS')); + if ($row != NULL) { + echo $wertungskategorie[$row->wertungskategorie]; + } else { + ?> + + +
  + +
+
+ + + + + " /> +
+ +
:
+ + + + + + + + + + +
+ 0) { + $bilder_anzeigen = FALSE; + foreach ($rows as $verein) { + if (bildHTML("vereine", $verein->verein_id, 28, 28, 0, 0) != NULL) { + $bilder_anzeigen = TRUE; + break; + } + } + + if ($organisationAnzeigen) { + $organisation = $rows[0]->veranstalterbezeichnung; + ?> + + + + +
+ +
+ + + + + + + + + veranstalterbezeichnung != $organisation) { + $organisation = $row->veranstalterbezeichnung; + ?> +
+   + + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ vereinsname)); ?> + + verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != NULL) + echo $bild; + ?> +
+
mitglieder; ?>vereinssitz)) echo htmlentities_utf8($row->vereinssitz . (!empty($row->vereinssitz_ortsteil) ? ("-" . $row->vereinssitz_ortsteil) : "")); ?>ausgetreten ? JText::_('COM_SPORTSMANAGER_YES') : JText::_('COM_SPORTSMANAGER_NO'); ?>X
+ +   + +
:
+ +
" method="post" name="adminForm" id="adminForm" enctype="multipart/form-data"> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ / : + + + +
+ : + + +
+ : + + +
+ : + + +
+ Heimspielort-Name: + + +
+ Heimspielort-Webseite: + + +
+ Heimspielort-Anschrift: + + +
+ Heimspielort-Anschrift-Webseite: + + +
+ : + + " /> +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + "; + } + ?> + +
+ +
+
+ : + + +
+ : + + verein_id, 0, 0, 240, 240, 'border="0"')) != NULL) { + ?> + +

+

+

+ + +

+ +
  + +
+
+ + + + + " /> +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
  + +
+
+ + + + +
+ +
'vereinsname); ?>':
+ + + + + + + +
+ 0) { + ?> + + + + + + + + JText::_('COM_SPORTSMANAGER_ACTIVE'), 2 => JText::_('COM_SPORTSMANAGER_RESTRICTED'), 3 => JText::_('COM_SPORTSMANAGER_PASSIVE'), 0 => JText::_('COM_SPORTSMANAGER_BEATEN')); + foreach ($vereinsmitglieder as $row) { + ?> + + + + + + + + +
nachname)); ?>vorname); ?>spielernr); ?>mitgliedsstatus]); ?> + aktueller_verein_id)) { ?> + + + X +
+ +
'vereinsname); ?>':
+ +
+ + + + +
+ + + + + + + + + + + + + + +
+ : + + nachname . ", " . $row->vorname); + } + else { + ?> + + +
+ : + + +
  + +
+
+ + + + + + " /> +
+ +
:
+ + + + + + + + +
+ 0) { + $ortsname = $rows[0]->ortsname; + if (!empty($ortsname)) { + ?> + + + + +
+ +
+ + + + + + + + + + + ortsname != $ortsname) { + $ortsname = $row->ortsname; + ?> +
+   + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ name)); ?> +
+
strasse)) echo htmlentities_utf8($row->strasse); ?>plz)) echo htmlentities_utf8($row->plz); ?>ortsname)) echo htmlentities_utf8($row->ortsname); ?>ortsteil)) echo htmlentities_utf8($row->ortsteil); ?>status == 0 ? JText::_('COM_SPORTSMANAGER_NO') : JText::_('COM_SPORTSMANAGER_YES')); ?>X
+ +   + +
:
+ +
" method="post" name="adminForm" id="adminForm" enctype="multipart/form-data"> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ / / : + + + + +
+ : + + +
+ : + + +
+ : + + +
  +
+
+ + + + + " /> +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
  + +
+
+ + + + +
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + + + + veranstaltungen == 0) { ?> + + + + +
bezeichnung)); ?>status == 0 ? JText::_('COM_SPORTSMANAGER_NO') : JText::_('COM_SPORTSMANAGER_YES')); ?>X
+ +
:
+ + +
+ + + + +
+ + + + + + + + + + + + + + punkte_sieg_einzel == $row->punkte_sieg_doppel) echo " style=\"display:none\""; ?>> + + + + + + + + + + + + + + + + spielpunkte_wertung_einzel == $row->spielpunkte_wertung_doppel) echo " style=\"display:none\""; ?>> + + + + + + + + + + + + JText::_('COM_SPORTSMANAGER_DOUBLES')." 1", "D2" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 2", "D3" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 3", "D4" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 4", "D5" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 5", "D6" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 6", "E1" => JText::_('COM_SPORTSMANAGER_SINGLES')." 1", "E2" => JText::_('COM_SPORTSMANAGER_SINGLES')." 2", "E3" => JText::_('COM_SPORTSMANAGER_SINGLES')." 3", "E4" => JText::_('COM_SPORTSMANAGER_SINGLES')." 4", "E5" => JText::_('COM_SPORTSMANAGER_SINGLES')." 5", "E6" => JText::_('COM_SPORTSMANAGER_SINGLES')." 6", "S1" => JText::_('COM_SPORTSMANAGER_RESULT_ONLY')); + $modus = $row != NULL ? explode("|", $row->modus) : NULL; + $spiele = $modus != NULL && isset($modus[0]) ? explode(",", $modus[0]) : array(); + for ($spiel_nr = 1; $spiel_nr <= 36; $spiel_nr++) { + ?> + + + + + + JText::_('COM_SPORTSMANAGER_DOUBLES')." 1", "D2" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 2", "D3" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 3", "D4" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 4", "D5" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 5", "D6" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 6", "D7" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 7", "D8" => JText::_('COM_SPORTSMANAGER_DOUBLES')." 8"); + $spieltyp_einzel = array("E1" => JText::_('COM_SPORTSMANAGER_SINGLES')." 1", "E2" => JText::_('COM_SPORTSMANAGER_SINGLES')." 2", "E3" => JText::_('COM_SPORTSMANAGER_SINGLES')." 3", "E4" => JText::_('COM_SPORTSMANAGER_SINGLES')." 4", "E5" => JText::_('COM_SPORTSMANAGER_SINGLES')." 5", "E6" => JText::_('COM_SPORTSMANAGER_SINGLES')." 6", "E7" => JText::_('COM_SPORTSMANAGER_SINGLES')." 7", "E8" => JText::_('COM_SPORTSMANAGER_SINGLES')." 8"); + $verknuepfungen = $modus != NULL && isset($modus[1]) ? explode(",", $modus[1]) : array(); + for ($verknuepfung_nr = 1; $verknuepfung_nr <= 6; $verknuepfung_nr++) { + ?> + + + + + + + + +
+ : + + +
+ : + + +
+ : + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + +
+ + + + : + +
+
+ Verknüpfung Nr. : + + + + + + + +
+ + + + + +
+
  + +
+
+ + + + + " /> + " /> + " /> +
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + veranstaltungen == 0) { ?> + + + + +
bezeichnung)); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + +
+
+

+ +

+
+
+ + + +
  + +
+
+ + + + +
+ +
:
+ + + + + + + + +
+ 0) { + ?> + + + + + + + + + + + ranglisten == 0 && $row->ranglistenturnierdisziplinen == 0) { ?> + + + + +
systembezeichnung)); ?>rangliste_system_id]) echo "Fehlerhaft! "; echo htmlentities_utf8($row->status == 0 ? JText::_('COM_SPORTSMANAGER_NO') : JText::_('COM_SPORTSMANAGER_YES')); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ + + + + + + + + + +
+ : + + +
+
+ +
  + +
+
+ + + + + " /> + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + systembezeichnung); ?> +
+ : + + status ? JText::_('COM_SPORTSMANAGER_YES') : JText::_('COM_SPORTSMANAGER_NO')); ?> +
+ : + + funktion != null) { + ?> + funktion); ?> +
+
+ + + + +
+ : + + +
+ : + + " /> +
  + +
+
+ + + + + + +
+ +   + + 0) { + ?> + + + + + + $punkte) { + ?> + + + + + +
+ + + +
+ +   + + +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + +
+ : + + + + +
+ : + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> +
+ +
'bezeichnung); ?>':
+ + + + + + + + + +
+ 0) { + ?> + + + + + + + + + + + + + + + + +
turnierbezeichnung . (!empty($row->turnierort) ? (" in " . $row->turnierort) : "") . ": " . $row->disziplin); ?>systembezeichnung != NULL ? $row->systembezeichnung : JText::_('COM_SPORTSMANAGER_RANKING_SETTING')); ?> + wertung >= 0 ? ($row->wertung . "-fach") : ("1/" . abs($row->wertung) . "-fach"); + if ($row->doppel_teilwertung != 1) + echo ", DT: " . ($row->doppel_teilwertung == 0 ? JText::_('COM_SPORTSMANAGER_NONE2') : ("1/" . abs($row->doppel_teilwertung) . "-fach")); + ?> + beginn); ?>X
+ +
'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + +
+ : + + + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> +
+ +
'bezeichnung); ?>':
+ + + + + + + + + +
+ 0) { + ?> + + + + + + + + + + + + + + +
bezeichnung); ?>erster_tag, false, false)); ?>letzter_tag, false, false)); ?>X
+   + 0) { + ?> + + + + + + + + + + + + +
bezeichnung); ?>saisonbezeichnung); ?>X
+   + +
Veranstaltung in Spielerstatistik 'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + + + +
+ : + + +
  + +
+
+ + + + + " /> + +
+ +
Individualwettbewerb in Spielerstatistik 'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + + + +
+ : + + +
  + +
+
+ + + + + " /> + +
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + + + + + + + +
name)); ?>username); ?>zugriffe; ?>X
+ +
Moderator:
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
+ JText::_('COM_SPORTSMANAGER_MANAGE_MODERATORS'), + "basiseinstellungen_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_BASIC_SETTING'), + "kategorien_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_CATEGORIES'), + "organisationen_aendern" => JText::_('COM_SPORTSMANAGER_MANAGING_ORGANISATIONS'), + "saisons_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_SEASONS'), + "spieler_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_PLAYERS'), + "spieler_lesen_erweiterte_daten" => JText::_('COM_SPORTSMANAGER_PRIVATE_PLAYER_DATA'), + "vereine_aendern" => JText::_('COM_SPORTSMANAGER_ASSOCIATIONS_MEMBERSHIPS_MANAGE'), + "einstufungen_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_CLASSIFICATIONS'), + "mannschaftsspielplaene_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_TEAM_PLANS'), + "verschieberegeln_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_RULES_POSTPONEMENT'), + "spielorte_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_VENUES'), + "mannschaftswettbewerb_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_TEAM_COMPETITIONS'), + "spielerstatistiken_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_PLAYER_STATISTICS'), + "turniere_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_TOURNAMENTS'), + "individualwettbewerbe_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_INDIVIDUAL_COMPETITIONS'), + "ranglistenwertungen_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_RANKING_VOTES'), + "ranglisten_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_RANKING'), + "rechnungen_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_MEMBERS_BILLS'), + "verteiler_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_DISTRIBUTIORS'), + "verteiler_lesen" => JText::_('COM_SPORTSMANAGER_READ_DISTRIBUTIORS'), + "termine_aendern" => JText::_('COM_SPORTSMANAGER_MANAGE_EVENTS'), + "termine_benachrichtigung" => JText::_('COM_SPORTSMANAGER_NOTIFICATION_APPOINTMENTS')); + foreach($werte as $wert => $bezeichnung) { + $auswahl = FALSE; + if ($row != NULL) { + foreach ($zugriffe as $zugriff) { + if ($zugriff->zugriff == $wert) { + $auswahl = TRUE; + break; + } + } + } + ?> + " />
+ +
  + +
+
+ + + + " /> + +
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + veranstaltungen == 0 && $row->turniere == 0 && $row->ranglisten == 0 && $row->bestenlisten == 0) { ?> + + + + +
saisonbezeichnung)); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + +
+ : + + +
  + +
+
+ + + + + " /> +
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + + + + + veranstaltungen == 0 && $row->vereine == 0 && $row->turniere == 0 && $row->individualwettbewerbe == 0) { ?> + + + + +
K
veranstalterbezeichnung)); ?>kategorie); ?>veranstalterkuerzel); ?>X
+ +
:
+ + + + + + + +
+ 0) { + ?> + + + + + + + + + + JText::_( 'COM_SPORTSMANAGER_GENERALLY' ), 1 => JText::_( 'COM_SPORTSMANAGER_SINGLES' ), 2 => JText::_( 'COM_SPORTSMANAGER_DOUBLES' )); + $k = 0; + foreach ($rows as $row) { + ?> + + + + + + + + + + +
bezeichnung)); ?>typ]; ?>prioritaet; ?>elo_min)) echo $row->elo_min; ?>elo_max)) echo $row->elo_max; ?>ranglisten; ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + einstufung_rangliste_id != NULL) + array_push($ranglisten_beruecksichtigt, $rangliste->rangliste_id); + } + $n = count($ranglisten_beruecksichtigt); + } + for ($i = 0; $i <= $n + 3; $i++) { + ?> + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + +
+ : + + + : + + +
  + +
+
+ + + + + " /> +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + "; + } + ?> + +
+ +
+
  + +
+
+ + + + + " /> +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + +
+ : + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + "; + } + ?> + +
+ +
+
+ : + + veranstaltung_id, 0, 0, 720, 240, 'border="0"')) != NULL) { + ?> + +

+

+

+

URL: + + +

+

URL: + +
+ : + + veranstaltung_id, 0, 0, 600, 60, 'border="0"')) != NULL) { + ?> + +

+

+

+

URL: + + +

+

URL: + +
  + +
+
+ + + + + + " /> +
+ +
'bezeichnung); ?>':
+ + + + + + + + + +
+ 0) { + $bilder_anzeigen = FALSE; + foreach ($rows as $team) { + if (bildHTML("mannschaften", $team->team_id, 28, 28, 0, 0) != NULL) { + $bilder_anzeigen = TRUE; + break; + } + else if ($team->verein_id != NULL && bildHTML("vereine", $team->verein_id, 0, 0, 240, 240, 'border="0"') != NULL) { + $bilder_anzeigen = TRUE; + break; + } + } + ?> + + + + + + + + + + + + + + begegnungen == 0) { ?> + + + + +
+ + + + + + + +
+ teamname)); ?> + + team_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != NULL) + echo $bild; + else if ($row->verein_id != NULL) { + $bild = bildHTML("vereine", $row->verein_id, 28, 28, 0, 0, 'border="0"'); + if ($bild != NULL) + echo $bild; + } + + ?> +
+
verein_id != NULL ? htmlentities_utf8($row->vereinsname) : JText::_('COM_SPORTSMANAGER_NONE2'); ?>mitglieder_aktiv . " / " . ($row->mitglieder - $row->mitglieder_aktiv); ?>name)) echo htmlentities_utf8($row->name); ?>X
+ +
'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + tabellenwertung == -2) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tabellenwertung <= 9) { + ?> + + + + + veranstaltung_id] = $v->bezeichnung . " (" . FormatiertesDatum($v->erster_tag, FALSE, FALSE) . " - " . FormatiertesDatum($v->letzter_tag, FALSE, FALSE) . ")"; + if ($row != NULL && $row->teamgruppe_id != NULL && $v->team_id != NULL) { + array_push($veranstaltungen_beruecksichtigt, $v->veranstaltung_id); + array_push($veranstaltungen_beruecksichtigt_begegnungen, $v->team_begegnungen); + array_push($veranstaltungen_beruecksichtigt_moderator, $beschraenkter_zugriff_veranstaltungen ? $v->veranstaltung_moderator : 1); + } + } + $n = count($veranstaltungen_beruecksichtigt); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + 0 || ($beschraenkter_zugriff_veranstaltungen && !$veranstaltungen_beruecksichtigt_moderator[$i]))) { + echo htmlentities_utf8($veranstaltungen_bezeichnungen[$veranstaltungen_beruecksichtigt[$i]]); + echo ""; + } else { + ?> + + +
+ : + + " /> +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ + + + + + + "; + } + ?> + +
+ +
+
+ : + + +
+ : + + team_id, 0, 0, 240, 240, 'border="0"')) != NULL) { + ?> + +

+

+

+ + +

+ +
  + +
+
+ + + + + " /> + +
+ +
'bezeichnung); ?>':
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + +
+ : + +
+ team_id . "\">" . htmlentities_utf8($team->teamname) . "
"; + ?> +
+ : + + +
+ : + + +
+ +
  + +
+
+ + + + + +
+ +
'bezeichnung); ?>':
+ + +
+ + + + +
+ + + + + + + + + + + + +
+ : + +
+ team_id . "\">" . htmlentities_utf8($team->teamname) . "
"; + ?> +
+ : + + +
+ +
  + +
+
+ + + + + +
+ +
'teamname); ?>':
+ + + + + + verein_id != 0) { + ?> + + + + + + +
+ 0) { + $bilder_anzeigen = FALSE; + foreach ($mitglieder as $row) { + if (bildHTML("mannschaftsmitglieder", $row->mitglied_von_team_id, 30, 40, 0, 0) != NULL) { + $bilder_anzeigen = TRUE; + break; + } + else if (bildHTML("spieler", $row->spieler_id, 30, 40, 0, 0) != NULL) { + $bilder_anzeigen = TRUE; + break; + } + } + ?> + + + + + + + + + + + + + + + + + + +
, unterteilung == 0 ? JText::_( 'COM_SPORTSMANAGER_FIRST_SHOWING' ) : JText::_( 'COM_SPORTSMANAGER_FIRST_ROUND' ); ?>unterteilung == 0 ? JText::_( 'COM_SPORTSMANAGER_LAST_PLAY_DAY' ) : JText::_( 'COM_SPORTSMANAGER_LAST_ROUND' ); ?>
+ + + + + + + +
+ nachname . ", " . $row->vorname)); ?> + + mitglied_von_team_id, 30, 40, 0, 0, 'border="1"'); + if ($bild != NULL) + echo $bild; + else { + $bild = bildHTML("spieler", $row->spieler_id, 30, 40, 0, 0, 'border="1"'); + if ($bild != NULL) + echo $bild; + } + + ?> +
+
spielernr); ?>anderes_team && $row->erster_spieltag != NULL) echo htmlentities_utf8(Rundenbezeichnung($row->erster_spieltag, $veranstaltung->unterteilung == 0, true)); ?>anderes_team && $row->letzter_spieltag != NULL) echo htmlentities_utf8(Rundenbezeichnung($row->letzter_spieltag, $veranstaltung->unterteilung == 0, true)); ?>anderes_team) echo JText::_( 'COM_SPORTSMANAGER_UNREPORTED' ); else echo $row->ausgetreten ? JText::_('COM_SPORTSMANAGER_BEATEN') : JText::_('COM_SPORTSMANAGER_ACTIVE'); ?> + aktueller_verein_id)) { ?> + + + X +
+ +
nachname . ", " . $row->vorname) . "' "; ?>in Mannschaft 'teamname); ?>':
+ + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ : + + nachname . ", " . $row->vorname); + } else { + ?> + + + + + + + + + + +
+ + +
+
+ + + nachname . ", " . $s->vorname) . htmlentities_utf8($s->spielernr != NULL && $s->spielernr != "" ? (" (" . $s->spielernr . ")") : ""); + $bild_vorhanden = bildHTML("spieler",$s->spieler_id, 0, 0, 180, 240) != NULL; + if ($bild_vorhanden || isset($spielberechtigungen[$s->spieler_id])) { + ?> +
+ + spieler_id])) { + if ($bild_vorhanden) + echo "
"; + foreach ($spielberechtigungen[$s->spieler_id] as $index => $spielberechtigung) { + if ($index != 0) + echo "
"; + echo htmlentities_utf8(isset($veranstaltungsbezeichnungen[$spielberechtigung[0]]) ? $veranstaltungsbezeichnungen[$spielberechtigung[0]] : JText::_('COM_SPORTSMANAGER_UKNOWN_EVENT')); + echo ", " . htmlentities_utf8(isset($veranstaltungsbezeichnungen[$spielberechtigung[4]]) ? $veranstaltungsbezeichnungen[$spielberechtigung[4]] : JText::_('COM_SPORTSMANAGER_UKNOWN_TEAM')); + if ($spielberechtigung[2] >= 2 || !empty($spielberechtigung[3])) { + echo ": "; + if (empty($spielberechtigung[3])) // Letzter Spieltag ohne Einschränkung + echo JText::_('COM_SPORTSMANAGER_FROM')." " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)); + else if ($spielberechtigung[2] < 2) // Erster Spieltag ohne Einschränkung + echo JText::_('COM_SPORTSMANAGER_TO2')." " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[3], $spielberechtigung[1] == 0)); + else if ($spielberechtigung[2] == $spielberechtigung[3]) // Erster Spieltag und letzter Spieltag gleich + echo JText::_('COM_SPORTSMANAGER_DURING')." " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)); + else + echo htmlentities_utf8(Rundenbezeichnung($spielberechtigung[2], $spielberechtigung[1] == 0)) . " ".JText::_('COM_SPORTSMANAGER_TO')." " . htmlentities_utf8(Rundenbezeichnung($spielberechtigung[3], $spielberechtigung[1] == 0)); + } + if ($spielberechtigung[5]) + echo ", " . JText::_('COM_SPORTSMANAGER_BEATEN'); + } + ?> +
+ +
+ +
+ 'bezeichnung); ?>': + + + + + + + mitglied_von_team_id)) echo ' style="display:none"'; ?>> + + + + mitglied_von_team_id)) echo ' style="display:none"'; ?>> + + + +
+ : + + + +
+ : + + erster_spieltag != NULL ? htmlentities_utf8(Rundenbezeichnung($v->erster_spieltag, $v->unterteilung == 0)) : JText::_('COM_SPORTSMANAGER_UNRESTRICTED'); + } else { + ?> + + + " erster_spieltag == 0 || (abs($v->erster_spieltag) >= 10000 && abs($v->erster_spieltag) < 20000)) echo 'style="visibility:hidden" '; ?>/> + erster_spieltag) < 20000) echo 'style="visibility:hidden" '; ?>/> + +
+ : + + + + " letzter_spieltag == 0 || (abs($v->letzter_spieltag) >= 10000 && abs($v->letzter_spieltag) < 20000)) echo 'style="visibility:hidden" '; ?>/> + letzter_spieltag) < 20000) echo 'style="visibility:hidden" '; ?>/> + veranstaltung_id]) && count($veranstaltungen_begegnungen[$v->veranstaltung_id]) > 0) { + echo "
"; + $termine = ""; + $n = 0; + foreach ($veranstaltungen_begegnungen[$v->veranstaltung_id] as $begegnung) { + if (!empty($termine)) + $termine .= ", "; + if ($n == 3) + $termine .= "
"; + $termine .= Rundenbezeichnung($begegnung[0], $v->unterteilung == 0, false) . ": " . FormatiertesDatum($begegnung[1], false, false); + $n++; + } + echo "(" . $termine . ")"; + } + ?> +
+
+ : + + mitglied_von_team_id, 0, 0, 320, 240, 'border="1"'); + if (!empty($bild)) { + ?> + +

+

+

+ + +

+ +
  + +
+
+ + + + + + " /> +
+ +
Spieler 'nachname . ", " . $spieler->vorname); ?>' in Mannschaft 'teamname); ?>': Entfernen
+ + +
+ + + + +
+ + + + + + + + + + + + +
+ : + + 1) { + ?> + Alle + + +
+ bezeichnung); ?> + +
+ : + + +
  + +
+
+ + + + + +
+ +
'bezeichnung); ?>':
+ + + + + + + + + + +
unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND_GENERATION'); ?>
+ 0) { + ?> + + + unterteilung == 0 || $veranstaltung->unterteilung == 1) { + ?> + + + + + + + + + heim_punkte != NULL || $row->gast_punkte != NULL) ? true : false; + ?> + + unterteilung == 0 || $veranstaltung->unterteilung == 1) { + ?> + + + + + + + + + + + +
unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND'); ?>punktetyp == 0 ? JText::_('COM_SPORTSMANAGER_GOALS') : JText::_('COM_SPORTSMANAGER_SETS'); ?>
+ + spieltag) { + $spieltag = $row->spieltag; + echo htmlentities_utf8(Rundenbezeichnung($spieltag, $veranstaltung->unterteilung == 0, true)); + } + ?> + + zeitpunkt)); + if ($row->verlegung_eingetragen != NULL) + echo " **"; + else if ($row->verlegt != 0) + echo " *"; + if ($row->nichtraucherschutz == 0 && ((($row->heim_nichtraucherschutz == 1 || $row->heim_nichtraucherschutz == 2 || $row->heim_nichtraucherschutz == 3) && ($row->gast_nichtraucherschutz == 3 || $row->gast_nichtraucherschutz == 7 || $row->gast_nichtraucherschutz == 8)) || (($row->heim_nichtraucherschutz == 5 || $row->heim_nichtraucherschutz == 6 || $row->heim_nichtraucherschutz == 8) && ($row->gast_nichtraucherschutz == 1 || $row->gast_nichtraucherschutz == 4 || $row->gast_nichtraucherschutz == 5)))) + echo " !"; + ?> + + tisch) && (!$ergebnis_vorhanden || ($ergebnis_vorhanden && $row->zwischenergebnis))) + echo "
" . JText::_('COM_SPORTSMANAGER_MATCH_TABLE') . ": " . htmlentities_utf8($row->tisch) . ""; + ?> +
heim_name); ?>gast_name); ?>heim_punkte . " : " . $row->gast_punkte; else echo "_ : _"?>unbestaetigtes_ergebnis_id != NULL) echo "
" . ($row->zwischenergebnis ? "live" : "unbestätigt") . ""; ?>
heim_spielpunkte . " : " . $row->gast_spielpunkte; else echo "_ : _"?>unbestaetigtes_ergebnis_id != NULL) echo "
" . ($row->zwischenergebnis ? "live" : "unbestätigt") . ""; ?>
X
+ +
'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + unterteilung == 0 || $veranstaltung->unterteilung == 1) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + + + + + +
+ unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND'); ?>: + + + + + " spieltag == 0 || (abs($row->spieltag) >= 10000 && abs($row->spieltag) < 20000)) echo 'style="visibility:hidden" '; ?>/> + spieltag) < 20000) echo 'style="visibility:hidden" '; ?>/> +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> + +
+ +   + 0) { + ?> + + + + +
+ + + + + + + + + + + + + aktion != 0 || $eingetragen != $aktion->eingetragen) { + switch ($aktion->aktion) { + case 1: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_ACCEPTED_APPOINTMENT'); + break; + case 2: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_ORIGINAL_DATE'); + break; + case 3: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_DATE_REQUESTED'); + break; + case 4: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_SHIFT_REQUESTED'); + break; + case 5: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_MODIFIED_DATE_MODERATOR'); + break; + case 6: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_PROPOSED_RESULT'); + break; + case 7: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_ACCEPTED_RESULTS'); + break; + case 8: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_MODIFIED_RESULTS'); + break; + case 9: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_LIVE_RESULTS'); + break; + case 10: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_REJECTED_SHIFT'); + break; + default: + $aktion_beschreibung = JText::_('COM_SPORTSMANAGER_PROPOSED_APPOINTMENT'); + break; + } + ?> + + + + + eingetragen; + } + else { + ?> + + + + + + + + + +
eingetragen)); ?>team_id != NULL ? $aktion->team : JText::_('COM_SPORTSMANAGER_MODERATOR')); if ($aktion->name != NULL) echo htmlentities_utf8(" (" . $aktion->name . ")"); ?>verantwortlich_team_id != NULL) echo htmlentities_utf8($aktion->verantwortlich_team); ?>zeitpunkt != NULL) echo htmlentities_utf8(FormatiertesDatum($aktion->zeitpunkt)); ?>kommentar != NULL) echo htmlentities_utf8($aktion->kommentar); ?>
+   + +
bezeichnung); ?>
+ +
+ + + + +
+ + + + + + tisch)) { + ?> + + + + + unterteilung == 0 || $veranstaltung->unterteilung == 1) && $begegnung->spieltag != NULL) { + ?> + + + + + + + + + + + + + + heim_spielpunkte != 0 || $begegnung->gast_spielpunkte != 0) { + ?> + + + + + kommentar != NULL && !empty($begegnung->kommentar)) { + ?> + + + + + + + + + + modus); + $spieltypen = isset($modus[0]) ? explode(",", $modus[0]) : array(); + $verknuepfungen = isset($modus[1]) ? explode(",", $modus[1]) : array(); + $spielpunkte_wertung_einzel = $teamspiel_modus->spielpunkte_wertung_einzel; + $spielpunkte_wertung_doppel = $teamspiel_modus->spielpunkte_wertung_doppel; + $spielpunkte_bedingung = $teamspiel_modus->spielpunkte_bedingung; + $spielernamen = $teamspiel_modus->spielernamen; + + if ($verknuepfungen != NULL) { + foreach ($verknuepfungen as $verknuepfung) { + $doppel = substr($verknuepfung, 0, 2); + $einzel1 = substr($verknuepfung, 2, 2); + $einzel2 = substr($verknuepfung, 4, 2); + $verknuepfungen_spieler[$doppel] = array($einzel1, $einzel2); + $verknuepfungen_spieler[$einzel1] = array($doppel); + $verknuepfungen_spieler[$einzel2] = array($doppel); + } + } else { + $verknuepfungen_spieler = array(); + } + + $ergebnis_bestaetigen_zulaessig = !empty($bestaetigen) && !empty($begegnung->unbestaetigtes_ergebnis_id) && !$begegnung->zwischenergebnis && $begegnung->berechtigt_fuer_team_akzeptieren; + echo "\n"; + for ($spiel_nr = 1; $spiel_nr <= count($spieltypen); $spiel_nr++) { + $spiel = NULL; + foreach ($spiele as $row) { + if ($row->teamspiel_nummer == $spiel_nr) + $spiel = $row; + } + ?> + + + + + + + + + + + +
+ : + + zeitpunkt != NULL ? $begegnung->zeitpunkt : "N/A"; ?> +
+ : + tisch); ?>
+ unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND')); ?>: + + spieltag, $veranstaltung->unterteilung == 0, true)); ?> +
+ : + + teamname); ?> +
+ : + + teamname); ?> + heimtausch) { + ?> + + +
+ : + heim_spielpunkte . ":" . $begegnung->gast_spielpunkte; ?>
+ : + + kommentar); ?> +
+ : + + +
  + +
+ (): + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + +
+ + + + + +
+
  + +
+
+ + + + class="button" /> + + /> + + /> + + + + " /> + + + + + + + " />

+ > +
+   + erster_tag != NULL ? substr($veranstaltung->erster_tag, 0, 4) : 0; + ?> +
'bezeichnung); ?>':
+ +
+ + + + +
+ + + + + + + + + + + + + + + +
+ . : + + + +
+ : + + + + vs. + +
  + +
+
+ + + + + + +
+ erster_tag != NULL ? substr($veranstaltung->erster_tag, 0, 4) : 0; + ?> +
'bezeichnung); ?>': unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND'); ?> generieren
+ +
+ + + + +
+ + + + + + unterteilung == 0 || $veranstaltung->unterteilung == 1) { + ?> + + + + + + + + + + + + + + +
+ : + + + + + + + +
+ unterteilung == 0 ? JText::_('COM_SPORTSMANAGER_GAMEDAY') : JText::_('COM_SPORTSMANAGER_ROUND'); ?>: + + + + + " spieltag == 0 || (abs($row->spieltag) >= 10000 && abs($row->spieltag) < 20000)) echo 'style="visibility:hidden" '; ?>/> + spieltag) < 20000) echo 'style="visibility:hidden" '; ?>/> +
+ + + + vs. + : + +
  + +
+
+ + + + + + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + "; + } + ?> + +
+ +
+
  + +
+
+ + + + + + " /> +
+ +
bezeichnung); ?>
+ + + + + + + + tabellenwertung) { + ?> + + + +
+ + 0) { + ?> + + + + + + + + + + + + + + + + + +
+ zeitpunkt)); ?> + + + ergebnis != 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != NULL) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != NULL) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
ergebnis_detailliert)) echo str_replace(" ", " | ", $spiel->ergebnis != 2 ? $spiel->ergebnis_detailliert : runden_detailliert_invers($spiel->ergebnis_detailliert)); ?> + ergebnis == 2) { + echo htmlentities_utf8(NichtLeererString($spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname)); + if ($spiel->heim_spieler_2_id != NULL) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname)); + } else { + echo htmlentities_utf8(NichtLeererString($spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname)); + if ($spiel->gast_spieler_2_id != NULL) + echo "
" . htmlentities_utf8(NichtLeererString($spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname)); + } + ?> +
X
+   + tabellenwertung && !empty( $ausgangsplatzierungen )) { + $anzahl_eintraege = count($ausgangsplatzierungen); + $anzahl_spalten = 1; + $anzahl_zeilen = 1; + $n = $anzahl_eintraege; + while ($n > $anzahl_spalten) { + $n -= $anzahl_spalten; + $anzahl_spalten++; + $anzahl_zeilen++; + } + + ?> + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + spieler_id, $platz > 3 ? 30 : 57, $platz > 3 ? 40 : 76, 0, 0, 'border="1" hspace="8" vspace="2"')) != NULL) + echo ""; + ?> + + + +
+ " . $row->platz . ""; + ?> +
+ + nachname) . "
" . htmlentities_utf8($row->vorname); + ?> +
" . $bild . "
+ X +
+ +
+
+ +   + saetze; + $saetze = array(); + if ($row != null && !empty($row->ergebnis_detailliert)) { + $details = explode(" ", $row->ergebnis_detailliert); + foreach ($details as $satz) { + if (empty($satz)) + continue; + array_push($saetze, explode(":", $satz)); + } + } + ?> +
bezeichnung); ?>
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ : + + + + + + +
+ : + + + + + +
+ vs. : + + + + + +
+ : + + + + +
+ +
  + +
+
+ + + + + + + " /> +
+ +
bezeichnung); ?>
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + +
+ +
:
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + erster_tag == $row->letzter_tag) echo " style=\"display:none\""; ?>> + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + " class="button" onclick="letzter_tag_anzeigen();" id="button_mehrtaegig" /> +
+ : + + + + +
+ Berechtigte für Turnier: + + + + + + "; + } + ?> + +
+ +
+
  + +
+
+ + + + + " /> + + " /> +
+ +
Turnierdisziplinen turnierbezeichnung . (!empty($turnier->turnierort) ? (" in " . $turnier->turnierort) : "") . " (" . FormatiertesDatum($turnier->erster_tag, FALSE) . " - " . FormatiertesDatum($turnier->letzter_tag, FALSE) . ")"); ?>
+ + + + + + + +
Disziplin hinzufügen
+ 0) { + ?> + + + + + + + + + + + + + + + + + + + + + + +
DisziplinRVoranm. / Endpl. /
+ disziplin); + } else { + ?> + disziplin)); ?> + + kuerzel); ?>reihenfolge); ?>voranmeldungen . " / " . $row->meldungen . " / " . $row->spiele); ?>beginn); ?>status == 0 ? JText::_('COM_SPORTSMANAGER_NO') : JText::_('COM_SPORTSMANAGER_YES')); ?>X
+ +
turnierbezeichnung . " (" . FormatiertesDatum($turnier->erster_tag, FALSE) . " - " . FormatiertesDatum($turnier->letzter_tag, FALSE) . ")"); ?>
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + turnierdisziplin_id != NULL) + array_push($ranglisten_beruecksichtigt, $rangliste->rangliste_id); + } + $n = count($ranglisten_beruecksichtigt); + } + for ($i = 0; $i <= max(3, $n); $i++) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + + + + + +
+ : + + +
+ : + + + : + +
+ + : + +
+ : + + + + + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + " /> + +
+ +
Turniervoranmeldungen exportieren turnierbezeichnung . (!empty($turnierdisziplin->turnierort) ? (" in " . $turnierdisziplin->turnierort) : "") . ": " . $turnierdisziplin->disziplin . " (" . FormatiertesDatum($turnierdisziplin->beginn) . ")"); ?>
+ +
+ + + + +
+ + + + + + + + + + + + + + typ != 0) { + ?> + + + + + + + + + + + + +
+ + + turnierbezeichnung); ?> +
+ : + + disziplin); ?> +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + +
+ +
turnierbezeichnung . (!empty($disziplin->turnierort) ? (" in " . $disziplin->turnierort) : "") . ": " . $disziplin->disziplin . " (" . FormatiertesDatum($disziplin->beginn) . ")"); ?>
+ + + + + + + + + + + + + + 0 || count( $meldungen[1] ) > 0 || count( $meldungen[2] ) > 0 || count( $meldungen[3] ) > 0 || count( $meldungen[10] ) > 0 || count( $meldungen[20] ) > 0) { + ?> + + 0 || count( $meldungen[1] ) > 0) { + ?> + + 0 || count( $meldungen[2] ) > 0) { + ?> + + 0 || count( $meldungen[3] ) > 0) { + ?> + + 0 || count( $meldungen[10] ) > 0) { + ?> + + + + +
+ + + + + +
+ + + + + + + + + + + + + + +
bezeichnung) ? $rundenstufen_details[$rundenstufe]->bezeichnung : rundenstufe($rundenstufe)); ?> + + + +
+   + + 0 || ($rundenstufe != 0 && $rundenstufe != 20 && count($spiele[$rundenstufe])) > 0) { + ?> + + + + +
+ 0) { + ?> + + + + + + + + + + + + + + + + +
+ platz) { + $platz = $meldung->platz; + echo $platz != 0 ? $platz : JText::_('COM_SPORTSMANAGER_NONE'); + } + ?> + + turniermeldung_id]); ?> + + X
+   + 0) { + $ergebnis_detailliert_anzeigen = false; + foreach ($spiele[$rundenstufe] as $spiel) { + if (!empty($spiel->ergebnis_detailliert)) { + $ergebnis_detailliert_anzeigen = true; + break; + } + } + ?> + + + + + + + + + + + + + + + + + + + + + + +
+ runde) { + $runde = $spiel->runde; + ?> + + + + + + ergebnis == 1 ? NichtLeererString(htmlentities_utf8($meldungenSpielerNamen[$spiel->heim_meldung_id])) : NichtLeererString(htmlentities_utf8($meldungenSpielerNamen[$spiel->gast_meldung_id])); ?> + + ergebnis_detailliert)) echo str_replace(" ", " | ", $spiel->ergebnis == 1 ? $spiel->ergebnis_detailliert : runden_detailliert_invers($spiel->ergebnis_detailliert)); ?>ergebnis == 1 ? htmlentities_utf8($meldungenSpielerNamen[$spiel->gast_meldung_id]) : htmlentities_utf8($meldungenSpielerNamen[$spiel->heim_meldung_id]); ?>spiel_nummer != NULL) echo $spiel->spiel_nummer; ?>X
+   + +
turnierbezeichnung . (!empty($row->turnierort) ? (" in " . $row->turnierort) : "") . ": " . $row->disziplin . " (" . FormatiertesDatum($row->beginn) . ")"); ?>
+ + + + + +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + +
+ +
turnierbezeichnung . (!empty($turnierdisziplin->turnierort) ? (" in " . $turnierdisziplin->turnierort) : "") . ": " . $turnierdisziplin->disziplin . " (" . FormatiertesDatum($turnierdisziplin->beginn) . ")"); ?>
+ +
+ + + + +
+ + + + + + typ == 1) { + ?> + + + + + + + + + + + + +
+ : + + + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + +
+ : + + + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + spieler_id != NULL) echo ' style="visibility:hidden"'; ?> /> + +
+ : + + + + + + + + + +
+ " . htmlentities_utf8(rundenstufe($rundenstufe)); + ?> + + + + : + + +
+
  + +
+
+ + + + + + + + + + + " /> +
+ +
turnierbezeichnung . (!empty($turnierdisziplin->turnierort) ? (" ".JText::_('COM_SPORTSMANAGER_IN')." " . $disziplin->turnierort) : "") . ": " . $disziplin->disziplin . " (" . FormatiertesDatum($disziplin->beginn) . ")"); ?>
+ + +
+ + + + + +
+ + 0) { + $platzierung_anzeigen = FALSE; + foreach ($meldungen[$rundenstufe] as $meldung) { + if (!empty($meldung->platz)) { + $platzierung_anzeigen = TRUE; + break; + } + } + ?> + + + + + + + + + + + + +
+ : + + + + + + + + + + + + + + + +
+ + + +
+ turniermeldung_id . "\">"; + ?> + + platz != 0 ? ($meldung->platz . ".") : ""; ?> + + typ == 0 ? NichtLeererString($meldung->verknuepft1 ? $meldung->name1 : hervorheben($meldung->name1)) : StringsZusammenfassen($meldung->verknuepft1 ? $meldung->name1 : hervorheben($meldung->name1), $meldung->verknuepft2 ? $meldung->name2 : hervorheben($meldung->name2))); + ?> +
+
+ : + + + + + + + + +
+ " . htmlentities_utf8(rundenstufe($rundenstufe)); + ?> + +
+
  + +
+
+ + + + + +
+ +
turnierbezeichnung . (!empty($turnierdisziplin->turnierort) ? (" ".JText::_('COM_SPORTSMANAGER_IN')." " . $turnierdisziplin->turnierort) : "") . ": " . $turnierdisziplin->disziplin . " (" . FormatiertesDatum($turnierdisziplin->beginn) . ")"); ?>
+ + +
+ + + + +
+ + + + + + */ + ?> + + + + + typ != 7 && $rundenstufen_details->typ != 8 && $rundenstufen_details->typ != 9)) echo ' style="display:none"'; ?>> + + + + + + + + saetze == null) echo ' style="display:none"'; ?>> + + + + + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
+ : + + +
  + +
+
+ + + + + + +
+ saetze : null; + $saetze = array(); + if ($row != null && !empty($row->ergebnis_detailliert)) { + $details = explode(" ", $row->ergebnis_detailliert); + foreach ($details as $satz) { + if (empty($satz)) + continue; + array_push($saetze, explode(":", $satz)); + } + } + ?> +
Spiel turnierbezeichnung . (!empty($disziplin->turnierort) ? (" in " . $disziplin->turnierort) : "") . ": " . $disziplin->disziplin . " (" . FormatiertesDatum($disziplin->beginn) . ")"); ?>
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ : + + +
+ : + + +
+ : + + + + +
+ + + +
+ : + + + + + + + + " runde == 0 || (abs($row->runde) >= 10000 && abs($row->runde) < 20000)) echo 'style="visibility:hidden" '; ?>/> + runde) < 20000) echo 'style="visibility:hidden" '; ?>/> + +
+ : + + +
  + +
+
+ + + + + + + " /> +
+ +
turnierbezeichnung . (!empty($disziplin->turnierort) ? (" in " . $disziplin->turnierort) : "") . ": " . $disziplin->disziplin . " (" . FormatiertesDatum($disziplin->beginn) . ")"); ?>
+ +
+ + + + +
+ + + + + + + + + + + + +
+ : + + +
+ : + + + + + + + + " = 10000 && abs($runde) < 20000)) echo 'style="visibility:hidden" '; ?>/> + /> + +
  + +
+
+ + + + + + + + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + +
+ + + +
+ : + + +
  + +
+
+ + + + +
+ +
:
+ +
+ + + + +
+ + + + + + + + +
+ + + +
  + +
+
+ + + + +
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + +
  + +
+
+ + + + +
+ +
:
+ + + + +
+ + + + + +
+ + + +
:
+   + + 0) { + ?> + + + + +
+ + + + + + + + + + +
+   + +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + +
  + +
+
+ + + + +
+ +
:
+ + + + +
+ + + + + +
+ + + +
:
+   + + 0) { + ?> + + + + +
+ + + + + + + + + + +
+   + +
:
+ + 0) { + ?> + + + + + + + + + + + + + + + + + + + + + + + + + +
()
+ + +
+ + + + + + = 2) { + ?> + > + + + + = 2) { + ?> + > + + + + = 2) { + ?> + > + + + + +
+ : + + + + /> +
+ termine" /> +
+ beschreibung)) + $termine_beschreibung_anzeigen = TRUE; + if (!empty($termin->ort)) + $termine_ort_anzeigen = TRUE; + if (!empty($termin->land)) + $termine_land_anzeigen = TRUE; + if ($termine_beschreibung_anzeigen && $termine_land_anzeigen) + break; + } + + if (!empty($termine)) { + $termine_anzahl = count($termine); + if ($termine_anzahl >= 2 && $termine[0]->datumsdifferenz < 0 && $termine[$termine_anzahl - 1]->datumsdifferenz >= 0) + $link_kommende_zu_setzen = TRUE; + else + $link_kommende_zu_setzen = FALSE; + + if ($link_kommende_zu_setzen) { + ?> + + + + +
+ + +
+ + + + + + + + + + + + + + + + + JText::_( 'COM_SPORTSMANAGER_GENERALLY' ), 1 => JText::_( 'COM_SPORTSMANAGER_SINGLES' ), 2 => JText::_( 'COM_SPORTSMANAGER_DOUBLES' )); + foreach ($termine as $termin) { + + ?> + + + + + + + + + + + + + + + + + + + + +
+ datumsdifferenz >= 0) { + ?> +
+ erster_tag, $termin->letzter_tag, TRUE, $filter_jahr)); + } else { + ?> + href="termin_id); ?>">erster_tag, $termin->letzter_tag, TRUE, $filter_jahr))); ?> + bestaetigt) { + ?> +
+ +
+ bezeichnung); + if (!empty($termin->zusaetze)) { + ?> +
zusaetze; ?> + +
+ termin_id])) { + foreach ($termineSymbole[$termin->termin_id] as $termin_symbol_id) { + if (($bild = bildHTML("terminsymbole/", $termin_symbol_id, 0, 0, 240, 240, 'border="0"')) != NULL) + echo $bild; + } + } + ?> + beschreibung); ?>ort); ?>land); ?> + ergebnisse_url)) { + echo "ergebnisse_url, "://") === false ? "http://" : "") . $termin->ergebnisse_url) . "\" target=\"_blank\">" . ($termin->ergebnisse_live ? JText::_('COM_SPORTSMANAGER_LIVE_') : "") . JText::_('COM_SPORTSMANAGER_RESULTS').""; + } + $info_dokument_dateiname = terminDokumentname($termin->termin_id); + if ($info_dokument_dateiname !== false) { + if (!empty($termin->ergebnisse_url)) + echo "
"; + echo "termin_bezug_id) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } else if (!empty($termin->url)) { + if (!empty($termin->ergebnisse_url)) + echo "
"; + echo "url, "://") === false ? "http://" : "") . $termin->url) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } + if (!empty($termin->email)) { + if ($info_dokument_dateiname !== false || !empty($termin->url)) + echo "  "; + else if (!empty($termin->ergebnisse_url)) + echo "
"; + echo JHTML::_('email.cloak', $termin->email, 1, JText::_('COM_SPORTSMANAGER_EMAIL'), 0 ); + } + ?> +
D" href="termin_id); ?>">X
+   + +
:
+ + + + +
+ + + + + + + + + + + + + + JText::_('COM_SPORTSMANAGER_ADD'), 1 => JText::_('COM_SPORTSMANAGER_CHANGING'), 2 => JText::_('COM_SPORTSMANAGER_DELETE')); + $status = array(0 => JText::_('COM_SPORTSMANAGER_ACCEPTED'), 1 => JText::_('COM_SPORTSMANAGER_ARCHIVED'), 2 => JText::_('COM_SPORTSMANAGER_APPLIED_FOR'), 3 => JText::_('COM_SPORTSMANAGER_DECLINED')); + $k = 0; + foreach ($terminaktionen as $terminaktion) { + ?> + + + + + + + + + + + +
+ aktion_zeitpunkt, true, false))); ?> + + typ]; ?> +
aktion_user_name); ?> +
+ status]); + if (!empty($terminaktion->moderation_user_id)) { + ?> +
moderation_user_name); ?> + +
+ erster_tag, $terminaktion->letzter_tag, TRUE); + if (!$terminaktion->bestaetigt) { + ?> +
+ +
+ bezeichnung); + if (!empty($terminaktion->zusaetze)) { + ?> +
zusaetze; ?> + +
ort); ?>land); ?> + ergebnisse_url)) { + echo "ergebnisse_url, "://") === false ? "http://" : "") . $terminaktion->ergebnisse_url) . "\" target=\"_blank\">" . ($terminaktion->ergebnisse_live ? JText::_('COM_SPORTSMANAGER_LIVE_') : "") . JText::_('COM_SPORTSMANAGER_RESULTS').""; + } + $info_dokument_dateiname = terminDokumentname($terminaktion->termin_id); + if ($info_dokument_dateiname !== false) { + if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo "termin_id) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } else if (!empty($terminaktion->url)) { + if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo "url, "://") === false ? "http://" : "") . $terminaktion->url) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } + if (!empty($terminaktion->email)) { + if ($info_dokument_dateiname !== false || !empty($terminaktion->url)) + echo "  "; + else if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo JHTML::_('email.cloak', $terminaktion->email, 1, JText::_('COM_SPORTSMANAGER_EMAIL'), 0 ); + } + ?> +
+ +
+ +
+ + + + +
+ + + + + + + + + + zusaetze)) { + ?> + + + + + ort)) { + ?> + + + + + land)) { + ?> + + + + + beschreibung)) { + ?> + + + + + termin_id); + if ($info_dokument_dateiname !== false) { + ?> + + + + + url)) { + ?> + + + + + email)) { + ?> + + + + + benachrichtigung_email); + if (!empty($benachrichtigung_emails)) { + ?> + + + + + ergebnisse_url)) { + ?> + + + + + + + + + + + + + + + + + + + + + aktion_kommentar)) { + ?> + + + + + + + + moderation_kommentar)) { + ?> + + + status == 2) { + ?> + + + + + + + + + + + +
+ : + + erster_tag, $terminaktion->letzter_tag, TRUE); + if (!$terminaktion->bestaetigt) + echo " (".JText::_('COM_SPORTSMANAGER_IN_PLANING').")"; + ?> +
+ : + + bezeichnung); + ?> +
+ : + + zusaetze); ?> +
+ : + + ort); ?> +
+ / + + land); ?> +
+ : + + beschreibung); ?> +
+ : + + +
+ : + + url, "://") === false) { + $termin_url_anzeige = $terminaktion->url; + $termin_url = "http://" . $terminaktion->url; + } else { + $termin_url_anzeige = substr($terminaktion->url, 0, 7) == "http://" ? substr($terminaktion->url, 7) : $terminaktion->url; + $termin_url = $terminaktion->url; + } + echo "" . htmlentities_utf8($termin_url_anzeige) . ""; + ?> +
+ : + + email, 1, $terminaktion->email, 0 ); + ?> +
+ : + + $email) { + $email_trimmed = trim($email); + echo ($index > 0 ? ", " : "") . JHTML::_('email.cloak', $email_trimmed, 1, $email_trimmed, 0 ); + } + ?> +
+ ergebnisse_live) echo JText::_('COM_SPORTSMANAGER_LIVE_'); ?>: + + ergebnisse_url, "://") === false) { + $termin_url_anzeige = $terminaktion->ergebnisse_url; + $termin_url = "http://" . $terminaktion->ergebnisse_url; + } else { + $termin_url_anzeige = substr($terminaktion->ergebnisse_url, 0, 7) == "http://" ? substr($terminaktion->ergebnisse_url, 7) : $terminaktion->ergebnisse_url; + $termin_url = $terminaktion->ergebnisse_url; + } + echo "" . htmlentities_utf8($termin_url_anzeige) . ""; + ?> +
  + +
+ : + + JText::_('COM_SPORTSMANAGER_ACCEPTED'), 1 => JText::_('COM_SPORTSMANAGER_ARCHIVED'), 2 => JText::_('COM_SPORTSMANAGER_APPLIED_FOR'), 3 => JText::_('COM_SPORTSMANAGER_DECLINED')); + echo $status[$terminaktion->status]; ?> +
+ : + + JText::_('COM_SPORTSMANAGER_ADD'), 1 => JText::_('COM_SPORTSMANAGER_CHANGING'), 2 => JText::_('COM_SPORTSMANAGER_DELETE')); + echo $aktion[$terminaktion->typ]; ?> +
+ : + + aktion_zeitpunkt, true, false) . " von " . (empty($terminaktion->aktion_user_email) ? htmlentities_utf8($terminaktion->aktion_user_name) : JHTML::_('email.cloak', $terminaktion->aktion_user_email, 1, $terminaktion->aktion_user_name, 0 )); ?> +
+ : + + aktion_kommentar)); ?> +
+ : + + moderation_zeitpunkt)) + echo JText::_('COM_SPORTSMANAGER_NOT_DONE'); + else + echo FormatiertesDatum($terminaktion->moderation_zeitpunkt, true, false) . " von " . (empty($terminaktion->moderation_user_email) ? htmlentities_utf8($terminaktion->moderation_user_name) : JHTML::_('email.cloak', $terminaktion->moderation_user_email, 1, $terminaktion->moderation_user_name, 0 )); + ?> +
+ : + + moderation_kommentar)); ?> +
  + +
+ : + + +
  + +
+
+ + status == 2 && !$externe_datenbank) { + ?> + + typ == 0 || $terminaktion->typ == 1) { + ?> + + + + + + termin_moderieren" /> + + + + +
+ +   + + + + + +
+ + + + + + + + + + + + + JText::_('COM_SPORTSMANAGER_ADD'), 1 => JText::_('COM_SPORTSMANAGER_CHANGING'), 2 => JText::_('COM_SPORTSMANAGER_DELETE')); + $status = array(0 => JText::_('COM_SPORTSMANAGER_ACCEPTED'), 1 => JText::_('COM_SPORTSMANAGER_ARCHIVED'), 2 => JText::_('COM_SPORTSMANAGER_APPLIED_FOR'), 3 => JText::_('COM_SPORTSMANAGER_DECLINED')); + $k = 0; + foreach ($terminaktionen as $terminaktion) { + ?> + + + + + + + + + + + +
+ aktion_zeitpunkt, true, false))); ?> + + typ]; ?> +
aktion_user_name); ?> +
+ status]); + if (!empty($terminaktion->moderation_user_id)) { + ?> +
moderation_user_name); ?> + +
+ erster_tag, $terminaktion->letzter_tag, TRUE); + if (!$terminaktion->bestaetigt) { + ?> +
+ +
+ bezeichnung); + if (!empty($terminaktion->zusaetze)) { + ?> +
zusaetze; ?> + +
ort); ?>land); ?> + ergebnisse_url)) { + echo "ergebnisse_url, "://") === false ? "http://" : "") . $terminaktion->ergebnisse_url) . "\" target=\"_blank\">".JText::_('COM_SPORTSMANAGER_RESULTS').""; + } + $info_dokument_dateiname = terminDokumentname($terminaktion->termin_id); + if ($info_dokument_dateiname !== false) { + if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo "termin_id) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } else if (!empty($terminaktion->url)) { + if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo "url, "://") === false ? "http://" : "") . $terminaktion->url) . "\" target=\"_blank\">". JText::_('COM_SPORTSMANAGER_INFO').""; + } + if (!empty($terminaktion->email)) { + if ($info_dokument_dateiname !== false || !empty($terminaktion->url)) + echo "  "; + else if (!empty($terminaktion->ergebnisse_url)) + echo "
"; + echo JHTML::_('email.cloak', $terminaktion->email, 1, JText::_('COM_SPORTSMANAGER_EMAIL'), 0 ); + } + ?> +
+ +
:
+ + +
+ + + + +
+ + + + + + erster_tag == $termin->letzter_tag) echo " style=\"display:none\""; ?>> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + */ + ?> + + + + + + + + + + + + + + + + + + + + + aktion_kommentar)) { + ?> + + + + + + + + + + +
+ : + + + + + " class="button" onclick="letzter_tag_anzeigen();" id="button_mehrtaegig" /> +
+ : + + + + +
+ : + + + /> +
+ : + + termin_symbol_id : 0; + ?> + + "; + } + ?> +
+ : + + bezeichnungszusatz) . "\"" . (!empty($bezeichnungszusatz->termin_zusatz_id) ? " checked" : "") . " >" . htmlentities_utf8($bezeichnungszusatz->bezeichnungszusatz) . (!empty($bezeichnungszusatz->titel) ? (" - " . htmlentities_utf8($bezeichnungszusatz->titel)) : "") . "
"; + } + if (!empty($zusaetze)) { + foreach ($zusaetze as $zusatz) { + echo "zusatz) . "\" checked >" . htmlentities_utf8($zusatz->zusatz) . "
"; + } + } + ?> + +
+ : + + +
+ / + + + /> +
+ Beschreibung: + + +
+ : + + termin_id) : false; + ?> + />URL: +
+ + : +
+ : + + : + +
+ : + + +
+ : + + +
+ Ergebnisse (URL): + + + +
+ Informationsstand: + + +
+ : + + aktion_kommentar)); ?> +
+ Kommentar an : + + +
  + +
+
+ + " class="button" onclick="if (document.adminForm.bezeichnung_id.value != '0') document.adminForm.bezeichnung.value = document.adminForm.bezeichnung_id.options[document.adminForm.bezeichnung_id.selectedIndex].text; if (document.adminForm.land_id.value != '0') document.adminForm.land.value = document.adminForm.land_id.options[document.adminForm.land_id.selectedIndex].text; return true;" /> + + termin_save" /> + " /> + " /> + + + +
+ +
: Entfernen
+ +
+ + + + +
+ + + + + + + + + + zusaetze)) { + ?> + + + + + ort)) { + ?> + + + + + land)) { + ?> + + + + + beschreibung)) { + ?> + + + + + termin_id); + if ($info_dokument_dateiname !== false) { + ?> + + + + + url)) { + ?> + + + + + email)) { + ?> + + + + + ergebnisse_url)) { + ?> + + + + + + + + + + + + + + + +
+ : + + erster_tag, $terminaktion->letzter_tag, TRUE); + if (!$terminaktion->bestaetigt) + echo " (".JText::_('COM_SPORTSMANAGER_IN_PLANING').")"; + ?> +
+ : + + bezeichnung); + ?> +
+ : + + zusaetze); ?> +
+ : + + ort); ?> +
+ / + + land); ?> +
+ : + + beschreibung); ?> +
+ : + + +
+ : + + url, "://") === false) { + $termin_url_anzeige = $terminaktion->url; + $termin_url = "http://" . $terminaktion->url; + } else { + $termin_url_anzeige = substr($terminaktion->url, 0, 7) == "http://" ? substr($terminaktion->url, 7) : $terminaktion->url; + $termin_url = $terminaktion->url; + } + echo "" . htmlentities_utf8($termin_url_anzeige) . ""; + ?> +
+ : + + email, 1, $terminaktion->email, 0 ); + ?> +
+ ergebnisse_live) echo JText::_('COM_SPORTSMANAGER_LIVE_'); ?>: + + ergebnisse_url, "://") === false) { + $termin_url_anzeige = $terminaktion->ergebnisse_url; + $termin_url = "http://" . $terminaktion->ergebnisse_url; + } else { + $termin_url_anzeige = substr($terminaktion->ergebnisse_url, 0, 7) == "http://" ? substr($terminaktion->ergebnisse_url, 7) : $terminaktion->ergebnisse_url; + $termin_url = $terminaktion->ergebnisse_url; + } + echo "" . htmlentities_utf8($termin_url_anzeige) . ""; + ?> +
  + +
+ : + + +
  + +
+
+ + " class="button" onclick="if (document.adminForm.bezeichnung_id.value != '0') document.adminForm.bezeichnung.value = document.adminForm.bezeichnung_id.options[document.adminForm.bezeichnung_id.selectedIndex].text; if (document.adminForm.land_id.value != '0') document.adminForm.land.value = document.adminForm.land_id.options[document.adminForm.land_id.selectedIndex].text; return true;" /> + + termin_remove" /> + + +
+ +
:
+ +
+ + + + + + + + +
+ +
+
+ + + termin_save" /> + +   +
+ +
:
+ + + + + + + +
+ + + + + + + + + + + +
bezeichnung)); ?>X
+ +
Termine Veranstaltung:
+ +
+ + + + +
+ + + + + + + + + + + + + + +
+ : + + +
+ +
+
  + +
+
+ + + + termine_bezeichnung_save" /> + " /> +
+ +
:
+ + + + + + + +
+ + + + + + + + + + + + + +
bezeichnungszusatz)); ?>titel)); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + +
+ /: + + +
+ + +
+ : + + +
  + +
+
+ + + + termine_bezeichnungszusatz_save" /> + " /> +
+ +
:
+ + + + + + + +
+ + + + + + + + + + + +
bundesland)); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + +
+ : + + +
+ +
+
  + +
+
+ + + + termine_bundesland_save" /> + " /> +
+ +
:
+ + + + + + + +
+ + + + + + + + + + + +
land)); ?>X
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + +
+ : + + +
+ +
+
  + +
+
+ + + + termine_land_save" /> + " /> +
+ +
:
+ + + + + + + +
+ + + + + + + + + + + + + + + +
symboltitel)); ?> + termin_symbol_id, 0, 0, 240, 240, 'border="0"')) != NULL) + echo $bild; + ?> + status == 0 ? JText::_('COM_SPORTSMANAGER_NO') : JText::_('COM_SPORTSMANAGER_YES')); ?>
+ +
:
+ +
+ + + + +
+ + + + + + + + + + + + + + + + +
+ : + + +
+ : + + termin_symbol_id, 0, 0, 240, 240, 'border="0"')) != NULL) { + ?> + +

+

+

+ + +

+ +
+ : + + +
  + +
+
+ + + + termine_symbol_save" /> + " /> +
+ diff --git a/src/structure/components/com_sportsmanager/views/sportsmanager/view_ticker.php b/src/structure/components/com_sportsmanager/views/sportsmanager/view_ticker.php new file mode 100644 index 0000000..af964d3 --- /dev/null +++ b/src/structure/components/com_sportsmanager/views/sportsmanager/view_ticker.php @@ -0,0 +1,2287 @@ +begegnung_id; + $zeitpunkt_ts = strtotime($begegnung->zeitpunkt); + $datum = date("j. M", $zeitpunkt_ts); + $zeit = date("H:i", $zeitpunkt_ts); + // if ($begegnung->gerade_aktualisiert) + if (false) + $status = 'updated'; + elseif ($begegnung->zwischenergebnis) + $status = 'livenow'; + elseif (!empty($begegnung->heim_spielpunkte) || !empty($begegnung->gast_spielpunkte)) + $status = 'finished'; + elseif ($begegnung->verlegung_eingetragen) + continue; + else + $status = 'upcoming'; + $ist_spieltag = false; + $spieltag = Rundenbezeichnung($begegnung->spieltag, $begegnung->unterteilung == 0, false, true); + $gewinner = $begegnung->heim_spielpunkte > $begegnung->gast_spielpunkte ? 1 : ($begegnung->heim_spielpunkte < $begegnung->gast_spielpunkte ? 2 : 0); + $heim_name = $begegnung->heim_name; + $gast_name = $begegnung->gast_name; + $heim_spielpunkte = $begegnung->heim_spielpunkte; + $gast_spielpunkte = $begegnung->gast_spielpunkte; + $heim_logo = bildHTML("mannschaften", $begegnung->heim_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($heim_logo) && !empty($begegnung->heim_verein_id)) + $heim_logo = bildHTML("vereine", $begegnung->heim_verein_id, 30, 30, 0, 0, 'border="0"'); + $gast_logo = bildHTML("mannschaften", $begegnung->gast_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($gast_logo) && !empty($begegnung->gast_verein_id)) + $gast_logo = bildHTML("vereine", $begegnung->gast_verein_id, 30, 30, 0, 0, 'border="0"'); + $matchez[] = array('id' => $id, 'status' => $status, 'day' => $datum, 'hour' => $zeit, 'round' => $spieltag, 'winner' => $gewinner, 'team1' => $heim_name,'team2' => $gast_name, 'logo1' => $heim_logo, 'logo2' => $gast_logo, 'score1' => $heim_spielpunkte, 'score2' => $gast_spielpunkte); + } + HTML_sportsmanager_ticker::veranstaltungenTickerPrintable($matchez, $currentpage); // feeding the array to the function it prints the right table + } elseif ($type == "groups") { // when right side groups have to be updated the script is called with type=groups + HTML_sportsmanager_ticker::veranstaltungenTickerPrintRightheader($view_right, $type); + ?> + + $veranstaltung) { + if ($index == $veranstaltung_elimination_index) + continue; + $teamz = array(); + $punkte_anzeigen = false; + if (count($tabellen[$index]) > 0 && $tabellen[$index][0]->gesamtpunkte != NULL) + $punkte_anzeigen = true; + foreach ($tabellen[$index] as $mannschaft) { + $logo = bildHTML("mannschaften", $mannschaft->team_id, 17, 17, 0, 0, 'border="0"'); + if (empty($logo) && !empty($mannschaft->verein_id)) + $logo = bildHTML("vereine", $mannschaft->verein_id, 17, 17, 0, 0, 'border="0"'); + if ($punkte_anzeigen) + $teamz[] = array('place' => $mannschaft->platz, 'logo' => $logo, 'name' => $mannschaft->teamname, 'score' => floatval($mannschaft->gesamtpunkte)); + else + $teamz[] = array('place' => $mannschaft->platz, 'logo' => $logo, 'name' => $mannschaft->teamname); + } + + HTML_sportsmanager_ticker::veranstaltungenTickerPrintgtable($teamz, $veranstaltung->bezeichnung); + } + ?> + + 'upcoming', 'winner' => 0, 'team1' => '', 'team2' => '', 'blogo1' => null, 'blogo2' => null, 'slogo1' => null, 'slogo2' => null, 'score1' => '', 'score2' => '', 'placeholder' => true); + } + foreach ($begegnungen as $begegnung) { + $spieltag = $begegnung->spieltag; + if ($spieltag == 19999 || $spieltag == 29898) // Finale + $begegnung_index = 6; + elseif ($spieltag == 19998 || $spieltag == 29896) // Platz 3 + $begegnung_index = 7; + elseif ($spieltag == 19997 || $spieltag == 29698) { // Halb + if (isset($matchez[4]['placeholder'])) + $begegnung_index = 4; + else + $begegnung_index = 5; + } elseif ($spieltag == 19996 || $spieltag == 29298) { // Viertel + if (isset($matchez[0]['placeholder'])) + $begegnung_index = 0; + elseif (isset($matchez[1]['placeholder'])) + $begegnung_index = 1; + elseif (isset($matchez[2]['placeholder'])) + $begegnung_index = 2; + else + $begegnung_index = 3; + } else + continue; + // if ($begegnung->gerade_aktualisiert) + if (false) + $status = 'updated'; + elseif ($begegnung->zwischenergebnis) + $status = 'livenow'; + elseif (!empty($begegnung->heim_spielpunkte) || !empty($begegnung->gast_spielpunkte)) + $status = 'finished'; + elseif ($begegnung->verlegung_eingetragen) + continue; + else + $status = 'upcoming'; + $gewinner = $begegnung->heim_spielpunkte > $begegnung->gast_spielpunkte ? 1 : ($begegnung->heim_spielpunkte < $begegnung->gast_spielpunkte ? 2 : 0); + $heim_name = $begegnung->heim_name; + $gast_name = $begegnung->gast_name; + $heim_spielpunkte = $begegnung->heim_spielpunkte; + $gast_spielpunkte = $begegnung->gast_spielpunkte; + $heim_logo = bildHTML("mannschaften", $begegnung->heim_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($heim_logo) && !empty($begegnung->heim_verein_id)) + $heim_logo = bildHTML("vereine", $begegnung->heim_verein_id, 30, 30, 0, 0, 'border="0"'); + $gast_logo = bildHTML("mannschaften", $begegnung->gast_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($gast_logo) && !empty($begegnung->gast_verein_id)) + $gast_logo = bildHTML("vereine", $begegnung->gast_verein_id, 30, 30, 0, 0, 'border="0"'); + $heim_logo_klein = bildHTML("mannschaften", $begegnung->heim_team_id, 17, 17, 0, 0, 'border="0"'); + if (empty($heim_logo_klein) && !empty($begegnung->heim_verein_id)) + $heim_logo_klein = bildHTML("vereine", $begegnung->heim_verein_id, 17, 17, 0, 0, 'border="0"'); + $gast_logo_klein = bildHTML("mannschaften", $begegnung->gast_team_id, 17, 17, 0, 0, 'border="0"'); + if (empty($gast_logo_klein) && !empty($begegnung->gast_verein_id)) + $gast_logo_klein = bildHTML("vereine", $begegnung->gast_verein_id, 17, 17, 0, 0, 'border="0"'); + $matchez[$begegnung_index] = array('status' => $status, 'winner' => $gewinner, 'team1' => $heim_name,'team2' => $gast_name, 'blogo1' => $heim_logo, 'blogo2' => $gast_logo, 'slogo1' => $heim_logo_klein, 'slogo2' => $gast_logo_klein, 'score1' => $heim_spielpunkte, 'score2' => $gast_spielpunkte); + } + // Adjust order so the tree fits + // 1/4 Finals: matchez[0..3], 1/2 Finals: matchez[4..5], Final: matchez[6], 3rd Place: matchez[7] + $tmatchez = $matchez; + for ($i = 4; $i <= 5; $i++) { + $offset = 0; + if (!isset($tmatchez[$i]['placeholder'])) { + for ($j = 0; $j <= 3 && $offset < 2; $j++) { + if (!isset($tmatchez[$j]['placeholder'])) { + if ($tmatchez[$i]['team1'] == $tmatchez[$j]['team1'] || $tmatchez[$i]['team1'] == $tmatchez[$j]['team2'] || $tmatchez[$i]['team2'] == $tmatchez[$j]['team1'] || $tmatchez[$i]['team2'] == $tmatchez[$j]['team2']) { + $matchez[($i - 4) * 2 + $offset++] = $tmatchez[$j]; + } + } + } + } + while ($offset < 2) + $matchez[($i - 4) * 2 + $offset++] = array('status' => 'upcoming', 'winner' => 0, 'team1' => '', 'team2' => '', 'blogo1' => null, 'blogo2' => null, 'slogo1' => null, 'slogo2' => null, 'score1' => '', 'score2' => '', 'placeholder' => true); + } + + HTML_sportsmanager_ticker::veranstaltungenTickerPrintRightheader($view_right,$type); + HTML_sportsmanager_ticker::veranstaltungenTickerPrinteliminations($matchez); // called to display right elimination table + + $teamz = array(); + if ($veranstaltung_elimination_index != -1) { + $platz = 1; + foreach ($tabellen[$veranstaltung_elimination_index] as $mannschaft) { + if ($mannschaft->platz > 3 || $mannschaft->platz != $platz) + break; + $groesse = ($n == 0) ? 30 : 17; + $logo = bildHTML("mannschaften", $mannschaft->team_id, $groesse, $groesse, 0, 0, 'border="0"'); + if (empty($logo) && !empty($mannschaft->verein_id)) + $logo = bildHTML("vereine", $mannschaft->verein_id, $groesse, $groesse, 0, 0, 'border="0"'); + $teamz[] = array('place' => $mannschaft->platz, 'logo' => $logo, 'name' => $mannschaft->teamname); + $platz++; + } + if (count($teamz) != 3) + $teamz = array(); + } + + HTML_sportsmanager_ticker::veranstaltungenTickerPrintop3($teamz); // called to display right top 3 results + } elseif ($type == "finalranking") { + $teamz = array(); + $veranstaltung_titel = JText::_('COM_FINAL_RANKING'); + if ($veranstaltung_elimination_index != -1) { + foreach ($tabellen[$veranstaltung_elimination_index] as $mannschaft) { + $logo = bildHTML("mannschaften", $mannschaft->team_id, 17, 17, 0, 0, 'border="0"'); + if (empty($logo) && !empty($mannschaft->verein_id)) + $logo = bildHTML("vereine", $mannschaft->verein_id, 17, 17, 0, 0, 'border="0"'); + $teamz[] = array('place' => $mannschaft->platz, 'logo' => $logo, 'name' => $mannschaft->teamname); + } + $veranstaltung_titel = $veranstaltungen[$veranstaltung_elimination_index]->bezeichnung; + } + + HTML_sportsmanager_ticker::veranstaltungenTickerPrintRightheader($view_right,$type); + ?> + + + + heim_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($heim_logo) && !empty($begegnung->heim_verein_id)) + $heim_logo = bildHTML("vereine", $begegnung->heim_verein_id, 30, 30, 0, 0, 'border="0"'); + $gast_logo = bildHTML("mannschaften", $begegnung->gast_team_id, 30, 30, 0, 0, 'border="0"'); + if (empty($gast_logo) && !empty($begegnung->gast_verein_id)) + $gast_logo = bildHTML("vereine", $begegnung->gast_verein_id, 30, 30, 0, 0, 'border="0"'); + // HTML_sportsmanager_ticker::veranstaltungenTickerPrintGameDetails($begegnungen[0], $begegnung_spiele); + ?> + + + + + + + + + + + + + +
heim_spielpunkte > $begegnung->gast_spielpunkte) echo "class=\"finished_winner\" "; ?>id="team_heim">heim_name); ?> +
+ +
zwischenergebnis && empty($begegnung->heim_spielpunkte) && empty($begegnung->gast_spielpunkte)) echo "--|--"; else echo $begegnung->heim_spielpunkte . ":" . $begegnung->gast_spielpunkte; ?>
+ +
+
heim_spielpunkte < $begegnung->gast_spielpunkte) echo "class=\"finished_winner\" "; ?>id="team_gast">gast_name); ?>
zeitpunkt); ?> - spieltag, $begegnung->unterteilung == 0, false, false); ?>
+ + + + + + + + + +
+ + + teamspiel_heim_punkte > $spiel->teamspiel_gast_punkte) + $sieger = 1; + elseif ($spiel->teamspiel_heim_punkte < $spiel->teamspiel_gast_punkte) + $sieger = 2; + else + $sieger = 0; + ?> + "> + + + + + + + +
"; ?>heim_spieler_1_id)) echo $spiel->heim_spieler_1_nachname . ", " . $spiel->heim_spieler_1_vorname; if (!empty($spiel->heim_spieler_2_id)) echo "
" . $spiel->heim_spieler_2_nachname . ", " . $spiel->heim_spieler_2_vorname;?>"; ?>
teamspiel_heim_punkte != 0 || $spiel->teamspiel_gast_punkte != 0) echo $spiel->teamspiel_heim_punkte . ":" . $spiel->teamspiel_gast_punkte; ?>"; ?>gast_spieler_1_id)) echo $spiel->gast_spieler_1_nachname . ", " . $spiel->gast_spieler_1_vorname; if (!empty($spiel->gast_spieler_2_id)) echo "
" . $spiel->gast_spieler_2_nachname . ", " . $spiel->gast_spieler_2_vorname;?>"; ?>
+
+ addScript(JURI::root(TRUE).'/components/com_sportsmanager/js/jquery.min.js'); + $document->addStyleSheet(SportsManagerURL("&task=veranstaltungen_ticker_css")); + ?> + + +
+
+
+

LIVE-TICKER

+ Home +
+
+ +
+
+ +
+ +
+ +
+ +
+
SEE QUALIFICATION ROUND
+
+
+
+

TABELLE

+
+ + +
+ + + +
+
+ + + getTemplate().DIRECTORY_SEPARATOR, JPATH_BASE.DIRECTORY_SEPARATOR ); + foreach ($dirs as $dir ) { + $icon = $dir . 'favicon.ico'; + if (file_exists( $icon )) { + $path = str_replace( JPATH_BASE . DIRECTORY_SEPARATOR, '', $dir ); + $path = str_replace( '\\', '/', $path ); + $favicon_url = JURI::base(true).'/'.$path . 'favicon.ico'; + break; + } + } + ?> + + + + + Livescore Ticker + '; ?> + " rel="stylesheet" type="text/css" /> + + + + + + + +
+
+ +
+ +
onClick="window.open('');">
+ +
+

LIVE-TICKER

+
+ Home +
+
+ +
+
+ +
+ + +
+
+
+
+

TABELLEN

+
+
+
+
+
+
+
+ + + + + body{ + background: #767676; + font-family:Verdana, Geneva, sans-serif; + padding: 2px; + margin:0px; +} + +a{ + outline: 0; +} + +#wrapper { + max-width: 1149px; + min-width: 490px; + margin-left:auto; + margin-right:auto; + position: relative; + padding-right:481px; + /*background: url(left_background_pad.png) top left no-repeat;*/ + +} + +#left_page_rround{ + + width: 6px; + height: 720px; + top:0px; + right:0px; + position: absolute; +} + +#left_page { + width: 100%; + float: left; + position: relative; + /*background: url(right_background_pad.png) top right no-repeat ;*/ +} + +#right_page { + width: 478px; + overflow: hidden; + position: absolute; + top: 0px; + right: 0px; + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; + behavior: url(components/com_sportsmanager/views/sportsmanager/border-radius.htc); + background: #DADEDF; /*url(right_page_background.png) top left no-repeat;*/ + +} + +#left_page_header { + width: 300px; + height: 55px; + float: left; + +} + +h1#pagetitle_text { + font-size:26px; + color: #fff; + float:left; + margin-top: 10px; + margin-left: 20px; + text-decoration:none; + font-weight:bold; + text-transform:uppercase; + margin-bottom: 0px; + z-index: 20; + position: relative; +} + +a#homeicon { + + background: url(homeicon.jpg) no-repeat; + height: 20px; + width: 66px; + float: right; + text-decoration:none; + text-align:right; + color: #666; + font-size: 14px; + line-height: 20px; + font-weight:bold; + margin-top: 15px; + margin-right: 20px; + padding-top: 1px; +} + +#left_menu { + + width: 800px; + display:block; + text-align: left; + +} +#table_matches { + width: 100%; + display:block; +} +#l_menu{ + padding-left: 16px; + margin: 0px; + z-index: 9995; + position:relative; +} +#left_menu ul li a span{ + + + padding: 4px 4px; + text-decoration:none; + display: inline; + font-size:14px; + font-family:Verdana, Geneva, sans-serif; + color:#ffffff; + cursor:pointer; + +} + +#left_menu ul li#all_games { + + margin-right: 20px; + +} + +#left_menu ul li{ + + background:url(right_button.png) top right no-repeat; + padding: 1px 2px 1px 0px; + display: block; + margin-right: 8px; + float:left; + +} + +#left_menu ul li a{ + + background:url(left_button.png) top left no-repeat; + padding: 1px 0px; + color:#FFF; + text-decoration:none; + cursor:pointer; + padding-left: 2px; + +} + +#left_menu ul li#finished a span{ + +} +#left_menu ul li#finished { + background:url(right_button_fin.png) top right no-repeat; +} + +#left_menu ul li#finished a{ + background:url(left_button_fin.png) top left no-repeat; +} + +#left_menu ul li#running a span{ + +} +#left_menu ul li#running { + background:url(right_button_run.png) top right no-repeat; +} + +#left_menu ul li#running a{ + background:url(left_button_run.png) top left no-repeat; +} + +#left_menu ul li#upcoming a span{ + +} +#left_menu ul li#upcoming { + background:url(right_button_upc.png) top right no-repeat; +} + +#left_menu ul li#upcoming a{ + background:url(left_button_upc.png) top left no-repeat; +} + + +#left_menu ul li:hover a span{ + + + padding: 4px 4px; + text-decoration:none; + display: inline; + font-size:14px; + font-family:Verdana, Geneva, sans-serif; + color:#ffffff; + cursor:pointer; + +} + +#left_menu ul li:hover,#left_menu ul li.active,#left_menu ul li#finished:hover,#left_menu ul li#finished.active,#left_menu ul li#upcoming:hover,#left_menu ul li#upcoming.active,#left_menu ul li#running:hover,#left_menu ul li#running.active{ + + background:url(right_button_hover.png) top right no-repeat; + padding: 1px 2px 1px 0px; + display: inline; + margin-right: 8px; + +} + +#left_menu ul li:hover a,#left_menu ul li.active a,#left_menu ul li#finished:hover a,#left_menu ul li#finished.active a,#left_menu ul li#upcoming:hover a,#left_menu ul li#upcoming.active a,#left_menu ul li#running:hover a,#left_menu ul li#running.active a{ + + background:url(left_button_hover.png) top left no-repeat; + padding: 1px 0px; + color:#FFF; + text-decoration:none; + cursor:pointer; + padding-left: 2px; + +} + +table#tbl { + width:100%; +} +#tbl tr.updated td { + + border-bottom: 1px solid #fa9917; + height: 45px; +} +tr.updated>:first-child { + +} +tr.updated>:last-child { + +} + +#tbl tr.livenow td { + + border-bottom: 1px solid #007f3d; + height: 45px; +} +tr.livenow>:first-child { + +} +tr.livenow>:last-child { + +} +#tbl th { + font-family:Verdana, Geneva, sans-serif; + font-size: 14px; + text-decoration:none; + color:#393939; + height:25px; + text-align: center; + background-color:#c9cfd0; +} + +#tbl tr td { + font-family:Verdana, Geneva, sans-serif; + font-size:14px; + color: #656565; + text-align: center; + height: 44px; +} +#tbl tr td.matchdate{ + height: 25px; + text-align:left; + font-weight:bold; + font-size: 12px; + padding-left: 10px; + color: #fff; +} + +#tbl tr.amatch{ + cursor: pointer; +} + +#detailedresults #tbl tr td{ + font-size: 12px; +} + +#detailedresults #tbl tr.odd td{ + background-color: #f8f8f8; + text-align: center; +} + +#detailedresults #tbl tr.even td{ + background-color: #fdfdfd; + text-align: center; +} + +#detailedresults #tbl tr td.num{ + width: 50px; +} + +#detailedresults #tbl tr td.heim{ + width: 150px; +} + +#detailedresults #tbl tr td.ergeb{ + width: 80px; + font-size: 14px; + font-weight: bold; + color: #c42424; + text-decoration: none; +} + +#detailedresults #tbl tr td.ergeb a{ + + } + +#detailedresults #tbl tr td.gast{ + width: 150px; +} +#tbl tr.tablehead td{ + height: 25px; + font-weight: bold; + background-color: #C9CFD0; + font-size: 12px; +} +tr.finished.odd { + background-color:#f1f2f2; +} + +tr.finished.even { + background-color:#eaecec; +} + +tr.updated { + background-color:#ffeed7; +} + + +tr.livenow { + background-color:#bcf0d5; + border:10px solid #007f3d; +} + +tr.upcoming.odd { + background-color:#dde8f3; +} +tr.upcoming.even { + background-color:#d1e0ef; +} + +#tbl tr td.finished_winner { + color: #393939; + font-weight:bold; +} + +#match_round { + + min-width: 51px; + height: 25px; + text-align: center; + background-image:url(match_status.png); + background-position: center center; + background-repeat: no-repeat; +} + +#date_time { + min-width: 51px; +} +#match_status_finished { + min-width: 46px; + height: 19px; + background-image:url(fin_icon.png); + background-position: center center; + background-repeat: no-repeat; + +} + +#match_status_updated{ + min-width: 46px; + height: 19px; + background-image:url(upd_icon.png); + background-position: center center; + background-repeat: no-repeat; +} + +#match_status_livenow { + min-width: 46px; + height: 19px; + background-image:url(live_icon.png); + background-position: center center; + background-repeat: no-repeat; +} + +#match_status_upcoming { + min-width: 46px; + height: 19px; + background-image:url(upc_icon.png); + background-position: center center; + background-repeat: no-repeat; +} + + +tr.last_row { + background-color:#c9cfd0; + height:20px; +} + +#tbl tr td#last_row { + background-color:#c9cfd0; + height: 25px; +} + +#team_heim { + +} + +#team_gast { + + +} + +#match_resultat { + width:150px; + margin-left:auto; + margin-right: auto; +} + +#team_heim_logo { + width: 30px; + height: 30px; + float:left; + margin-right: 5px; +} + +tr.finished.odd #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + font-weight:bold; + text-align:center; + color: #c42424; + padding-top: 3px; + padding-bottom: 2px; +} + +tr.finished.even #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + font-weight:bold; + text-align:center; + color: #c42424; + padding-top: 3px; + padding-bottom: 2px; +} + +tr.updated #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + font-weight:bold; + text-align:center; + color: #fa9917; + padding-top: 3px; + padding-bottom: 2px; +} + +tr.livenow #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + font-weight:bold; + text-align:center; + color: #007f3d; + padding-top: 3px; + padding-bottom: 2px; +} + +tr.upcoming.odd #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + text-align:center; + color: #3a3a3a; + padding-top: 3px; + padding-bottom: 2px; +} + +tr.upcoming.even #resultat_holder { + width: 78px; + height: 25px; + background:url(result_holder.png) center center no-repeat; + float:left; + font-size: 19px; + font:Verdana, Geneva, sans-serif; + text-align:center; + color: #3a3a3a; + padding-top: 3px; + padding-bottom: 2px; +} + +#team_gast_logo { + width: 30px; + height: 30px; + float:left; + margin-left: 5px; +} + +#combobox { + width: 100px; + padding-left: 16px; + padding-top: 8px; + float:left; + margin-top: 10px; +} + +#results_button { + width: 280px; + background:url(see_results_btn_right.png) right center no-repeat; + margin-right: 46px; + float:right; + font-family:Verdana, Geneva, sans-serif; + font-size: 14px; + color:#fff; + font-weight:bold; + text-align:center; + cursor: pointer; + padding-right: 11px; + margin-top: 10px; + +} +#results_button_right{ + height: 30px; + padding-top: 16px; + background:url(see_results_btn.png) left center no-repeat; + padding-left: 11px; +} +#right_page_header { + width: 460px; + height: 54px; + +} + +#right_menu { + + width: 460px; + display:block; + text-align: left; + +} + +#r_menu{ + padding-left: 23px; + margin: 0px; +} +#right_menu ul li a span{ + + + padding: 4px 4px; + text-decoration:none; + display: inline; + font-size:14px; + font-family:Verdana, Geneva, sans-serif; + color:#ffffff; + cursor:pointer; + +} + +#right_menu ul li#eliminations { + + margin-right: 134px; + +} + +#right_menu ul li{ + + background:url(right_button.png) top right no-repeat; + padding: 1px 2px 2px 0px; + display: block; + margin-right: 8px; + float:left; + +} + +#right_menu ul li a{ + + background:url(left_button.png) top left no-repeat; + padding: 1px 0px 2px 2px; + color:#FFF; + text-decoration:none; + cursor:pointer; +} + + +#right_menu ul li#finalranking a span{ + +} +#right_menu ul li#finalranking { + background:url(right_button_fin.png) top right no-repeat; +} + +#right_menu ul li#finalranking a{ + background:url(left_button_fin.png) top left no-repeat; +} + + +#right_menu ul li:hover a span{ + + + padding: 4px 4px; + text-decoration:none; + display: inline; + font-size:14px; + font-family:Verdana, Geneva, sans-serif; + color:#ffffff; + cursor:pointer; + +} + +#right_menu ul li:hover,#right_menu ul li.active, #right_menu ul li#finalranking:hover,#right_menu ul li#finalranking.active{ + + background:url(right_button_hover.png) top right no-repeat; + padding: 1px 2px 2px 0px; + display: inline; + margin-right: 8px; + +} + +#right_menu ul li:hover a,#right_menu ul li.active a, #right_menu ul li#finalranking:hover a,#right_menu ul li#finalranking.active a{ + + background:url(left_button_hover.png) top left no-repeat; + padding: 1px 0px 2px 2px; + color:#FFF; + text-decoration:none; + cursor:pointer; + padding-left: 2px; + +} +#chart_matches { + + width: 460px; + height: 500px; + display:block; + +} + +.grey_button{ + background:#C9CFD0; + width:153px; + height:22px; + text-align:center; + cursor:pointer; + float:left; + +} +.grey_button a{ + font-size:14px; + font-family:Verdana, Geneva, sans-serif; + color:#393939; + text-decoration:none; + +} +#tab_groups{ + background:url(tab_groups.png) top left no-repeat; + width:105px; + height:20px; + position:absolute; + top:57px; + left:23px; + padding-left: 9px; + cursor:pointer; +} +#tab_elimination{ + background:url(tab_groups.png) top left no-repeat; + width:105px; + height:20px; + position:absolute; + top:57px; + left:131px; + padding-left: 9px; + cursor:pointer; +} +#tab_elimination:hover,#tab_groups:hover{ + background:url(tab_eliminations.png) top left no-repeat; +} +#tab_groups a{ + text-decoration:none; + font-size:14px; + color:#FFF; +} +#tab_elimination a{ + text-decoration:none; + font-size:14px; + color:#FFF; +} +#heading{ + background-color:#c9cfd0; + +} +#heading td{ + font-family:Verdana, Geneva, sans-serif; + font-size:14px; + color:#393939; + padding: 2px 10px 2px 10px; +} +#heading td#points{ + padding-left: 40px; + padding-right: 40px; +} +.groups td{ + font-family:Verdana, Geneva, sans-serif; + font-size:14px; + color:#000; + padding: 2px 20px 2px 20px; + text-align:center; +} +table.groups{ + width: 460px; +} +#groups2{ + padding-top: 0px; + display: block; + overflow-y: scroll; +} + +#groups2.matchdetail{ + overflow: hidden; +} + +#scheme{ + background:url(sheme1.png) top left no-repeat; + width:456px; + margin-left: 2px; + height:465px; + position:relative; + font-family:Verdana, Geneva, sans-serif; + clear: both; +} +#winner_area{ + width:455px; +} +.field_team{ + width:140px; + height:30px; + font-size:12px; + color:#6f6f6f; + padding-top:2px; +} +.field_team img{ + margin-left: 2px; + margin-top: 0px; + margin-right: 2px; + float:left; + +} +#team1{ + position:absolute; + top:9px; + left:8px; +} +.field_team span{ + float:left; + width: 105px; +} +#team2{ + position:absolute; + top:68px; + left:8px; +} +.field_score{ + background:#c0d3eb; + width:109px; + height:21px; + padding-left:27px; + padding-top: 5px; + border-left:1px solid #c0d3eb; + border-right:1px solid #c0d3eb; +} +#result{ + font-family:Verdana, Geneva, sans-serif; + width:46px; + height:14px; + border:1px solid #e8e8e8; + background-color:#FFF; + float:left; + margin-left: 4px; + margin-right: 4px; + text-align:center; + font-size:12px; + color:#000; + font-weight:bold; +} +#result1{ + position:absolute; + top:42px; + left:9px; +} +#result2{ + position:absolute; + top:160px; + left:9px; +} +#result3{ + position:absolute; + top:278px; + left:9px; +} +#result4{ + position:absolute; + top:397px; + left:9px; +} +#result5{ + position:absolute; + top:101px; + left:160px; +} +#result6{ + position:absolute; + top:342px; + left:160px; +} +#result7{ + position:absolute; + top:221px; + left:311px; +} +#result8{ + position:absolute; + top:397px; + left:311px; +} +#team3{ + position:absolute; + top:126px; + left:8px; +} +#team4{ + position:absolute; + top:187px; + left:8px; +} +#team5{ + position:absolute; + top:244px; + left:8px; +} +#team6{ + position:absolute; + top:303px; + left:8px; +} +#team7{ + position:absolute; + top:363px; + left:8px; +} +#team8{ + position:absolute; + top:422px; + left:8px; +} +#team9{ + position:absolute; + top:68px; + left:159px; +} +#team10{ + position:absolute; + top:127px; + left:159px; +} +#team11{ + position:absolute; + top:310px; + left:159px; +} +#team12{ + position:absolute; + top:368px; + left:159px; +} +#team13{ + position:absolute; + top:187px; + left:310px; +} +#team14{ + position:absolute; + top:246px; + left:310px; +} +#team15{ + position:absolute; + top:363px; + left:310px; +} +#team16{ + position:absolute; + top:422px; + left:310px; +} +.strike_through span{ + text-decoration: line-through; +} +.winner_bold{ + font-weight:bold; + color:#000; +} +.field_score img{ + float:left; +} +.livenow_match{ + background-color:#bcf0d5; + border-left:1px solid #0c8546; + border-right:1px solid #0c8546; + color:#007f3d; +} +.finished_match{ + background-color:#c42424; + border-left:1px solid #c93d3d; + border-right:1px solid #c93d3d; + color:#c42424; +} +.livenow_match #result{ + color:#007f3d; +} +.finished_match #result{ + color:#c42424; +} +.place_final{ + width:120px; + height:17px; + font-size:14px; + color:#FFF; + padding-left: 27px; + padding-top:2px; + +} +#place_position1{ + position:absolute; + top:158px; + left:310px; +} +#place_position3{ + position:absolute; + top:334px; + left:310px; +} +#winner_area_heading{ + font-family:Verdana, Geneva, sans-serif; + background-color:#656565; + width:455px; + height:19px; + margin-left:2px; + margin-top:7px; + color:#FFF; + text-transform:uppercase; + font-size:14px; + text-align:center; + padding-top:3px; +} +#winner_area_positions{ + font-family:Verdana, Geneva, sans-serif; + background-color:#FFF; + width:453px; + padding-bottom: 2px; + margin-left:2px; + border-left:1px solid #e5e5e5; + border-right:1px solid #e5e5e5; + position:relative; + margin-bottom: 5px; +} +#cup{ + background:url(cup.png) top left no-repeat; + width:30px; + height:38px; + position:absolute; + top:5px; + left:409px; +} +#view_all_results{ + background:url(btn_view_results.png) top left no-repeat; + width:170px; + height:22px; + position:absolute; + top:63px; + left:275px; + color:#FFF; + font-family:Verdana, Geneva, sans-serif; + font-size:14px; + text-align:center; + padding-top:3px; + font-weight:bold; + cursor:pointer; +} +#winner, #winner_name{ + font-family:Verdana, Geneva, sans-serif; + font-size:20px; + color:#656565; + padding-left: 7px; +} +#first_position img{ + margin-top: 3px; +} +#second_position, #third_position{ + width:300px; +} +#second_position span, #third_position span{ + font-family:Verdana, Geneva, sans-serif; + font-size:14px; + color:#656565; + padding-left: 7px; +} +#second_position img, #third_position img{ + margin-left: 9px; +} + +#mid_page_round{ + background: #dadedf; + overflow: hidden; + -moz-border-radius: 7px; + -webkit-border-radius: 7px; + border-radius: 7px; + behavior: url(components/com_sportsmanager/views/sportsmanager/border-radius.htc); + z-index: 0; +} +#last_row span{ + cursor: pointer; + font-size: 14px; + color: #7e8283; +} +#last_row span#curr{ + font-weight: bold; + font-size: 14px; +} +#last_row span#nextpage{ + padding-right: 19px; + background: url(next.jpg) center right no-repeat; + font-size: 14px; + font-weight: bold; +} +#last_row span#prevpage{ + padding-left: 19px; + background: url(prev.jpg) center left no-repeat; + font-size: 14px; + font-weight: bold; +} +#fedlogo{ + width: 139px; + height: 69px; + position: absolute; + top: 195px; + left: 159px; +} +#sponsorz{ + background: #C9CFD0; + height: 45px; + width: 450px; + position: absolute; + left: 10px; + top: 7px; + z-index:10; + cursor: pointer; +} +#sponsorz img{ + width: 100%; + height: auto; +} +#left_menu ul li{ + z-index:9996; +} +#left_menu ul li a{ + z-index:9997; +} +#left_menu ul li a span{ + z-index:9998; +} + +@media only screen and (max-width:1200px){ + +#tbl th,#tbl tr td { + font-size: 12px; +} +} + +@media only screen and (max-width:1030px){ + +#sponsorz{ + width: 390px; + height: 39px; +} +} + This function is responsible for display of the left table matches + function veranstaltungenTickerPrintable($matchez,$currentpage=1){ + $bilder_pfad = JURI::root(TRUE).'/components/com_sportsmanager/images/'; + + $matchezperpage=12; + $allmatchez=count($matchez); + $allpages=floor($allmatchez/$matchezperpage);if(($allmatchez%$matchezperpage)>0)$allpages++; + if($currentpage==''){$currentpage=1;}elseif(($currentpage<1)||($currentpage>$allpages)){$currentpage=1;} + + echo ' + + + + + + + ';?> + + + + + ?> + + + + + + + + + + + + + + + +
'.JText::_('COM_SPORTSMANAGER_DATE').''.JText::_('COM_SPORTSMANAGER_ROUND').''.JText::_('COM_SPORTSMANAGER_TEAM_HOME').''.JText::_('COM_SPORTSMANAGER_RESULT').''.JText::_('COM_SPORTSMANAGER_TEAM_VISITOR').'

class="finished_winner"> +
+ + +
--|--:
+ + +
+
class="finished_winner">

1){if($currentpage>1){echo 'Zurück  ';}for($jj=1;$jj<=$allpages;$jj++){if($jj>1)echo '  ';if($jj==$currentpage){$sup='id="curr"';}else{$sup='';}echo ''.$jj.'';}if($currentpage<$allpages){echo '  Weiter';}}?>
+ This function is responsible for display of the groups qualification results + function veranstaltungenTickerPrintgtable($teamz, $group) { + $punkte_anzeigen = false; + if (isset($teamz[0]) && isset($teamz[0]['score'])) + $punkte_anzeigen = true; + $bilder_pfad = JURI::root(TRUE).'/components/com_sportsmanager/images/'; + if(!empty($teamz)){ + echo ' + + + + + + '; + $teamcount=0; + foreach($teamz as $team){ + $teamcount++; + if(($teamcount%2)==0){$class2='even';}else{$class2='odd';} + ?> + + + + + + + + +
'.JText::_('COM_SPORTSMANAGER_PLACE').''.$group.''. ($punkte_anzeigen ? JText::_('COM_SPORTSMANAGER_POINTS') : ' ') . '
+ + + +

TABELLEN

+
+
    +
  • + Gruppen +
  • "; + if(($printright==1)||($printright==3)){ + echo "
  • + K.O.-Phase +
  • "; + } + if($printright==3){ + echo "
  • + Endtabelle +
  • "; + } + echo "
"; + */ + } + // printeliminations function start -> This function is responsible for display of the right elimination chart + function veranstaltungenTickerPrinteliminations($matchez){ + $bilder_pfad = JURI::root(TRUE).'/components/com_sportsmanager/images/'; + $federationLogoFile="dtfvb_logo.png"; + if(!empty($matchez)){ + /* + echo ' + + +
'; + */ + + echo ' + + +
'; + $matchcount=0; + foreach($matchez as $match){ + $matchcount++; + if(($matchcount%2)==0){$class2='even';}else{$class2='odd';} + ?> +
+ + + +
+
+ + + +
+
+ + +
--|--:
+ + +
+ + +
+
+
+ + This function is responsible for display of the right top3 end results after the elimination chart + function veranstaltungenTickerPrintop3($teamz){ + $bilder_pfad = JURI::root(TRUE).'/components/com_sportsmanager/images/'; + if(!empty($teamz)){ + ?> +
+
+
+ +
+
+
1.
+
2.
+
3.
+ +
+

+ +
+
+ + + + = 20000) + return JText::sprintf('COM_SPORTSMANAGER_PLACE_FROM_TO_SHORTCUT', 99 - $runde % 100, 99 - floor(($runde - 20000) / 100) + 99 - ($runde % 100)); + + switch ($runde) { + case 0: + return $spieltag ? JText::_('COM_SPORTSMANAGER_MATCH_DAY_NONE') : JText::_('COM_SPORTSMANAGER_ROUND_NONE'); + case 19999: + return JText::_('COM_SPORTSMANAGER_FINAL_SHORTCUT'); + case 19998: + return JText::_('COM_SPORTSMANAGER_3RD_PLACE_SHORTCUT'); + case 19997: + return JText::_('COM_SPORTSMANAGER_HALF_FINAL_SHORTCUT'); + case 19996: + return JText::_('COM_SPORTSMANAGER_QUARTER_FINAL_SHORTCUT'); + case 19995: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_16_SHORTCUT'); + case 19994: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_32_SHORTCUT'); + case 19993: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_64_SHORTCUT'); + case 19992: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_128_SHORTCUT'); + } + + return $bezeichnung_verstecken ? $runde : JText::sprintf($spieltag ? 'COM_SPORTSMANAGER_MATCH_DAY_NR_SHORTCUT' : 'COM_SPORTSMANAGER_ROUND_NR_SHORTCUT', $runde); + } + else { + if ($runde >= 20000) + return JText::sprintf('COM_SPORTSMANAGER_PLACE_FROM_TO', 99 - $runde % 100, 99 - floor(($runde - 20000) / 100) + 99 - ($runde % 100)); + + switch ($runde) { + case 0: + return $spieltag ? JText::_('COM_SPORTSMANAGER_MATCH_DAY_NONE') : JText::_('COM_SPORTSMANAGER_ROUND_NONE'); + case 19999: + return JText::_('COM_SPORTSMANAGER_FINAL'); + case 19998: + return JText::_('COM_SPORTSMANAGER_3RD_PLACE'); + case 19997: + return JText::_('COM_SPORTSMANAGER_HALF_FINAL'); + case 19996: + return JText::_('COM_SPORTSMANAGER_QUARTER_FINAL'); + case 19995: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_16'); + case 19994: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_32'); + case 19993: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_64'); + case 19992: + return JText::_('COM_SPORTSMANAGER_ROUND_OF_128'); + } + + return $bezeichnung_verstecken ? $runde : JText::sprintf($spieltag ? 'COM_SPORTSMANAGER_MATCH_DAY_NR' : 'COM_SPORTSMANAGER_ROUND_NR', $runde); + } +} + +function FormatiertesDatum($s, $zeit_anzeigen = true, $wochentag_anzeigen = true) { + if ($s != null && strlen($s) > 0) { + $ts = getdate(strtotime($s)); + if ($wochentag_anzeigen) { + $wochentage = array(JText::_('COM_SPORTSMANAGER_DAY_0_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_1_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_2_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_3_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_4_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_5_SHORTCUT'), JText::_('COM_SPORTSMANAGER_DAY_6_SHORTCUT')); + if ($zeit_anzeigen) + return sprintf("%s, %02d.%02d.%04d %02d:%02d", $wochentage[$ts["wday"]], $ts["mday"], $ts["mon"], $ts["year"], $ts["hours"], $ts["minutes"]); + + return sprintf("%s, %02d.%02d.%04d", $wochentage[$ts["wday"]], $ts["mday"], $ts["mon"], $ts["year"]); + } + if ($zeit_anzeigen) + return sprintf("%02d.%02d.%04d %02d:%02d", $ts["mday"], $ts["mon"], $ts["year"], $ts["hours"], $ts["minutes"]); + + return sprintf("%02d.%02d.%04d", $ts["mday"], $ts["mon"], $ts["year"]); + } + + return JText::_('COM_SPORTSMANAGER_DATE_NONE'); +} + +function FormatierterTermin($erster_tag, $letzter_tag, $jahr_anzeigen = false, $filter_jahr = null) { + $erster_ts = getdate(strtotime($erster_tag)); + $letzter_ts = getdate(strtotime($letzter_tag)); + if (!empty($filter_jahr)) + $jahr_anzeigen = $erster_ts["year"] != $filter_jahr || $letzter_ts["year"] != $filter_jahr; + $letzter_termin = sprintf("%02d.%02d." . ($jahr_anzeigen ? "%02d" : ""), $letzter_ts["mday"], $letzter_ts["mon"], $letzter_ts["year"]); + if ($erster_tag == $letzter_tag) + return $letzter_termin; + if ($erster_ts["mon"] == $letzter_ts["mon"] && $erster_ts["year"] == $letzter_ts["year"]) + $erster_termin = sprintf("%02d.", $erster_ts["mday"]); + else if (!$jahr_anzeigen || $erster_ts["year"] == $letzter_ts["year"]) + $erster_termin = sprintf("%02d.%02d.", $erster_ts["mday"], $erster_ts["mon"]); + else + $erster_termin = sprintf("%02d.%02d.%02d", $erster_ts["mday"], $erster_ts["mon"], $erster_ts["year"]); + + return $erster_termin . "-" . $letzter_termin; +} + +function bildLoeschen($typ, $id) { + global $sportsmanager_joomla_path; + $typ_exploded = explode("/", $typ); + $typ = $typ_exploded[0]; + $typ_prefix = count($typ_exploded) > 1 ? $typ_exploded[1] : ""; + $bilder_pfad = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . $typ; + $pfad = $bilder_pfad . '/' . $typ_prefix . $id . "."; + if (!is_file($pfad . 'png') && !is_file($pfad . 'jpg')) + return; + $alte_bilder = JFolder::files($bilder_pfad, '^' . $typ_prefix . $id . '\.|^' . $typ_prefix . 'I' . $id . 'T'); + foreach ($alte_bilder as $fn) + JFile::delete($bilder_pfad . DIRECTORY_SEPARATOR . $fn); +} + +function bildIdentisch($typ1, $id1, $typ2, $id2) { + global $sportsmanager_joomla_path; + $typ1_exploded = explode("/", $typ1); + $typ1 = $typ1_exploded[0]; + $typ1_prefix = count($typ1_exploded) > 1 ? $typ1_exploded[1] : ""; + $bilder_pfad1 = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . $typ1; + $pfad1 = $bilder_pfad1 . '/' . $typ1_prefix . $id1 . "."; + if (is_file($pfad1 . "png")) + $ext = "png"; + else if (is_file($pfad1 . "jpg")) + $ext = "jpg"; + else + $ext = ""; + $pfad1 .= $ext; + + $typ2_exploded = explode("/", $typ2); + $typ2 = $typ2_exploded[0]; + $typ2_prefix = count($typ2_exploded) > 1 ? $typ2_exploded[1] : ""; + $bilder_pfad2 = $sportsmanager_joomla_path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'sportsmanager' . DIRECTORY_SEPARATOR . $typ2; + $pfad2 = $bilder_pfad2 . '/' . $typ2_prefix . $id2 . "." . $ext; + + return files_identical($pfad1, $pfad2); +} + +function teamImage($teamId, $vereinId, $width = 240, $height = 240) { + $url = bildURL("mannschaften", $teamId, 0, 0, $width, $height); + + if ($url == null) { + $url = bildURL("vereine", $vereinId, 0, 0, $width, $height); + } + + return $url; +} + +function playerImage($playerId, $gender, $width = 180, $height = 240) { + $url = bildURL("spieler", $playerId, $width, $height, 0,0,'', $gender == 'M' ? 'm' : 'w'); + if ($url == null) { + $url = bildURL("mannschaftsmitglieder", $playerId, $width, $height, 0,0,''); + } + + return $url; +} + + +function bildURL($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = "") { + global $sportsmanager_joomla_path; + global $sportsmanager_joomla_url; + + $typ_exploded = explode("/", $typ); + $typ = $typ_exploded[0]; + $typ_prefix = count($typ_exploded) > 1 ? $typ_exploded[1] : ""; + + $pfad = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "."; + if (is_file($pfad . "png")) + $ext = "png"; + else if (is_file($pfad . "jpg")) + $ext = "jpg"; + else if (!empty($alternativ)) { + $id = $alternativ; + $pfad = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "."; + if (is_file($pfad . "png")) + $ext = "png"; + else if (is_file($pfad . "jpg")) + $ext = "jpg"; + else + return null; + } + else + return null; + + $time = filemtime($pfad . $ext); + + if ($fixed_width > 0 && $fixed_height > 0) { + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . $fixed_width . "H" . $fixed_height . "." . $ext; + if (is_file($pfad_angepasst)) { + return $sportsmanager_joomla_url . 'images/sportsmanager/' . $typ . '/' . basename($pfad_angepasst); + } + } + + $size = getimagesize($pfad . $ext); + $width = $size[0]; + $height = $size[1]; + + $max_width = $fixed_width > 0 ? $fixed_width : $max_width; + $max_height = $fixed_height > 0 ? $fixed_height : $max_height; + + if (($fixed_width == 0 || $width == $fixed_width) && ($fixed_height == 0 || $height == $fixed_height) && ($fixed_width != 0 || $max_width == 0 || $width <= $max_width) && ($fixed_height != 0 || $max_height == 0 || $height <= $max_height)) { + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . $width . "H" . $height . "." . $ext; + if (!is_file($pfad_angepasst)) { + if (!copy($pfad . $ext, $pfad_angepasst)) + return null; + } + + return $sportsmanager_joomla_url . 'images/sportsmanager/' . $typ . '/' . basename($pfad_angepasst); + } + + $new_width = $width; + $new_height = $height; + + if ($max_height > 0 && $new_height > $max_height) { + $new_width = max(round($new_width * $max_height / $new_height), 1); + $new_height = $max_height; + } + if ($max_width > 0 && $new_width > $max_width) { + $new_height = max(round($new_height * $max_width / $new_width), 1); + $new_width = $max_width; + } + + if ($max_width > 0 && (($max_width - $new_width) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_width += 1; + if ($max_height > 0 && (($max_height - $new_height) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_height += 1; + + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . max($fixed_width, $new_width) . "H" . max($fixed_height, $new_height) . "." . $ext; + + if (!is_file($pfad_angepasst)) { + $image = $ext == "png" ? imagecreatefrompng($pfad . $ext) : imagecreatefromjpeg($pfad . $ext); + if ($image === false) + return null; + + $image_resized = imagecreatetruecolor(max($fixed_width, $new_width), max($fixed_height, $new_height)); + $color = $ext == "png" ? imagecolorallocatealpha($image_resized, 0, 0, 0, 127) : imagecolorallocate($image_resized, 64, 64, 64); + imagefill($image_resized, 0, 0, $color); + imagecopyresampled($image_resized, $image, round((imagesx($image_resized) - $new_width) / 2), round((imagesy($image_resized) - $new_height) / 2), 0, 0, $new_width, $new_height, $width, $height); + if ($ext == "png") { + imagesavealpha($image_resized, true); + imagepng($image_resized, $pfad_angepasst); + } + else + imagejpeg($image_resized, $pfad_angepasst); + } + + return $sportsmanager_joomla_url . 'images/sportsmanager/' . $typ . '/' . basename($pfad_angepasst); +} + + +function bildHTML($typ, $id, $fixed_width = 0, $fixed_height = 0, $max_width = 0, $max_height = 0, $zusatz = "", $alternativ = "") { + global $sportsmanager_joomla_path; + global $sportsmanager_joomla_url; + + $typ_exploded = explode("/", $typ); + $typ = $typ_exploded[0]; + $typ_prefix = count($typ_exploded) > 1 ? $typ_exploded[1] : ""; + + $pfad = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "."; + if (is_file($pfad . "png")) + $ext = "png"; + else if (is_file($pfad . "jpg")) + $ext = "jpg"; + else if (!empty($alternativ)) { + $id = $alternativ; + $pfad = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . $id . "."; + if (is_file($pfad . "png")) + $ext = "png"; + else if (is_file($pfad . "jpg")) + $ext = "jpg"; + else + return null; + } + else + return null; + + $time = filemtime($pfad . $ext); + + if ($fixed_width > 0 && $fixed_height > 0) { + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . $fixed_width . "H" . $fixed_height . "." . $ext; + if (is_file($pfad_angepasst)) { + return ''; + } + } + + $size = getimagesize($pfad . $ext); + $width = $size[0]; + $height = $size[1]; + + $max_width = $fixed_width > 0 ? $fixed_width : $max_width; + $max_height = $fixed_height > 0 ? $fixed_height : $max_height; + + if (($fixed_width == 0 || $width == $fixed_width) && ($fixed_height == 0 || $height == $fixed_height) && ($fixed_width != 0 || $max_width == 0 || $width <= $max_width) && ($fixed_height != 0 || $max_height == 0 || $height <= $max_height)) { + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . $width . "H" . $height . "." . $ext; + if (!is_file($pfad_angepasst)) { + if (!copy($pfad . $ext, $pfad_angepasst)) + return null; + } + + return ''; + } + + $new_width = $width; + $new_height = $height; + + if ($max_height > 0 && $new_height > $max_height) { + $new_width = max(round($new_width * $max_height / $new_height), 1); + $new_height = $max_height; + } + if ($max_width > 0 && $new_width > $max_width) { + $new_height = max(round($new_height * $max_width / $new_width), 1); + $new_width = $max_width; + } + + if ($max_width > 0 && (($max_width - $new_width) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_width += 1; + if ($max_height > 0 && (($max_height - $new_height) % 2) == 1) // Toleranz bei nur 1 Pixel Unterschied + $new_height += 1; + + $pfad_angepasst = $sportsmanager_joomla_path . "/images/sportsmanager/" . $typ . "/" . $typ_prefix . "I" . $id . "T" . $time . "W" . max($fixed_width, $new_width) . "H" . max($fixed_height, $new_height) . "." . $ext; + + if (!is_file($pfad_angepasst)) { + $image = $ext == "png" ? imagecreatefrompng($pfad . $ext) : imagecreatefromjpeg($pfad . $ext); + if ($image === false) + return null; + + $image_resized = imagecreatetruecolor(max($fixed_width, $new_width), max($fixed_height, $new_height)); + $color = $ext == "png" ? imagecolorallocatealpha($image_resized, 0, 0, 0, 127) : imagecolorallocate($image_resized, 64, 64, 64); + imagefill($image_resized, 0, 0, $color); + imagecopyresampled($image_resized, $image, round((imagesx($image_resized) - $new_width) / 2), round((imagesy($image_resized) - $new_height) / 2), 0, 0, $new_width, $new_height, $width, $height); + if ($ext == "png") { + imagesavealpha($image_resized, true); + imagepng($image_resized, $pfad_angepasst); + } + else + imagejpeg($image_resized, $pfad_angepasst); + } + + return ''; +} + +function terminDokumentname($id) { + global $sportsmanager_joomla_path; + + $pfad = $sportsmanager_joomla_path . "/images/sportsmanager/termine"; + $dokumente = JFolder::files($pfad, '^' . $id . ' '); + + return !empty($dokumente) ? substr($dokumente[0], strlen((string) $id) + 1) : false; +} + +function lightBoxJSShow($lightbox_class = "lightbox") { + return "show" . $lightbox_class . "();"; +} + +function lightBoxJSHide($lightbox_class = "lightbox") { + return "hide" . $lightbox_class . "();"; +} + +function lightBoxClassHide($lightbox_class = "lightbox") { + return $lightbox_class . "_close"; +} + +function lightBoxHeader($lightbox_class = "lightbox") { + ?> + + + +