initial commit from rev. 632
This commit is contained in:
661
LICENSE.txt
Normal file
661
LICENSE.txt
Normal file
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are 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.
|
||||
|
||||
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.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
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 Affero 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. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
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 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 work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero 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 Affero 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 Affero 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 Affero 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.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
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 AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
99
README.txt
Normal file
99
README.txt
Normal file
@@ -0,0 +1,99 @@
|
||||
Id: README.txt,v XXX 2008/02/14 12:30:06 pcabero
|
||||
|
||||
Overview
|
||||
--------
|
||||
ProcessMaker is an open source workflow management software suite, which includes tools to
|
||||
automate your workflow, design forms, create documents, assign roles and users, create routing rules,
|
||||
and map an individual process quickly and easily.
|
||||
It's relatively lightweight and doesn't require any kind of installation on the client computer.
|
||||
This file describes the requirements and installation steps for the server.
|
||||
|
||||
More information and licence
|
||||
----------------------------
|
||||
ProcessMaker - Automate your Processes
|
||||
Copyright (C) 2002 - 2008 Colosa Inc.
|
||||
|
||||
Licensed under the terms of the GNU Affero General Public License version 3:
|
||||
http://www.affero.org/oagpl.html
|
||||
|
||||
For further information visit:
|
||||
http://www.processmaker.com/
|
||||
|
||||
Requirements
|
||||
------------
|
||||
- Linux
|
||||
- Apache 2.2.3 or greater
|
||||
- PHP 5.1.6 or greater
|
||||
- MySQL 4.1.20 or greater
|
||||
|
||||
If you have the RHEL or Centos Linux distribution, to install and run ProcessMaker, the feature SELinux
|
||||
shoud be disabled. See How to disable SELINUX for additional instructions.
|
||||
Likewise PHP should be configured with more than 30 MB in the parameter memory_limit. ProcessMaker
|
||||
ideally uses 120 MB in this parameter. See How to change the PHP "memory_limit" parameter
|
||||
for additional instructions.
|
||||
Magic quotes in php.ini must be in Off
|
||||
|
||||
Installation
|
||||
------------
|
||||
1. Download ProcessMaker XXX from http://sourceforge.net/projects/processmaker/ and install it
|
||||
2. Rename the file "/etc/httpd/conf.d/pmos.conf.rpm" as "/etc/httpd/conf.d/pmos.conf"
|
||||
3. Ensure that the virtual server "your_processmaker_server" defined in the file
|
||||
"/etc/httpd/conf.d/pmos.conf" coincides with your system configuration.
|
||||
The name of this virtual server is only an example, you can change this name
|
||||
according the domain defined in your network.
|
||||
4. If you don't have the name of the virtual server defined in step 3, you should add this server to your host.
|
||||
To do this, you need to edit the file
|
||||
/etc/hosts
|
||||
In this file you should add the following line:
|
||||
your_ip_address your_processmaker_server
|
||||
5. Finally restart the httpd service
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
1. Make sure that the "data" and "compiled" subdirectories are world writable (chmod 0777),
|
||||
because the data of your workflows will be saved in the "data" subdirectory, and the subdirectory "compiled"
|
||||
will store the compiled templates of ProccessMaker.
|
||||
2. Open your browser and load the ProcessMaker site.
|
||||
You should see the test page. If you don't see it, please check the installation steps.
|
||||
3. On the test page,
|
||||
- check your connection and paths
|
||||
- enter your MySQL database account information, which should have privileges to create databases and users.
|
||||
4. Click on the tab "Install" (in the upper right-hand corner)
|
||||
5. After few seconds you will get the confirmation of your installation. If it was successful, click on the button
|
||||
"Finish installation" and enjoy ProccessMaker. Otherwise, please visit our forums (http://forum.processmaker.com/)
|
||||
to get support.
|
||||
6. To login to ProcessMaker use these credentials:
|
||||
user: admin
|
||||
pass: admin
|
||||
|
||||
How to disable SELinux
|
||||
----------------------
|
||||
Since ProcessMaker is currently installed and running in the /opt directory, it is
|
||||
necessary to disable the SELinux feature.
|
||||
To disactivate the SELinux you need to edit the respective configuration file.
|
||||
Usually you should find it in:
|
||||
/etc/selinux/config
|
||||
|
||||
In this file you will need to disable the following parameter:
|
||||
SELINUX = disable
|
||||
|
||||
After that you need to restart your computer, so this change will take effect.
|
||||
|
||||
How to change the PHP "memory_limit" parameter
|
||||
----------------------------------------------
|
||||
ProccesMaker needs minimum 31MB in the parameter "memory_limit" of PHP. This parameter defines
|
||||
the maximum amount of memory a script may consume.
|
||||
To change this value you need to edit the php.ini file.
|
||||
Usually you should find it in
|
||||
/etc/php.ini
|
||||
|
||||
In this file you should put the new value (beetween 31 and 120):
|
||||
memory_limit = 31MB;
|
||||
|
||||
After that, restart the httpd service.
|
||||
|
||||
Credits
|
||||
-------
|
||||
- ProcessMaker - Automate your Processes
|
||||
Copyright (C) 2002-2008 Colosa
|
||||
http://www.processmaker.com/
|
||||
64
gulliver/bin/gulliver
Executable file
64
gulliver/bin/gulliver
Executable file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
//***************** Operating Systems parameters **************************
|
||||
if ( PHP_OS == 'WINNT' )
|
||||
define('PATH_SEP', '\\');
|
||||
else
|
||||
define('PATH_SEP', '/');
|
||||
|
||||
//***************** Defining the Home Directory *********************************
|
||||
if(isset($_SERVER['PWD'])) {
|
||||
$docuroot = explode ( PATH_SEP , $_SERVER['PWD'] );
|
||||
} else {
|
||||
$docuroot = explode ( PATH_SEP , realpath(dirname(__FILE__) . '/../../workflow/engine/'));
|
||||
}
|
||||
array_pop($docuroot);
|
||||
$pathhome = implode( PATH_SEP, $docuroot );
|
||||
|
||||
//try to find automatically the trunk directory where are placed the RBAC and Gulliver directories
|
||||
//in a normal installation you don't need to change it.
|
||||
array_pop($docuroot);
|
||||
$pathTrunk = implode( PATH_SEP, $docuroot );
|
||||
array_pop($docuroot);
|
||||
$pathOutTrunk = implode( PATH_SEP, $docuroot );
|
||||
// to do: check previous algorith for Windows $pathTrunk = "c:/home/";
|
||||
|
||||
define('PATH_HOME', $pathhome . PATH_SEP );
|
||||
define('PATH_TRUNK', $pathTrunk . PATH_SEP );
|
||||
define('PATH_OUTTRUNK', $pathOutTrunk . PATH_SEP );
|
||||
|
||||
//***************** include the main config file ******************************
|
||||
$gulliverInstalled = PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths_installed.php';
|
||||
if (file_exists( $gulliverInstalled )) {
|
||||
require_once ( $gulliverInstalled );
|
||||
}
|
||||
|
||||
$gulliverConfig = PATH_HOME . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php';
|
||||
|
||||
// project exists?
|
||||
if (file_exists( $gulliverConfig )) {
|
||||
require_once ( $gulliverConfig );
|
||||
}
|
||||
else {
|
||||
printf( "Unable to find %s file\n", $gulliverConfig); exit(255);
|
||||
}
|
||||
|
||||
// Get the platform name (should be 'linux', 'windows', etc)
|
||||
$svrOS = strtolower(reset(explode(' ',php_uname('s'))));
|
||||
$defines = $pathhome . PATH_SEP . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'defines.php';
|
||||
|
||||
if ($svrOS === "windows" && file_exists($defines))
|
||||
require_once ( $defines );
|
||||
|
||||
ini_set('display_errors','off');
|
||||
ini_set('error_reporting', E_ERROR);
|
||||
|
||||
if (!is_dir( PATH_THIRDPARTY )) {
|
||||
print "Unable to find Thirdparty libraries\n"; exit(255);
|
||||
}
|
||||
|
||||
if (!is_dir( PATH_GULLIVER_BIN )) {
|
||||
print "Unable to find bin Gulliver libraries\n"; exit(255);
|
||||
}
|
||||
|
||||
include ( PATH_GULLIVER_BIN . 'gulliver.php');
|
||||
59
gulliver/bin/gulliver.php
Normal file
59
gulliver/bin/gulliver.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
* gulliver.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
if (! PATH_THIRDPARTY ) {
|
||||
die("You must launch gulliver command line with the gulliver script\n");
|
||||
}
|
||||
|
||||
// set magic_quotes_runtime to off
|
||||
ini_set('magic_quotes_runtime', 'Off');
|
||||
require_once( PATH_THIRDPARTY . 'pake' . PATH_SEP . 'pakeFunction.php');
|
||||
require_once( PATH_THIRDPARTY . 'pake' . PATH_SEP . 'pakeGetopt.class.php');
|
||||
require_once( PATH_CORE . 'config' . PATH_SEP . 'environments.php');
|
||||
|
||||
// trap -V before pake
|
||||
if (in_array('-V', $argv) || in_array('--version', $argv))
|
||||
{
|
||||
printf("Gulliver version %s\n", pakeColor::colorize(trim(file_get_contents( PATH_GULLIVER . 'VERSION')), 'INFO'));
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (count($argv) <= 1)
|
||||
{
|
||||
$argv[] = '-T';
|
||||
}
|
||||
|
||||
|
||||
// register tasks
|
||||
$dir = PATH_GULLIVER_HOME . 'bin' . PATH_SEP . 'tasks';
|
||||
$tasks = pakeFinder::type('file')->name( 'pake*.php' )->in($dir);
|
||||
|
||||
foreach ($tasks as $task) {
|
||||
include_once($task);
|
||||
}
|
||||
|
||||
// run task
|
||||
pakeApp::get_instance()->run(null, null, false);
|
||||
|
||||
exit(0);
|
||||
64
gulliver/bin/tasks/pakeBase.php
Normal file
64
gulliver/bin/tasks/pakeBase.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* pakeBase.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
|
||||
pake_task('project_exists');
|
||||
pake_task('app_exists', 'project_exists');
|
||||
pake_task('module_exists', 'app_exists');
|
||||
|
||||
function run_project_exists($task, $args)
|
||||
{
|
||||
// if (!file_exists('pre_processor.php'))
|
||||
// {
|
||||
// throw new Exception('you must be in a gulliver project directory');
|
||||
// }
|
||||
|
||||
// pake_properties('config/properties.ini');
|
||||
}
|
||||
|
||||
function run_app_exists($task, $args)
|
||||
{
|
||||
if (!count($args))
|
||||
{
|
||||
throw new Exception('you must provide your application name');
|
||||
}
|
||||
|
||||
if (!is_dir(getcwd().'/apps/'.$args[0]))
|
||||
{
|
||||
throw new Exception('application "'.$args[0].'" does not exist');
|
||||
}
|
||||
}
|
||||
|
||||
function run_module_exists($task, $args)
|
||||
{
|
||||
if (count($args) < 2)
|
||||
{
|
||||
throw new Exception('you must provide your module name');
|
||||
}
|
||||
|
||||
if (!is_dir(getcwd().'/apps/'.$args[0].'/modules/'.$args[1]))
|
||||
{
|
||||
throw new Exception('module "'.$args[1].'" does not exist');
|
||||
}
|
||||
}
|
||||
2519
gulliver/bin/tasks/pakeGulliver.php
Normal file
2519
gulliver/bin/tasks/pakeGulliver.php
Normal file
File diff suppressed because it is too large
Load Diff
492
gulliver/bin/tasks/pakePropel.php
Normal file
492
gulliver/bin/tasks/pakePropel.php
Normal file
@@ -0,0 +1,492 @@
|
||||
<?php
|
||||
/**
|
||||
* pakePropel.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of the symfony package.
|
||||
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
pake_desc('create classes for current model');
|
||||
pake_task('propel-build-model', 'project_exists');
|
||||
|
||||
pake_desc('create sql for current model');
|
||||
pake_task('propel-build-sql', 'project_exists');
|
||||
|
||||
pake_desc('create schema.xml from existing database');
|
||||
pake_task('propel-build-schema', 'project_exists');
|
||||
|
||||
//pake_desc('create schema.xml from schema.yml');
|
||||
//pake_task('propel-convert-yml-schema', 'project_exists');
|
||||
|
||||
//pake_desc('create schema.yml from schema.xml');
|
||||
//pake_task('propel-convert-xml-schema', 'project_exists');
|
||||
|
||||
//pake_desc('load data from fixtures directory');
|
||||
//pake_task('propel-load-data', 'project_exists');
|
||||
|
||||
pake_desc('dump data to fixtures directory');
|
||||
pake_task('propel-dump-data', 'project_exists');
|
||||
|
||||
pake_desc('create database for current model');
|
||||
pake_task('propel-build-db', 'project_exists');
|
||||
|
||||
pake_desc('insert sql for current model');
|
||||
pake_task('propel-insert-sql', 'project_exists');
|
||||
|
||||
//pake_desc('generate propel model and sql and initialize database');
|
||||
//pake_task('propel-build-all', 'project_exists');
|
||||
|
||||
//pake_desc('generate propel model and sql and initialize database, and load data');
|
||||
//pake_task('propel-build-all-load', 'propel-build-all');
|
||||
|
||||
function run_propel_convert_yml_schema($task, $args)
|
||||
{
|
||||
_propel_convert_yml_schema(true);
|
||||
}
|
||||
|
||||
function run_propel_convert_xml_schema($task, $args)
|
||||
{
|
||||
_propel_convert_xml_schema(true);
|
||||
}
|
||||
|
||||
function _propel_convert_yml_schema($check_schema = true, $prefix = '')
|
||||
{
|
||||
$finder = pakeFinder::type('file')->name('*schema.yml');
|
||||
$dirs = array('config');
|
||||
if ($pluginDirs = glob(sfConfig::get('sf_root_dir').'/plugins/*/config'))
|
||||
{
|
||||
$dirs = array_merge($dirs, $pluginDirs);
|
||||
}
|
||||
$schemas = $finder->in($dirs);
|
||||
if ($check_schema && !count($schemas))
|
||||
{
|
||||
throw new Exception('You must create a schema.yml file.');
|
||||
}
|
||||
|
||||
$db_schema = new sfPropelDatabaseSchema();
|
||||
foreach ($schemas as $schema)
|
||||
{
|
||||
$db_schema->loadYAML($schema);
|
||||
|
||||
pake_echo_action('schema', 'converting "'.$schema.'"'.' to XML');
|
||||
|
||||
$localprefix = $prefix;
|
||||
|
||||
// change prefix for plugins
|
||||
if (preg_match('#plugins[/\\\\]([^/\\\\]+)[/\\\\]#', $schema, $match))
|
||||
{
|
||||
$localprefix = $prefix.$match[1].'-';
|
||||
}
|
||||
|
||||
// save converted xml files in original directories
|
||||
$xml_file_name = str_replace('.yml', '.xml', basename($schema));
|
||||
|
||||
$file = str_replace(basename($schema), $localprefix.$xml_file_name, $schema);
|
||||
pake_echo_action('schema', 'putting '.$file);
|
||||
file_put_contents($file, $db_schema->asXML());
|
||||
}
|
||||
}
|
||||
|
||||
function _propel_convert_xml_schema($check_schema = true, $prefix = '')
|
||||
{
|
||||
$finder = pakeFinder::type('file')->name('*schema.xml');
|
||||
|
||||
$schemas = array_merge($finder->in('config'), $finder->in(glob(sfConfig::get('sf_root_dir').'/plugins/*/config')));
|
||||
if ($check_schema && !count($schemas))
|
||||
{
|
||||
throw new Exception('You must create a schema.xml file.');
|
||||
}
|
||||
|
||||
$db_schema = new sfPropelDatabaseSchema();
|
||||
foreach ($schemas as $schema)
|
||||
{
|
||||
$db_schema->loadXML($schema);
|
||||
|
||||
$localprefix = $prefix;
|
||||
|
||||
// change prefix for plugins
|
||||
if (preg_match('#plugins[/\\\\]([^/\\\\]+)[/\\\\]#', $schema, $match))
|
||||
{
|
||||
$localprefix = $prefix.$match[1].'-';
|
||||
}
|
||||
|
||||
// save converted xml files in original directories
|
||||
$yml_file_name = str_replace('.xml', '.yml', basename($schema));
|
||||
|
||||
$file = str_replace(basename($schema), $prefix.$yml_file_name, $schema);
|
||||
pake_echo_action('schema', 'putting '.$file);
|
||||
file_put_contents($file, $db_schema->asYAML());
|
||||
}
|
||||
}
|
||||
|
||||
function _propel_copy_xml_schema_from_plugins($prefix = '')
|
||||
{
|
||||
$schemas = pakeFinder::type('file')->name('*schema.xml')->in(glob(sfConfig::get('sf_root_dir').'/plugins/*/config'));
|
||||
|
||||
foreach ($schemas as $schema)
|
||||
{
|
||||
// reset local prefix
|
||||
$localprefix = '';
|
||||
|
||||
// change prefix for plugins
|
||||
if (preg_match('#plugins[/\\\\]([^/\\\\]+)[/\\\\]#', $schema, $match))
|
||||
{
|
||||
// if the plugin name is not in the schema filename, add it
|
||||
if (!strstr(basename($schema), $match[1]))
|
||||
{
|
||||
$localprefix = $match[1].'-';
|
||||
}
|
||||
}
|
||||
|
||||
// if the prefix is not in the schema filename, add it
|
||||
if (!strstr(basename($schema), $prefix))
|
||||
{
|
||||
$localprefix = $prefix.$localprefix;
|
||||
}
|
||||
|
||||
pake_copy($schema, 'config'.DIRECTORY_SEPARATOR.$localprefix.basename($schema));
|
||||
if ('' === $localprefix)
|
||||
{
|
||||
pake_remove($schema, '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function run_propel_build_all($task, $args)
|
||||
{
|
||||
run_propel_build_model($task, $args);
|
||||
run_propel_build_sql($task, $args);
|
||||
run_propel_insert_sql($task, $args);
|
||||
}
|
||||
|
||||
function run_propel_build_all_load($task, $args)
|
||||
{
|
||||
run_propel_build_all($task, $args);
|
||||
run_propel_load_data($task, $args);
|
||||
}
|
||||
|
||||
function run_propel_build_model($task, $args)
|
||||
{
|
||||
if ( isset ( $args[0] ) ) {
|
||||
$propelIniFile = $args[0] . '.ini';
|
||||
if ( ! file_exists ( 'config' . PATH_SEP . $propelIniFile ) ) {
|
||||
$path = explode ( '/', $args[0] );
|
||||
if ( count($path) > 2 )
|
||||
throw new Exception('the propel.ini must be in your config directory.');
|
||||
if ( count($path) == 1 )
|
||||
$path[1] = 'propel';
|
||||
|
||||
$propelIniFile = 'plugins' .PATH_SEP . $path[0] . PATH_SEP . 'config' . PATH_SEP . $path[1] . '.ini';
|
||||
|
||||
pake_echo_action('propel.ini', "using the file : $propelIniFile ");
|
||||
_call_phing($task, 'om', false, $path[1] . '.ini' , PATH_PLUGINS . $path[0] . PATH_SEP );
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
_call_phing($task, 'om');
|
||||
}
|
||||
|
||||
function run_propel_build_sql($task, $args)
|
||||
{
|
||||
if ( isset ( $args[1] ) ) {
|
||||
$propelIniFile = $args[1] . '.ini';
|
||||
$alternateDir = '';
|
||||
if ( ! file_exists ( 'config' . PATH_SEP . $propelIniFile ) ) {
|
||||
$path = explode ( '/', $args[1] );
|
||||
if ( count($path) > 2 )
|
||||
throw new Exception('the propel.ini must be in your config directory.');
|
||||
if ( count($path) == 1 )
|
||||
$path[1] = 'propel';
|
||||
|
||||
$propelIniFile = 'plugins' .PATH_SEP . $path[0] . PATH_SEP . 'config' . PATH_SEP . $path[1] . '.ini';
|
||||
if ( ! file_exists($propelIniFile) )
|
||||
throw new Exception("the propel.ini must be in your config directory. ($propelIniFile)");
|
||||
|
||||
pake_echo_action('propel.ini', "using the file : $propelIniFile ");
|
||||
$alternateDir = PATH_PLUGINS . $path[0] . PATH_SEP;
|
||||
//_call_phing($task, 'om', false, $path[1] . '.ini' , PATH_PLUGINS . $path[0] . PATH_SEP );
|
||||
//return;
|
||||
}
|
||||
|
||||
}
|
||||
switch ( $args [0]) {
|
||||
case 'mysql' : if ( $alternateDir != '' )
|
||||
_call_phing($task, 'sql', false, 'propel.mysql.ini', $alternateDir );
|
||||
else
|
||||
_call_phing($task, 'sql', true, 'propel.mysql.ini' );
|
||||
break;
|
||||
case 'mssql' : _call_phing($task, 'sql', true, 'propel.mssql.ini' );
|
||||
break;
|
||||
case 'oracle' : _call_phing($task, 'sql', true, 'propel.oracle.ini' );
|
||||
break;
|
||||
case 'pgsql' : _call_phing($task, 'sql', true, 'propel.pgsql.ini' );
|
||||
break;
|
||||
default :
|
||||
throw new Exception('specify database Adapter, valid values are: mysql, mssql, oracle, pgsql.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function run_propel_build_db($task, $args)
|
||||
{
|
||||
switch ( $args [0]) {
|
||||
case 'mysql' : _call_phing($task, 'create-db', true, 'propel.mysql.ini' );
|
||||
break;
|
||||
case 'mssql' : _call_phing($task, 'create-db', true, 'propel.mssql.ini' );
|
||||
break;
|
||||
case 'oracle' : _call_phing($task, 'create-db', true, 'propel.oracle.ini' );
|
||||
break;
|
||||
case 'pgsql' : _call_phing($task, 'create-db', true, 'propel.pgsql.ini' );
|
||||
break;
|
||||
default :
|
||||
throw new Exception('specify database Adapter, valid values are: mysql, mssql, oracle, pgsql.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function run_propel_insert_sql($task, $args)
|
||||
{
|
||||
switch ( $args [0]) {
|
||||
case 'mysql' : //_call_phing($task, 'insert-sql', true, 'propel.mysql.ini' );
|
||||
$filename = 'config/propel.mysql.ini';
|
||||
$fd = fopen ($filename, "r");
|
||||
$contents = fread ($fd,filesize ($filename));
|
||||
fclose ($fd);
|
||||
$delimiter = "\n";
|
||||
$splitcontents = explode($delimiter, $contents);
|
||||
foreach ($splitcontents as $key => $line)
|
||||
if ( strpos ( $line, 'database.url' ) > 0 ) {
|
||||
$param = explode ( '/', $line );
|
||||
$database = $param [ count( $param) -1 ];
|
||||
pake_echo_action('propel-insert-sql', "using the database : $database ");
|
||||
}
|
||||
|
||||
//exec ( 'mysqldump --add-drop-table --compatible=mysql40 --compact --default-character-set=utf8 --no-create-info --complete-insert --extended-insert=false > data/mysql/insert.sql ' . $database );
|
||||
exec ( 'mysqldump --password=atopml2005 --compatible=mysql40 --compact --default-character-set=utf8 --no-create-info --complete-insert=false --extended-insert=true > data/mysql/insert.sql ' . $database );
|
||||
break;
|
||||
case 'mssql' : _call_phing($task, 'insert-sql', true, 'propel.mssql.ini' );
|
||||
break;
|
||||
case 'oracle' : _call_phing($task, 'insert-sql', true, 'propel.oracle.ini' );
|
||||
break;
|
||||
case 'pgsql' : _call_phing($task, 'insert-sql', true, 'propel.pgsql.ini' );
|
||||
break;
|
||||
default :
|
||||
throw new Exception('specify database Adapter, valid values are: mysql, mssql, oracle, pgsql.');
|
||||
}
|
||||
}
|
||||
|
||||
function run_propel_build_schema($task, $args)
|
||||
{
|
||||
$propelIniFile = 'propel.ini';
|
||||
if ( isset ( $args[0] ) ) {
|
||||
|
||||
$propelIniFile = $args[0] . '.ini';
|
||||
if ( ! file_exists ( 'config' . PATH_SEP . $propelIniFile ) ) {
|
||||
$path = explode ( '/', $args[0] );
|
||||
if ( count($path) > 2 )
|
||||
throw new Exception('the propel.ini must be in your config directory.');
|
||||
if ( count($path) == 1 )
|
||||
$path[1] = 'propel';
|
||||
|
||||
$propelIniFile = 'plugins' .PATH_SEP . $path[0] . PATH_SEP . 'config' . PATH_SEP . $path[1] . '.ini';
|
||||
|
||||
pake_echo_action('propel.ini', "using the file : $propelIniFile ");
|
||||
_call_phing($task, 'creole', false, $path[1] . '.ini' , PATH_PLUGINS . $path[0] . PATH_SEP );
|
||||
|
||||
// fix database name
|
||||
if (file_exists(PATH_PLUGINS . $path[0] . PATH_SEP . 'config/schema.xml'))
|
||||
{
|
||||
$schema = file_get_contents(PATH_PLUGINS . $path[0] . PATH_SEP . 'config/schema.xml');
|
||||
$schema = preg_replace('/<database\s+name="[^"]+"/s', '<database name="propel"', $schema);
|
||||
file_put_contents(PATH_PLUGINS . $path[0] . PATH_SEP . 'config/schema.xml', $schema);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
pake_echo_action('propel.ini', "using the file : $propelIniFile ");
|
||||
|
||||
_call_phing($task, 'creole', false, $propelIniFile );
|
||||
|
||||
// fix database name
|
||||
if (file_exists('config/schema.xml'))
|
||||
{
|
||||
$schema = file_get_contents('config/schema.xml');
|
||||
$schema = preg_replace('/<database\s+name="[^"]+"/s', '<database name="propel"', $schema);
|
||||
file_put_contents('config/schema.xml', $schema);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Dumps yml database data to fixtures directory.
|
||||
*
|
||||
* @example symfony dump-data frontend data.yml
|
||||
* @example symfony dump-data frontend data.yml dev
|
||||
*
|
||||
* @param object $task
|
||||
* @param array $args
|
||||
*/
|
||||
function run_propel_dump_data($task, $args)
|
||||
{
|
||||
|
||||
$filename = 'demo.sql';
|
||||
$app = 'app';
|
||||
$env = 'dev' ;
|
||||
|
||||
// define constants
|
||||
define('SF_ROOT_DIR', PATH_CORE . 'config' );
|
||||
define('SF_APP', $app);
|
||||
define('SF_ENVIRONMENT', $env);
|
||||
define('SF_DEBUG', true);
|
||||
|
||||
// get configuration
|
||||
//require_once SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php';
|
||||
|
||||
//$databaseManager = new sfDatabaseManager();
|
||||
//$databaseManager->initialize();
|
||||
|
||||
pake_echo_action('propel', sprintf('dumping data to "%s"', $filename));
|
||||
|
||||
$data = new sfPropelData();
|
||||
$data->dumpData($filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads yml data from fixtures directory and inserts into database.
|
||||
*
|
||||
* @example symfony load-data frontend
|
||||
* @example symfony load-data frontend dev fixtures append
|
||||
*
|
||||
* @todo replace delete argument with flag -d
|
||||
*
|
||||
* @param object $task
|
||||
* @param array $args
|
||||
*/
|
||||
function run_propel_load_data($task, $args)
|
||||
{
|
||||
if (!count($args))
|
||||
{
|
||||
throw new Exception('You must provide the app.');
|
||||
}
|
||||
|
||||
$app = $args[0];
|
||||
|
||||
if (!is_dir(sfConfig::get('sf_app_dir').DIRECTORY_SEPARATOR.$app))
|
||||
{
|
||||
throw new Exception('The app "'.$app.'" does not exist.');
|
||||
}
|
||||
|
||||
if (count($args) > 1 && $args[count($args) - 1] == 'append')
|
||||
{
|
||||
array_pop($args);
|
||||
$delete = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$delete = true;
|
||||
}
|
||||
|
||||
$env = empty($args[1]) ? 'dev' : $args[1];
|
||||
|
||||
// define constants
|
||||
define('SF_ROOT_DIR', sfConfig::get('sf_root_dir'));
|
||||
define('SF_APP', $app);
|
||||
define('SF_ENVIRONMENT', $env);
|
||||
define('SF_DEBUG', true);
|
||||
|
||||
// get configuration
|
||||
require_once SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php';
|
||||
|
||||
if (count($args) == 1)
|
||||
{
|
||||
if (!$pluginDirs = glob(sfConfig::get('sf_root_dir').'/plugins/*/data'))
|
||||
{
|
||||
$pluginDirs = array();
|
||||
}
|
||||
$fixtures_dirs = pakeFinder::type('dir')->name('fixtures')->in(array_merge($pluginDirs, array(sfConfig::get('sf_data_dir'))));
|
||||
}
|
||||
else
|
||||
{
|
||||
$fixtures_dirs = array_slice($args, 1);
|
||||
}
|
||||
|
||||
$databaseManager = new sfDatabaseManager();
|
||||
$databaseManager->initialize();
|
||||
|
||||
$data = new sfPropelData();
|
||||
$data->setDeleteCurrentData($delete);
|
||||
|
||||
foreach ($fixtures_dirs as $fixtures_dir)
|
||||
{
|
||||
if (!is_readable($fixtures_dir))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
pake_echo_action('propel', sprintf('load data from "%s"', $fixtures_dir));
|
||||
$data->loadData($fixtures_dir);
|
||||
}
|
||||
}
|
||||
|
||||
function _call_phing($task, $task_name, $check_schema = true, $propelIni = 'propel.ini' , $propelDirectory = '' )
|
||||
{
|
||||
$schemas = pakeFinder::type('file')->name('*schema.xml')->relative()->follow_link()->in('config');
|
||||
if ($check_schema && !$schemas)
|
||||
{
|
||||
throw new Exception('You must create a schema.yml or schema.xml file.');
|
||||
}
|
||||
|
||||
// call phing targets
|
||||
pake_import('Phing', false);
|
||||
|
||||
// if (false === strpos('propel-generator', get_include_path()))
|
||||
// {
|
||||
// set_include_path( PATH_THIRDPARTY . 'propel-generator/classes' . PATH_SEPARATOR. get_include_path());
|
||||
// }
|
||||
// set_include_path(sfConfig::get('sf_root_dir').PATH_SEPARATOR.get_include_path());
|
||||
|
||||
if ( $propelDirectory == '' )
|
||||
$options = array(
|
||||
'project.dir' => PATH_CORE . 'config',
|
||||
'build.properties' => $propelIni,
|
||||
'propel.output.dir' => PATH_CORE ,
|
||||
);
|
||||
else
|
||||
$options = array(
|
||||
'project.dir' => $propelDirectory . 'config',
|
||||
'build.properties' => $propelIni,
|
||||
'propel.output.dir' => $propelDirectory ,
|
||||
);
|
||||
|
||||
pakePhingTask::call_phing($task, array($task_name),
|
||||
PATH_THIRDPARTY . 'propel-generator/build.xml', $options);
|
||||
|
||||
chdir( PATH_CORE );
|
||||
}
|
||||
123
gulliver/bin/tasks/pakeTest.php
Normal file
123
gulliver/bin/tasks/pakeTest.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
/**
|
||||
* pakeTest.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
|
||||
pake_desc('launch unit tests');
|
||||
pake_task('test-unit', 'project_exists');
|
||||
|
||||
pake_desc('launch functional tests for an application');
|
||||
pake_task('test-functional', 'project_exists');
|
||||
|
||||
pake_desc('launch all tests');
|
||||
pake_task('test-all', 'project_exists');
|
||||
|
||||
function run_test_all($task, $args)
|
||||
{
|
||||
require_once(sfConfig::get('sf_symfony_lib_dir').'/lime/lime.php');
|
||||
|
||||
$h = new lime_harness(new lime_output_color());
|
||||
$h->base_dir = sfConfig::get('sf_test_dir');
|
||||
|
||||
// register all tests
|
||||
$finder = pakeFinder::type('file')->ignore_version_control()->follow_link()->name('*Test.php');
|
||||
$h->register($finder->in($h->base_dir));
|
||||
|
||||
$h->run();
|
||||
}
|
||||
|
||||
function run_test_functional($task, $args)
|
||||
{
|
||||
if (!count($args))
|
||||
{
|
||||
throw new Exception('You must provide the app to test.');
|
||||
}
|
||||
|
||||
$app = $args[0];
|
||||
|
||||
if (!is_dir(sfConfig::get('sf_app_dir').DIRECTORY_SEPARATOR.$app))
|
||||
{
|
||||
throw new Exception(sprintf('The app "%s" does not exist.', $app));
|
||||
}
|
||||
|
||||
if (isset($args[1]))
|
||||
{
|
||||
foreach (array_splice($args, 1) as $path)
|
||||
{
|
||||
$files = pakeFinder::type('file')->ignore_version_control()->follow_link()->name(basename($path).'Test.php')->in(sfConfig::get('sf_test_dir').DIRECTORY_SEPARATOR.'functional'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.dirname($path));
|
||||
foreach ($files as $file)
|
||||
{
|
||||
include($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
require_once(sfConfig::get('sf_symfony_lib_dir').'/lime/lime.php');
|
||||
|
||||
$h = new lime_harness(new lime_output_color());
|
||||
$h->base_dir = sfConfig::get('sf_test_dir').'/functional/'.$app;
|
||||
|
||||
// register functional tests
|
||||
$finder = pakeFinder::type('file')->ignore_version_control()->follow_link()->name('*Test.php');
|
||||
$h->register($finder->in($h->base_dir));
|
||||
|
||||
$h->run();
|
||||
}
|
||||
}
|
||||
|
||||
function run_test_unit($task, $args)
|
||||
{
|
||||
$environment = isset ( $arg[1] ) ? $arg[1] : G_TEST_ENV;
|
||||
printf("start test in %s environment\n", pakeColor::colorize( $environment, 'INFO'));
|
||||
define ( 'G_ENVIRONMENT', $environment );
|
||||
|
||||
if (isset($args[0]))
|
||||
{
|
||||
foreach ($args as $path)
|
||||
{
|
||||
$pathUnit = PATH_CORE . 'test' . PATH_SEP . 'unit' . PATH_SEP . dirname($path);
|
||||
$files = pakeFinder::type('file')->ignore_version_control()->follow_link()->name(basename($path).'Test.php')->in( $pathUnit );
|
||||
foreach ($files as $file)
|
||||
{
|
||||
$fName = str_replace ( PATH_CORE . 'test' . PATH_SEP . 'unit' . PATH_SEP , '', $file );
|
||||
printf("\ntesting %s \n", pakeColor::colorize( $fName, 'INFO'));
|
||||
include($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
require_once( PATH_THIRDPARTY . '/lime/lime.php');
|
||||
$h = new lime_harness(new lime_output_color());
|
||||
$h->base_dir = $pathUnit = PATH_CORE . 'test' . PATH_SEP . 'unit';
|
||||
// $h->base_dir = $pathUnit = PATH_CORE . 'test' . PATH_SEP . 'unit' . PATH_SEP . "processmaker";
|
||||
|
||||
// register unit tests
|
||||
$finder = pakeFinder::type('file')->ignore_version_control()->follow_link()->name('*Test.php');
|
||||
$h->register($finder->in($h->base_dir));
|
||||
|
||||
$h->run();
|
||||
}
|
||||
}
|
||||
106
gulliver/bin/tasks/templates/authentication.php.tpl
Normal file
106
gulliver/bin/tasks/templates/authentication.php.tpl
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
/**
|
||||
* authentication.php
|
||||
*
|
||||
*/
|
||||
|
||||
if (!isset($_POST['form']) ) {
|
||||
G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', "error");
|
||||
G::header ("location: login.html");die;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
$frm = $_POST['form'];
|
||||
if ( isset ( $frm['USR_USERNAME'] ) ) {
|
||||
$usr = strtolower( trim( $frm['USR_USERNAME']));
|
||||
$pwd = trim( $frm['USR_PASSWORD']);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*$usr = $_SESSION['USER_TEMP'];
|
||||
$pwd = $_SESSION['PASS_TEMP'];
|
||||
unset( $_SESSION['PASS_TEMP']);
|
||||
unset( $_SESSION['USER_TEMP']);*/
|
||||
}
|
||||
$uid = $RBAC->VerifyLogin( $usr , $pwd);
|
||||
switch ($uid) {
|
||||
//The user not exists
|
||||
case -1:
|
||||
G::SendTemporalMessage ('ID_USER_NOT_REGISTERED', "warning");
|
||||
break;
|
||||
//The password is incorrect
|
||||
case -2:
|
||||
G::SendTemporalMessage ('ID_WRONG_PASS', "warning");
|
||||
break;
|
||||
//The user is inactive
|
||||
case -3:
|
||||
G::SendTemporalMessage ('ID_USER_INACTIVE', "warning");
|
||||
//The Due date is finished
|
||||
case -4:
|
||||
G::SendTemporalMessage ('ID_USER_INACTIVE', "warning");
|
||||
break;
|
||||
}
|
||||
|
||||
if ($uid < 0 ) {
|
||||
G::header ("location: login.html");
|
||||
die;
|
||||
}
|
||||
|
||||
$_SESSION['USER_LOGGED'] = $uid;
|
||||
$_SESSION['USR_USERNAME'] = $usr;
|
||||
|
||||
// Asign the uid of user to userloggedobj
|
||||
$RBAC->loadUserRolePermission( $RBAC->sSystem, $uid );
|
||||
$res = $RBAC->userCanAccess("{siglaProjectName}_LOGIN");
|
||||
|
||||
|
||||
if ($res != 1 ) {
|
||||
if ($res == -2)
|
||||
G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', "error");
|
||||
else
|
||||
G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_PAGE', "error");
|
||||
G::header ("location: login.html");
|
||||
die;
|
||||
}
|
||||
|
||||
if (isset($frm['USER_LANG'])) {
|
||||
if ($frm['USER_LANG'] != '') {
|
||||
$lang = $frm['USER_LANG'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (defined('SYS_LANG')) {
|
||||
$lang = SYS_LANG;
|
||||
}
|
||||
else {
|
||||
$lang = 'en';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$accessLogin = $RBAC->userCanAccess("{siglaProjectName}_LOGIN");
|
||||
|
||||
//administrator
|
||||
if ( $accessLogin == 1) {
|
||||
G::header('location: /sys' . SYS_TEMP . '/' . $lang . '/' . SYS_SKIN . '/' . 'login/welcome');
|
||||
die;
|
||||
}
|
||||
|
||||
//Operador
|
||||
if ( $accessLogin == 1) {
|
||||
G::header('location: /sys' . SYS_TEMP . '/' . $lang . '/' . SYS_SKIN . '/' . 'login/welcome');
|
||||
die;
|
||||
}
|
||||
|
||||
|
||||
throw ( new Exception ( "the user $usr has no role assigned ($res, $uid)" ) );
|
||||
|
||||
}
|
||||
catch ( Exception $e ) {
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish' );
|
||||
die;
|
||||
}
|
||||
BIN
gulliver/bin/tasks/templates/bm.jpg.tpl
Normal file
BIN
gulliver/bin/tasks/templates/bm.jpg.tpl
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 328 B |
BIN
gulliver/bin/tasks/templates/bsm.jpg.tpl
Normal file
BIN
gulliver/bin/tasks/templates/bsm.jpg.tpl
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 292 B |
26
gulliver/bin/tasks/templates/class.pmFunctions.php.tpl
Normal file
26
gulliver/bin/tasks/templates/class.pmFunctions.php.tpl
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* class.{className}.pmFunctions.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.
|
||||
* *
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// {className} PM Functions
|
||||
//
|
||||
// Copyright (C) 2007 COLOSA
|
||||
//
|
||||
// License: LGPL, see LICENSE
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
function {className}_getMyCurrentDate()
|
||||
{
|
||||
return G::CurDate('Y-m-d');
|
||||
}
|
||||
|
||||
function {className}_getMyCurrentTime()
|
||||
{
|
||||
return G::CurDate('H:i:s');
|
||||
}
|
||||
56
gulliver/bin/tasks/templates/databases.php.tpl
Normal file
56
gulliver/bin/tasks/templates/databases.php.tpl
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* databases.php
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
global $G_ENVIRONMENTS;
|
||||
if ( isset ( $G_ENVIRONMENTS ) ) {
|
||||
$dbfile = $G_ENVIRONMENTS[ G_ENVIRONMENT ][ 'dbfile'];
|
||||
if ( !file_exists ( $dbfile ) ) {
|
||||
printf("%s \n", pakeColor::colorize( "dbfile $dbfile doesn't exist for environment " . G_ENVIRONMENT , 'ERROR'));
|
||||
die();
|
||||
}
|
||||
require_once ( $dbfile );
|
||||
}
|
||||
else {
|
||||
//when this file is called from sysGeneric, the $G_ENVIRONMENTS DOES NOT EXIST, BUT DB_HOST is defined
|
||||
if ( !defined ( 'DB_HOST' ) ) {
|
||||
printf("%s \n", pakeColor::colorize( "dbfile $dbfile doesn't exist for environment " . G_ENVIRONMENT , 'ERROR'));
|
||||
die();
|
||||
}
|
||||
|
||||
}
|
||||
//to do: enable for other databases
|
||||
$dbType = DB_ADAPTER;
|
||||
|
||||
$dsn = DB_ADAPTER . '://' . DB_USER . ':' . DB_PASS . '@' . DB_HOST . '/' . DB_NAME;
|
||||
|
||||
//to do: enable a mechanism to select RBAC Database
|
||||
$dsnRbac = DB_ADAPTER . '://' . DB_RBAC_USER . ':' . DB_RBAC_PASS . '@' . DB_RBAC_HOST . '/' . DB_RBAC_NAME;
|
||||
|
||||
switch (DB_ADAPTER) {
|
||||
case 'mysql':
|
||||
$dsn .= '?encoding=utf8';
|
||||
$dsnRbac .= '?encoding=utf8';
|
||||
break;
|
||||
case 'mssql':
|
||||
//$dsn .= '?sendStringAsUnicode=false';
|
||||
//$dsnRbac .= '?sendStringAsUnicode=false';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
$pro ['datasources']['workflow']['connection'] = $dsn;
|
||||
$pro ['datasources']['workflow']['adapter'] = DB_ADAPTER;
|
||||
|
||||
$pro ['datasources']['rbac']['connection'] = $dsnRbac;
|
||||
$pro ['datasources']['rbac']['adapter'] = DB_ADAPTER;
|
||||
|
||||
$pro ['datasources']['dbarray']['connection'] = 'dbarray://user:pass@localhost/pm_os';
|
||||
$pro ['datasources']['dbarray']['adapter'] = 'dbarray';
|
||||
|
||||
return $pro;
|
||||
?>
|
||||
16
gulliver/bin/tasks/templates/db.php.tpl
Normal file
16
gulliver/bin/tasks/templates/db.php.tpl
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
// {projectName} configuration
|
||||
define ('DB_ADAPTER', 'mysql' );
|
||||
define ('DB_HOST', 'localhost:3306' );
|
||||
define ('DB_NAME', 'db_{projectName}' );
|
||||
define ('DB_USER', '{rootUser}' );
|
||||
define ('DB_PASS', '{rootPass}' );
|
||||
define ('DB_RBAC_HOST', 'localhost:3306' );
|
||||
define ('DB_RBAC_NAME', 'rb_{projectName}' );
|
||||
define ('DB_RBAC_USER', '{rootUser}' );
|
||||
define ('DB_RBAC_PASS', '{rootPass}' );
|
||||
//define ('DB_REPORT_HOST', 'localhost:3306' );
|
||||
//define ('DB_REPORT_NAME', 'rp_workflow' );
|
||||
//define ('DB_REPORT_USER', 'rp_workflow' );
|
||||
//define ('DB_REPORT_PASS', '40xw2dp5v87y' );
|
||||
?>
|
||||
137
gulliver/bin/tasks/templates/dbInfo.php.tpl
Executable file
137
gulliver/bin/tasks/templates/dbInfo.php.tpl
Executable file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
/**
|
||||
* dbInfo.php
|
||||
*
|
||||
* {projectName}
|
||||
*
|
||||
*/
|
||||
function lookup($target)
|
||||
{
|
||||
global $ntarget;
|
||||
$msg = $target . ' => ';
|
||||
if( eregi('[a-zA-Z]', $target) )
|
||||
$ntarget = gethostbyname($target);
|
||||
else
|
||||
$ntarget = gethostbyaddr($target);
|
||||
$msg .= $ntarget;
|
||||
return($msg);
|
||||
}
|
||||
|
||||
function getDbServicesAvailables()
|
||||
{
|
||||
$servicesAvailables = Array();
|
||||
|
||||
$dbServices = Array(
|
||||
'mysql' => Array(
|
||||
'id' => 'mysql',
|
||||
'command' => 'mysql_connect',
|
||||
'name' => 'MySql'
|
||||
),
|
||||
'pgsql' => Array(
|
||||
'id' => 'pgsql',
|
||||
'command' => 'pg_connect',
|
||||
'name' => 'PostgreSQL'
|
||||
),
|
||||
'mssql' => Array(
|
||||
'id' => 'mssql',
|
||||
'command' => 'mssql_connect',
|
||||
'name' => 'Microsoft SQL Server'),
|
||||
'oracle'=> Array(
|
||||
'id' => 'oracle',
|
||||
'command' => 'oci_connect',
|
||||
'name' => 'Oracle'
|
||||
),
|
||||
'informix'=> Array(
|
||||
'id' => 'informix',
|
||||
'command' => 'ifx_connect',
|
||||
'name' => 'Informix'
|
||||
),
|
||||
'sqlite' => Array(
|
||||
'id' => 'sqlite',
|
||||
'command' => 'sqlite_open',
|
||||
'name' => 'SQLite'
|
||||
)
|
||||
);
|
||||
|
||||
foreach($dbServices as $service) {
|
||||
if(@function_exists($service['command'])){
|
||||
$servicesAvailables[] = $service;
|
||||
}
|
||||
}
|
||||
return $servicesAvailables;
|
||||
}
|
||||
|
||||
function getDbServerVersion($driver) {
|
||||
try{
|
||||
switch($driver)
|
||||
{
|
||||
case 'mysql':
|
||||
if($link = @mysql_connect( DB_HOST, DB_USER, DB_PASS)){
|
||||
$v = @mysql_get_server_info();
|
||||
} else {
|
||||
throw new Exception(@mysql_error($link));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return (isset($v))?$v:'none';
|
||||
} catch (Exception $e){
|
||||
return ($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (file_exists(PATH_METHODS . 'login/version-{projectName}.php'))
|
||||
{
|
||||
include('version-{projectName}.php');
|
||||
}
|
||||
else {
|
||||
define('PRG_VERSION', 'Development Version');
|
||||
}
|
||||
|
||||
if (getenv('HTTP_CLIENT_IP')) {
|
||||
$ip = getenv('HTTP_CLIENT_IP');
|
||||
}
|
||||
elseif(getenv('HTTP_X_FORWARDED_FOR')) {
|
||||
$ip = getenv('HTTP_X_FORWARDED_FOR');
|
||||
} else {
|
||||
$ip = getenv('REMOTE_ADDR');
|
||||
}
|
||||
|
||||
$redhat = '';
|
||||
if ( file_exists ( '/etc/redhat-release' ) ) {
|
||||
$fnewsize = filesize( '/etc/redhat-release' );
|
||||
$fp = fopen( '/etc/redhat-release' , 'r' );
|
||||
$redhat = fread( $fp, $fnewsize );
|
||||
fclose( $fp );
|
||||
}
|
||||
|
||||
$redhat .= " (" . PHP_OS . ")";
|
||||
|
||||
//$dbNetView = new NET(DB_HOST);
|
||||
//$dbNetView->loginDbServer(DB_USER, DB_PASS);
|
||||
|
||||
$availdb = '';
|
||||
foreach ( getDbServicesAvailables() as $key => $val ) {
|
||||
if ( $availdb != '' ) $availdb .= ', ';
|
||||
$availdb .= $val['name'];
|
||||
}
|
||||
|
||||
$Fields['SYSTEM'] = $redhat;
|
||||
$Fields['DATABASE'] = 'MySql (Version ' . getDbServerVersion('mysql') .')';
|
||||
$Fields['DATABASE_SERVER'] = DB_HOST;
|
||||
$Fields['DATABASE_NAME'] = DB_NAME;
|
||||
$Fields['PHP'] = phpversion();
|
||||
$Fields['FLUID'] = PRG_VERSION;
|
||||
$Fields['IP'] = lookup ($ip);
|
||||
$Fields['ENVIRONMENT'] = SYS_SYS;
|
||||
$Fields['SERVER_SOFTWARE'] = getenv('SERVER_SOFTWARE');
|
||||
$Fields['SERVER_NAME'] = getenv('SERVER_NAME');
|
||||
$Fields['AVAILABLE_DB'] = $availdb;
|
||||
$Fields['SERVER_PROTOCOL'] = getenv('SERVER_PROTOCOL');
|
||||
$Fields['SERVER_PORT'] = getenv('SERVER_PORT');
|
||||
$Fields['REMOTE_HOST'] = getenv('REMOTE_HOST');
|
||||
$Fields['SERVER_ADDR'] = getenv('SERVER_ADDR');
|
||||
$Fields['HTTP_USER_AGENT'] = getenv('HTTP_USER_AGENT');
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/dbInfo', '', $Fields);
|
||||
G::RenderPage('publish', 'raw');
|
||||
43
gulliver/bin/tasks/templates/dbInfo.xml.tpl
Executable file
43
gulliver/bin/tasks/templates/dbInfo.xml.tpl
Executable file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<dynaForm name="dbInfo" basedir="" width="450">
|
||||
<DYNA_HEADER type="title" >
|
||||
<en>System Information</en>
|
||||
</DYNA_HEADER>
|
||||
<FLUID type="caption" group="5" >
|
||||
<en> {projectName}</en>
|
||||
</FLUID>
|
||||
<SYSTEM type="caption" >
|
||||
<en>Operating System</en>
|
||||
</SYSTEM>
|
||||
|
||||
<SERVER_SOFTWARE type="caption" >
|
||||
<en>Web Server</en>
|
||||
</SERVER_SOFTWARE>
|
||||
<SERVER_NAME type="caption" group="4" >
|
||||
<en>Server Name</en>
|
||||
</SERVER_NAME>
|
||||
<SERVER_ADDR type="caption" >
|
||||
<en>Server IP Address</en>
|
||||
</SERVER_ADDR>
|
||||
<PHP type="caption" >
|
||||
<en>PHP version</en>
|
||||
</PHP>
|
||||
<DATABASE type="caption" >
|
||||
<en>Database</en>
|
||||
</DATABASE>
|
||||
<DATABASE_SERVER type="caption" >
|
||||
<en>Database Server IP Address</en>
|
||||
</DATABASE_SERVER>
|
||||
<DATABASE_NAME type="caption" >
|
||||
<en>Database Name</en>
|
||||
</DATABASE_NAME>
|
||||
<AVAILABLE_DB type="caption" >
|
||||
<en>Available Databases </en>
|
||||
</AVAILABLE_DB >
|
||||
<HTTP_USER_AGENT type="caption" >
|
||||
<en>User's Browser</en>
|
||||
</HTTP_USER_AGENT>
|
||||
<IP type="caption" >
|
||||
<en>User's Ip Address</en>
|
||||
</IP>
|
||||
</dynaForm>
|
||||
152
gulliver/bin/tasks/templates/db_insert.sql
Executable file
152
gulliver/bin/tasks/templates/db_insert.sql
Executable file
@@ -0,0 +1,152 @@
|
||||
CREATE TABLE `LANGUAGE` (
|
||||
`LAN_ID` varchar(4) NOT NULL default '',
|
||||
`LAN_NAME` varchar(30) NOT NULL default '',
|
||||
`LAN_NATIVE_NAME` varchar(30) NOT NULL default '',
|
||||
`LAN_DIRECTION` char(1) NOT NULL default 'L',
|
||||
`LAN_WEIGHT` int(11) NOT NULL default '0',
|
||||
`LAN_ENABLED` char(1) NOT NULL default '1',
|
||||
`LAN_CALENDAR` varchar(30) NOT NULL default 'GREGORIAN',
|
||||
PRIMARY KEY (`LAN_ID`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Dumping data for table `LANGUAGE`
|
||||
--
|
||||
|
||||
INSERT INTO `LANGUAGE` (`LAN_ID`, `LAN_NAME`, `LAN_NATIVE_NAME`, `LAN_DIRECTION`, `LAN_WEIGHT`, `LAN_ENABLED`, `LAN_CALENDAR`) VALUES
|
||||
('aa', 'Afar', '', 'L', 0, '0', 'GREGORIAN'),
|
||||
('ab', 'Abkhazian', '', 'L', 1, '0', 'GREGORIAN'),
|
||||
('af', 'Afrikaans', '', 'L', 2, '0', 'GREGORIAN'),
|
||||
('am', 'Amharic', '', 'L', 3, '0', 'GREGORIAN'),
|
||||
('ar', 'Arabic', '', 'L', 4, '0', 'GREGORIAN'),
|
||||
('as', 'Assamese', '', 'L', 5, '0', 'GREGORIAN'),
|
||||
('ay', 'Aymara', '', 'L', 6, '0', 'GREGORIAN'),
|
||||
('az', 'Azerbaijani', '', 'L', 7, '0', 'GREGORIAN'),
|
||||
('ba', 'Bashkir', '', 'L', 8, '0', 'GREGORIAN'),
|
||||
('be', 'Byelorussian', '', 'L', 9, '0', 'GREGORIAN'),
|
||||
('bg', 'Bulgarian', '', 'L', 10, '0', 'GREGORIAN'),
|
||||
('bh', 'Bihari', '', 'L', 11, '0', 'GREGORIAN'),
|
||||
('bi', 'Bislama', '', 'L', 12, '0', 'GREGORIAN'),
|
||||
('bn', 'Bengali', '', 'L', 13, '0', 'GREGORIAN'),
|
||||
('bo', 'Tibetan', '', 'L', 14, '0', 'GREGORIAN'),
|
||||
('br', 'Breton', '', 'L', 15, '0', 'GREGORIAN'),
|
||||
('ca', 'Catalan', '', 'L', 16, '0', 'GREGORIAN'),
|
||||
('co', 'Corsican', '', 'L', 17, '0', 'GREGORIAN'),
|
||||
('cs', 'Czech', '', 'L', 18, '0', 'GREGORIAN'),
|
||||
('cy', 'Welsh', '', 'L', 19, '0', 'GREGORIAN'),
|
||||
('da', 'Danish', '', 'L', 20, '0', 'GREGORIAN'),
|
||||
('de', 'German', '', 'L', 21, '0', 'GREGORIAN'),
|
||||
('dz', 'Bhutani', '', 'L', 22, '0', 'GREGORIAN'),
|
||||
('el', 'Greek', '', 'L', 23, '0', 'GREGORIAN'),
|
||||
('en', 'English', '', 'L', 24, '1', 'GREGORIAN'),
|
||||
('eo', 'Esperanto', '', 'L', 25, '0', 'GREGORIAN'),
|
||||
('es', 'Spanish', 'Español', 'L', 26, '0', 'GREGORIAN'),
|
||||
('et', 'Estonian', '', 'L', 27, '0', 'GREGORIAN'),
|
||||
('eu', 'Basque', '', 'L', 28, '0', 'GREGORIAN'),
|
||||
('fa', 'Persian', '', 'R', 29, '0', 'PERSIAN'),
|
||||
('fi', 'Finnish', '', 'L', 30, '0', 'GREGORIAN'),
|
||||
('fj', 'Fiji', '', 'L', 31, '0', 'GREGORIAN'),
|
||||
('fo', 'Faeroese', '', 'L', 32, '0', 'GREGORIAN'),
|
||||
('fr', 'French', '', 'L', 33, '0', 'GREGORIAN'),
|
||||
('fy', 'Frisian', '', 'L', 34, '0', 'GREGORIAN'),
|
||||
('ga', 'Irish', '', 'L', 35, '0', 'GREGORIAN'),
|
||||
('gd', 'Gaelic', '', 'L', 36, '0', 'GREGORIAN'),
|
||||
('gl', 'Galician', '', 'L', 37, '0', 'GREGORIAN'),
|
||||
('gn', 'Guarani', '', 'L', 38, '0', 'GREGORIAN'),
|
||||
('gu', 'Gujarati', '', 'L', 39, '0', 'GREGORIAN'),
|
||||
('ha', 'Hausa', '', 'L', 40, '0', 'GREGORIAN'),
|
||||
('hi', 'Hindi', '', 'L', 41, '0', 'GREGORIAN'),
|
||||
('hr', 'Croatian', '', 'L', 42, '0', 'GREGORIAN'),
|
||||
('hu', 'Hungarian', '', 'L', 43, '0', 'GREGORIAN'),
|
||||
('hy', 'Armenian', '', 'L', 44, '0', 'GREGORIAN'),
|
||||
('ia', 'Interlingua', '', 'L', 45, '0', 'GREGORIAN'),
|
||||
('ie', 'Interlingue', '', 'L', 46, '0', 'GREGORIAN'),
|
||||
('ik', 'Inupiak', '', 'L', 47, '0', 'GREGORIAN'),
|
||||
('in', 'Indonesian', '', 'L', 48, '0', 'GREGORIAN'),
|
||||
('is', 'Icelandic', '', 'L', 49, '0', 'GREGORIAN'),
|
||||
('it', 'Italian', '', 'L', 50, '0', 'GREGORIAN'),
|
||||
('iw', 'Hebrew', '', 'L', 51, '0', 'GREGORIAN'),
|
||||
('ja', 'Japanese', '', 'L', 52, '0', 'GREGORIAN'),
|
||||
('ji', 'Yiddish', '', 'L', 53, '0', 'GREGORIAN'),
|
||||
('jw', 'Javanese', '', 'L', 54, '0', 'GREGORIAN'),
|
||||
('ka', 'Georgian', '', 'L', 55, '0', 'GREGORIAN'),
|
||||
('kk', 'Kazakh', '', 'L', 56, '0', 'GREGORIAN'),
|
||||
('kl', 'Greenlandic', '', 'L', 57, '0', 'GREGORIAN'),
|
||||
('km', 'Cambodian', '', 'L', 58, '0', 'GREGORIAN'),
|
||||
('kn', 'Kannada', '', 'L', 59, '0', 'GREGORIAN'),
|
||||
('ko', 'Korean', '', 'L', 60, '0', 'GREGORIAN'),
|
||||
('ks', 'Kashmiri', '', 'L', 61, '0', 'GREGORIAN'),
|
||||
('ku', 'Kurdish', '', 'L', 62, '0', 'GREGORIAN'),
|
||||
('ky', 'Kirghiz', '', 'L', 63, '0', 'GREGORIAN'),
|
||||
('la', 'Latin', '', 'L', 64, '0', 'GREGORIAN'),
|
||||
('ln', 'Lingala', '', 'L', 65, '0', 'GREGORIAN'),
|
||||
('lo', 'Laothian', '', 'L', 66, '0', 'GREGORIAN'),
|
||||
('lt', 'Lithuanian', '', 'L', 67, '0', 'GREGORIAN'),
|
||||
('lv', 'Latvian', '', 'L', 68, '0', 'GREGORIAN'),
|
||||
('mg', 'Malagasy', '', 'L', 69, '0', 'GREGORIAN'),
|
||||
('mi', 'Maori', '', 'L', 70, '0', 'GREGORIAN'),
|
||||
('mk', 'Macedonian', '', 'L', 71, '0', 'GREGORIAN'),
|
||||
('ml', 'Malayalam', '', 'L', 72, '0', 'GREGORIAN'),
|
||||
('mn', 'Mongolian', '', 'L', 73, '0', 'GREGORIAN'),
|
||||
('mo', 'Moldavian', '', 'L', 74, '0', 'GREGORIAN'),
|
||||
('mr', 'Marathi', '', 'L', 75, '0', 'GREGORIAN'),
|
||||
('ms', 'Malay', '', 'L', 76, '0', 'GREGORIAN'),
|
||||
('mt', 'Maltese', '', 'L', 77, '0', 'GREGORIAN'),
|
||||
('my', 'Burmese', '', 'L', 78, '0', 'GREGORIAN'),
|
||||
('na', 'Nauru', '', 'L', 79, '0', 'GREGORIAN'),
|
||||
('ne', 'Nepali', '', 'L', 80, '0', 'GREGORIAN'),
|
||||
('nl', 'Dutch', '', 'L', 81, '0', 'GREGORIAN'),
|
||||
('no', 'Norwegian', '', 'L', 82, '0', 'GREGORIAN'),
|
||||
('oc', 'Occitan', '', 'L', 83, '0', 'GREGORIAN'),
|
||||
('om', 'Oromo', '', 'L', 84, '0', 'GREGORIAN'),
|
||||
('or', 'Oriya', '', 'L', 85, '0', 'GREGORIAN'),
|
||||
('pa', 'Punjabi', '', 'L', 86, '0', 'GREGORIAN'),
|
||||
('pl', 'Polish', '', 'L', 87, '0', 'GREGORIAN'),
|
||||
('ps', 'Pashto', '', 'L', 88, '0', 'GREGORIAN'),
|
||||
('pt', 'Portuguese', '', 'L', 89, '0', 'GREGORIAN'),
|
||||
('qu', 'Quechua', '', 'L', 90, '0', 'GREGORIAN'),
|
||||
('rm', 'Rhaeto-Romance', '', 'L', 91, '0', 'GREGORIAN'),
|
||||
('rn', 'Kirundi', '', 'L', 92, '0', 'GREGORIAN'),
|
||||
('ro', 'Romanian', '', 'L', 93, '0', 'GREGORIAN'),
|
||||
('ru', 'Russian', '', 'L', 94, '0', 'GREGORIAN'),
|
||||
('rw', 'Kinyarwanda', '', 'L', 95, '0', 'GREGORIAN'),
|
||||
('sa', 'Sanskrit', '', 'L', 96, '0', 'GREGORIAN'),
|
||||
('sd', 'Sindhi', '', 'L', 97, '0', 'GREGORIAN'),
|
||||
('sg', 'Sangro', '', 'L', 98, '0', 'GREGORIAN'),
|
||||
('sh', 'Serbo-Croatian', '', 'L', 99, '0', 'GREGORIAN'),
|
||||
('si', 'Singhalese', '', 'L', 100, '0', 'GREGORIAN'),
|
||||
('sk', 'Slovak', '', 'L', 101, '0', 'GREGORIAN'),
|
||||
('sl', 'Slovenian', '', 'L', 102, '0', 'GREGORIAN'),
|
||||
('sm', 'Samoan', '', 'L', 103, '0', 'GREGORIAN'),
|
||||
('sn', 'Shona', '', 'L', 104, '0', 'GREGORIAN'),
|
||||
('so', 'Somali', '', 'L', 105, '0', 'GREGORIAN'),
|
||||
('sq', 'Albanian', '', 'L', 106, '0', 'GREGORIAN'),
|
||||
('sr', 'Serbian', '', 'L', 107, '0', 'GREGORIAN'),
|
||||
('ss', 'Siswati', '', 'L', 108, '0', 'GREGORIAN'),
|
||||
('st', 'Sesotho', '', 'L', 109, '0', 'GREGORIAN'),
|
||||
('su', 'Sudanese', '', 'L', 110, '0', 'GREGORIAN'),
|
||||
('sv', 'Swedish', '', 'L', 111, '0', 'GREGORIAN'),
|
||||
('sw', 'Swahili', '', 'L', 112, '0', 'GREGORIAN'),
|
||||
('ta', 'Tamil', '', 'L', 113, '0', 'GREGORIAN'),
|
||||
('te', 'Tegulu', '', 'L', 114, '0', 'GREGORIAN'),
|
||||
('tg', 'Tajik', '', 'L', 115, '0', 'GREGORIAN'),
|
||||
('th', 'Thai', '', 'L', 116, '0', 'GREGORIAN'),
|
||||
('ti', 'Tigrinya', '', 'L', 117, '0', 'GREGORIAN'),
|
||||
('tk', 'Turkmen', '', 'L', 118, '0', 'GREGORIAN'),
|
||||
('tl', 'Tagalog', '', 'L', 119, '0', 'GREGORIAN'),
|
||||
('tn', 'Setswana', '', 'L', 120, '0', 'GREGORIAN'),
|
||||
('to', 'Tonga', '', 'L', 121, '0', 'GREGORIAN'),
|
||||
('tr', 'Turkish', '', 'L', 122, '0', 'GREGORIAN'),
|
||||
('ts', 'Tsonga', '', 'L', 123, '0', 'GREGORIAN'),
|
||||
('tt', 'Tatar', '', 'L', 124, '0', 'GREGORIAN'),
|
||||
('tw', 'Twi', '', 'L', 125, '0', 'GREGORIAN'),
|
||||
('uk', 'Ukrainian', '', 'L', 126, '0', 'GREGORIAN'),
|
||||
('ur', 'Urdu', '', 'L', 127, '0', 'GREGORIAN'),
|
||||
('uz', 'Uzbek', '', 'L', 128, '0', 'GREGORIAN'),
|
||||
('vi', 'Vietnamese', '', 'L', 129, '0', 'GREGORIAN'),
|
||||
('vo', 'Volapuk', '', 'L', 130, '0', 'GREGORIAN'),
|
||||
('wo', 'Wolof', '', 'L', 131, '0', 'GREGORIAN'),
|
||||
('xh', 'Xhosa', '', 'L', 132, '0', 'GREGORIAN'),
|
||||
('yo', 'Yoruba', '', 'L', 133, '0', 'GREGORIAN'),
|
||||
('zh', 'Chinese', '', 'L', 134, '0', 'GREGORIAN'),
|
||||
('zu', 'Zulu', '', 'L', 135, '0', 'GREGORIAN');
|
||||
42
gulliver/bin/tasks/templates/defines.php.tpl
Normal file
42
gulliver/bin/tasks/templates/defines.php.tpl
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* defines.php
|
||||
*
|
||||
*/
|
||||
|
||||
//***************** URL KEY *********************************************
|
||||
define("URL_KEY", '0pt1mu59r1m3' );
|
||||
|
||||
//************ Other definitions **************
|
||||
//web service timeout
|
||||
define( 'TIMEOUT_RESPONSE', 100 );
|
||||
//to login like {projectName} system
|
||||
define( 'APPLICATION_CODE', '{projectName}' );
|
||||
|
||||
define ( 'MAIN_POFILE', '{projectName}');
|
||||
define ( 'PO_SYSTEM_VERSION', '0.0.1');
|
||||
|
||||
|
||||
$G_CONTENT = NULL;
|
||||
$G_MESSAGE = "";
|
||||
$G_MESSAGE_TYPE = "info";
|
||||
$G_MENU_SELECTED = -1;
|
||||
$G_MAIN_MENU = "default";
|
||||
|
||||
define ( 'ENABLE_ENCRYPT', 'no' );
|
||||
define('DB_ERROR_BACKTRACE', TRUE);
|
||||
|
||||
//************ Environment definitions **************
|
||||
define ( 'G_PRO_ENV', 'PRODUCTION' );
|
||||
define ( 'G_DEV_ENV', 'DEVELOPMENT' );
|
||||
define ( 'G_TEST_ENV', 'TEST' );
|
||||
|
||||
///************TimeZone Set***************//
|
||||
|
||||
if (version_compare(phpversion(), "5.1.0", ">=")) {
|
||||
date_default_timezone_set("America/La_Paz");
|
||||
}
|
||||
else {
|
||||
// you're not
|
||||
}
|
||||
|
||||
123
gulliver/bin/tasks/templates/green.html.tpl
Normal file
123
gulliver/bin/tasks/templates/green.html.tpl
Normal file
@@ -0,0 +1,123 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>{$username}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon"/>
|
||||
<link rel="stylesheet" type="text/css" href="/skins/green/style.css"/>
|
||||
{$header}
|
||||
<script type="text/javascript">{literal}
|
||||
var openInfoPanel = function()
|
||||
{
|
||||
var oInfoPanel = new leimnud.module.panel();
|
||||
oInfoPanel.options = {
|
||||
size :{w:500,h:424},
|
||||
position:{x:0,y:0,center:true},
|
||||
title :'System Information',
|
||||
theme :'processmaker',
|
||||
control :{
|
||||
close :true,
|
||||
drag :false
|
||||
},
|
||||
fx:{
|
||||
modal:true
|
||||
}
|
||||
};
|
||||
oInfoPanel.setStyle = {modal: {
|
||||
backgroundColor: 'white'
|
||||
}};
|
||||
oInfoPanel.make();
|
||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
||||
url : '../login/dbInfo',
|
||||
async : false,
|
||||
method: 'POST',
|
||||
args : ''
|
||||
});
|
||||
oRPC.make();
|
||||
oInfoPanel.addContent(oRPC.xmlhttp.responseText);
|
||||
};
|
||||
{/literal}</script>
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td id="pm_header">
|
||||
|
||||
<table width="100%" height="32" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
|
||||
<tr>
|
||||
<td width="50%" rowspan="2" valign="top"><img src="/js/common/core/images/default_logo.gif"></td>
|
||||
<td width="50%" height="16" align="right" valign="top">
|
||||
<div align="right" class="logout"><small>{php}if ((int)$_SESSION['USER_LOGGED'] != 0) {{/php}<a href="../login/login">{php}echo G::LoadTranslation('ID_LOGOUT');{/php}</a>{php}}{/php}</small> </div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%" height="16" valign="bottom" class="title">
|
||||
<div align="right"><? //aca iba el título ?></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width="100%" cellspacing="0" cellpadding="0" border="0" >
|
||||
<tr>
|
||||
<td width="100%" align="left" class="mainMenu" id="pm_menu">
|
||||
<table width="70%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td class="mainMenu"> <td>
|
||||
{include file= "$tpl_menu"}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{php}
|
||||
global $G_TMP_MENU_ALIGN;
|
||||
{/php}
|
||||
<td width="100%" align="{php}($G_TMP_MENU_ALIGN==''?'center':$G_TMP_MENU_ALIGN){/php}" class="subMenu" id="pm_submenu">
|
||||
<table width="50%" cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td> <td>
|
||||
{include file= "$tpl_submenu"}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="pm_separator" class="pm_separator">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="100%" align="center">
|
||||
|
||||
{php}
|
||||
global $G_TEMPLATE;
|
||||
if ($G_TEMPLATE != '')
|
||||
{
|
||||
G::LoadTemplate($G_TEMPLATE);
|
||||
}
|
||||
{/php}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr height="100%">
|
||||
<td height="100%" valign="bottom">
|
||||
<div class="Footer">
|
||||
<div class="image"></div>
|
||||
<div class="content">
|
||||
{php}if (strpos($_SERVER['REQUEST_URI'], '/login/login') !== false) {{/php}
|
||||
{php}if ( defined('SYS_SYS') ) {{/php}
|
||||
<a href="#" onclick="openInfoPanel();return false;" class="FooterLink">| System Information |</a><br />
|
||||
{php}}{/php}
|
||||
<br />Copyright © 2003-2008 Colosa, Inc. All rights reserved.
|
||||
{php}}{/php}
|
||||
</div>
|
||||
</div>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
35
gulliver/bin/tasks/templates/green.php.tpl
Normal file
35
gulliver/bin/tasks/templates/green.php.tpl
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* green.php
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
G::verifyPath ( PATH_SMARTY_C, true );
|
||||
G::verifyPath ( PATH_SMARTY_CACHE, true );
|
||||
|
||||
// put full path to Smarty.class.php
|
||||
require_once(PATH_THIRDPARTY . 'smarty/libs/Smarty.class.php');
|
||||
|
||||
|
||||
$smarty = new Smarty();
|
||||
|
||||
$smarty->template_dir = PATH_SKINS;
|
||||
$smarty->compile_dir = PATH_SMARTY_C;
|
||||
$smarty->cache_dir = PATH_SMARTY_CACHE;
|
||||
$smarty->config_dir = PATH_THIRDPARTY . 'smarty/configs';
|
||||
|
||||
global $G_ENABLE_BLANK_SKIN;
|
||||
|
||||
if ( isset($G_ENABLE_BLANK_SKIN) && $G_ENABLE_BLANK_SKIN ) {
|
||||
$smarty->display('blank.html');
|
||||
}
|
||||
else {
|
||||
$oHeadPublisher =& headPublisher::getSingleton();
|
||||
if (isset($oHeadPublisher)) $header = $oHeadPublisher->printHeader();
|
||||
$smarty->assign('username', (isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . SYS_SYS . ')' : '') );
|
||||
$smarty->assign('header', $header );
|
||||
$smarty->assign('tpl_menu', PATH_TEMPLATE . 'menu.html' );
|
||||
$smarty->assign('tpl_submenu', PATH_TEMPLATE . 'submenu.html' );
|
||||
$smarty->display('green.html');
|
||||
}
|
||||
30
gulliver/bin/tasks/templates/httpd.conf.tpl
Normal file
30
gulliver/bin/tasks/templates/httpd.conf.tpl
Normal file
@@ -0,0 +1,30 @@
|
||||
NameVirtualHost your_ip_address
|
||||
|
||||
#{projectName} virtual host
|
||||
<VirtualHost your_ip_address >
|
||||
ServerName "your_{projectName}_server"
|
||||
DocumentRoot {pathHome}/public_html
|
||||
DirectoryIndex index.html index.php
|
||||
<Directory "{pathHome}/public_html">
|
||||
AddDefaultCharset UTF-8
|
||||
|
||||
AllowOverRide none
|
||||
Options FollowSymlinks
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
|
||||
RewriteEngine on
|
||||
RewriteRule ^.*/(.*)$ sysGeneric.php [NC,L]
|
||||
|
||||
ExpiresActive On
|
||||
ExpiresDefault "access plus 1 day"
|
||||
ExpiresByType image/gif "access plus 1 day"
|
||||
ExpiresByType image/png "access plus 1 day"
|
||||
ExpiresByType image/jpg "access plus 1 day"
|
||||
ExpiresByType text/css "access plus 1 day"
|
||||
ExpiresByType text/javascript "access plus 1 day"
|
||||
|
||||
AddOutputFilterByType DEFLATE text/html
|
||||
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
8
gulliver/bin/tasks/templates/index.html.tpl
Normal file
8
gulliver/bin/tasks/templates/index.html.tpl
Normal file
@@ -0,0 +1,8 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Redirector</title>
|
||||
<meta http-equiv="PRAGMA" content="NO-CACHE" />
|
||||
<meta http-equiv="CACHE-CONTROL" content="NO-STORE" />
|
||||
<meta http-equiv="REFRESH" content="0;URL=/sys{projectName}/en/green/login/login.html" />
|
||||
</head>
|
||||
</html>
|
||||
66
gulliver/bin/tasks/templates/login.php.tpl
Normal file
66
gulliver/bin/tasks/templates/login.php.tpl
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* login.php
|
||||
* {projectName}
|
||||
*
|
||||
*/
|
||||
if (!isset($_SESSION['G_MESSAGE']))
|
||||
{
|
||||
$_SESSION['G_MESSAGE'] = '';
|
||||
}
|
||||
if (!isset($_SESSION['G_MESSAGE_TYPE']))
|
||||
{
|
||||
$_SESSION['G_MESSAGE_TYPE'] = '';
|
||||
}
|
||||
|
||||
$msg = $_SESSION['G_MESSAGE'];
|
||||
$msgType = $_SESSION['G_MESSAGE_TYPE'];
|
||||
|
||||
session_destroy();
|
||||
session_start();
|
||||
|
||||
if (strlen($msg) > 0 )
|
||||
{
|
||||
$_SESSION['G_MESSAGE'] = $msg;
|
||||
}
|
||||
if (strlen($msgType) > 0 )
|
||||
{
|
||||
$_SESSION['G_MESSAGE_TYPE'] = $msgType;
|
||||
}
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/login', '', '', SYS_URI.'login/authentication.php');
|
||||
|
||||
G::RenderPage( "publish" );
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
var openInfoPanel = function()
|
||||
{
|
||||
var oInfoPanel = new leimnud.module.panel();
|
||||
oInfoPanel.options = {
|
||||
size :{ w:500,h:424 },
|
||||
position:{ x:0,y:0,center:true },
|
||||
title :'System Information',
|
||||
theme :'processmaker',
|
||||
control :{
|
||||
close :true,
|
||||
drag :false
|
||||
},
|
||||
fx:{
|
||||
modal:true
|
||||
}
|
||||
};
|
||||
oInfoPanel.setStyle = {modal: {
|
||||
backgroundColor: 'white'
|
||||
}};
|
||||
oInfoPanel.make();
|
||||
var oRPC = new leimnud.module.rpc.xmlhttp({
|
||||
url : '../login/dbInfo',
|
||||
async : false,
|
||||
method: 'POST',
|
||||
args : ''
|
||||
});
|
||||
oRPC.make();
|
||||
oInfoPanel.addContent(oRPC.xmlhttp.responseText);
|
||||
};
|
||||
</script>
|
||||
20
gulliver/bin/tasks/templates/login.xml.tpl
Normal file
20
gulliver/bin/tasks/templates/login.xml.tpl
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dynaForm name="login" version="1.0" basedir="" xmlform_type="NORMAL" width="400px">
|
||||
<TITLE type="title">
|
||||
<en>Login</en>
|
||||
</TITLE>
|
||||
<USR_USERNAME type="text" size="30" maxlength="32" validate="Login">
|
||||
<en>User</en>
|
||||
</USR_USERNAME>
|
||||
<USR_PASSWORD type="password" size="30" maxlength="32">
|
||||
<en>Password</en>
|
||||
</USR_PASSWORD>
|
||||
<USER_LANG type="dropdown">
|
||||
SELECT LAN_ID, LAN_NAME FROM LANGUAGE WHERE LAN_ENABLED = "1" ORDER BY LAN_WEIGHT DESC
|
||||
<en>Language</en>
|
||||
</USER_LANG>
|
||||
<BSUBMIT type="submit">
|
||||
<en>Login</en>
|
||||
</BSUBMIT>
|
||||
</dynaForm>
|
||||
|
||||
26
gulliver/bin/tasks/templates/mainmenu.php.tpl
Executable file
26
gulliver/bin/tasks/templates/mainmenu.php.tpl
Executable file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* {projectName}.php
|
||||
*
|
||||
*/
|
||||
global $G_TMP_MENU;
|
||||
global $RBAC;
|
||||
|
||||
$G_TMP_MENU->AddIdRawOption('USERS', 'users/usersList');
|
||||
//$G_TMP_MENU->AddIdRawOption('REPORTS', 'login/welcome');
|
||||
$G_TMP_MENU->AddIdRawOption('WELCOME', 'login/welcome');
|
||||
|
||||
$G_TMP_MENU->Labels = array(
|
||||
G::LoadTranslation('ID_USERS'),
|
||||
// G::LoadTranslation('ID_REPORTS'),
|
||||
G::LoadTranslation('ID_WELCOME')
|
||||
|
||||
);
|
||||
|
||||
/*
|
||||
|
||||
if ($RBAC->userCanAccess('PM_USERS') != 1)
|
||||
{
|
||||
$G_TMP_MENU->DisableOptionId('USERS');
|
||||
}
|
||||
*/
|
||||
70
gulliver/bin/tasks/templates/paths.php.tpl
Normal file
70
gulliver/bin/tasks/templates/paths.php.tpl
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* paths.php
|
||||
*/
|
||||
|
||||
//****** Basic defines **** //
|
||||
// define('PATH_HOME', $pathhome . PATH_SEP );
|
||||
// define('PATH_TRUNK', $pathTrunk . PATH_SEP );
|
||||
// define('PATH_OUTTRUNK', $pathOutTrunk . PATH_SEP );
|
||||
|
||||
//***************** System Directories & Paths **************************
|
||||
|
||||
//***************** RBAC Paths **************************
|
||||
define( 'PATH_RBAC_HOME', PATH_TRUNK . 'rbac' . PATH_SEP );
|
||||
//***************** GULLIVER Paths **************************
|
||||
define( 'PATH_GULLIVER_HOME', PATH_TRUNK . 'gulliver' . PATH_SEP );
|
||||
define( 'PATH_GULLIVER', PATH_GULLIVER_HOME . 'system' . PATH_SEP ); //gulliver system classes
|
||||
define( 'PATH_GULLIVER_BIN', PATH_GULLIVER_HOME . 'bin' . PATH_SEP ); //gulliver bin classes
|
||||
define( 'PATH_TEMPLATE', PATH_GULLIVER_HOME . 'templates' . PATH_SEP );
|
||||
define( 'PATH_THIRDPARTY', PATH_GULLIVER_HOME . 'thirdparty' . PATH_SEP );
|
||||
|
||||
define( 'PATH_RBAC', PATH_RBAC_HOME . 'engine' . PATH_SEP . 'classes' . PATH_SEP ); //to enable rbac version 2
|
||||
define( 'PATH_RBAC_CORE', PATH_RBAC_HOME . 'engine' . PATH_SEP );
|
||||
|
||||
define( 'PATH_HTML', PATH_HOME . 'public_html' . PATH_SEP );
|
||||
|
||||
//***************** PM Paths CORE **************************
|
||||
define( 'PATH_CORE', PATH_HOME . 'engine' . PATH_SEP );
|
||||
define( 'PATH_SKINS', PATH_CORE . 'skins' . PATH_SEP );
|
||||
define( 'PATH_METHODS', PATH_CORE . 'methods' . PATH_SEP );
|
||||
define( 'PATH_XMLFORM', PATH_CORE . 'xmlform' . PATH_SEP );
|
||||
define( 'PATH_PLUGINS', PATH_CORE . 'plugins' . PATH_SEP );
|
||||
define( 'PATH_HTMLMAIL', PATH_CORE . 'html_templates' . PATH_SEP );
|
||||
define( 'PATH_TPL', PATH_CORE . 'templates' . PATH_SEP );
|
||||
define( 'PATH_TEST', PATH_CORE . 'test' . PATH_SEP );
|
||||
define( 'PATH_FIXTURES', PATH_TEST . 'fixtures' . PATH_SEP );
|
||||
define( 'PATH_RTFDOCS' , PATH_CORE . 'rtf_templates' . PATH_SEP );
|
||||
define( 'PATH_DYNACONT', PATH_CORE . 'content' . PATH_SEP . 'dynaform' . PATH_SEP );
|
||||
define( 'PATH_LANGUAGECONT',PATH_CORE . 'content' . PATH_SEP . 'languages' . PATH_SEP );
|
||||
define( 'SYS_UPLOAD_PATH', PATH_HOME . "public_html/files/" );
|
||||
define( 'PATH_UPLOAD', PATH_HTML . 'files' . PATH_SEP);
|
||||
define( 'PATH_WORKFLOW_MYSQL_DATA', PATH_CORE . 'data' . PATH_SEP.'mysql'.PATH_SEP);
|
||||
define( 'PATH_RBAC_MYSQL_DATA', PATH_RBAC_CORE . 'data' . PATH_SEP.'mysql'.PATH_SEP);
|
||||
|
||||
define( 'FILE_PATHS_INSTALLED', PATH_CORE . 'config' . PATH_SEP . 'paths_installed.php' );
|
||||
//************ include Gulliver Class **************
|
||||
require_once( PATH_GULLIVER . PATH_SEP . 'class.g.php');
|
||||
|
||||
//************ Install definitions **************
|
||||
define( 'PATH_DATA', '/shared/{projectName}_data/' );
|
||||
define( 'PATH_C', PATH_OUTTRUNK.'compiled/' );
|
||||
|
||||
//************ the Smarty Directories **************
|
||||
// TODO: This path defines where to save temporal data, similar to $_SESSION.
|
||||
define( 'PATH_TEMPORAL', PATH_C . 'dynEditor/');
|
||||
|
||||
define( 'PATH_DB', PATH_DATA . 'sites' . PATH_SEP );
|
||||
define( 'PATH_SMARTY_C', PATH_C . 'smarty' . PATH_SEP . 'c' );
|
||||
define( 'PATH_SMARTY_CACHE', PATH_C . 'smarty' . PATH_SEP . 'cache' );
|
||||
if (!is_dir(PATH_SMARTY_C)) G::mk_dir(PATH_SMARTY_C);
|
||||
if (!is_dir(PATH_SMARTY_CACHE)) G::mk_dir(PATH_SMARTY_CACHE);
|
||||
|
||||
//***************** set include path ***********************
|
||||
set_include_path(
|
||||
PATH_CORE . PATH_SEPARATOR .
|
||||
PATH_THIRDPARTY . PATH_SEPARATOR .
|
||||
PATH_THIRDPARTY . 'pear'. PATH_SEPARATOR .
|
||||
PATH_RBAC_CORE . PATH_SEPARATOR .
|
||||
get_include_path()
|
||||
);
|
||||
27
gulliver/bin/tasks/templates/permissionsList.php.tpl
Normal file
27
gulliver/bin/tasks/templates/permissionsList.php.tpl
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* roles_List.php
|
||||
*
|
||||
*/
|
||||
|
||||
require_once ( PATH_RBAC . "model/PermissionsPeer.php");
|
||||
$oCriteria = $RBAC->listAllPermissions( '{rbacProjectName}');
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = 'users';
|
||||
$G_ID_MENU_SELECTED = 'USERS';
|
||||
$G_ID_SUB_MENU_SELECTED = 'PERMISSIONS';
|
||||
|
||||
|
||||
$rs = RolesPeer::doSelectRs ( $oCriteria );
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('propeltable', 'paged-table', 'users/permissionsList', $oCriteria);
|
||||
|
||||
G::RenderPage('publish');
|
||||
26
gulliver/bin/tasks/templates/permissionsList.xml.tpl
Normal file
26
gulliver/bin/tasks/templates/permissionsList.xml.tpl
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm
|
||||
width = "100%"
|
||||
>
|
||||
<PER_UID type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>#</en>
|
||||
</PER_UID>
|
||||
|
||||
<PER_CODE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Permission Name</en>
|
||||
</PER_CODE >
|
||||
|
||||
<PER_CREATE_DATE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Create Date</en>
|
||||
</PER_CREATE_DATE>
|
||||
|
||||
<PER_UPDATE_DATE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Update Date</en>
|
||||
</PER_UPDATE_DATE>
|
||||
|
||||
<PER_STATUS type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>Status</en>
|
||||
</PER_STATUS>
|
||||
|
||||
|
||||
</dynaForm>
|
||||
166
gulliver/bin/tasks/templates/pluginClass.tpl
Normal file
166
gulliver/bin/tasks/templates/pluginClass.tpl
Normal file
@@ -0,0 +1,166 @@
|
||||
<?php
|
||||
/**
|
||||
* class.{className}.php
|
||||
*
|
||||
*/
|
||||
|
||||
class {className}Class extends PMPlugin {
|
||||
|
||||
function __construct ( ) {
|
||||
set_include_path(
|
||||
PATH_PLUGINS . '{className}' . PATH_SEPARATOR .
|
||||
get_include_path()
|
||||
);
|
||||
}
|
||||
|
||||
function setup()
|
||||
{
|
||||
}
|
||||
|
||||
<!-- START BLOCK : dashboard -->
|
||||
//here we are defining the available charts, the dashboard setup will call this function to know the charts
|
||||
function getAvailableCharts( ) {
|
||||
return array (
|
||||
'{className}Chart',
|
||||
);
|
||||
}
|
||||
|
||||
function getChart( $chartName ) {
|
||||
$prePath = '/sys' . SYS_SYS . '/' . SYS_LANG . '/blank/';
|
||||
$obj = new StdClass();
|
||||
switch ($chartName) {
|
||||
case '{className}Chart':
|
||||
$obj->title = '{className} Chart - Per Forum';
|
||||
break;
|
||||
}
|
||||
$obj->height = 220;
|
||||
$obj->open->image = $prePath . '{className}/drawChart?chart=' . $chartName . "&u=";
|
||||
return $obj;
|
||||
}
|
||||
|
||||
/* definition of all charts */
|
||||
/* that definition comes in two parts :
|
||||
/* 1. the getXX () function to get the data from the databases
|
||||
/* 2. the XX () function to draw the graph
|
||||
*/
|
||||
|
||||
/** chart {className} ***/
|
||||
function get{className}Chart ( ) {
|
||||
$dataSet = array();
|
||||
$past1months = mktime(0, 0, 0, date("m") -1 , date("d"), date("Y"));
|
||||
|
||||
$con = Propel::getConnection('workflow');
|
||||
$sql = "select CON_VALUE, COUNT(*) AS CANT from APPLICATION LEFT JOIN CONTENT ON ( CON_CATEGORY = 'PRO_TITLE' AND CON_ID = PRO_UID AND CON_LANG = 'en' ) GROUP BY CON_VALUE" ;
|
||||
$stmt = $con->createStatement();
|
||||
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
if ( strlen ( trim ($row['CON_VALUE']) ) > 0 ) {
|
||||
$label[] = $row['CON_VALUE'];
|
||||
$data[] = $row['CANT'];
|
||||
}
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
$dataSet['data'] = $data;
|
||||
$dataSet['label'] = $label;
|
||||
|
||||
$max = 1;
|
||||
foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val;
|
||||
$aux = intval($max / 6 ) * 6 + 6;
|
||||
$dataSet['max'] = $aux;
|
||||
|
||||
return $dataSet;
|
||||
}
|
||||
|
||||
function {className}Chart( ) {
|
||||
G::LoadThirdParty("libchart/classes", "libchart" );
|
||||
$chart = new VerticalBarChart(430, 220);
|
||||
$dataSet = $this->get{className}Chart();
|
||||
$dataPostSet = new XYDataSet();
|
||||
$dataTopicSet = new XYDataSet();
|
||||
foreach ( $dataSet['label'] as $key => $label ) {
|
||||
$dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ;
|
||||
}
|
||||
|
||||
$chart->setDataSet($dataPostSet);
|
||||
$chart->setTitle( " Posts by Week " );
|
||||
$chart->render();
|
||||
}
|
||||
|
||||
|
||||
<!-- END BLOCK : dashboard -->
|
||||
|
||||
<!-- START BLOCK : report -->
|
||||
|
||||
//here we are defining the available charts, the dashboard setup will call this function to know the charts
|
||||
function getAvailableReports( ) {
|
||||
return array (
|
||||
array ( 'uid'=>'{className}Report_1', 'title'=>'{className} Test Report (users)' ),
|
||||
//array ( 'uid'=>'{className}Report_2', 'title'=>'{className} Test Report (groups)' )
|
||||
);
|
||||
}
|
||||
|
||||
function getReport( $reportName ) {
|
||||
$obj = new StdClass();
|
||||
switch ( $reportName ) {
|
||||
case '{className}Report_1':
|
||||
$obj->title = '{className} Test Report (users)';
|
||||
break;
|
||||
case '{className}Report_2':
|
||||
$obj->title = '{className} Test Report (users)';
|
||||
break;
|
||||
default:
|
||||
$obj->title = 'default ....';
|
||||
break;
|
||||
}
|
||||
return $obj;
|
||||
}
|
||||
|
||||
function {className}Report_1() {
|
||||
global $G_PUBLISH;
|
||||
require_once 'classes/model/Users.php';
|
||||
$sDelimiter = DBAdapter::getStringDelimiter();
|
||||
$aUsers = array();
|
||||
$aUsers[] = array('USR_UID' => 'char',
|
||||
'USR_NAME' => 'char',
|
||||
'USR_FIRSTNAME' => 'char',
|
||||
'USR_LASTNAME' => 'char',
|
||||
'USR_EMAIL' => 'char',
|
||||
'USR_ROLE' => 'char',);
|
||||
|
||||
$con = Propel::getConnection('workflow');
|
||||
$sql = 'SELECT USR_UID,USR_USERNAME,USR_FIRSTNAME,USR_LASTNAME,USR_EMAIL,USR_ROLE FROM USERS';
|
||||
$stmt = $con->createStatement();
|
||||
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
$aUsers[] = array('USR_UID' => $row['USR_UID'],
|
||||
'USR_NAME' => $row['USR_USERNAME'],
|
||||
'USR_FIRSTNAME' => $row['USR_FIRSTNAME'],
|
||||
'USR_LASTNAME' => $row['USR_LASTNAME'],
|
||||
'USR_EMAIL' => $row['USR_EMAIL'],
|
||||
'USR_ROLE' => $row['USR_ROLE']);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
|
||||
global $_DBArray;
|
||||
$_DBArray['users'] = $aUsers;
|
||||
$_SESSION['_DBArray'] = $_DBArray;
|
||||
|
||||
G::LoadClass('ArrayPeer');
|
||||
$oCriteria = new Criteria('dbarray');
|
||||
$oCriteria->setDBArrayTable('users');
|
||||
$oCriteria->addDescendingOrderByColumn('USR_USERNAME');
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('propeltable', 'paged-table', '{className}/report', $oCriteria);
|
||||
G::RenderPage('publish');
|
||||
return 1;
|
||||
}
|
||||
|
||||
<!-- END BLOCK : report -->
|
||||
|
||||
}
|
||||
38
gulliver/bin/tasks/templates/pluginDelete.tpl
Normal file
38
gulliver/bin/tasks/templates/pluginDelete.tpl
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
//to do: improve the way to pass two or more parameters in the paged-table ( link )
|
||||
|
||||
$aux = explode ( '|', $_GET['id'] );
|
||||
$index=0;
|
||||
<!-- START BLOCK : keys -->
|
||||
${phpName} = str_replace ( '"', '', $aux[$index++] );
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
//if exists the row in the database propel will update it, otherwise will insert.
|
||||
$tr = {className}Peer::retrieveByPK( {keylist} );
|
||||
|
||||
if ( ( is_object ( $tr ) && get_class ($tr) == '{className}' ) ) {
|
||||
<!-- START BLOCK : fields -->
|
||||
$fields['{name}'] = $tr->get{phpName}();
|
||||
$fields['LABEL_{name}'] = $tr->get{phpName}();
|
||||
<!-- END BLOCK : fields -->
|
||||
}
|
||||
else
|
||||
$fields = array();
|
||||
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = '{phpClassName}';
|
||||
$G_ID_MENU_SELECTED = '{menuId}';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', '{phpFolderName}/{phpClassName}Delete', '', $fields, '{phpClassName}DeleteExec' );
|
||||
G::RenderPage('publish');
|
||||
?>
|
||||
31
gulliver/bin/tasks/templates/pluginDeleteExec.tpl
Normal file
31
gulliver/bin/tasks/templates/pluginDeleteExec.tpl
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
try {
|
||||
|
||||
$form = $_POST['form'];
|
||||
<!-- START BLOCK : keys -->
|
||||
${phpName} = $form['{name}'];
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
|
||||
//if exists the row in the database propel will update it, otherwise will insert.
|
||||
$tr = {className}Peer::retrieveByPK( {keylist} );
|
||||
if ( ( is_object ( $tr ) && get_class ($tr) == '{className}' ) ) {
|
||||
$tr->delete();
|
||||
}
|
||||
|
||||
G::Header('location: {phpClassName}List');
|
||||
|
||||
}
|
||||
catch ( Exception $e ) {
|
||||
$G_PUBLISH = new Publisher;
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish', 'blank' );
|
||||
}
|
||||
|
||||
14
gulliver/bin/tasks/templates/pluginDrawChart.php.tpl
Executable file
14
gulliver/bin/tasks/templates/pluginDrawChart.php.tpl
Executable file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
//header("Content-type: image/png");
|
||||
|
||||
$chartType = isset ( $_GET['chart']) ? $_GET['chart'] : '1' ;
|
||||
|
||||
// use the chart class to build the chart:
|
||||
include_once ( "class.{className}.php" );
|
||||
$chartsObj = new {className}Class();
|
||||
|
||||
if ( method_exists( $chartsObj, $chartType) ) {
|
||||
$chartsObj->{ $chartType }();
|
||||
die;
|
||||
}
|
||||
|
||||
34
gulliver/bin/tasks/templates/pluginEdit.tpl
Normal file
34
gulliver/bin/tasks/templates/pluginEdit.tpl
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
$aux = explode ( '|', isset($_GET['id']) ? $_GET['id'] : '' );
|
||||
<!-- START BLOCK : keys -->
|
||||
${phpName} = str_replace ( '"', '', $aux[{index}] );
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
//if exists the row in the database propel will update it, otherwise will insert.
|
||||
$tr = {className}Peer::retrieveByPK( {keylist} );
|
||||
|
||||
if ( ( is_object ( $tr ) && get_class ($tr) == '{className}' ) ) {
|
||||
<!-- START BLOCK : fields -->
|
||||
$fields['{name}'] = $tr->get{phpName}();
|
||||
<!-- END BLOCK : fields -->
|
||||
}
|
||||
else
|
||||
$fields = array();
|
||||
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = '{phpClassName}';
|
||||
$G_ID_MENU_SELECTED = '{menuId}';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', '{phpFolderName}/{phpClassName}Edit', '', $fields, '{phpClassName}Save' );
|
||||
G::RenderPage('publish');
|
||||
?>
|
||||
36
gulliver/bin/tasks/templates/pluginList.tpl
Normal file
36
gulliver/bin/tasks/templates/pluginList.tpl
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
try {
|
||||
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = '{phpClassName}';
|
||||
$G_ID_MENU_SELECTED = '{menuId}';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
|
||||
$Criteria = new Criteria('workflow');
|
||||
$Criteria->clearSelectColumns ( );
|
||||
|
||||
<!-- START BLOCK : fields -->
|
||||
$Criteria->addSelectColumn ( {className}Peer::{name} );
|
||||
<!-- END BLOCK : fields -->
|
||||
|
||||
$Criteria->add ( {phpClassName}Peer::{firstKey}, "xx" , CRITERIA::NOT_EQUAL );
|
||||
|
||||
$G_PUBLISH->AddContent('propeltable', 'paged-table', '{phpFolderName}/{phpClassName}List', $Criteria , array(),'');
|
||||
G::RenderPage('publish');
|
||||
|
||||
}
|
||||
catch ( Exception $e ) {
|
||||
$G_PUBLISH = new Publisher;
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish', 'blank' );
|
||||
}
|
||||
65
gulliver/bin/tasks/templates/pluginMainFile.tpl
Normal file
65
gulliver/bin/tasks/templates/pluginMainFile.tpl
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
G::LoadClass('plugin');
|
||||
|
||||
class {className}Plugin extends PMPlugin
|
||||
{
|
||||
function {className}Plugin($sNamespace, $sFilename = null) {
|
||||
$res = parent::PMPlugin($sNamespace, $sFilename);
|
||||
$this->sFriendlyName = '{className} Plugin';
|
||||
$this->sDescription = 'Autogenerated plugin for class {className}';
|
||||
$this->sPluginFolder = '{className}';
|
||||
$this->sSetupPage = '{className}';
|
||||
$this->iVersion = 0.78;
|
||||
//$this->iPMVersion = 2425;
|
||||
$this->aWorkspaces = null;
|
||||
//$this->aWorkspaces = array('os');
|
||||
return $res;
|
||||
}
|
||||
|
||||
function setup() {
|
||||
<!-- START BLOCK : changeLogo -->
|
||||
$this->setCompanyLogo ('/plugin/{className}/{className}.png');
|
||||
<!-- END BLOCK : changeLogo -->
|
||||
<!-- START BLOCK : menu -->
|
||||
$this->registerMenu( 'setup', 'menu{className}.php');
|
||||
<!-- END BLOCK : menu -->
|
||||
<!-- START BLOCK : ontransit -->
|
||||
$this->registerMenu( 'processmaker', 'menu{className}OnTransit.php');
|
||||
<!-- END BLOCK : ontransit -->
|
||||
<!-- START BLOCK : externalStep -->
|
||||
$this->registerStep( '{GUID}', 'step{className}', '{className} external step' );
|
||||
<!-- END BLOCK : externalStep -->
|
||||
<!-- START BLOCK : dashboard -->
|
||||
$this->registerDashboard();
|
||||
<!-- END BLOCK : dashboard -->
|
||||
<!-- START BLOCK : report -->
|
||||
$this->registerReport();
|
||||
<!-- END BLOCK : report -->
|
||||
<!-- START BLOCK : PmFunction -->
|
||||
$this->registerPmFunction();
|
||||
<!-- END BLOCK : PmFunction -->
|
||||
<!-- START BLOCK : redirectLogin -->
|
||||
$this->redirectLogin( 'PROCESSMAKER_{className}', 'users/users_List' );
|
||||
<!-- END BLOCK : redirectLogin -->
|
||||
}
|
||||
|
||||
function install() {
|
||||
<!-- START BLOCK : createPermission -->
|
||||
$RBAC = RBAC::getSingleton() ;
|
||||
$RBAC->initRBAC();
|
||||
$roleData = array();
|
||||
$roleData['ROL_UID'] = G::GenerateUniqueId();
|
||||
$roleData['ROL_PARENT'] = '';
|
||||
$roleData['ROL_SYSTEM'] = '00000000000000000000000000000002';
|
||||
$roleData['ROL_CODE'] = 'PROCESSMAKER_{className}';
|
||||
$roleData['ROL_CREATE_DATE'] = date('Y-m-d H:i:s');
|
||||
$roleData['ROL_UPDATE_DATE'] = date('Y-m-d H:i:s');
|
||||
$roleData['ROL_STATUS'] = '1';
|
||||
$RBAC->createRole ( $roleData );
|
||||
$RBAC->createPermision ('PM_{className}' );
|
||||
<!-- END BLOCK : createPermission -->
|
||||
}
|
||||
}
|
||||
|
||||
$oPluginRegistry =& PMPluginRegistry::getSingleton();
|
||||
$oPluginRegistry->registerPlugin('{className}', __FILE__);
|
||||
5
gulliver/bin/tasks/templates/pluginMenu.tpl
Normal file
5
gulliver/bin/tasks/templates/pluginMenu.tpl
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
global $G_TMP_MENU;
|
||||
$G_TMP_MENU->AddIdRawOption('{menuId}', '{phpClassName}/{phpClassName}List', "{className}" );
|
||||
|
||||
?>
|
||||
5
gulliver/bin/tasks/templates/pluginMenuOnTransit.tpl
Normal file
5
gulliver/bin/tasks/templates/pluginMenuOnTransit.tpl
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
global $G_TMP_MENU;
|
||||
$G_TMP_MENU->AddIdRawOption('{menuId}_ONTRANSIT', '{phpClassName}/{phpClassName}OnTransitList', "ON_TRANSIT" );
|
||||
|
||||
?>
|
||||
37
gulliver/bin/tasks/templates/pluginNew.tpl
Normal file
37
gulliver/bin/tasks/templates/pluginNew.tpl
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
|
||||
<!-- START BLOCK : dummy -->
|
||||
//if exists the row in the database propel will update it, otherwise will insert.
|
||||
// $tr = {phpClassName}Peer::retrieveByPK( {keylist} );
|
||||
// if ( ( is_object ( $tr ) && get_class ($tr) == '{phpClassName}' ) ) {
|
||||
// }
|
||||
// else
|
||||
// $fields = array();
|
||||
// $fields['ITM_UID'] = $ItmUid;
|
||||
<!-- END BLOCK : dummy -->
|
||||
|
||||
<!-- START BLOCK : keys -->
|
||||
$fields['{name}'] = G::GenerateUniqueID();;
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<!-- START BLOCK : onlyFields -->
|
||||
$fields['{name}'] = '';
|
||||
<!-- END BLOCK : onlyFields -->
|
||||
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = '{phpClassName}';
|
||||
$G_ID_MENU_SELECTED = '{menuId}';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', '{phpFolderName}/{phpClassName}Edit', '', $fields, '{phpClassName}Save' );
|
||||
G::RenderPage('publish');
|
||||
?>
|
||||
35
gulliver/bin/tasks/templates/pluginOnTransitList.php.tpl
Normal file
35
gulliver/bin/tasks/templates/pluginOnTransitList.php.tpl
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* OnTransit.php for plugin {className}
|
||||
*
|
||||
*
|
||||
*/
|
||||
/* Permissions */
|
||||
//if (($RBAC_Response = $RBAC->userCanAccess("PM_CASES"))!=1) return $RBAC_Response;
|
||||
|
||||
/* Includes */
|
||||
G::LoadClass('case');
|
||||
G::LoadClass('configuration');
|
||||
|
||||
/* GET , POST & $_SESSION Vars */
|
||||
$conf = new Configurations();
|
||||
|
||||
$sTypeList = 'to_do';
|
||||
|
||||
$sUIDUserLogged = $_SESSION['USER_LOGGED'];
|
||||
|
||||
/* Menues */
|
||||
$G_MAIN_MENU = 'processmaker';
|
||||
$G_SUB_MENU = '{className}/menu{className}';
|
||||
$G_ID_MENU_SELECTED = '{menuId}';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
$oCases = new Cases();
|
||||
list($Criteria,$xmlfile) = $oCases->getConditionCasesList( $sTypeList, $sUIDUserLogged);
|
||||
$xmlfile = '{className}/{className}OnTransitList';
|
||||
/* Render page */
|
||||
|
||||
//require_once ( 'classes/class.extendGulliver.php' );
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent( 'propeltable', '{className}/paged-table', '{className}/{className}OnTransitList', $Criteria );
|
||||
G::RenderPage( "publish" );
|
||||
85
gulliver/bin/tasks/templates/pluginOnTransitList.xml.tpl
Normal file
85
gulliver/bin/tasks/templates/pluginOnTransitList.xml.tpl
Normal file
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm
|
||||
|
||||
name = "cases_List"
|
||||
type = "filterform"
|
||||
sqlConnection = ""
|
||||
menu = "cases/cases_Options"
|
||||
filterForm = "cases/cases_List"
|
||||
searchBy = "APPLICATION.APP_NUMBER | APP_TITLE.CON_VALUE | TAS_TITLE.CON_VALUE | PRO_TITLE.CON_VALUE "
|
||||
width = "100%"
|
||||
>
|
||||
<cases_Open type="private" defaultValue="cases_Open" showInTable="0"/>
|
||||
<APP_UID type="private" showInTable="0"/>
|
||||
<DEL_INDEX type="private" showInTable="0"/>
|
||||
<MARK type="cellMark" className="cellSelected1" classNameAlt="cellSelected2" condition="'@#DEL_INIT_DATE'==''"/>
|
||||
|
||||
<APP_NUMBER type="text" colWidth="50" titleAlign="left" align="left" dataCompareField="APP_NUMBER" dataCompareType="=" >
|
||||
<en>#</en>
|
||||
</APP_NUMBER>
|
||||
|
||||
<APP_TITLE type="text" value="@#APP_TITLE" link="@G::encryptlink(@#cases_Open)?APP_UID=@#APP_UID&DEL_INDEX=@#DEL_INDEX" colWidth="100" titleAlign="left" align="left" dataCompareField="APP_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
<en>Case</en>
|
||||
</APP_TITLE>
|
||||
|
||||
<APP_TAS_TITLE type="text" value="@#APP_TAS_TITLE" link="@G::encryptlink(@#cases_Open)?APP_UID=@#APP_UID&DEL_INDEX=@#DEL_INDEX" colWidth="130" titleAlign="left" align="left" dataCompareField="TAS_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
<en>Task</en>
|
||||
</APP_TAS_TITLE>
|
||||
|
||||
<APP_PRO_TITLE type="text" colWidth="180" titleAlign="left" align="left" dataCompareField="PRO_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
<en>Process</en>
|
||||
</APP_PRO_TITLE>
|
||||
|
||||
<APP_DEL_PREVIOUS_USER type="text" colWidth="120" titleAlign="left" align="left" dataCompareField="APP_LAST_USER.USR_USERNAME" dataCompareType="contains" >
|
||||
<en>Sent by</en>
|
||||
</APP_DEL_PREVIOUS_USER>
|
||||
|
||||
<DEL_TASK_DUE_DATE type="date" rows="3" cols="32" colWidth="120" titleAlign="left" align="left" dataCompareField="APP_DELEGATION.DEL_TASK_DUE_DATE" dataCompareType="contains" >
|
||||
<en>Due Date</en>
|
||||
</DEL_TASK_DUE_DATE>
|
||||
|
||||
<APP_UPDATE_DATE type="date" rows="3" cols="32" colWidth="120" titleAlign="left" align="left" dataCompareField="APPLICATION.APP_UPDATE_DATE" dataCompareType="contains" >
|
||||
<en>Last Modification</en>
|
||||
</APP_UPDATE_DATE>
|
||||
|
||||
<DEL_PRIORITY type="dropdown" value="" link="" colWidth="180" titleAlign="left" align="left" dataCompareField="APP_DELEGATION.DEL_PRIORITY" dataCompareType="contains">
|
||||
<en>Priority
|
||||
<option name="1">Very High</option>
|
||||
<option name="2">High</option>
|
||||
<option name="3">Normal</option>
|
||||
<option name="4">Low</option>
|
||||
<option name="5">Very Low</option>
|
||||
</en>
|
||||
</DEL_PRIORITY>
|
||||
|
||||
<DEL_INIT_DATE type="date" rows="3" cols="32" colWidth="90" titleAlign="left" align="left" dataCompareField="APPLICATION.APP_UPDATE_DATE" dataCompareType="contains" showInTable="0">
|
||||
<en>Start Date</en>
|
||||
</DEL_INIT_DATE>
|
||||
|
||||
<APP_STATUS type="private" showInTable="0"/>
|
||||
|
||||
<MARK2 type="cellMark" className="RowLink1" classNameAlt="RowLink2" defaultValue="1"/>
|
||||
<!--<EDIT type="link" colWidth="40" value="@G::LoadTranslation(ID_EDIT)" link="#" onclick="casesEdit(@QAPP_UID);return false;"/>
|
||||
-->
|
||||
|
||||
<OPEN type="link" value="@G::LoadTranslation(ID_OPEN)" link="@G::encryptlink(@#cases_Open)?APP_UID=@#APP_UID&DEL_INDEX=@#DEL_INDEX" colWidth="40" titleAlign="left" align="left" dataCompareField="APP_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
<en></en>
|
||||
</OPEN>
|
||||
|
||||
|
||||
|
||||
<!--<CANCEL type="link" colWidth="40" value="@G::LoadTranslation(ID_CANCEL)" link="#" onclick="cancelCase(@QAPP_UID, @QDEL_INDEX);return false;"/>-->
|
||||
|
||||
<!-- FILTER FORM -->
|
||||
<SEARCH type="button" onclick="pagedTableFilter( this.form );" showInTable="0">
|
||||
<en>Apply Filter</en>
|
||||
</SEARCH>
|
||||
|
||||
<PAGED_TABLE_ID type="private" showInTable="0"/>
|
||||
|
||||
<JSFILTER type="javascript" replaceTags="1" showInTable="0">
|
||||
function pagedTableFilter( form ) {
|
||||
@#PAGED_TABLE_ID.doFilter( form );
|
||||
}
|
||||
</JSFILTER>
|
||||
</dynaForm>
|
||||
75
gulliver/bin/tasks/templates/pluginPaged-table.html.tpl
Normal file
75
gulliver/bin/tasks/templates/pluginPaged-table.html.tpl
Normal file
@@ -0,0 +1,75 @@
|
||||
<!-- START BLOCK : headBlock -->
|
||||
<table cellpadding="0" cellspacing="0" border="0"><tr><td>
|
||||
<div class="boxTop"><div class="a"></div><div class="b"></div><div class="c"></div></div>
|
||||
<div class="pagedTableDefault">
|
||||
<table id="pagedtable[{pagedTable_Id}]" name="pagedtable[{pagedTable_Name}]" border="0" cellspacing="0" cellpadding="0" class="Default">
|
||||
<tr >
|
||||
<td valign="top">
|
||||
|
||||
<span class='subtitle'>{title}</span>
|
||||
<table cellspacing="0" cellpadding="0" width="100%" border="0">
|
||||
<!-- START BLOCK : headerBlock -->
|
||||
<tr><td class="headerContent">{content}</td></tr>
|
||||
<!-- END BLOCK : headerBlock -->
|
||||
</table>
|
||||
<table id="table[{pagedTable_Id}]" name="table[{pagedTable_Name}]" cellspacing="0" cellpadding="0" width="100%" class="pagedTable">
|
||||
<!-- END BLOCK : headBlock -->
|
||||
<!-- START BLOCK : contentBlock -->
|
||||
<script type="text/javascript">{pagedTable_JS}</script>
|
||||
<tr>
|
||||
<!-- START BLOCK : headers -->
|
||||
<td class="pagedTableHeader"><img style="{displaySeparator}" src="/js/maborak/core/images/separatorTable.gif" /></td>
|
||||
<td width="{width}" style="{align}" class="pagedTableHeader" >
|
||||
<a href="{href}" onclick="{onclick}">{header}</a>
|
||||
</td>
|
||||
<!-- END BLOCK : headers -->
|
||||
</tr>
|
||||
<!-- START BLOCK : row -->
|
||||
<tr class='{class}' onmouseover="setRowClass(this, 'RowPointer' )" onmouseout="setRowClass(this, '{class}')" >
|
||||
<!-- START BLOCK : field -->
|
||||
<td{classAttr}></td><td{classAttr}{alignAttr}>{value}</td>
|
||||
<!-- END BLOCK : field -->
|
||||
</tr>
|
||||
<!-- END BLOCK : row -->
|
||||
<!-- START BLOCK : rowTag -->
|
||||
<!-- END BLOCK : rowTag -->
|
||||
|
||||
<!-- START BLOCK : norecords -->
|
||||
<tr class='Row2'>
|
||||
<td nowrap colspan="{columnCount}" align='center' >
|
||||
{noRecordsFound}<br>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- END BLOCK : norecords -->
|
||||
|
||||
<!-- START BLOCK : bottomFooter -->
|
||||
<tr>
|
||||
<td nowrap colspan="{columnCount}">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr class="pagedTableFooter">
|
||||
<td width="110px" style="{indexStyle}">
|
||||
{labels:ID_ROWS} {firstRow}-{lastRow}/{totalRows}
|
||||
</td>
|
||||
<!--<td style="text-align:center;{fastSearchStyle}"><!--{labels:ID_SEARCH}
|
||||
<input type="text" class="FormField" onkeypress="if (event.keyCode===13){pagedTableId}.doFastSearch(this.value);if (event.keyCode===13)return false;" value="{fastSearchValue}" onfocus="this.select();" size="10" style="{fastSearchStyle}"/>
|
||||
</td>-->
|
||||
<td style="text-align:center;">
|
||||
{first}{prev}{next}{last}
|
||||
</td>
|
||||
<td width="60px" style="text-align:right;padding-right:8px;{indexStyle}">{labels:ID_PAGE} {currentPage}/{totalPages}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- END BLOCK : bottomFooter -->
|
||||
<!-- END BLOCK : contentBlock -->
|
||||
<!-- START BLOCK : closeBlock -->
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="boxBottom"><div class="a"></div><div class="b"></div><div class="c"></div></div>
|
||||
</td></tr></table>
|
||||
<!-- END BLOCK : closeBlock -->
|
||||
46
gulliver/bin/tasks/templates/pluginPropel.ini.tpl
Normal file
46
gulliver/bin/tasks/templates/pluginPropel.ini.tpl
Normal file
@@ -0,0 +1,46 @@
|
||||
propel.targetPackage = classes.model
|
||||
propel.packageObjectModel = true
|
||||
propel.project = {className}
|
||||
propel.database = mysql
|
||||
propel.database.createUrl = mysql://root@localhost/
|
||||
propel.database.url = mysql://root@localhost/{className}
|
||||
|
||||
propel.addGenericAccessors = true
|
||||
propel.addGenericMutators = true
|
||||
propel.addTimeStamp = false
|
||||
|
||||
propel.schema.validate = false
|
||||
|
||||
<!-- START IGNORE -->
|
||||
; directories
|
||||
propel.home = .
|
||||
propel.output.dir = .
|
||||
propel.schema.dir = ${propel.output.dir}config
|
||||
propel.conf.dir = ${propel.output.dir}config
|
||||
propel.phpconf.dir = ${propel.output.dir}config
|
||||
propel.sql.dir = ${propel.output.dir}data/sql
|
||||
propel.runtime.conf.file = runtime-conf.xml
|
||||
propel.php.dir = ${propel.output.dir}
|
||||
propel.default.schema.basename = schema
|
||||
propel.datadump.mapper.from = *schema.xml
|
||||
propel.datadump.mapper.to = *data.xml
|
||||
|
||||
; builder settings
|
||||
;_propel.builder.peer.class = addon.propel.builder.SfPeerBuilder
|
||||
;propel.builder.object.class = addon.propel.builder.SfObjectBuilder
|
||||
|
||||
;propel.builder.objectstub.class = addon.propel.builder.SfExtensionObjectBuilder
|
||||
;propel.builder.peerstub.class = addon.propel.builder.SfExtensionPeerBuilder
|
||||
;propel.builder.objectmultiextend.class = addon.propel.builder.SfMultiExtendObjectBuilder
|
||||
;propel.builder.mapbuilder.class = addon.propel.builder.SfMapBuilderBuilder
|
||||
propel.builder.interface.class = propel.engine.builder.om.php5.PHP5InterfaceBuilder
|
||||
propel.builder.node.class = propel.engine.builder.om.php5.PHP5NodeBuilder
|
||||
propel.builder.nodepeer.class = propel.engine.builder.om.php5.PHP5NodePeerBuilder
|
||||
propel.builder.nodestub.class = propel.engine.builder.om.php5.PHP5ExtensionNodeBuilder
|
||||
propel.builder.nodepeerstub.class = propel.engine.builder.om.php5.PHP5ExtensionNodePeerBuilder
|
||||
|
||||
propel.builder.addIncludes = false
|
||||
propel.builder.addComments = false
|
||||
|
||||
propel.builder.addBehaviors = false
|
||||
<!-- END IGNORE -->
|
||||
46
gulliver/bin/tasks/templates/pluginPropel.mysql.ini.tpl
Normal file
46
gulliver/bin/tasks/templates/pluginPropel.mysql.ini.tpl
Normal file
@@ -0,0 +1,46 @@
|
||||
propel.targetPackage = model
|
||||
propel.packageObjectModel = true
|
||||
propel.project = {className}
|
||||
propel.database = mysql
|
||||
propel.database.createUrl = mysql://root@localhost/
|
||||
propel.database.url = mysql://root@localhost/{className}
|
||||
|
||||
propel.addGenericAccessors = true
|
||||
propel.addGenericMutators = true
|
||||
propel.addTimeStamp = false
|
||||
|
||||
propel.schema.validate = false
|
||||
|
||||
<!-- START IGNORE -->
|
||||
; directories
|
||||
propel.home = .
|
||||
propel.output.dir = .
|
||||
propel.schema.dir = ${propel.output.dir}config
|
||||
propel.conf.dir = ${propel.output.dir}config
|
||||
propel.phpconf.dir = ${propel.output.dir}config
|
||||
propel.sql.dir = ${propel.output.dir}data/mysql
|
||||
propel.runtime.conf.file = runtime-conf.xml
|
||||
propel.php.dir = ${propel.output.dir}
|
||||
propel.default.schema.basename = schema
|
||||
propel.datadump.mapper.from = *schema.xml
|
||||
propel.datadump.mapper.to = *data.xml
|
||||
|
||||
; builder settings
|
||||
;_propel.builder.peer.class = addon.propel.builder.SfPeerBuilder
|
||||
;propel.builder.object.class = addon.propel.builder.SfObjectBuilder
|
||||
|
||||
;propel.builder.objectstub.class = addon.propel.builder.SfExtensionObjectBuilder
|
||||
;propel.builder.peerstub.class = addon.propel.builder.SfExtensionPeerBuilder
|
||||
;propel.builder.objectmultiextend.class = addon.propel.builder.SfMultiExtendObjectBuilder
|
||||
;propel.builder.mapbuilder.class = addon.propel.builder.SfMapBuilderBuilder
|
||||
propel.builder.interface.class = propel.engine.builder.om.php5.PHP5InterfaceBuilder
|
||||
propel.builder.node.class = propel.engine.builder.om.php5.PHP5NodeBuilder
|
||||
propel.builder.nodepeer.class = propel.engine.builder.om.php5.PHP5NodePeerBuilder
|
||||
propel.builder.nodestub.class = propel.engine.builder.om.php5.PHP5ExtensionNodeBuilder
|
||||
propel.builder.nodepeerstub.class = propel.engine.builder.om.php5.PHP5ExtensionNodePeerBuilder
|
||||
|
||||
propel.builder.addIncludes = false
|
||||
propel.builder.addComments = false
|
||||
|
||||
propel.builder.addBehaviors = false
|
||||
<!-- END IGNORE -->
|
||||
26
gulliver/bin/tasks/templates/pluginReport.xml.tpl
Executable file
26
gulliver/bin/tasks/templates/pluginReport.xml.tpl
Executable file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0"?>
|
||||
<dynaForm type="pagetable" >
|
||||
|
||||
<USR_UID type="text" align="left" colWidth="80">
|
||||
<en>Uid</en>
|
||||
</USR_UID>
|
||||
<USR_NAME type="text" align="left" colWidth="80">
|
||||
<en>Name</en>
|
||||
</USR_NAME>
|
||||
<USR_FIRSTNAME type="text" align="left" colWidth="80">
|
||||
<en>First Name</en>
|
||||
</USR_FIRSTNAME>
|
||||
|
||||
<USR_LASTNAME type="text" align="left" colWidth="80">
|
||||
<en>Last Name</en>
|
||||
</USR_LASTNAME>
|
||||
|
||||
<USR_EMAIL type="text" align="left" colWidth="80">
|
||||
<en>Email</en>
|
||||
</USR_EMAIL>
|
||||
|
||||
<USR_ROLE type="text" align="left" colWidth="80">
|
||||
<en>Role</en>
|
||||
</USR_ROLE>
|
||||
|
||||
</dynaForm>
|
||||
53
gulliver/bin/tasks/templates/pluginSave.tpl
Normal file
53
gulliver/bin/tasks/templates/pluginSave.tpl
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
try {
|
||||
$form = $_POST['form'];
|
||||
<!-- START BLOCK : fields2 -->
|
||||
${phpName} = $form['{name}'];
|
||||
<!-- END BLOCK : fields2 -->
|
||||
|
||||
<!-- START BLOCK : plugin -->
|
||||
require_once ( PATH_PLUGINS . '{pluginName}' . PATH_SEP . 'class.{pluginName}.php');
|
||||
$pluginObj = new {pluginName}Class ();
|
||||
<!-- END BLOCK : plugin -->
|
||||
|
||||
require_once ( "classes/model/{className}.php" );
|
||||
|
||||
//if exists the row in the database propel will update it, otherwise will insert.
|
||||
$tr = {className}Peer::retrieveByPK( {keylist} );
|
||||
if ( ! ( is_object ( $tr ) && get_class ($tr) == '{className}' ) ) {
|
||||
$tr = new {className}();
|
||||
}
|
||||
<!-- START BLOCK : fields -->
|
||||
$tr->set{phpName}( ${phpName} );
|
||||
<!-- END BLOCK : fields -->
|
||||
|
||||
if ($tr->validate() ) {
|
||||
// we save it, since we get no validation errors, or do whatever else you like.
|
||||
$res = $tr->save();
|
||||
}
|
||||
else {
|
||||
// Something went wrong. We can now get the validationFailures and handle them.
|
||||
$msg = '';
|
||||
$validationFailuresArray = $tr->getValidationFailures();
|
||||
foreach($validationFailuresArray as $objValidationFailure) {
|
||||
$msg .= $objValidationFailure->getMessage() . "<br/>";
|
||||
}
|
||||
//return array ( 'codError' => -100, 'rowsAffected' => 0, 'message' => $msg );
|
||||
}
|
||||
//return array ( 'codError' => 0, 'rowsAffected' => $res, 'message' => '');
|
||||
|
||||
//to do: uniform coderror structures for all classes
|
||||
|
||||
//if ( $res['codError'] < 0 ) {
|
||||
// G::SendMessageText ( $res['message'] , 'error' );
|
||||
//}
|
||||
G::Header('location: {phpClassName}List');
|
||||
|
||||
}
|
||||
catch ( Exception $e ) {
|
||||
$G_PUBLISH = new Publisher;
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish', 'blank' );
|
||||
}
|
||||
|
||||
73
gulliver/bin/tasks/templates/pluginSchema.xml.tpl
Normal file
73
gulliver/bin/tasks/templates/pluginSchema.xml.tpl
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Autogenerated by CreoleToXMLSchema!-->
|
||||
<database name="workflow">
|
||||
<table name="PLUGIN_DEMO">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="PLUGIN_DEMO"/>
|
||||
<parameter name="Engine" value="MyISAM"/>
|
||||
<parameter name="Version" value="10"/>
|
||||
<parameter name="Row_format" value="Dynamic"/>
|
||||
<parameter name="Auto_increment" value=""/>
|
||||
<parameter name="Collation" value="utf8_general_ci"/>
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value="The plugin demo table for {className}"/>
|
||||
</vendor>
|
||||
<column name="PLG_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="PLG_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="PLG_PARENT_ID" type="INTEGER" required="true" default="0">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="PLG_PARENT_ID"/>
|
||||
<parameter name="Type" value="int(11)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="0"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="PLG_NAME" type="VARCHAR" size="100" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="PLG_FOLDER_NAME"/>
|
||||
<parameter name="Type" value="varchar(100)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="PLG_FULL_PATH" type="VARCHAR" size="255" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="PLG_FULL_PATH"/>
|
||||
<parameter name="Type" value="varchar(255)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<index name="indexApp">
|
||||
<index-column name="PLG_UID"/>
|
||||
<vendor type="mysql">
|
||||
<parameter name="Table" value="PLUGU"/>
|
||||
<parameter name="Non_unique" value="1"/>
|
||||
<parameter name="Key_name" value="indexApp"/>
|
||||
<parameter name="Seq_in_index" value="1"/>
|
||||
<parameter name="Column_name" value="PLUGIN_DEMO"/>
|
||||
<parameter name="Collation" value="A"/>
|
||||
<parameter name="Cardinality" value="6"/>
|
||||
<parameter name="Sub_part" value=""/>
|
||||
<parameter name="Packed" value=""/>
|
||||
<parameter name="Null" value=""/>
|
||||
<parameter name="Index_type" value="BTREE"/>
|
||||
<parameter name="Comment" value=""/>
|
||||
</vendor>
|
||||
</index>
|
||||
</table>
|
||||
</database>
|
||||
8
gulliver/bin/tasks/templates/pluginStep.tpl
Normal file
8
gulliver/bin/tasks/templates/pluginStep.tpl
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
G::LoadClass( "plugin");
|
||||
|
||||
print "this is a default step for {className}";
|
||||
krumo::session ();
|
||||
krumo::get ();
|
||||
krumo::post ();
|
||||
krumo::backtrace ();
|
||||
57
gulliver/bin/tasks/templates/pluginWelcome.php.tpl
Executable file
57
gulliver/bin/tasks/templates/pluginWelcome.php.tpl
Executable file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* welcome.php for plugin {className}
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
try {
|
||||
|
||||
$rows[] = array ( 'uid' => 'char', 'name' => 'char', 'age' => 'integer', 'balance' => 'float' );
|
||||
$rows[] = array ( 'uid' => 11, 'name' => 'john', 'age' => 44, 'balance' => 123423 );
|
||||
$rows[] = array ( 'uid' => 22, 'name' => 'Amy', 'age' => 33, 'balance' => 23456 );
|
||||
$rows[] = array ( 'uid' => 33, 'name' => 'Dan', 'age' => 22, 'balance' => 34567 );
|
||||
$rows[] = array ( 'uid' => 33, 'name' => 'Mike', 'age' => 21, 'balance' => 4567 );
|
||||
$rows[] = array ( 'uid' => 44, 'name' => 'Paul', 'age' => 22, 'balance' => 567 );
|
||||
$rows[] = array ( 'uid' => 55, 'name' => 'Wil', 'age' => 23, 'balance' => 67 );
|
||||
$rows[] = array ( 'uid' => 66, 'name' => 'Ernest', 'age' => 24, 'balance' => 7 );
|
||||
$rows[] = array ( 'uid' => 77, 'name' => 'Albert', 'age' => 25, 'balance' => 84567 );
|
||||
$rows[] = array ( 'uid' => 88, 'name' => 'Sue', 'age' => 26, 'balance' => 94567 );
|
||||
$rows[] = array ( 'uid' => 99, 'name' => 'Freddy', 'age' => 22, 'balance' => 04567 );
|
||||
|
||||
$_DBArray['user'] = $rows;
|
||||
$_SESSION['_DBArray'] = $_DBArray;
|
||||
//krumo ( $_DBArray );
|
||||
|
||||
G::LoadClass( 'ArrayPeer');
|
||||
$c = new Criteria ('dbarray');
|
||||
$c->setDBArrayTable('user');
|
||||
//$c->add ( 'user.age', 122 , Criteria::GREATER_EQUAL );
|
||||
//$c->add ( 'user.balance', 3456 , Criteria::GREATER_EQUAL );
|
||||
$c->addAscendingOrderByColumn ('name');
|
||||
/*
|
||||
$rs = ArrayBasePeer::doSelectRs ( $c );
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
*/
|
||||
/* Render page */
|
||||
$G_MAIN_MENU = 'processmaker';
|
||||
$G_ID_MENU_SELECTED = 'WELCOME';
|
||||
$G_SUB_MENU = 'setup';
|
||||
$G_ID_SUB_MENU_SELECTED = '{menuId}';
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', '{className}/welcome', $c );
|
||||
G::RenderPage( "publish" );
|
||||
|
||||
}
|
||||
catch ( Exception $e ){
|
||||
$G_PUBLISH = new Publisher;
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage('publish');
|
||||
}
|
||||
23
gulliver/bin/tasks/templates/pluginXmlform.tpl
Normal file
23
gulliver/bin/tasks/templates/pluginXmlform.tpl
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm name="{className}" width="600" mode="edit" enableTemplate="0" border="0">
|
||||
|
||||
<title1 type="title" >
|
||||
<en>{className} form</en>
|
||||
</title1>
|
||||
|
||||
<!-- START BLOCK : fields -->
|
||||
<{name} type="{type}" size='{size}' maxlength='{maxlength}' >
|
||||
<en>{label}
|
||||
<!-- START BLOCK : values -->
|
||||
<option name="{value}">{label}</option>
|
||||
<!-- END BLOCK : values -->
|
||||
</en>
|
||||
</{name}>
|
||||
|
||||
<!-- END BLOCK : fields -->
|
||||
|
||||
<BTN_SUBMIT type="submit" >
|
||||
<en>save</en>
|
||||
</BTN_SUBMIT>
|
||||
|
||||
</dynaForm>
|
||||
23
gulliver/bin/tasks/templates/pluginXmlformDelete.tpl
Normal file
23
gulliver/bin/tasks/templates/pluginXmlformDelete.tpl
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm name="{className}" width="600" mode="edit" enableTemplate="0" border="0">
|
||||
|
||||
<title1 type="title" >
|
||||
<en>Delete {className}</en>
|
||||
</title1>
|
||||
|
||||
|
||||
<!-- START BLOCK : keys -->
|
||||
<LABEL_{name} type="caption" colWidth='{size}' >
|
||||
<en>{label}</en>
|
||||
</LABEL_{name}>
|
||||
|
||||
<{name} type="hidden" colWidth='{size}' >
|
||||
</{name}>
|
||||
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<BTN_SUBMIT type="submit" >
|
||||
<en>delete</en>
|
||||
</BTN_SUBMIT>
|
||||
|
||||
</dynaForm>
|
||||
31
gulliver/bin/tasks/templates/pluginXmlformEdit.tpl
Normal file
31
gulliver/bin/tasks/templates/pluginXmlformEdit.tpl
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm name="{className}" width="600" mode="edit" enableTemplate="0" border="0">
|
||||
|
||||
<title1 type="title" >
|
||||
<en>{className} form</en>
|
||||
</title1>
|
||||
|
||||
|
||||
<!-- START BLOCK : keys -->
|
||||
<{name} type="hidden" colWidth='{size}' >
|
||||
<en>{label}</en>
|
||||
</{name}>
|
||||
|
||||
<!-- END BLOCK : keys -->
|
||||
|
||||
<!-- START BLOCK : onlyFields -->
|
||||
<{name} type="{type}" size='{size}' maxlength='{maxlength}' >
|
||||
<en>{label}
|
||||
<!-- START BLOCK : values -->
|
||||
<option name="{value}">{label}</option>
|
||||
<!-- END BLOCK : values -->
|
||||
</en>
|
||||
</{name}>
|
||||
|
||||
<!-- END BLOCK : onlyFields -->
|
||||
|
||||
<BTN_SUBMIT type="submit" >
|
||||
<en>save</en>
|
||||
</BTN_SUBMIT>
|
||||
|
||||
</dynaForm>
|
||||
23
gulliver/bin/tasks/templates/pluginXmlformList.tpl
Normal file
23
gulliver/bin/tasks/templates/pluginXmlformList.tpl
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm name="{className}" width="100%" type="pagedtable"
|
||||
sql="SELECT * from {tableName} "
|
||||
sqlConnection=""
|
||||
menu = "{phpFolderName}/{phpClassName}Options"
|
||||
>
|
||||
|
||||
<!-- START BLOCK : onlyFields -->
|
||||
<{name} type="text" colWidth='{size}' >
|
||||
<en>{label}</en>
|
||||
</{name}>
|
||||
|
||||
<!-- END BLOCK : onlyFields -->
|
||||
|
||||
<LINK type="link" colWidth="60" titleAlign="left" align="left" link='{phpClassName}Edit?id={primaryKey}' >
|
||||
<en>Edit</en>
|
||||
</LINK >
|
||||
|
||||
<LINK2 type="link" colWidth="60" titleAlign="left" align="left" link='{phpClassName}Delete?id={primaryKey}' >
|
||||
<en>Delete</en>
|
||||
</LINK2 >
|
||||
|
||||
</dynaForm>
|
||||
8
gulliver/bin/tasks/templates/pluginXmlformOptions.tpl
Normal file
8
gulliver/bin/tasks/templates/pluginXmlformOptions.tpl
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm type="xmlmenu">
|
||||
|
||||
<{phpClassName}New type="private" defaultValue="../{phpClassName}/{phpClassName}New"/>
|
||||
|
||||
<MNU_NEW type="link" label="New" value='' link="@G::encryptLink(@#{phpClassName}New)" colAlign="left" colWidth="85"></MNU_NEW>
|
||||
|
||||
</dynaForm>
|
||||
44
gulliver/bin/tasks/templates/propel.ini.tpl
Normal file
44
gulliver/bin/tasks/templates/propel.ini.tpl
Normal file
@@ -0,0 +1,44 @@
|
||||
propel.targetPackage = classes.model
|
||||
propel.packageObjectModel = true
|
||||
propel.project = opensource
|
||||
propel.database = {dbName}
|
||||
propel.database.createUrl = mysql://root@localhost/
|
||||
propel.database.url = mysql://root@localhost/db_{projectName}
|
||||
|
||||
propel.addGenericAccessors = true
|
||||
propel.addGenericMutators = true
|
||||
propel.addTimeStamp = false
|
||||
|
||||
propel.schema.validate = false
|
||||
|
||||
; directories
|
||||
propel.home = .
|
||||
propel.output.dir = .
|
||||
propel.schema.dir = ${propel.output.dir}config
|
||||
propel.conf.dir = ${propel.output.dir}config
|
||||
propel.phpconf.dir = ${propel.output.dir}config
|
||||
propel.sql.dir = ${propel.output.dir}data/{dbName}
|
||||
propel.runtime.conf.file = runtime-conf.xml
|
||||
propel.php.dir = ${propel.output.dir}
|
||||
propel.default.schema.basename = schema
|
||||
propel.datadump.mapper.from = *schema.xml
|
||||
propel.datadump.mapper.to = *data.xml
|
||||
|
||||
; builder settings
|
||||
;_propel.builder.peer.class = addon.propel.builder.SfPeerBuilder
|
||||
;propel.builder.object.class = addon.propel.builder.SfObjectBuilder
|
||||
|
||||
;propel.builder.objectstub.class = addon.propel.builder.SfExtensionObjectBuilder
|
||||
;propel.builder.peerstub.class = addon.propel.builder.SfExtensionPeerBuilder
|
||||
;propel.builder.objectmultiextend.class = addon.propel.builder.SfMultiExtendObjectBuilder
|
||||
;propel.builder.mapbuilder.class = addon.propel.builder.SfMapBuilderBuilder
|
||||
propel.builder.interface.class = propel.engine.builder.om.php5.PHP5InterfaceBuilder
|
||||
propel.builder.node.class = propel.engine.builder.om.php5.PHP5NodeBuilder
|
||||
propel.builder.nodepeer.class = propel.engine.builder.om.php5.PHP5NodePeerBuilder
|
||||
propel.builder.nodestub.class = propel.engine.builder.om.php5.PHP5ExtensionNodeBuilder
|
||||
propel.builder.nodepeerstub.class = propel.engine.builder.om.php5.PHP5ExtensionNodePeerBuilder
|
||||
|
||||
propel.builder.addIncludes = false
|
||||
propel.builder.addComments = false
|
||||
|
||||
propel.builder.addBehaviors = false
|
||||
38
gulliver/bin/tasks/templates/publish-treeview.php.tpl
Normal file
38
gulliver/bin/tasks/templates/publish-treeview.php.tpl
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* publish-treeview.php
|
||||
*
|
||||
*/
|
||||
global $G_PUBLISH;
|
||||
global $G_CONTENT;
|
||||
global $G_FORM;
|
||||
global $G_TABLE;
|
||||
if ( !is_object( $G_PUBLISH ) ) die ("Publisher object is required by this template!");
|
||||
?>
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<?php
|
||||
if (isset($_SESSION['G_MESSAGE_TYPE']) && isset($_SESSION['G_MESSAGE'])) {
|
||||
echo('<b>' . G::capitalize($_SESSION['G_MESSAGE_TYPE']) . '</b> : ' . $_SESSION['G_MESSAGE']);
|
||||
unset($_SESSION['G_MESSAGE_TYPE']);
|
||||
unset($_SESSION['G_MESSAGE']);
|
||||
}
|
||||
if( is_array( $G_PUBLISH->Parts ) )
|
||||
{
|
||||
$nplim = count( $G_PUBLISH->Parts );
|
||||
print "<tr>";
|
||||
print "<td width=270 valign=top>";
|
||||
$G_PUBLISH->RenderContent( 0, false );
|
||||
print "</td>";
|
||||
print "<td valign=top>";
|
||||
print "<table border=0>";
|
||||
for( $npcount = 1; $npcount < $nplim; $npcount++ ) {
|
||||
print( "<tr>\n<td align=\"left\" valign=\"top\">\n" );
|
||||
$G_PUBLISH->RenderContent( $npcount, false );
|
||||
print( "</td>\n</tr>\n" );
|
||||
}
|
||||
print "</table>";
|
||||
print "</td>";
|
||||
print "</tr>";
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
35
gulliver/bin/tasks/templates/publish.php.tpl
Normal file
35
gulliver/bin/tasks/templates/publish.php.tpl
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* publish.php
|
||||
*
|
||||
|
||||
*/
|
||||
global $G_PUBLISH;
|
||||
global $G_CONTENT;
|
||||
global $G_FORM;
|
||||
global $G_TABLE;
|
||||
global $RBAC;
|
||||
if ( !is_object( $G_PUBLISH ) ) die ("Publisher object is required by this template!");
|
||||
?>
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<?php
|
||||
if (isset($_SESSION['G_MESSAGE_TYPE']) && isset($_SESSION['G_MESSAGE'])) {
|
||||
echo('<tr><td class="temporalMessage" align="center"><strong>' . G::capitalize($_SESSION['G_MESSAGE_TYPE']) . '</strong> : ' . $_SESSION['G_MESSAGE'] . '</td></tr>');
|
||||
unset($_SESSION['G_MESSAGE_TYPE']);
|
||||
unset($_SESSION['G_MESSAGE']);
|
||||
}
|
||||
if( is_array( $G_PUBLISH->Parts ) )
|
||||
{
|
||||
$nplim = count( $G_PUBLISH->Parts );
|
||||
for( $npcount = 0; $npcount < $nplim; $npcount++ )
|
||||
{
|
||||
print( "<tr>\n<td align=\"center\">\n" );
|
||||
if (isset($RBAC->userObj))
|
||||
$G_PUBLISH->RenderContent( $npcount, ($RBAC->userCanAccess('WF_SHOW_XMLFORM_NAME')==1?true:false) );
|
||||
else
|
||||
$G_PUBLISH->RenderContent( $npcount );
|
||||
print( "</td>\n</tr>\n" );
|
||||
}
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
27
gulliver/bin/tasks/templates/rolesList.php.tpl
Normal file
27
gulliver/bin/tasks/templates/rolesList.php.tpl
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* roles_List.php
|
||||
*
|
||||
*/
|
||||
|
||||
require_once ( PATH_RBAC . "model/RolesPeer.php");
|
||||
$oCriteria = $RBAC->listAllRoles( '{rbacProjectName}');
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = 'users';
|
||||
$G_ID_MENU_SELECTED = 'USERS';
|
||||
$G_ID_SUB_MENU_SELECTED = 'ROLES';
|
||||
|
||||
/*
|
||||
$rs = RolesPeer::doSelectRs ( $oCriteria );
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
*/
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('propeltable', 'paged-table', 'users/rolesList', $oCriteria);
|
||||
|
||||
G::RenderPage('publish');
|
||||
30
gulliver/bin/tasks/templates/rolesList.xml.tpl
Normal file
30
gulliver/bin/tasks/templates/rolesList.xml.tpl
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm
|
||||
width = "100%"
|
||||
>
|
||||
<ROL_UID type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>#</en>
|
||||
</ROL_UID>
|
||||
|
||||
<SYS_CODE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>System Name</en>
|
||||
</SYS_CODE >
|
||||
|
||||
<ROL_CODE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>System Name</en>
|
||||
</ROL_CODE >
|
||||
|
||||
<ROL_CREATE_DATE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Create Date</en>
|
||||
</ROL_CREATE_DATE>
|
||||
|
||||
<ROL_UPDATE_DATE type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Update Date</en>
|
||||
</ROL_UPDATE_DATE>
|
||||
|
||||
<ROL_STATUS type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>Status</en>
|
||||
</ROL_STATUS>
|
||||
|
||||
|
||||
</dynaForm>
|
||||
526
gulliver/bin/tasks/templates/schema.xml.tpl
Normal file
526
gulliver/bin/tasks/templates/schema.xml.tpl
Normal file
@@ -0,0 +1,526 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<database name="workflow">
|
||||
|
||||
<table name="CONFIGURATION">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="CONFIGURATION"/>
|
||||
<parameter name="Engine" value="MyISAM"/>
|
||||
<parameter name="Version" value="10"/>
|
||||
<parameter name="Row_format" value="Dynamic"/>
|
||||
<parameter name="Rows" value="11"/>
|
||||
<parameter name="Avg_row_length" value="615"/>
|
||||
<parameter name="Data_length" value="6768"/>
|
||||
<parameter name="Max_data_length" value="281474976710655"/>
|
||||
<parameter name="Index_length" value="5120"/>
|
||||
<parameter name="Data_free" value="0"/>
|
||||
<parameter name="Auto_increment" value=""/>
|
||||
<parameter name="Create_time" value="2007-12-04 11:21:20"/>
|
||||
<parameter name="Update_time" value="2007-12-09 11:48:16"/>
|
||||
<parameter name="Check_time" value=""/>
|
||||
<parameter name="Collation" value="utf8_general_ci"/>
|
||||
<parameter name="Checksum" value=""/>
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value="Stores the users, processes and/or applications configuratio"/>
|
||||
</vendor>
|
||||
<column name="CFG_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="CFG_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="OBJ_UID" type="VARCHAR" size="128" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="OBJ_UID"/>
|
||||
<parameter name="Type" value="varchar(128)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="CFG_VALUE" type="LONGVARCHAR" required="true">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="CFG_VALUE"/>
|
||||
<parameter name="Type" value="text"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="PRO_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="PRO_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="APP_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="APP_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
</table>
|
||||
|
||||
|
||||
<table name="LANGUAGE">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="LANGUAGE"/>
|
||||
<parameter name="Engine" value="MyISAM"/>
|
||||
<parameter name="Version" value="10"/>
|
||||
<parameter name="Row_format" value="Dynamic"/>
|
||||
<parameter name="Rows" value="136"/>
|
||||
<parameter name="Avg_row_length" value="37"/>
|
||||
<parameter name="Data_length" value="5096"/>
|
||||
<parameter name="Max_data_length" value="281474976710655"/>
|
||||
<parameter name="Index_length" value="1024"/>
|
||||
<parameter name="Data_free" value="0"/>
|
||||
<parameter name="Auto_increment" value=""/>
|
||||
<parameter name="Create_time" value="2007-12-04 11:21:20"/>
|
||||
<parameter name="Update_time" value="2007-12-04 11:31:47"/>
|
||||
<parameter name="Check_time" value=""/>
|
||||
<parameter name="Collation" value="utf8_general_ci"/>
|
||||
<parameter name="Checksum" value=""/>
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value=""/>
|
||||
</vendor>
|
||||
<column name="LAN_ID" type="VARCHAR" size="4" required="true" default="" primaryKey="true">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_ID"/>
|
||||
<parameter name="Type" value="varchar(4)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_NAME" type="VARCHAR" size="30" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_NAME"/>
|
||||
<parameter name="Type" value="varchar(30)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_NATIVE_NAME" type="VARCHAR" size="30" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_NATIVE_NAME"/>
|
||||
<parameter name="Type" value="varchar(30)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_DIRECTION" type="CHAR" size="1" required="true" default="L">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_DIRECTION"/>
|
||||
<parameter name="Type" value="char(1)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="L"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_WEIGHT" type="INTEGER" required="true" default="0">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_WEIGHT"/>
|
||||
<parameter name="Type" value="int(11)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="0"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_ENABLED" type="CHAR" size="1" required="true" default="1">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_ENABLED"/>
|
||||
<parameter name="Type" value="char(1)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="1"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="LAN_CALENDAR" type="VARCHAR" size="30" required="true" default="GREGORIAN">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="LAN_CALENDAR"/>
|
||||
<parameter name="Type" value="varchar(30)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="GREGORIAN"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<validator column="LAN_DIRECTION">
|
||||
<rule name="validValues" value="L|R" message="Please select a valid Language Direccion." />
|
||||
<rule name="required" message="Document access is required." />
|
||||
</validator>
|
||||
<validator column="LAN_ENABLED">
|
||||
<rule name="validValues" value="1|0" message="Please select a valid Language Direccion." />
|
||||
<rule name="required" message="Document access is required." />
|
||||
</validator>
|
||||
</table>
|
||||
|
||||
<table name="TRANSLATION">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="TRANSLATION"/>
|
||||
<parameter name="Engine" value="MyISAM"/>
|
||||
<parameter name="Version" value="10"/>
|
||||
<parameter name="Row_format" value="Dynamic"/>
|
||||
<parameter name="Rows" value="121"/>
|
||||
<parameter name="Avg_row_length" value="46"/>
|
||||
<parameter name="Data_length" value="5572"/>
|
||||
<parameter name="Max_data_length" value="281474976710655"/>
|
||||
<parameter name="Index_length" value="4096"/>
|
||||
<parameter name="Data_free" value="0"/>
|
||||
<parameter name="Auto_increment" value=""/>
|
||||
<parameter name="Create_time" value="2007-12-04 11:21:20"/>
|
||||
<parameter name="Update_time" value="2007-12-09 13:22:56"/>
|
||||
<parameter name="Check_time" value=""/>
|
||||
<parameter name="Collation" value="utf8_general_ci"/>
|
||||
<parameter name="Checksum" value=""/>
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value=""/>
|
||||
</vendor>
|
||||
<column name="TRN_CATEGORY" type="VARCHAR" size="100" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="TRN_CATEGORY"/>
|
||||
<parameter name="Type" value="varchar(100)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="TRN_ID" type="VARCHAR" size="100" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="TRN_ID"/>
|
||||
<parameter name="Type" value="varchar(100)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="TRN_LANG" type="VARCHAR" size="10" required="true" primaryKey="true" default="en">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="TRN_LANG"/>
|
||||
<parameter name="Type" value="varchar(10)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="TRN_VALUE" type="VARCHAR" size="200" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="TRN_VALUE"/>
|
||||
<parameter name="Type" value="varchar(200)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<validator column="TRN_CATEGORY">
|
||||
<rule name="maxLength" value="100" message="Category can be no larger than $ in size" />
|
||||
<rule name="required" message="Category is required." />
|
||||
</validator>
|
||||
<validator column="TRN_ID">
|
||||
<rule name="maxLength" value="100" message="ID can be no larger than $ in size" />
|
||||
<rule name="required" message="ID is required." />
|
||||
</validator>
|
||||
<validator column="TRN_LANG">
|
||||
<rule name="maxLength" value="5" message="Language can be no larger than $ in size" />
|
||||
<rule name="required" message="Language is required." />
|
||||
</validator>
|
||||
<validator column="TRN_VALUE">
|
||||
<rule name="maxLength" value="200" message="Value can be no larger than $ in size" />
|
||||
<rule name="required" message="Value is required." />
|
||||
</validator>
|
||||
</table>
|
||||
|
||||
<table name="USERS">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Name" value="USERS"/>
|
||||
<parameter name="Engine" value="MyISAM"/>
|
||||
<parameter name="Version" value="10"/>
|
||||
<parameter name="Row_format" value="Dynamic"/>
|
||||
<parameter name="Rows" value="9"/>
|
||||
<parameter name="Avg_row_length" value="158"/>
|
||||
<parameter name="Data_length" value="1428"/>
|
||||
<parameter name="Max_data_length" value="281474976710655"/>
|
||||
<parameter name="Index_length" value="2048"/>
|
||||
<parameter name="Data_free" value="0"/>
|
||||
<parameter name="Auto_increment" value=""/>
|
||||
<parameter name="Create_time" value="2007-12-04 11:47:46"/>
|
||||
<parameter name="Update_time" value="2007-12-05 17:36:55"/>
|
||||
<parameter name="Check_time" value=""/>
|
||||
<parameter name="Collation" value="utf8_general_ci"/>
|
||||
<parameter name="Checksum" value=""/>
|
||||
<parameter name="Create_options" value=""/>
|
||||
<parameter name="Comment" value="Users"/>
|
||||
</vendor>
|
||||
<column name="USR_UID" type="VARCHAR" size="32" required="true" primaryKey="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_UID"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value="PRI"/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_USERNAME" type="VARCHAR" size="100" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_USERNAME"/>
|
||||
<parameter name="Type" value="varchar(50)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_PASSWORD" type="VARCHAR" size="32" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_PASSWORD"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_FIRSTNAME" type="VARCHAR" size="50" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_FIRSTNAME"/>
|
||||
<parameter name="Type" value="varchar(50)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_LASTNAME" type="VARCHAR" size="50" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_LASTNAME"/>
|
||||
<parameter name="Type" value="varchar(50)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_EMAIL" type="VARCHAR" size="100" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_EMAIL"/>
|
||||
<parameter name="Type" value="varchar(50)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_DUE_DATE" type="DATE" required="true" >
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_DUE_DATE"/>
|
||||
<parameter name="Type" value="date"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<!-- <parameter name="Default" value="0000-00-00"/> -->
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_CREATE_DATE" type="TIMESTAMP" required="true">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_CREATE_DATE"/>
|
||||
<parameter name="Type" value="datetime"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<!-- <parameter name="Default" value="0000-00-00 00:00:00"/> -->
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_UPDATE_DATE" type="TIMESTAMP" required="true">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_UPDATE_DATE"/>
|
||||
<parameter name="Type" value="datetime"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<!-- <parameter name="Default" value="0000-00-00 00:00:00"/> -->
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_STATUS" type="VARCHAR" size="32" required="true" default="ACTIVE">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_STATUS"/>
|
||||
<parameter name="Type" value="varchar(8)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="ACTIVE"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_COUNTRY" type="VARCHAR" size="3" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_COUNTRY"/>
|
||||
<parameter name="Type" value="varchar(3)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_CITY" type="VARCHAR" size="3" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_CITY"/>
|
||||
<parameter name="Type" value="varchar(3)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_LOCATION" type="VARCHAR" size="3" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_LOCATION"/>
|
||||
<parameter name="Type" value="varchar(3)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_ADDRESS" type="VARCHAR" size="255" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_ADDRESS"/>
|
||||
<parameter name="Type" value="varchar(255)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_PHONE" type="VARCHAR" size="24" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_PHONE"/>
|
||||
<parameter name="Type" value="varchar(24)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_FAX" type="VARCHAR" size="24" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_FAX"/>
|
||||
<parameter name="Type" value="varchar(24)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_CELLULAR" type="VARCHAR" size="24" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_CELLULAR"/>
|
||||
<parameter name="Type" value="varchar(24)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_ZIP_CODE" type="VARCHAR" size="16" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_ZIP_CODE"/>
|
||||
<parameter name="Type" value="varchar(16)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_DEPARTMENT" type="INTEGER" required="true" default="0">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_DEPARTMENT"/>
|
||||
<parameter name="Type" value="int(11)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="0"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_POSITION" type="VARCHAR" size="100" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_POSITION"/>
|
||||
<parameter name="Type" value="varchar(100)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_RESUME" type="VARCHAR" size="100" required="true" default="">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_RESUME"/>
|
||||
<parameter name="Type" value="varchar(100)"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value=""/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_BIRTHDAY" type="DATE" required="true" >
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_BIRTHDAY"/>
|
||||
<parameter name="Type" value="date"/>
|
||||
<parameter name="Null" value="NO"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<!-- <parameter name="Default" value="0000-00-00"/> -->
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<column name="USR_ROLE" type="VARCHAR" size="32" default="PROCESSMAKER_ADMIN">
|
||||
<vendor type="mysql">
|
||||
<parameter name="Field" value="USR_ROLE"/>
|
||||
<parameter name="Type" value="varchar(32)"/>
|
||||
<parameter name="Null" value="YES"/>
|
||||
<parameter name="Key" value=""/>
|
||||
<parameter name="Default" value="PROCESSMAKER_ADMIN"/>
|
||||
<parameter name="Extra" value=""/>
|
||||
</vendor>
|
||||
</column>
|
||||
<validator column="USR_STATUS">
|
||||
<rule name="validValues" value="ACTIVE|INACTIVE|VACATION|CLOSED" message="Please select a valid type." />
|
||||
<rule name="required" message="Type is required." />
|
||||
</validator>
|
||||
</table>
|
||||
|
||||
|
||||
</database>
|
||||
9
gulliver/bin/tasks/templates/showMessage.xml.tpl
Normal file
9
gulliver/bin/tasks/templates/showMessage.xml.tpl
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dynaForm name="showMessage" version="1.0" basedir="" xmlform_type="NORMAL" width="600px" >
|
||||
<TITLE type="title">
|
||||
<en>Error</en>
|
||||
</TITLE>
|
||||
<MESSAGE type="text" size="30" maxlength="32" validate="Alpha10" mode="view">
|
||||
<en> </en>
|
||||
</MESSAGE>
|
||||
</dynaForm>
|
||||
20
gulliver/bin/tasks/templates/skinPluginClass.tpl
Normal file
20
gulliver/bin/tasks/templates/skinPluginClass.tpl
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/**
|
||||
* class.{className}.php
|
||||
*
|
||||
*/
|
||||
|
||||
class {className}Class extends PMPlugin {
|
||||
|
||||
function __construct ( ) {
|
||||
set_include_path(
|
||||
PATH_PLUGINS . '{className}' . PATH_SEPARATOR .
|
||||
get_include_path()
|
||||
);
|
||||
}
|
||||
|
||||
function setup()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
72
gulliver/bin/tasks/templates/skinPluginMainClass.tpl
Normal file
72
gulliver/bin/tasks/templates/skinPluginMainClass.tpl
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* class.{className}.php
|
||||
*
|
||||
*/
|
||||
|
||||
G::LoadClass('plugin');
|
||||
|
||||
class {className}Plugin extends PMPlugin {
|
||||
|
||||
function {className}Plugin($sNamespace, $sFilename = null) {
|
||||
$res = parent::PMPlugin($sNamespace, $sFilename);
|
||||
$this->sFriendlyName = "Plugin for skin {className} ";
|
||||
$this->sDescription = "{description}";
|
||||
$this->sPluginFolder = "{className}";
|
||||
$this->sSetupPage = "{className}";
|
||||
$this->iVersion = {version};
|
||||
$this->iPMVersion = "{PMversion}";
|
||||
$this->aWorkspaces = null;
|
||||
return $res;
|
||||
}
|
||||
|
||||
function install() {
|
||||
//Nothing
|
||||
}
|
||||
|
||||
function setup() {
|
||||
//Nothing
|
||||
}
|
||||
|
||||
function xcopy ( $pathSource, $pathTarget ) {
|
||||
G::mk_dir ($pathTarget);
|
||||
if ($handle = opendir( $pathSource )) {
|
||||
while ( false !== ($file = readdir($handle))) {
|
||||
if ( substr($file,0,1) != '.' && !is_dir ($file) ) {
|
||||
$content = file_get_contents ( $pathSource . $file );
|
||||
$filename = $pathTarget . $file ;
|
||||
file_put_contents ( $filename, $content );
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
}
|
||||
|
||||
function enable() {
|
||||
$this->xcopy (
|
||||
PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'data' . PATH_SEP,
|
||||
PATH_SKINS );
|
||||
|
||||
$this->xcopy (
|
||||
PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'data' . PATH_SEP . 'public_html'. PATH_SEP ,
|
||||
PATH_HTML . 'skins' . PATH_SEP . $this->sPluginFolder. PATH_SEP );
|
||||
|
||||
$this->xcopy (
|
||||
PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'data' . PATH_SEP . 'public_html'. PATH_SEP. 'images'. PATH_SEP ,
|
||||
PATH_HTML . 'skins' . PATH_SEP . $this->sPluginFolder. PATH_SEP . 'images'. PATH_SEP );
|
||||
}
|
||||
|
||||
function disable() {
|
||||
//delete from engine
|
||||
$this->delete(PATH_SKINS . $this->sPluginFolder . '.php', true);
|
||||
$this->delete(PATH_SKINS . $this->sPluginFolder . '.html', true);
|
||||
$this->delete(PATH_SKINS . $this->sPluginFolder . '.cnf', true);
|
||||
|
||||
//delete directory
|
||||
G::rm_dir(PATH_HTML . 'skins' . PATH_SEP . $this->sPluginFolder );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$oPluginRegistry =& PMPluginRegistry::getSingleton();
|
||||
$oPluginRegistry->registerPlugin('{className}', __FILE__);
|
||||
1116
gulliver/bin/tasks/templates/style.css.tpl
Normal file
1116
gulliver/bin/tasks/templates/style.css.tpl
Normal file
File diff suppressed because it is too large
Load Diff
388
gulliver/bin/tasks/templates/sysGeneric.php.tpl
Normal file
388
gulliver/bin/tasks/templates/sysGeneric.php.tpl
Normal file
@@ -0,0 +1,388 @@
|
||||
<?php
|
||||
/** autogenerated sysGeneric for project {projectName} */
|
||||
/*** enable display_error On to caught even fatal errors ***/
|
||||
ini_set('display_errors','On');
|
||||
ini_set('error_reporting', E_ALL );
|
||||
ini_set('memory_limit', '80M');
|
||||
|
||||
$path = Array();
|
||||
$sf = $_SERVER['SCRIPT_FILENAME'];
|
||||
|
||||
//sysGeneric, this file is used to redirect to workspace, the url should by encrypted or not
|
||||
|
||||
//***************** In the PATH_SEP we know if the the path separator symbol will be '\\' or '/' **************************
|
||||
if ( PHP_OS == 'WINNT' && !strpos ( $_SERVER['DOCUMENT_ROOT'], '/' ) )
|
||||
define('PATH_SEP','\\');
|
||||
else
|
||||
define('PATH_SEP', '/');
|
||||
|
||||
|
||||
//***************** Defining the Home Directory *********************************
|
||||
$docuroot = explode ( PATH_SEP , $_SERVER['DOCUMENT_ROOT'] );
|
||||
// array_pop($docuroot);
|
||||
array_pop($docuroot);
|
||||
$pathhome = implode( PATH_SEP, $docuroot ) . PATH_SEP;
|
||||
|
||||
|
||||
//try to find automatically the trunk directory where are placed the RBAC and Gulliver directories
|
||||
//in a normal installation you don't need to change it.
|
||||
array_pop($docuroot);
|
||||
$pathTrunk = implode( PATH_SEP, $docuroot ) . PATH_SEP ;
|
||||
|
||||
array_pop($docuroot);
|
||||
$pathOutTrunk = implode( PATH_SEP, $docuroot ) . PATH_SEP ;
|
||||
// to do: check previous algorith for Windows $pathTrunk = "c:/home/";
|
||||
|
||||
define('PATH_HOME', $pathhome );
|
||||
define('PATH_TRUNK', $pathTrunk );
|
||||
define('PATH_OUTTRUNK', $pathOutTrunk );
|
||||
|
||||
//***************** In this file we cant to get the PM paths , RBAC Paths and Gulliver Paths ******************************
|
||||
require_once ( $pathhome . PATH_SEP . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php' );
|
||||
|
||||
//***************** In this file we cant to get the PM definitions ******************************
|
||||
require_once ( $pathhome . PATH_SEP . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'defines.php' );
|
||||
|
||||
//******************* Error handler and log error *******************
|
||||
//to do: make different environments. sys
|
||||
//G::setErrorHandler ( );
|
||||
//G::setFatalErrorHandler ( );
|
||||
|
||||
/*** enable ERROR_SHOW_SOURCE_CODE to display the source code for any WARNING OR NOTICE ***/
|
||||
define ('ERROR_SHOW_SOURCE_CODE', true);
|
||||
|
||||
/*** enable ERROR_LOG_NOTICE_ERROR to log Notices messages in default apache log ***/
|
||||
// define ( 'ERROR_LOG_NOTICE_ERROR', true );
|
||||
|
||||
// ************* creat headPublisher singleton *****************
|
||||
G::LoadSystem('headPublisher');
|
||||
$oHeadPublisher =& headPublisher::getSingleton();
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/maborak.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/common.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/webResource.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'dveditor/core/dveditor.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/tree/tree.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'json/core/json.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/form.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/pagedTable.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'grid/core/grid.js' );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.panel.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.validator.js', true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.app.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.rpc.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.fx.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drag.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drop.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dom.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.abbr.js' , true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dashboard.js', true );
|
||||
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/jscalendar/calendar.js' );
|
||||
|
||||
//************ defining Virtual URLs ****************/
|
||||
$virtualURITable = array();
|
||||
$virtualURITable['/plugin/(*)'] = 'plugin';
|
||||
$virtualURITable['/(sys*)/(*.js)'] = 'jsMethod';
|
||||
$virtualURITable['/js/(*)'] = PATH_GULLIVER_HOME . 'js/';
|
||||
$virtualURITable['/jscore/(*)'] = PATH_CORE . 'js/';
|
||||
//$virtualURITable['/fckeditor/(*)'] = PATH_THIRDPARTY . 'fckeditor/';
|
||||
$virtualURITable['/htmlarea/(*)'] = PATH_THIRDPARTY . 'htmlarea/';
|
||||
$virtualURITable['/sys[a-zA-Z][a-zA-Z0-9]{0,}()/'] = 'sysNamed';
|
||||
$virtualURITable['/(sys*)'] = FALSE;
|
||||
$virtualURITable['/errors/(*)'] = PATH_GULLIVER_HOME . 'methods/errors/';
|
||||
$virtualURITable['/controls/(*)'] = PATH_GULLIVER_HOME . 'methods/controls/';
|
||||
$virtualURITable['/html2ps_pdf/(*)'] = PATH_THIRDPARTY . 'html2ps_pdf/';
|
||||
$virtualURITable['/Krumo/(*)'] = PATH_THIRDPARTY . 'krumo/';
|
||||
$virtualURITable['/codepress/(*)'] = PATH_THIRDPARTY . 'codepress/';
|
||||
|
||||
if(defined('PATH_C'))
|
||||
{
|
||||
$virtualURITable['/jsform/(*.js)'] = PATH_C . 'xmlform/';
|
||||
}
|
||||
/*To sysUnnamed*/
|
||||
$virtualURITable['/[a-zA-Z][a-zA-Z0-9]{0,}()'] = 'sysUnnamed';
|
||||
$virtualURITable['/(*)'] = PATH_HTML;
|
||||
|
||||
//************** verify if we need to redirect or stream the file **************
|
||||
if ( G::virtualURI($_SERVER['REQUEST_URI'], $virtualURITable , $realPath )) {
|
||||
// review if the file requested belongs to public_html plugin
|
||||
if ( substr ( $realPath, 0,6) == 'plugin' ) {
|
||||
$paths = explode ( PATH_SEP, $realPath );
|
||||
$paths[0] = substr ( $paths[0],6);
|
||||
if ( count($paths) == 2 ) {
|
||||
$pathsQuery = explode('?', $paths[1]);
|
||||
$pluginFilename = PATH_PLUGINS . $paths[0] . PATH_SEP . 'public_html'. PATH_SEP . $pathsQuery[0];
|
||||
if ( file_exists ( $pluginFilename ) ) {
|
||||
G::streamFile ( $pluginFilename );
|
||||
}
|
||||
}
|
||||
die;
|
||||
}
|
||||
|
||||
switch ( $realPath ) {
|
||||
case 'sysUnnamed' :
|
||||
require_once('sysUnnamed.php'); die;
|
||||
break;
|
||||
case 'sysNamed' :
|
||||
header('location : ' . $_SERVER['REQUEST_URI'] . 'en/green/login/login' );
|
||||
die;
|
||||
break;
|
||||
case 'jsMethod' :
|
||||
G::parseURI ( getenv( "REQUEST_URI" ) );
|
||||
$filename = PATH_METHODS . SYS_COLLECTION . '/' . SYS_TARGET . '.js';
|
||||
G::streamFile ( $filename );
|
||||
die;
|
||||
break;
|
||||
default :
|
||||
$realPath = explode('?', $realPath);
|
||||
G::streamFile ( $realPath[0] );
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
||||
//************** verify if the URI is encrypted or not **************
|
||||
G::parseURI ( getenv( "REQUEST_URI" ) );
|
||||
|
||||
define( 'SYS_URI' , '/sys' . SYS_TEMP . '/' . SYS_LANG . '/' . SYS_SKIN . '/' );
|
||||
|
||||
require_once ( PATH_THIRDPARTY . 'krumo' . PATH_SEP . 'class.krumo.php' );
|
||||
|
||||
//***************** Call Gulliver Classes **************************
|
||||
|
||||
G::LoadThirdParty('pear/json','class.json');
|
||||
G::LoadThirdParty('smarty/libs','Smarty.class');
|
||||
|
||||
G::LoadSystem('error');
|
||||
G::LoadSystem('dbconnection');
|
||||
G::LoadSystem('dbsession');
|
||||
G::LoadSystem('dbrecordset');
|
||||
G::LoadSystem('dbtable');
|
||||
G::LoadSystem('rbac' );
|
||||
G::LoadSystem('publisher');
|
||||
G::LoadSystem('templatePower');
|
||||
G::LoadSystem('headPublisher');
|
||||
G::LoadSystem('xmlDocument');
|
||||
G::LoadSystem('xmlform');
|
||||
G::LoadSystem('xmlformExtension');
|
||||
G::LoadSystem('form');
|
||||
G::LoadSystem('menu');
|
||||
G::LoadSystem("xmlMenu");
|
||||
G::LoadSystem('dvEditor');
|
||||
G::LoadSystem('table');
|
||||
G::LoadSystem('pagedTable');
|
||||
G::LoadSystem('tree');
|
||||
|
||||
$oHeadPublisher =& headPublisher::getSingleton();
|
||||
|
||||
//***************** database and workspace definition ************************
|
||||
//if SYS_TEMP exists, the URL has a workspace, now we need to verify if exists their db.php file
|
||||
if ( defined('SYS_TEMP') && SYS_TEMP != '')
|
||||
{
|
||||
//this is the default, the workspace db.php file is in /shared/{projectName}/sites/SYS_SYS
|
||||
if ( file_exists( PATH_DB . SYS_TEMP . '/db.php' ) ) {
|
||||
require_once( PATH_DB . SYS_TEMP . '/db.php' );
|
||||
define ( 'SYS_SYS' , SYS_TEMP );
|
||||
}
|
||||
else {
|
||||
$sysParts = explode('-',SYS_TEMP);
|
||||
//try to find the definition in the module-file
|
||||
if ( count($sysParts) == 3) {
|
||||
$fileName = 'dbmodule_'.$sysParts[1].'.php';
|
||||
$DB_INDEX = 0;
|
||||
$DB_MODULE = array();
|
||||
|
||||
if ( !file_exists( PATH_DB . $fileName)) {
|
||||
header ("location: errors/error701.php");
|
||||
die;
|
||||
}
|
||||
require_once ( PATH_DB . $fileName );
|
||||
$moduleName = $DB_MODULE[$DB_INDEX]['name'];
|
||||
$modulePath = $DB_MODULE[$DB_INDEX]['path'];
|
||||
$moduleType = $DB_MODULE[$DB_INDEX]['type'];
|
||||
if ( !file_exists( $modulePath )) {
|
||||
header ("location: /errors/error704.php"); die;
|
||||
}
|
||||
if ( $moduleType == 'single-file' ) {
|
||||
$workspaceDB = $modulePath. 'db_'. $sysParts[2] . '.php';
|
||||
}
|
||||
else {
|
||||
$workspaceDB = $modulePath. $sysParts[2] . '/db.php';
|
||||
}
|
||||
if ( !file_exists( $workspaceDB )) {
|
||||
header ("location: /errors/error704.php"); die;
|
||||
}
|
||||
require_once( $workspaceDB ) ;
|
||||
define ( 'SYS_SYS', $sysParts[2]);
|
||||
}
|
||||
else {
|
||||
$aMessage['MESSAGE'] = G::LoadTranslation ('ID_NOT_WORKSPACE');
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish' );
|
||||
die;
|
||||
}
|
||||
}
|
||||
}
|
||||
else { //when we are in global pages, outside any valid workspace
|
||||
|
||||
|
||||
if ((SYS_TARGET==='sysLoginVerify') || (SYS_TARGET==='sysLogin') || (SYS_TARGET==='newSite')) {
|
||||
$phpFile = G::ExpandPath('methods') . SYS_COLLECTION . "/" . SYS_TARGET.'.php';
|
||||
require_once($phpFile);
|
||||
die();
|
||||
}
|
||||
else {
|
||||
require_once( PATH_METHODS . "login/sysLogin.php" ) ;
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
//***************** PM Paths DATA **************************
|
||||
define( 'PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/');
|
||||
define( 'PATH_DOCUMENT', PATH_DATA_SITE . 'files/' );
|
||||
define( 'PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/' );
|
||||
define( 'PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE.'usersFiles'.PATH_SEP);
|
||||
define( 'PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE.'usersPhotographies'.PATH_SEP);
|
||||
|
||||
|
||||
//***************** Plugins **************************
|
||||
G::LoadClass('plugin');
|
||||
// //here we are loading all plugins registered
|
||||
// //the singleton has a list of enabled plugins
|
||||
|
||||
// $sSerializedFile = PATH_DATA_SITE . 'plugin.singleton';
|
||||
// $oPluginRegistry =& PMPluginRegistry::getSingleton();
|
||||
// if ( file_exists ($sSerializedFile) )
|
||||
// $oPluginRegistry->unSerializeInstance( file_get_contents ( $sSerializedFile ) );
|
||||
//
|
||||
// $oPluginRegistry->setupPlugins(); //get and setup enabled plugins
|
||||
|
||||
//***************** create $G_ENVIRONMENTS dependent of SYS_SYS **************************
|
||||
|
||||
define ( 'G_ENVIRONMENT', G_DEV_ENV );
|
||||
$G_ENVIRONMENTS = array (
|
||||
G_PRO_ENV => array (
|
||||
'dbfile' => PATH_DB . 'production' . PATH_SEP . 'db.php' ,
|
||||
'cache' => 1,
|
||||
'debug' => 0,
|
||||
) ,
|
||||
G_DEV_ENV => array (
|
||||
'dbfile' => PATH_DB . SYS_SYS . PATH_SEP . 'db.php',
|
||||
'datasource' => 'workflow',
|
||||
'cache' => 0,
|
||||
'debug' => 0,
|
||||
) ,
|
||||
G_TEST_ENV => array (
|
||||
'dbfile' => PATH_DB . 'test' . PATH_SEP . 'db.php' ,
|
||||
'cache' => 0,
|
||||
'debug' => 0,
|
||||
)
|
||||
);
|
||||
|
||||
// setup propel definitions and logging
|
||||
//try {
|
||||
require_once ( "propel/Propel.php" );
|
||||
require_once ( "creole/Creole.php" );
|
||||
|
||||
if ( $G_ENVIRONMENTS[ G_ENVIRONMENT ]['debug'] ) {
|
||||
require_once ( "Log.php" );
|
||||
|
||||
// register debug connection decorator driver
|
||||
Creole::registerDriver('*', 'creole.contrib.DebugConnection');
|
||||
|
||||
// itialize Propel with converted config file
|
||||
Propel::init( PATH_CORE . "config/databases.php" );
|
||||
|
||||
//log file for workflow database
|
||||
$logFile = PATH_DATA . 'log' . PATH_SEP . 'workflow.log';
|
||||
$logger = Log::singleton('file', $logFile, 'wf ' . SYS_SYS, null, PEAR_LOG_INFO);
|
||||
Propel::setLogger($logger);
|
||||
$con = Propel::getConnection('workflow');
|
||||
if ($con instanceof DebugConnection) $con->setLogger($logger);
|
||||
|
||||
//log file for rbac database
|
||||
$logFile = PATH_DATA . 'log' . PATH_SEP . 'rbac.log';
|
||||
$logger = Log::singleton('file', $logFile, 'rbac ' . SYS_SYS, null, PEAR_LOG_INFO);
|
||||
Propel::setLogger($logger);
|
||||
$con = Propel::getConnection('rbac');
|
||||
if ($con instanceof DebugConnection) $con->setLogger($logger);
|
||||
}
|
||||
else
|
||||
Propel::init( PATH_CORE . "config/databases.php" );
|
||||
|
||||
Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection');
|
||||
|
||||
//***************** Session Initializations **************************/
|
||||
ini_alter( 'session.auto_start', '1' );
|
||||
ini_alter( 'register_globals', 'Off' );
|
||||
session_start();
|
||||
ob_start();
|
||||
|
||||
//********* Log Page Handler *************
|
||||
// logPage ( $URL , SYS_CURRENT_PARMS);
|
||||
|
||||
//*********jump to php file in methods directory *************
|
||||
// if ( $oPluginRegistry->isRegisteredFolder( SYS_COLLECTION ) )
|
||||
// $phpFile = PATH_PLUGINS . SYS_COLLECTION . PATH_SEP . SYS_TARGET.'.php';
|
||||
// else
|
||||
$phpFile = G::ExpandPath('methods') . SYS_COLLECTION . PATH_SEP . SYS_TARGET.'.php';
|
||||
|
||||
//the index.php file, this new feature will allow automatically redirects to valid php file inside the methods directory
|
||||
if ( SYS_TARGET == '' ) {
|
||||
$phpFile = str_replace ( '.php', 'index.php', $phpFile );
|
||||
$phpFile = include ( $phpFile );
|
||||
}
|
||||
if ( substr(SYS_COLLECTION , 0,8) === 'gulliver' ) {
|
||||
$phpFile = PATH_GULLIVER_HOME . 'methods/' . substr( SYS_COLLECTION , 8) . SYS_TARGET.'.php';
|
||||
}
|
||||
else {
|
||||
if ( ! file_exists( $phpFile ) ) {
|
||||
$_SESSION['phpFileNotFound'] = $phpFile;
|
||||
header ("location: /errors/error404.php");
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
||||
// ***************** enable rbac **************************
|
||||
|
||||
$RBAC =& RBAC::getSingleton();
|
||||
$RBAC->sSystem = '{rbacProjectName}';
|
||||
|
||||
// ***************** Headers **************************
|
||||
if ( ! defined('EXECUTE_BY_CRON') ) {
|
||||
header("Expires: Tue, 19 Jan 1999 04:30:00 GMT");
|
||||
header("Last-Modified: Tue, 19 Jan 1999 04:30:00 GMT");
|
||||
header('Cache-Control: no-cache, must-revalidate, post-check=0,pre-check=0 ');
|
||||
header('P3P: CP="CAO PSA OUR"');
|
||||
|
||||
if(isset( $_SESSION['USER_LOGGED'] )) {
|
||||
$RBAC->initRBAC();
|
||||
$RBAC->loadUserRolePermission( $RBAC->sSystem, $_SESSION['USER_LOGGED'] );
|
||||
}
|
||||
else {
|
||||
//This sentence is used when you lost the Session
|
||||
if ( SYS_TARGET != 'authentication' and SYS_TARGET != 'login'
|
||||
and SYS_TARGET != 'dbInfo' and SYS_TARGET != 'sysLoginVerify'
|
||||
and SYS_TARGET != 'updateTranslation' and SYS_COLLECTION != 'services' ){
|
||||
header ("location: ".SYS_URI."login/login.php");
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
require_once( $phpFile );
|
||||
if ( defined('SKIP_HEADERS') ) {
|
||||
header("Expires: " . gmdate("D, d M Y H:i:s", mktime( 0,0,0,date('m'),date('d'),date('Y') + 1) ) . " GMT");
|
||||
header('Cache-Control: public');
|
||||
header('Pragma: ');
|
||||
}
|
||||
ob_end_flush();
|
||||
}
|
||||
/*
|
||||
}
|
||||
catch ( Exception $e ) {
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage( 'publish' );
|
||||
die;
|
||||
}
|
||||
*/
|
||||
17
gulliver/bin/tasks/templates/sysLogin.php.tpl
Normal file
17
gulliver/bin/tasks/templates/sysLogin.php.tpl
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* sysLogin.php
|
||||
*
|
||||
*
|
||||
*/
|
||||
if (isset($_POST['form']['USER_ENV'])) {
|
||||
session_start();
|
||||
$_SESSION['sysLogin'] = $_POST['form'];
|
||||
G::header('location: /sys' . $_POST['form']['USER_ENV'] . '/'.SYS_LANG.'/'.SYS_SKIN.'/login/sysLoginVerify');
|
||||
die;
|
||||
}
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/sysLogin', '', '', 'sysLogin');
|
||||
G::RenderPage( "publish" );
|
||||
?>
|
||||
22
gulliver/bin/tasks/templates/sysLogin.xml.tpl
Normal file
22
gulliver/bin/tasks/templates/sysLogin.xml.tpl
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<dynaForm name="sysLogin" version="1.0" basedir="" xmlform_type="NORMAL" width="400px">
|
||||
<TITLE type="title">
|
||||
<en>Login</en>
|
||||
</TITLE>
|
||||
|
||||
<USR_USERNAME type="text" size="30" maxlength="32" validate="Alpha10">
|
||||
<en>User</en>
|
||||
</USR_USERNAME>
|
||||
|
||||
<USR_PASSWORD type="password" size="30" maxlength="32">
|
||||
<en>Password</en>
|
||||
</USR_PASSWORD>
|
||||
|
||||
<USER_ENV type="text" size="30" maxlength="32" validate="Alpha">
|
||||
<en>Workspace</en>
|
||||
</USER_ENV>
|
||||
|
||||
<BSUBMIT type="submit" style="font-weight:bold;color:black;" className="module_app_button___gray">
|
||||
<en>Login</en>
|
||||
</BSUBMIT>
|
||||
</dynaForm>
|
||||
58
gulliver/bin/tasks/templates/unitTest.tpl
Normal file
58
gulliver/bin/tasks/templates/unitTest.tpl
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
$unitFilename = $_SERVER['PWD'] . '/test/bootstrap/unit.php' ;
|
||||
require_once( $unitFilename );
|
||||
|
||||
require_once( PATH_THIRDPARTY . '/lime/lime.php');
|
||||
require_once( PATH_THIRDPARTY.'lime/yaml.class.php');
|
||||
|
||||
G::LoadThirdParty('smarty/libs','Smarty.class');
|
||||
G::LoadSystem ( 'xmlform');
|
||||
G::LoadSystem ( 'xmlDocument');
|
||||
G::LoadSystem ( 'form');
|
||||
require_once( 'propel/Propel.php' );
|
||||
require_once ( "creole/Creole.php" );
|
||||
require_once ( PATH_CORE . "config/databases.php");
|
||||
|
||||
G::LoadClass ( '{$classFile}');
|
||||
|
||||
|
||||
$obj = new {$className} ($dbc);
|
||||
$t = new lime_test( {$testItems}, new lime_output_color() );
|
||||
|
||||
$className = {$className};
|
||||
$className = strtolower ( substr ($className, 0,1) ) . substr ($className, 1 );
|
||||
|
||||
$reflect = new ReflectionClass( $className );
|
||||
$method = array ( );
|
||||
$testItems = 0;
|
||||
|
||||
foreach ( $reflect->getMethods() as $reflectmethod ) {literal} { {/literal}
|
||||
$params = '';
|
||||
foreach ( $reflectmethod->getParameters() as $key => $row ) {literal} { {/literal}
|
||||
if ( $params != '' ) $params .= ', ';
|
||||
$params .= '$' . $row->name;
|
||||
}
|
||||
|
||||
$testItems++;
|
||||
$methods[ $reflectmethod->getName() ] = $params;
|
||||
}
|
||||
//To change the case only the first letter of each word, TIA
|
||||
$className = ucwords($className);
|
||||
$t->diag("class $className" );
|
||||
|
||||
$t->isa_ok( $obj , $className, "class $className created");
|
||||
|
||||
$t->is( count($methods) , {$cantMethods}, "class $className have " . {$cantMethods} . ' methods.' );
|
||||
|
||||
{foreach from=$methods key=methodName item=parameters}
|
||||
//checking method '{$methodName}'
|
||||
$t->can_ok( $obj, '{$methodName}', '{$methodName}() is callable' );
|
||||
|
||||
//$result = $obj->{$methodName} ( {$parameters});
|
||||
//$t->isa_ok( $result, 'NULL', 'call to method {$methodName} ');
|
||||
$t->todo( "call to method {$methodName} using {$parameters} ");
|
||||
|
||||
|
||||
{/foreach}
|
||||
|
||||
$t->todo ( 'review all pendings methods in this class');
|
||||
16
gulliver/bin/tasks/templates/users.menu.php.tpl
Executable file
16
gulliver/bin/tasks/templates/users.menu.php.tpl
Executable file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* users.php
|
||||
*
|
||||
*/
|
||||
global $G_TMP_MENU;
|
||||
|
||||
$G_TMP_MENU->AddIdRawOption('USERS', 'users/usersList');
|
||||
$G_TMP_MENU->AddIdRawOption('ROLES', 'users/rolesList');
|
||||
$G_TMP_MENU->AddIdRawOption('PERMISSIONS','users/permissionsList');
|
||||
|
||||
$G_TMP_MENU->Labels = array (
|
||||
G::LoadTranslation('ID_USERS_LIST'),
|
||||
G::LoadTranslation('ID_ROLES'),
|
||||
G::LoadTranslation('ID_PERMISSIONS')
|
||||
);
|
||||
30
gulliver/bin/tasks/templates/usersList.php.tpl
Executable file
30
gulliver/bin/tasks/templates/usersList.php.tpl
Executable file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_SUB_MENU = 'users';
|
||||
$G_ID_MENU_SELECTED = 'USERS';
|
||||
$G_ID_SUB_MENU_SELECTED = 'USERS';
|
||||
|
||||
|
||||
$con = Propel::getConnection('rbac');
|
||||
$sql = "SELECT USR_UID, USR_USERNAME, USR_FIRSTNAME, USR_LASTNAME, USR_EMAIL, USR_STATUS FROM USERS";
|
||||
$stmt = $con->createStatement();
|
||||
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
$rows[] = array ( 'uid' => 'char', 'name' => 'char', 'age' => 'integer', 'balance' => 'float' );
|
||||
while ( is_array ( $row ) ) {
|
||||
if ( is_array( $row) ) $rows[] = $row;
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
|
||||
$_DBArray['user'] = $rows;
|
||||
$_SESSION['_DBArray'] = $_DBArray;
|
||||
G::LoadClass( 'ArrayPeer');
|
||||
$c = new Criteria ('dbarray');
|
||||
$c->setDBArrayTable('user');
|
||||
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'users/usersList', $c );
|
||||
G::RenderPage('publish');
|
||||
30
gulliver/bin/tasks/templates/usersList.xml.tpl
Executable file
30
gulliver/bin/tasks/templates/usersList.xml.tpl
Executable file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm
|
||||
width = "100%"
|
||||
>
|
||||
<USR_UID type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>#</en>
|
||||
</USR_UID>
|
||||
|
||||
<USR_USERNAME type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>username</en>
|
||||
</USR_USERNAME>
|
||||
|
||||
<USR_FIRSTNAME type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>First Name</en>
|
||||
</USR_FIRSTNAME>
|
||||
|
||||
<USR_LASTNAME type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Last Name</en>
|
||||
</USR_LASTNAME>
|
||||
|
||||
<USR_EMAIL type="text" colWidth="120" titleAlign="left" align="left" >
|
||||
<en>Email</en>
|
||||
</USR_EMAIL>
|
||||
|
||||
<USR_STATUS type="text" colWidth="50" titleAlign="left" align="left" >
|
||||
<en>Status</en>
|
||||
</USR_STATUS>
|
||||
|
||||
|
||||
</dynaForm>
|
||||
55
gulliver/bin/tasks/templates/welcome.php.tpl
Normal file
55
gulliver/bin/tasks/templates/welcome.php.tpl
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
/**
|
||||
* welcome.php
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
try {
|
||||
|
||||
$rows[] = array ( 'uid' => 'char', 'name' => 'char', 'age' => 'integer', 'balance' => 'float' );
|
||||
$rows[] = array ( 'uid' => 11, 'name' => 'john', 'age' => 44, 'balance' => 123423 );
|
||||
$rows[] = array ( 'uid' => 22, 'name' => 'Amy', 'age' => 33, 'balance' => 23456 );
|
||||
$rows[] = array ( 'uid' => 33, 'name' => 'Dan', 'age' => 22, 'balance' => 34567 );
|
||||
$rows[] = array ( 'uid' => 33, 'name' => 'Mike', 'age' => 21, 'balance' => 4567 );
|
||||
$rows[] = array ( 'uid' => 44, 'name' => 'Paul', 'age' => 22, 'balance' => 567 );
|
||||
$rows[] = array ( 'uid' => 55, 'name' => 'Wil', 'age' => 23, 'balance' => 67 );
|
||||
$rows[] = array ( 'uid' => 66, 'name' => 'Ernest', 'age' => 24, 'balance' => 7 );
|
||||
$rows[] = array ( 'uid' => 77, 'name' => 'Albert', 'age' => 25, 'balance' => 84567 );
|
||||
$rows[] = array ( 'uid' => 88, 'name' => 'Sue', 'age' => 26, 'balance' => 94567 );
|
||||
$rows[] = array ( 'uid' => 99, 'name' => 'Freddy', 'age' => 22, 'balance' => 04567 );
|
||||
|
||||
$_DBArray['user'] = $rows;
|
||||
$_SESSION['_DBArray'] = $_DBArray;
|
||||
//krumo ( $_DBArray );
|
||||
|
||||
G::LoadClass( 'ArrayPeer');
|
||||
$c = new Criteria ('dbarray');
|
||||
$c->setDBArrayTable('user');
|
||||
//$c->add ( 'user.age', 122 , Criteria::GREATER_EQUAL );
|
||||
//$c->add ( 'user.balance', 3456 , Criteria::GREATER_EQUAL );
|
||||
$c->addAscendingOrderByColumn ('name');
|
||||
/*
|
||||
$rs = ArrayBasePeer::doSelectRs ( $c );
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
while ( is_array ( $row ) ) {
|
||||
$rs->next();
|
||||
$row = $rs->getRow();
|
||||
}
|
||||
*/
|
||||
/* Render page */
|
||||
$G_MAIN_MENU = '{projectName}';
|
||||
$G_ID_MENU_SELECTED = 'WELCOME';
|
||||
$G_SUB_MENU = 'welcome';
|
||||
$G_PUBLISH = new Publisher;
|
||||
$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'login/welcome', $c );
|
||||
G::RenderPage( "publish" );
|
||||
|
||||
}
|
||||
catch ( Exception $e ){
|
||||
$G_PUBLISH = new Publisher;
|
||||
$aMessage['MESSAGE'] = $e->getMessage();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
|
||||
G::RenderPage('publish');
|
||||
}
|
||||
21
gulliver/bin/tasks/templates/welcome.xml.tpl
Normal file
21
gulliver/bin/tasks/templates/welcome.xml.tpl
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dynaForm
|
||||
width = "100%"
|
||||
>
|
||||
<uid type="text" colWidth="50" titleAlign="left" align="left" dataCompareField="APP_NUMBER" dataCompareType="=" >
|
||||
<en>#</en>
|
||||
</uid>
|
||||
<name type="text" value="@#APP_TITLE" link="@G::encryptlink(@#cases_Open)?APP_UID=@#APP_UID&DEL_INDEX=@#DEL_INDEX" colWidth="180" titleAlign="left" align="left" dataCompareField="APP_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
|
||||
<en>name</en>
|
||||
</name>
|
||||
<age type="text" value="@#APP_TAS_TITLE" link="@G::encryptlink(@#cases_Open)?APP_UID=@#APP_UID&DEL_INDEX=@#DEL_INDEX" colWidth="180" titleAlign="left" align="left" dataCompareField="TAS_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
|
||||
<en>Task</en>
|
||||
</age>
|
||||
<balance type="text" colWidth="180" titleAlign="left" align="left" dataCompareField="PRO_TITLE.CON_VALUE" dataCompareType="contains" >
|
||||
|
||||
<en>balance</en>
|
||||
</balance>
|
||||
|
||||
</dynaForm>
|
||||
161
gulliver/bin/tasks/templates/xmlform.html.tpl
Normal file
161
gulliver/bin/tasks/templates/xmlform.html.tpl
Normal file
@@ -0,0 +1,161 @@
|
||||
{if $printTemplate}
|
||||
{* this is the xmlform template *}
|
||||
<form id="{$form->id}" name="{$form->name}" action="{$form->action}" class="{$form->className}" method="post" encType="multipart/form-data" style="margin:0px;" onsubmit="{$form->onsubmit}">
|
||||
<div class="borderForm" style="width:{$form->width}; padding-left:0; padding-right:0; border-width:{$form->border};">
|
||||
<div class="boxTop"><div class="a"></div><div class="b"></div><div class="c"></div></div>
|
||||
<div class="content" style="height:{$form->height};" >
|
||||
<table width="99%">
|
||||
<tr>
|
||||
<td valign='top'>
|
||||
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
{foreach from=$form->fields item=field}
|
||||
{if ($field->type==='title')}
|
||||
<tr>
|
||||
<td class='FormTitle' colspan="2" align="{$field->align}">{$field->field}</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='subtitle')}
|
||||
<tr>
|
||||
<td class='FormSubTitle' colspan="2" align="{$field->align}" id="form[{$field->name}]">
|
||||
<span style="float:left;">{$field->field}</span>
|
||||
{if (isset($field->showHide) && $field->showHide)}
|
||||
<a style="float:right;" href="#" onclick="contractExpandSubtitle(this);return false;">Hide</a>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='button') || ($field->type==='submit') || ($field->type==='reset')}
|
||||
<tr>
|
||||
<td class='FormButton' colspan="2" align="{$field->align}">{$field->field}</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='grid')}
|
||||
<tr>
|
||||
<td colspan="2">{$field->field}</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='checkbox') && ($field->labelOnRight)}
|
||||
<tr>
|
||||
<td class='FormLabel' width="{$form->labelWidth}"></td>
|
||||
<td>{$field->field}</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='phpvariable')}
|
||||
{elseif ($field->type==='private')}
|
||||
{elseif ($field->type==='javascript')}
|
||||
{elseif ($field->type==='hidden')}
|
||||
<tr style="display: none">
|
||||
<td colspan="2">{$field->field}</td>
|
||||
</tr>
|
||||
{elseif ($field->type==='')}
|
||||
{elseif ($field->withoutLabel)}
|
||||
<tr>
|
||||
<td colspan="2" class="withoutLabel">{$field->field}</td>
|
||||
</tr>
|
||||
{elseif (isset($field->withoutValue) && $field->withoutValue)}
|
||||
<tr>
|
||||
<td class='FormLabel' colspan="2"><div align="{$field->align}">{$field->label}</div></td>
|
||||
</tr>
|
||||
{else}
|
||||
<tr>
|
||||
<td class='FormLabel' width="{$form->labelWidth}">{if (isset($field->required)&&$field->required&&$field->mode==='edit')}<font color="red">* </font>{/if}{$field->label}</td>
|
||||
<td class='FormFieldContent' {* width="{math equation="parseFloat(x)-parseFloat(y)" x=$form->width y=$form->labelWidth}" *}>{$field->field}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{if $hasRequiredFields}<div class="FormRequiredTextMessage"><font color="red">* </font>{php}echo (G::LoadTranslation('ID_REQUIRED_FIELD'));{/php}</div>{/if}
|
||||
</div>
|
||||
<div class="boxBottom"><div class="a"></div><div class="b"></div><div class="c"></div></div>
|
||||
</div>
|
||||
{foreach from=$form->fields item=field}
|
||||
{if ($field->type==='javascript')}
|
||||
<script type="text/javascript">
|
||||
{$field->field}
|
||||
</script>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</form>
|
||||
{/if}
|
||||
{if $printJSFile}
|
||||
{* TODO: include file='xmlformScript.html' *}
|
||||
var form_{$form->id};
|
||||
var object_{$form->name};
|
||||
var i;
|
||||
function loadForm_{$form->id}(ajaxServer)
|
||||
{literal}{{/literal}
|
||||
if (typeof(G_Form)==='undefined') return alert('form.js was not loaded');
|
||||
form_{$form->id}=new G_Form(document.getElementById('{$form->id}'),'{$form->id}');
|
||||
object_{$form->name} = form_{$form->id};
|
||||
var myForm=form_{$form->id};
|
||||
if (myForm.aElements===undefined) alert("{$form->name}");
|
||||
myForm.ajaxServer=ajaxServer;
|
||||
|
||||
{if isset($form->ajaxSubmit) && ($form->ajaxSubmit)}
|
||||
{literal}
|
||||
var sub = new leimnud.module.app.submit({
|
||||
form : myForm.element,{/literal}
|
||||
inProgress: {$form->in_progress},
|
||||
callback: {$form->callback}
|
||||
{literal}
|
||||
});
|
||||
sub.sendObj = false;
|
||||
{/literal}
|
||||
{/if}
|
||||
{foreach from=$form->fields item=field key=name}
|
||||
i = myForm.aElements.length;
|
||||
{if (($field->type==='dropdown') || $field->type==='listbox')}
|
||||
myForm.aElements[i] = new G_DropDown(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='text')}
|
||||
myForm.aElements[i] = new G_Text(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='percentage')}
|
||||
myForm.aElements[i] = new G_Percentage(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='currency')}
|
||||
myForm.aElements[i] = new G_Currency(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='textarea')}
|
||||
myForm.aElements[i] = new G_TextArea(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='date')}
|
||||
myForm.aElements[i] = new G_Date(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='hidden')}
|
||||
myForm.aElements[i] = new G_Text(myForm, myForm.element.elements['form[{$name}]'],'{$name}');
|
||||
myForm.aElements[i].setAttributes({$field->getAttributes()});
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{elseif ($field->type==='grid')}
|
||||
myForm.aElements[i] = new G_Grid(myForm, '{$name}');
|
||||
grid_{$field->id}(myForm.aElements[i]);
|
||||
{$field->attachEvents("myForm.aElements[i].element")}
|
||||
{else}
|
||||
var element = getField("{$name}");
|
||||
{$field->attachEvents("element")}
|
||||
{/if}
|
||||
{/foreach}
|
||||
{foreach from=$form->fields item=field key=name}
|
||||
{if isset($field->dependentFields) && ($field->dependentFields!='')}
|
||||
{if ($field->type==='dropdown')}
|
||||
myForm.getElementByName('{$name}').setDependentFields('{$field->dependentFields}');
|
||||
{elseif ($field->type==='text')}
|
||||
myForm.getElementByName('{$name}').setDependentFields('{$field->dependentFields}');
|
||||
{elseif ($field->type==='percentage')}
|
||||
myForm.getElementByName('{$name}').setDependentFields('{$field->dependentFields}');
|
||||
{elseif ($field->type==='currency')}
|
||||
myForm.getElementByName('{$name}').setDependentFields('{$field->dependentFields}');
|
||||
{elseif ($field->type==='date')}
|
||||
myForm.getElementByName('{$name}').setDependentFields('{$field->dependentFields}');
|
||||
{/if}
|
||||
{/if}
|
||||
{/foreach}
|
||||
{literal}}{/literal}
|
||||
{/if}
|
||||
{if $printJavaScript}
|
||||
leimnud.event.add(window,'load',function(){literal}{{/literal}loadForm_{$form->id}('{$form->ajaxServer}');{literal}}{/literal});
|
||||
{/if}
|
||||
111
gulliver/includes/inc.ajax.php
Normal file
111
gulliver/includes/inc.ajax.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
/**
|
||||
* inc.ajax.php
|
||||
*
|
||||
* ProcessMaker Open Source Edition
|
||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*
|
||||
*/
|
||||
define ('AJAX_PAGE', 1);
|
||||
|
||||
function get_ajax_value ( $varName ) {
|
||||
$_result = NULL;
|
||||
if(isset($_GET[ $varName ]) || isset($_POST[ $varName ])) {
|
||||
$_result =(isset($_GET[ $varName ]))?urldecode($_GET[ $varName ]):$_POST[ $varName ];
|
||||
}
|
||||
//linea comentada porque cuando llegaba un valor cero, se convertia en la cadena nula
|
||||
//y eso provocaba muchos problemas....
|
||||
//$_result =(isset($_result) and !empty($_result)) ? $_result : "";
|
||||
$_result =(isset($_result) ) ? $_result : NULL;
|
||||
return $_result;
|
||||
}
|
||||
|
||||
function urldecode_values($aVars)
|
||||
{
|
||||
foreach ($aVars as $sKey1 => $sValue1)
|
||||
{
|
||||
if (is_array($sValue1))
|
||||
{
|
||||
foreach ($sValue1 as $sKey2 => $sValue2)
|
||||
{
|
||||
if (is_array($sValue2))
|
||||
{
|
||||
foreach ($sValue2 as $sKey3 => $sValue3)
|
||||
{
|
||||
$aVars[$sKey1][$sKey2][$sKey3] = urldecode($sValue3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$aVars[$sKey1][$sKey2] = urldecode($sValue2);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$aVars[$sKey1] = urldecode($sValue1);
|
||||
}
|
||||
}
|
||||
return $aVars;
|
||||
}
|
||||
|
||||
function ajax_show_xmlform($sFilename, $aFields = array(), $sAction = '') {
|
||||
$G_PUBLISH = new Publisher();
|
||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', $sFilename, '', $aFields, $sAction);
|
||||
G::RenderPage('publish', 'blank');
|
||||
}
|
||||
|
||||
function ajax_show_menu ( $menu ) {
|
||||
if ( $menu == '' ) return;
|
||||
global $G_OP_MENU;
|
||||
$G_OP_MENU = new Menu;
|
||||
$G_OP_MENU->Load( $menu );
|
||||
G::LoadTemplate( 'submenu' );
|
||||
}
|
||||
|
||||
function ajax_show_template ( $file ) {
|
||||
if ( $file == '' ) return;
|
||||
G::LoadTemplate( $file );
|
||||
}
|
||||
function ajax_show_image ( $file ) {
|
||||
global $G_IMAGE_FILENAME;
|
||||
global $G_IMAGE_PARTS;
|
||||
|
||||
if ( $file == '' ) return;
|
||||
|
||||
$G_IMAGE_FILENAME = $file;
|
||||
//$G_IMAGE_PARTS = $Part['Data'];
|
||||
|
||||
G::LoadTemplate( 'viewProcessMap' );
|
||||
}
|
||||
|
||||
function ajax_show_table ( $dbc, $file , $template) {
|
||||
global $G_CONTENT;
|
||||
global $G_TABLE;
|
||||
$G_CONTENT = new Content;
|
||||
//global $G_TMP_TARGET;
|
||||
if ( $file == '' || $template == '' ) return;
|
||||
//$G_TMP_TARGET = $Part['Target'];
|
||||
$G_TABLE = G::LoadRawTable( $file, $dbc, $Fields );
|
||||
G::LoadTemplate( $template );
|
||||
}
|
||||
|
||||
function ajax_LoadJavaScript( $phpMethod, $phpFile ) {
|
||||
print ' LoadPopJavaScript ( "/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/tools/loadJavaScript.html?method=' .$phpMethod . '&file=' . $phpFile . "\");\n";
|
||||
}
|
||||
1887
gulliver/js/common/core/common.js
Executable file
1887
gulliver/js/common/core/common.js
Executable file
File diff suppressed because it is too large
Load Diff
244
gulliver/js/common/core/effects.js
vendored
Executable file
244
gulliver/js/common/core/effects.js
vendored
Executable file
@@ -0,0 +1,244 @@
|
||||
/**
|
||||
*
|
||||
* Effects
|
||||
*
|
||||
* @Author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
||||
* @Date Feb 11th, 2009
|
||||
*/
|
||||
|
||||
/**
|
||||
* fade effect
|
||||
*
|
||||
* i.e. fade('myDivId')
|
||||
* or fade('myDivId', true) -> this for fadeIn and fadeOut in the self time
|
||||
*/
|
||||
|
||||
var TimeToFade = 1000.0;
|
||||
|
||||
function fade(eid, inOut){
|
||||
|
||||
inOut = ( typeof(inOut) != 'undefined' )? true: false;
|
||||
|
||||
var element = document.getElementById(eid);
|
||||
if(element == null)
|
||||
return;
|
||||
|
||||
if(element.FadeState == null)
|
||||
{
|
||||
if(element.style.opacity == null
|
||||
|| element.style.opacity == ''
|
||||
|| element.style.opacity == '1')
|
||||
{
|
||||
element.FadeState = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
element.FadeState = -2;
|
||||
}
|
||||
}
|
||||
|
||||
if(element.FadeState == 1 || element.FadeState == -1)
|
||||
{
|
||||
element.FadeState = element.FadeState == 1 ? -1 : 1;
|
||||
element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
|
||||
}
|
||||
else
|
||||
{
|
||||
element.FadeState = element.FadeState == 2 ? -1 : 1;
|
||||
element.FadeTimeLeft = TimeToFade;
|
||||
if(inOut){
|
||||
setTimeout("animateFadeInOut(" + new Date().getTime() + ",'" + eid + "')", 33);
|
||||
}
|
||||
else
|
||||
setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function animateFade(lastTick, eid)
|
||||
{
|
||||
var curTick = new Date().getTime();
|
||||
var elapsedTicks = curTick - lastTick;
|
||||
|
||||
var element = document.getElementById(eid);
|
||||
|
||||
if(element.FadeTimeLeft <= elapsedTicks)
|
||||
{
|
||||
element.style.opacity = element.FadeState == 1 ? '1' : '0';
|
||||
element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
|
||||
element.FadeState = element.FadeState == 1 ? 2 : -2;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
element.FadeTimeLeft -= elapsedTicks;
|
||||
var newOpVal = element.FadeTimeLeft/TimeToFade;
|
||||
if(element.FadeState == 1)
|
||||
newOpVal = 1 - newOpVal;
|
||||
|
||||
element.style.opacity = newOpVal;
|
||||
element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
|
||||
|
||||
setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
|
||||
}
|
||||
|
||||
|
||||
function animateFadeInOut(lastTick, eid)
|
||||
{
|
||||
var curTick = new Date().getTime();
|
||||
var elapsedTicks = curTick - lastTick;
|
||||
|
||||
var element = document.getElementById(eid);
|
||||
|
||||
if(element.FadeTimeLeft <= elapsedTicks)
|
||||
{
|
||||
element.style.opacity = element.FadeState == 1 ? '1' : '0';
|
||||
element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
|
||||
element.FadeState = element.FadeState == 1 ? 2 : -2;
|
||||
|
||||
fade(eid);
|
||||
return;
|
||||
}
|
||||
|
||||
element.FadeTimeLeft -= elapsedTicks;
|
||||
var newOpVal = element.FadeTimeLeft/TimeToFade;
|
||||
if(element.FadeState == 1)
|
||||
newOpVal = 1 - newOpVal;
|
||||
|
||||
element.style.opacity = newOpVal;
|
||||
element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
|
||||
|
||||
setTimeout("animateFadeInOut(" + curTick + ",'" + eid + "')", 33);
|
||||
}
|
||||
|
||||
/**
|
||||
* Effect
|
||||
*
|
||||
* To fade backgroud or text
|
||||
*
|
||||
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
var Effect = function(element){
|
||||
this.max=255;
|
||||
this.min=100;
|
||||
this.incrementor=1;
|
||||
|
||||
this.element=(typeof(element) != 'undefined')? element: "text"; //"text" o "background"
|
||||
//----------------------------------------------
|
||||
|
||||
this.r=this.max;
|
||||
this.g=this.max;
|
||||
this.b=this.max;
|
||||
|
||||
this.target = '';
|
||||
this.iTarget = '';
|
||||
|
||||
switch(this.element){
|
||||
case "text":
|
||||
this.target="color";
|
||||
this.iTarget="this.max-";
|
||||
break;
|
||||
case "background":
|
||||
this.iTarget="";
|
||||
this.target="backgroundColor";
|
||||
break;
|
||||
}
|
||||
|
||||
this.setElement = function(e){
|
||||
this.element = e;
|
||||
|
||||
switch(this.element){
|
||||
case "text":
|
||||
this.target="color";
|
||||
this.iTarget="this.max-";
|
||||
break;
|
||||
case "background":
|
||||
this.iTarget="";
|
||||
this.target="backgroundColor";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.setMin = function(e){
|
||||
this.min = e;
|
||||
}
|
||||
|
||||
this.setMax = function(e){
|
||||
this.max = e;
|
||||
}
|
||||
|
||||
this.fadeIn = function (obj){
|
||||
variation = -1;
|
||||
increment=variation*this.incrementor;
|
||||
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
|
||||
this.r+=increment;
|
||||
this.b+=increment;
|
||||
this.g+=increment;
|
||||
eso=obj;
|
||||
elincrement=variation;
|
||||
if(this.r>this.min && this.r<this.max){
|
||||
seguir=window.setTimeout("oEffect.fadeIn(eso,elincrement)",10);
|
||||
}
|
||||
else{
|
||||
this.r-=increment;
|
||||
this.g-=increment;
|
||||
this.b-=increment;
|
||||
}
|
||||
}
|
||||
|
||||
this.fadeOut = function (obj){
|
||||
variation = 1;
|
||||
increment=variation*this.incrementor;
|
||||
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
|
||||
this.r+=increment;
|
||||
this.b+=increment;
|
||||
this.g+=increment;
|
||||
eso=obj;
|
||||
elincrement=variation;
|
||||
if(this.r>this.min && this.r<this.max){
|
||||
seguir=window.setTimeout("oEffect.fadeOut(eso,elincrement)",10);
|
||||
}
|
||||
else{
|
||||
this.r-=increment;
|
||||
this.g-=increment;
|
||||
this.b-=increment;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* FadeIn and fade Out to the same time
|
||||
*/
|
||||
this.fade = function (obj){
|
||||
|
||||
variation = -1;
|
||||
|
||||
increment=variation*this.incrementor;
|
||||
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
|
||||
this.r+=increment;
|
||||
this.b+=increment;
|
||||
this.g+=increment;
|
||||
eso=obj;
|
||||
elincrement=variation;
|
||||
if(this.r>this.min && this.r<this.max){
|
||||
seguir=window.setTimeout("oEffect.fade(eso,elincrement)",10);
|
||||
}
|
||||
else{
|
||||
this.r-=increment;
|
||||
this.g-=increment;
|
||||
this.b-=increment;
|
||||
|
||||
if( typeof('cb') != 'undefined'){
|
||||
setTimeout("oEffect.fadeOut(document.getElementById('"+obj.id+"'))",0);
|
||||
} else {
|
||||
setTimeout("oEffect.fadeOut(document.getElementById('"+obj.id+"'))",0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//default object, always it should be declared.
|
||||
var oEffect = new Effect();
|
||||
|
||||
BIN
gulliver/js/common/core/images/default_logo.gif
Normal file
BIN
gulliver/js/common/core/images/default_logo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
238
gulliver/js/common/core/webResource.js
Normal file
238
gulliver/js/common/core/webResource.js
Normal file
@@ -0,0 +1,238 @@
|
||||
/* Web Resource
|
||||
* @author: David Callizaya <davidsantos@colosa.com>
|
||||
* Depend of common.js
|
||||
*/
|
||||
function WebResource(uri,parameters,method)
|
||||
{
|
||||
var request;
|
||||
request = get_xmlhttp();
|
||||
var response;
|
||||
try
|
||||
{
|
||||
if (!method ) method ="POST";
|
||||
if (parameters != '') {
|
||||
parameters += '&rand=' + Math.random();
|
||||
}
|
||||
else {
|
||||
parameters = 'rand=' + Math.random();
|
||||
}
|
||||
data = parameters;
|
||||
request.open( method, uri + ((method==='GET')?('?'+data): '') , false);
|
||||
if (method==='POST') request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
request.send(((method==='GET')? null : data));
|
||||
var type=request.getResponseHeader('Content-Type');
|
||||
var reType=/\w+\/\w+/;
|
||||
var maType=reType.exec(type);
|
||||
type=maType?maType[0]:'';//type.split(String.fromCharCode(9)).join("").trim();
|
||||
}catch(ss)
|
||||
{
|
||||
alert("error"+ss.message);
|
||||
}
|
||||
switch(type)
|
||||
{
|
||||
case "text/json":
|
||||
try
|
||||
{
|
||||
eval('response='+request.responseText+';');
|
||||
break;
|
||||
}
|
||||
catch (err)
|
||||
{
|
||||
}
|
||||
G.alert('<textarea style="width:100%;" rows="9">'+request.responseText+'</textarea>');
|
||||
return ;
|
||||
break;
|
||||
case "text/javascript":
|
||||
if (window.execScript)
|
||||
window.execScript( request.responseText ,'javascript');
|
||||
else
|
||||
window.setTimeout( request.responseText, 0 );
|
||||
break;
|
||||
case "text/html":
|
||||
response=$dce('div');
|
||||
response.innerHTML=request.responseText;
|
||||
break;
|
||||
}
|
||||
/*var r;
|
||||
for(r in response)
|
||||
{
|
||||
eval('this.'+r+'=response[r];');
|
||||
}*/
|
||||
return response;
|
||||
}
|
||||
function __wrCall(uri,func,parameters)
|
||||
{
|
||||
var param=[];
|
||||
for(var a=0;a<parameters.length;a++) param.push(parameters[a]);
|
||||
return WebResource(uri,"function="+func+"¶meters="+encodeURIComponent(param.toJSONString()));
|
||||
}
|
||||
/* Required functions */
|
||||
if (!Object.prototype.toJSONString) {
|
||||
Array.prototype.toJSONString = function () {
|
||||
var a = ['['],
|
||||
b,
|
||||
i,
|
||||
l = this.length,
|
||||
v;
|
||||
function p(s) {
|
||||
if (b) {
|
||||
a.push(',');
|
||||
}
|
||||
a.push(s);
|
||||
b = true;
|
||||
}
|
||||
for (i = 0; i < l; i += 1) {
|
||||
v = this[i];
|
||||
switch (typeof v) {
|
||||
case 'undefined':
|
||||
case 'function':
|
||||
case 'unknown':
|
||||
break;
|
||||
case 'object':
|
||||
if (v) {
|
||||
if (typeof v.toJSONString === 'function') {
|
||||
p(v.toJSONString());
|
||||
}
|
||||
} else {
|
||||
p("null");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
p(v.toJSONString());
|
||||
}
|
||||
}
|
||||
a.push(']');
|
||||
return a.join('');
|
||||
};
|
||||
Boolean.prototype.toJSONString = function () {
|
||||
return String(this);
|
||||
};
|
||||
Date.prototype.toJSONString = function () {
|
||||
function f(n) {
|
||||
return n < 10 ? '0' + n : n;
|
||||
}
|
||||
return '"' + this.getFullYear() + '-' +
|
||||
f(this.getMonth() + 1) + '-' +
|
||||
f(this.getDate()) + 'T' +
|
||||
f(this.getHours()) + ':' +
|
||||
f(this.getMinutes()) + ':' +
|
||||
f(this.getSeconds()) + '"';
|
||||
};
|
||||
Number.prototype.toJSONString = function () {
|
||||
return isFinite(this) ? String(this) : "null";
|
||||
};
|
||||
Object.prototype.toJSONString = function () {
|
||||
var a = ['{'],
|
||||
b,
|
||||
k,
|
||||
v;
|
||||
function p(s) {
|
||||
if (b) {
|
||||
a.push(',');
|
||||
}
|
||||
a.push(k.toJSONString(), ':', s);
|
||||
b = true;
|
||||
}
|
||||
for (k in this) {
|
||||
if (this.hasOwnProperty(k)) {
|
||||
v = this[k];
|
||||
switch (typeof v) {
|
||||
case 'undefined':
|
||||
case 'function':
|
||||
case 'unknown':
|
||||
break;
|
||||
case 'object':
|
||||
if (v) {
|
||||
if (typeof v.toJSONString === 'function') {
|
||||
p(v.toJSONString());
|
||||
}
|
||||
} else {
|
||||
p("null");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
p(v.toJSONString());
|
||||
}
|
||||
}
|
||||
}
|
||||
a.push('}');
|
||||
return a.join('');
|
||||
};
|
||||
|
||||
(function (s) {
|
||||
var m = {
|
||||
'\b': '\\b',
|
||||
'\t': '\\t',
|
||||
'\n': '\\n',
|
||||
'\f': '\\f',
|
||||
'\r': '\\r',
|
||||
'"' : '\\"',
|
||||
'\\': '\\\\'
|
||||
};
|
||||
s.parseJSON = function (filter) {
|
||||
try {
|
||||
if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.
|
||||
test(this)) {
|
||||
var j = eval('(' + this + ')');
|
||||
if (typeof filter === 'function') {
|
||||
|
||||
function walk(k, v) {
|
||||
if (v && typeof v === 'object') {
|
||||
for (var i in v) {
|
||||
if (v.hasOwnProperty(i)) {
|
||||
v[i] = walk(i, v[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return filter(k, v);
|
||||
}
|
||||
|
||||
j = walk('', j);
|
||||
}
|
||||
return j;
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
s.toJSONString = function () {
|
||||
if (/["\\\x00-\x1f]/.test(this)) {
|
||||
return '"' + this.replace(/([\x00-\x1f\\"])/g, function(a, b) {
|
||||
var c = m[b];
|
||||
if (c) {
|
||||
return c;
|
||||
}
|
||||
c = b.charCodeAt();
|
||||
return '\\u00' +
|
||||
Math.floor(c / 16).toString(16) +
|
||||
(c % 16).toString(16);
|
||||
}) + '"';
|
||||
}
|
||||
return '"' + this + '"';
|
||||
};
|
||||
})(String.prototype);
|
||||
}
|
||||
if (!String.prototype.trim)
|
||||
{
|
||||
String.prototype.trim=function()
|
||||
{
|
||||
var cadena=this;
|
||||
for(i=0; i<cadena.length; )
|
||||
{
|
||||
if(cadena.charAt(i)==" ")
|
||||
cadena=cadena.substr(i+1, cadena.length);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
for(i=cadena.length-1; i>=0; i=cadena.length-1)
|
||||
{
|
||||
if(cadena.charAt(i)==" ")
|
||||
cadena=cadena.substr(0,i);
|
||||
else
|
||||
break;
|
||||
}
|
||||
return cadena.toString();
|
||||
}
|
||||
}
|
||||
67
gulliver/js/common/tree/tree.js
Normal file
67
gulliver/js/common/tree/tree.js
Normal file
@@ -0,0 +1,67 @@
|
||||
/* Manages a table of Tree type.
|
||||
* @author David Callizaya
|
||||
*/
|
||||
function G_Tree() {
|
||||
this.lastSelected = false;
|
||||
this.lastSelectedClassName = 'treeNode';
|
||||
var me = this;
|
||||
this.changeSign = function( element, newSign ){
|
||||
/*element must be the TR of the current node */
|
||||
var spans = element.cells[0].childNodes;//getElementsByTagName('SPAN');
|
||||
for(var r= 0 ; r<spans.length ; r++ ) {
|
||||
if(spans[r].nodeName==='SPAN') {
|
||||
if(spans[r].getAttribute('name')===newSign) {
|
||||
spans[r].style.display='';
|
||||
} else {
|
||||
spans[r].style.display='none';
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
this.getRowOf=function (element) {
|
||||
//NOTE: IF (element.offsetParent==null) there is no efect.
|
||||
while(element.nodeName!='BODY') {
|
||||
if (element.getAttribute('name')) {
|
||||
if (element.getAttribute('name').substr(0,9)==='treeNode[') {
|
||||
var regexp = /^treeNode\[[^\]]+\]\[([^\]]+)\]$/;
|
||||
result = regexp.exec(element.getAttribute('name'));
|
||||
if (!(result && result.length>=2)) return false;
|
||||
//Now element is the TR of the current node.
|
||||
return element.parentNode;
|
||||
}
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
this.contract=function( element ){
|
||||
if (!(element = this.getRowOf(element))) return;
|
||||
var row = element.rowIndex;
|
||||
if ( (row+1)>= element.parentNode.rows.length ) return;
|
||||
element.parentNode.rows[row+1].style.display = 'none';
|
||||
this.changeSign( element , 'plus' );
|
||||
};
|
||||
|
||||
this.expand=function( element ){
|
||||
if (!(element = this.getRowOf(element))) return;
|
||||
var row = element.rowIndex;
|
||||
if ( (row+1)>= element.parentNode.rows.length ) return;
|
||||
element.parentNode.rows[row+1].style.display = '';
|
||||
this.changeSign( element , 'minus' );
|
||||
};
|
||||
this.select=function( element ){
|
||||
if (!(element = this.getRowOf(element))) return;
|
||||
if (me.lastSelected) {
|
||||
if (me.lastSelected.cells[1]) me.lastSelected.cells[1].className=me.lastSelectedClassName;
|
||||
}
|
||||
me.lastSelected = element ;
|
||||
//me.lastSelected.cells[1].style.filter='Light';
|
||||
//me.lastSelected.cells[1].filters['Light'].addAmbient(155,155,155,255);
|
||||
me.lastSelectedClassName=me.lastSelected.cells[1].className;
|
||||
me.lastSelected.cells[1].className="treeNodeSelected";
|
||||
};
|
||||
this.refresh=function( div , server ) {
|
||||
div.innerHTML = ajax_function( server ,'','' );
|
||||
};
|
||||
};
|
||||
var tree = new G_Tree();
|
||||
129
gulliver/js/dveditor/core/dveditor.js
Normal file
129
gulliver/js/dveditor/core/dveditor.js
Normal file
@@ -0,0 +1,129 @@
|
||||
function DVEditor(where,body,oHiddenInput,height,mode)
|
||||
{
|
||||
var me=this;
|
||||
var hiddenInput=oHiddenInput;
|
||||
var iframe=$dce("iframe");
|
||||
//NOTE: className no funciona en FIREFOX
|
||||
iframe.style.width="100%";
|
||||
iframe.style.height=height;
|
||||
iframe.style.margin="0px";
|
||||
iframe.style.padding="0px";
|
||||
iframe.style.border="none";
|
||||
where.appendChild(iframe);
|
||||
var head=document.childNodes[0].childNodes[0];
|
||||
var header='';
|
||||
if (iframe.contentWindow)
|
||||
{
|
||||
var doc=iframe.contentWindow.document;
|
||||
}
|
||||
else
|
||||
{
|
||||
var doc=iframe.contentDocument;
|
||||
}
|
||||
var _header=$dce("head");// head.cloneNode(true);
|
||||
for(var i=0;i<head.childNodes.length;i++) {
|
||||
try{
|
||||
if ((head.childNodes[i].tagName==='LINK')&&
|
||||
(head.childNodes[i].type="text/css"))
|
||||
{
|
||||
_header.appendChild(head.childNodes[i].cloneNode(true));
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
}
|
||||
}
|
||||
header=_header.innerHTML;
|
||||
//alert(header);
|
||||
doc.open();
|
||||
doc.write('<html><head>'+header+'</head><body style="height:100%;padding:0px;margin:0px;border:none;background-color:ThreeDHighlight;cursor:text;">'+body+'</body></html>');
|
||||
doc.close();
|
||||
doc.designMode="on";
|
||||
if(mode=="edit"){
|
||||
doc.contentEditable=true;
|
||||
}else{
|
||||
doc.contentEditable=false;
|
||||
}
|
||||
this.doc=doc;
|
||||
me.insertHTML=function (html)
|
||||
{
|
||||
var cmd = 'inserthtml';
|
||||
var bool = false;
|
||||
var value = html;
|
||||
try
|
||||
{
|
||||
doc.execCommand(cmd,bool,value);
|
||||
} catch (e) {
|
||||
}
|
||||
return false;
|
||||
};
|
||||
me.command=function()
|
||||
{
|
||||
var cmd = this.getAttribute('name');
|
||||
var bool = false;
|
||||
var value = this.getAttribute('cmdValue') || null;
|
||||
if (value == 'promptUser')
|
||||
value = prompt(
|
||||
(typeof(G_STRINGS[this.getAttribute('promptText')])!=='undefined')?
|
||||
G_STRINGS[this.getAttribute('promptText')]:
|
||||
this.getAttribute('promptText')
|
||||
);
|
||||
try
|
||||
{
|
||||
doc.execCommand(cmd,bool,value);
|
||||
} catch (e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
me.loadToolBar=function(uri)
|
||||
{
|
||||
var tb=WebResource(uri);
|
||||
iframe.parentNode.insertBefore(tb,iframe);
|
||||
me.setToolBar(tb);
|
||||
}
|
||||
me.setToolBar=function(toolbar)
|
||||
{
|
||||
var buttons=toolbar.getElementsByTagName('area');
|
||||
for(var b=0;b<buttons.length;b++)
|
||||
{
|
||||
buttons[b].onclick=me.command;
|
||||
}
|
||||
}
|
||||
me.getHTML=function()
|
||||
{
|
||||
var body='';
|
||||
try {
|
||||
body=doc.getElementsByTagName('body')[0];
|
||||
body=body.innerHTML;
|
||||
} catch (e) {
|
||||
}
|
||||
return body;
|
||||
}
|
||||
me.setHTML=function(html)
|
||||
{
|
||||
try {
|
||||
body=doc.getElementsByTagName('body')[0];
|
||||
body.innerHTML=html;
|
||||
} catch (e) {
|
||||
}
|
||||
return body;
|
||||
}
|
||||
me.refreshHidden=function()
|
||||
{
|
||||
if(hiddenInput)
|
||||
{
|
||||
var html=me.getHTML();
|
||||
var raiseOnChange=hiddenInput.value!==html;
|
||||
hiddenInput.value=html;
|
||||
if (raiseOnChange && hiddenInput.onchange) hiddenInput.onchange();
|
||||
}
|
||||
}
|
||||
me.syncHidden=function(name)
|
||||
{
|
||||
me.refreshHidden();
|
||||
setTimeout(name+".syncHidden('"+name+"')",500);
|
||||
}
|
||||
}
|
||||
39
gulliver/js/dveditor/core/toolbars/complete3lines.html
Normal file
39
gulliver/js/dveditor/core/toolbars/complete3lines.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<div style="background-color:ButtonFace;">
|
||||
<img src='/js/dveditor/core/toolbars/complete3lines.png' usemap='#DVEditorMap' alt='' style='border-style:none' />
|
||||
<map class="dvtoolbar" id='DVEditorMap' name='DVEditorMap'>
|
||||
<area shape='rect' href="#" coords='0,24,24,48' name='fontname' cmdValue='promptUser' promptText='Font name?' value='font-family'/>
|
||||
<area shape='rect' href="#" coords='96,48,120,72' name='inserthtml' cmdValue='promptUser' promptText='Valid HTML snippet' value='html'/>
|
||||
<area shape='rect' href="#" coords='0,48,24,72' name='insertparagraph'/>
|
||||
<area shape='rect' href="#" coords='48,48,72,72' name='insertorderedlist'/>
|
||||
<area shape='rect' href="#" coords='72,48,96,72' name='insertunorderedlist'/>
|
||||
<area shape='rect' href="#" coords='216,0,240,24' name='justifyleft'/>
|
||||
<area shape='rect' href="#" coords='240,0,264,24' name='justifycenter'/>
|
||||
<area shape='rect' href="#" coords='264,0,288,24' name='justifyright'/>
|
||||
<area shape='rect' href="#" coords='288,0,312,24' name='justifyfull'/>
|
||||
<area shape='rect' href="#" coords='72,0,96,24' name='bold'/>
|
||||
<area shape='rect' href="#" coords='96,0,120,24' name='italic'/>
|
||||
<area shape='rect' href="#" coords='120,0,144,24' name='underline'/>
|
||||
<area shape='rect' href="#" coords='24,0,48,24' name='cut'/>
|
||||
<area shape='rect' href="#" coords='0,0,24,24' name='copy'/>
|
||||
<area shape='rect' href="#" coords='48,0,72,24' name='paste'/>
|
||||
<area shape='rect' href="#" coords='264,24,288,48' name='undo'/>
|
||||
<area shape='rect' href="#" coords='288,24,312,48' name='redo'/>
|
||||
<area shape='rect' href="#" coords='120,24,144,48' name='backcolor' cmdValue='promptUser' promptText='Background color?' value='bgcolor'/>
|
||||
<area shape='rect' href="#" coords='144,24,168,48' name='hilitecolor' cmdValue='promptUser' promptText='Hilite color?' value='hilite'/>
|
||||
<area shape='rect' href="#" coords='48,24,72,48' name='increasefontsize'/>
|
||||
<area shape='rect' href="#" coords='72,24,96,48' name='decreasefontsize'/>
|
||||
<area shape='rect' href="#" coords='168,24,192,48' name='formatblock' cmdValue='promptUser' promptText='Which block?' value='formatblock'/>
|
||||
<area shape='rect' href="#" coords='24,24,48,48' name='FontSize' cmdValue='promptUser' promptText='Font size?' value='font-size'/>
|
||||
<area shape='rect' href="#" coords='192,0,216,24' name='superscript'/>
|
||||
<area shape='rect' href="#" coords='168,0,192,24' name='subscript'/>
|
||||
<area shape='rect' href="#" coords='144,0,168,24' name='strikethrough'/>
|
||||
<area shape='rect' href="#" coords='144,48,168,72' name='createLink' cmdValue='promptUser' promptText='URL of link?' value='<a>'/>
|
||||
<area shape='rect' href="#" coords='24,48,48,72' name='inserthorizontalrule'/>
|
||||
<area shape='rect' href="#" coords='192,24,216,48' name='insertimage' cmdValue='promptUser' promptText='Image URI?' value='<img />'/>
|
||||
<area shape='rect' href="#" coords='96,24,120,48' name='forecolor' cmdValue='promptUser' promptText='Text color?' value='fgcolor'/>
|
||||
<area shape='rect' href="#" coords='240,24,264,48' name='outdent'/>
|
||||
<area shape='rect' href="#" coords='216,24,240,48' name='indent'/>
|
||||
<area shape='rect' href="#" coords='120,48,144,72' name='delete'/>
|
||||
<area shape='rect' href="#" coords='168,48,192,72' name='unlink'/>
|
||||
</map>
|
||||
</div>
|
||||
BIN
gulliver/js/dveditor/core/toolbars/complete3lines.png
Normal file
BIN
gulliver/js/dveditor/core/toolbars/complete3lines.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.0 KiB |
16
gulliver/js/dveditor/core/toolbars/smallToolBar.html
Normal file
16
gulliver/js/dveditor/core/toolbars/smallToolBar.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<div style="background-color:ButtonFace;">
|
||||
<img src='/js/dveditor/core/toolbars/smallToolBar.png' usemap='#DVEditorMap' alt='' style='border-style:none' />
|
||||
<map class="dvtoolbar" id='DVEditorMap' name='DVEditorMap'>
|
||||
<area shape='rect' coords='72,0,96,24' title='Justify left' name='justifyleft'/>
|
||||
<area shape='rect' coords='96,0,120,24' title='Justify center' name='justifycenter'/>
|
||||
<area shape='rect' coords='120,0,144,24'title='Justify right' name='justifyright'/>
|
||||
<area shape='rect' coords='144,0,168,24'title='Justifyfull' name='justifyfull'/>
|
||||
<area shape='rect' coords='0,0,24,24' title='Bold' name='bold'/>
|
||||
<area shape='rect' coords='24,0,48,24' title='Italic' name='italic'/>
|
||||
<area shape='rect' coords='48,0,72,24' title='Under line' name='underline'/>
|
||||
<!-- <area shape='rect' coords='168,0,192,24' name='cut'/>
|
||||
<area shape='rect' coords='192,0,216,24' name='copy'/>
|
||||
<area shape='rect' coords='216,0,240,24' name='paste'/>-->
|
||||
<area shape='rect' coords='240,0,264,24' name='createLink' cmdValue='promptUser' promptText='ID_URL_OF_LINK' value='<a>'/>
|
||||
</map>
|
||||
</div>
|
||||
BIN
gulliver/js/dveditor/core/toolbars/smallToolBar.png
Normal file
BIN
gulliver/js/dveditor/core/toolbars/smallToolBar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
39
gulliver/js/dveditor/core/toolbars/toolbar2lines.html
Normal file
39
gulliver/js/dveditor/core/toolbars/toolbar2lines.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<div style="background-color:ButtonFace;">
|
||||
<img src='/js/dveditor/core/toolbars/toolbar2lines.png' usemap='#DVEditorMap' alt='' style='border-style:none' />
|
||||
<map class="dvtoolbar" id='DVEditorMap' name='DVEditorMap'>
|
||||
<area shape='rect' href="#" coords='312,0,336,24' name='fontname' cmdValue='promptUser' promptText='ID_FONT_NAME' value='font-family'/>
|
||||
<area shape='rect' href="#" coords='264,24,288,48' name='inserthtml' cmdValue='promptUser' promptText='ID_INSERT_HTML' value='html'/>
|
||||
<area shape='rect' href="#" coords='192,24,216,48' name='insertparagraph'/>
|
||||
<area shape='rect' href="#" coords='120,24,144,48' name='insertorderedlist'/>
|
||||
<area shape='rect' href="#" coords='144,24,168,48' name='insertunorderedlist'/>
|
||||
<area shape='rect' href="#" coords='72,0,96,24' name='justifyleft'/>
|
||||
<area shape='rect' href="#" coords='96,0,120,24' name='justifycenter'/>
|
||||
<area shape='rect' href="#" coords='120,0,144,24' name='justifyright'/>
|
||||
<area shape='rect' href="#" coords='144,0,168,24' name='justifyfull'/>
|
||||
<area shape='rect' href="#" coords='0,0,24,24' name='bold'/>
|
||||
<area shape='rect' href="#" coords='24,0,48,24' name='italic'/>
|
||||
<area shape='rect' href="#" coords='48,0,72,24' name='underline'/>
|
||||
<area shape='rect' href="#" coords='168,0,192,24' name='cut'/>
|
||||
<area shape='rect' href="#" coords='192,0,216,24' name='copy'/>
|
||||
<area shape='rect' href="#" coords='216,0,240,24' name='paste'/>
|
||||
<area shape='rect' href="#" coords='264,0,288,24' name='undo'/>
|
||||
<area shape='rect' href="#" coords='288,0,312,24' name='redo'/>
|
||||
<area shape='rect' href="#" coords='360,24,384,48' name='backcolor' cmdValue='promptUser' promptText='ID_BACKGROUND_COLOR' value='bgcolor'/>
|
||||
<area shape='rect' href="#" coords='384,0,408,24' name='hilitecolor' cmdValue='promptUser' promptText='ID_HILITE_COLOR' value='hilite'/>
|
||||
<area shape='rect' href="#" coords='336,0,360,24' name='increasefontsize'/>
|
||||
<area shape='rect' href="#" coords='336,24,360,48' name='decreasefontsize'/>
|
||||
<area shape='rect' href="#" coords='384,24,408,48' name='formatblock' cmdValue='promptUser' promptText='ID_WHICH_BLOCK' value='formatblock'/>
|
||||
<area shape='rect' href="#" coords='312,24,336,48' name='FontSize' cmdValue='promptUser' promptText='ID_FONT_SIZE' value='font-size'/>
|
||||
<area shape='rect' href="#" coords='0,24,24,48' name='superscript'/>
|
||||
<area shape='rect' href="#" coords='24,24,48,48' name='subscript'/>
|
||||
<area shape='rect' href="#" coords='48,24,72,48' name='strikethrough'/>
|
||||
<area shape='rect' href="#" coords='240,0,264,24' name='createLink' cmdValue='promptUser' promptText='ID_URL_OF_LINK' value='<a>'/>
|
||||
<area shape='rect' href="#" coords='216,24,240,48' name='inserthorizontalrule'/>
|
||||
<area shape='rect' href="#" coords='288,24,312,48' name='insertimage' cmdValue='promptUser' promptText='ID_IMAGE_URI' value='<img />'/>
|
||||
<area shape='rect' href="#" coords='360,0,384,24' name='forecolor' cmdValue='promptUser' promptText='ID_FONT_COLOR' value='fgcolor'/>
|
||||
<area shape='rect' href="#" coords='96,24,120,48' name='outdent'/>
|
||||
<area shape='rect' href="#" coords='72,24,96,48' name='indent'/>
|
||||
<area shape='rect' href="#" coords='168,24,192,48' name='delete'/>
|
||||
<area shape='rect' href="#" coords='240,24,264,48' name='unlink'/>
|
||||
</map>
|
||||
</div>
|
||||
BIN
gulliver/js/dveditor/core/toolbars/toolbar2lines.png
Normal file
BIN
gulliver/js/dveditor/core/toolbars/toolbar2lines.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.7 KiB |
6367
gulliver/js/ext/draw2d.js
Executable file
6367
gulliver/js/ext/draw2d.js
Executable file
File diff suppressed because it is too large
Load Diff
11
gulliver/js/ext/ext-all.js
Executable file
11
gulliver/js/ext/ext-all.js
Executable file
File diff suppressed because one or more lines are too long
7
gulliver/js/ext/ext-base.js
Executable file
7
gulliver/js/ext/ext-base.js
Executable file
File diff suppressed because one or more lines are too long
873
gulliver/js/ext/moocanvas.js
Executable file
873
gulliver/js/ext/moocanvas.js
Executable file
@@ -0,0 +1,873 @@
|
||||
//MooCanvas, My Object Oriented Canvas Element. Copyright (c) 2007 Olmo Maldonado, <http://ibolmo.no-ip.info/sandbox/moocanvas/>, MIT Style License.
|
||||
/*
|
||||
Script: Canvas.js
|
||||
Contains the <Canvas> class.
|
||||
|
||||
Dependencies:
|
||||
MooTools, <http://mootools.net/>
|
||||
Element, and its dependencies
|
||||
|
||||
Author:
|
||||
Olmo Maldonado, <http://olmo-maldonado.com/>
|
||||
|
||||
Credits:
|
||||
Lightly based from Ralph Sommerer's work: <http://blogs.msdn.com/sompost/archive/2006/02/22/536967.aspx>
|
||||
Moderately based from excanvas: <http://excanvas.sourceforge.net/>
|
||||
Great thanks to Inviz, <http://inviz.ru/>, for his optimizing help.
|
||||
|
||||
License:
|
||||
MIT License, <http://en.wikipedia.org/wiki/MIT_License>
|
||||
*/
|
||||
|
||||
/*
|
||||
Class: Canvas
|
||||
Creates the element <canvas> and extends the element with getContext if not defined.
|
||||
|
||||
Arguments:
|
||||
id - The ID of the canvas element
|
||||
props - Optional properties for the canvas element, which also gets passed to the new Element
|
||||
|
||||
Example:
|
||||
> var cv = new Canvas('cv');
|
||||
> var ctx = cv.getContext('2d');
|
||||
>
|
||||
> $(document.body).adopt(cv);
|
||||
*/
|
||||
var MooCanvas = new Class({
|
||||
|
||||
initialize: function(id, props) {
|
||||
var el;
|
||||
if($type(id) == 'string') {
|
||||
props = $merge({width: 300, height: 150}, props, {'id': id});
|
||||
el = new Element('canvas', props);
|
||||
if(!el.getContext) {
|
||||
if(!CanvasRenderingContext2D.cssFixed) {
|
||||
document.createStyleSheet().cssText =
|
||||
'canvas{display:inline-block;overflow:hidden;text-align:left;cursor:default;}' +
|
||||
'v\\:*{behavior:url(#default#VML)}' +
|
||||
'o\\:*{behavior:url(#default#VML)}';
|
||||
CanvasRenderingContext2D.cssFixed = true;
|
||||
}
|
||||
|
||||
el.set({
|
||||
styles: {
|
||||
width: props.width,
|
||||
height: props.height,
|
||||
display: 'inline-block',
|
||||
overflow: 'hidden'
|
||||
},
|
||||
|
||||
getContext: function() {
|
||||
this.context = this.context || new CanvasRenderingContext2D(el);
|
||||
return this.context;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return el;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
Class: CanvasRenderingContext2D
|
||||
Context2D class with all the Context methods specified by the WHATWG, <http://www.whatwg.org/specs/web-apps/current-work/#the-canvas>
|
||||
|
||||
Arguments:
|
||||
el - Element requesting the context2D
|
||||
*/
|
||||
var CanvasRenderingContext2D = new Class({
|
||||
|
||||
initialize: function(el) {
|
||||
this.parent = el;
|
||||
this.fragment = document.createDocumentFragment();
|
||||
this.element = new Element('div', {
|
||||
styles: {
|
||||
width: el.clientWidth || el.width,
|
||||
height: el.clientHeight || el.height,
|
||||
overflow: 'hidden',
|
||||
position: 'absolute'
|
||||
}
|
||||
});
|
||||
this.fragment.appendChild(this.element);
|
||||
|
||||
this.m = [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
this.rot = 0;
|
||||
this.state = [];
|
||||
this.path = [];
|
||||
this.delay = 30;
|
||||
this.max = 10;
|
||||
this.i = 0;
|
||||
|
||||
// from excanvas, subpixel rendering.
|
||||
this.Z = 10;
|
||||
this.Z2 = this.Z / 2;
|
||||
this.arcScaleX = 1;
|
||||
this.arcScaleY = 1;
|
||||
this.currentX = 0;
|
||||
this.currentY = 0;
|
||||
|
||||
|
||||
this.miterLimit = this.Z * 1;
|
||||
},
|
||||
|
||||
lineWidth: 1,
|
||||
strokeStyle: '#000',
|
||||
fillStyle: '#fff',
|
||||
globalAlpha: 1,
|
||||
globalCompositeOperation: 'source-over',
|
||||
lineCap: 'butt',
|
||||
lineJoin: 'miter',
|
||||
shadowBlur: 0,
|
||||
shadowColor: '#000',
|
||||
shadowOffsetX: 0,
|
||||
shadowOffsetY: 0
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
Script: Path.js
|
||||
|
||||
Dependencies:
|
||||
Canvas.js
|
||||
|
||||
Author:
|
||||
Olmo Maldonado, <http://olmo-maldonado.com/>
|
||||
|
||||
Credits:
|
||||
Lightly based from Ralph Sommerer's work: <http://blogs.msdn.com/sompost/archive/2006/02/22/536967.aspx>
|
||||
Moderately based from excanvas: <http://excanvas.sourceforge.net/>
|
||||
Great thanks to Inviz, <http://inviz.ru/>, for his optimizing help.
|
||||
|
||||
License:
|
||||
MIT License, <http://en.wikipedia.org/wiki/MIT_License>
|
||||
*/
|
||||
|
||||
CanvasRenderingContext2D.implement({
|
||||
|
||||
/*
|
||||
A path has a list of zero or more subpaths.
|
||||
Each subpath consists of a list of one or more points,
|
||||
connected by straight or curved lines, and a flag indicating whether
|
||||
the subpath is closed or not. A closed subpath is one where the
|
||||
last point of the subpath is connected to the first point of
|
||||
the subpath by a straight line. Subpaths with fewer than two
|
||||
points are ignored when painting the path.
|
||||
*/
|
||||
|
||||
/*
|
||||
Property:
|
||||
Empties the list of subpaths so that the context once again has zero
|
||||
subpaths.
|
||||
*/
|
||||
beginPath: function() {
|
||||
this.path = [];
|
||||
this.moved = false;
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Creates a new subpath with the specified point as its first
|
||||
(and only) point.
|
||||
*/
|
||||
moveTo: function(x, y) {
|
||||
this.path.push('m', this.coord(x, y));
|
||||
this.currentX = x;
|
||||
this.currentY = y;
|
||||
this.moved = true;
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Does nothing if the context has no subpaths.
|
||||
Otherwise, marks the last subpath as closed, create a new
|
||||
subpath whose first point is the same as the previous
|
||||
subpath's first point, and finally add this new subpath to the
|
||||
path.
|
||||
*/
|
||||
closePath: function() {
|
||||
this.path.push('x');
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must do nothing if the context has no subpaths. Otherwise,
|
||||
it must connect the last point in the subpath to the given point
|
||||
(x, y) using a straight line, and must then add the given point
|
||||
(x, y) to the subpath.
|
||||
*/
|
||||
lineTo: function(x, y) {
|
||||
this.path.push((this.moved ? 'l' : ','), this.coord(x, y));
|
||||
this.currentX = x;
|
||||
this.currentY = y;
|
||||
this.moved = false;
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must do nothing if the context has no subpaths. Otherwise,
|
||||
it must connect the last point in the subpath to the given point
|
||||
(x, y) using a straight line, and must then add the given point
|
||||
(x, y) to the subpath.
|
||||
*/
|
||||
quadraticCurveTo: function(cpx, cpy, x, y) {
|
||||
var cx = 2 * cpx,
|
||||
cy = 2 * cpy;
|
||||
|
||||
this.bezierCurveTo(
|
||||
(cx + this.currentX) / 3,
|
||||
(cy + this.currentY) / 3,
|
||||
(cx + x) / 3,
|
||||
(cy + y) / 3,
|
||||
x,
|
||||
y
|
||||
);
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must do nothing if the context has no subpaths. Otherwise,
|
||||
it must connect the last point in the subpath to the given point
|
||||
(x, y) using a bezier curve with control points (cp1x, cp1y) and
|
||||
(cp2x, cp2y). Then, it must add the point (x, y) to the subpath.
|
||||
*/
|
||||
bezierCurveTo: function(cp0x, cp0y, cp1x, cp1y, x, y) {
|
||||
this.path.push(' c ',
|
||||
this.coord(cp0x, cp0y), ",",
|
||||
this.coord(cp1x, cp1y), ",",
|
||||
this.coord(x, y)
|
||||
);
|
||||
|
||||
this.currentX = x;
|
||||
this.currentY = y;
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must do nothing if the context has no subpaths. If the context
|
||||
does have a subpath, then the behaviour depends on the arguments and
|
||||
the last point in the subpath.
|
||||
|
||||
Let the point (x0, y0) be the last point in the subpath. Let The Arc
|
||||
be the shortest arc given by circumference of the circle that has one
|
||||
point tangent to the line defined by the points (x0, y0) and (x1, y1),
|
||||
another point tangent to the line defined by the points (x1, y1) and
|
||||
(x2, y2), and that has radius radius. The points at which this circle
|
||||
touches these two lines are called the start and end tangent points
|
||||
respectively.
|
||||
|
||||
If the point (x2, y2) is on the line defined by the points (x0, y0)
|
||||
and (x1, y1) then the method must do nothing, as no arc would satisfy
|
||||
the above constraints.
|
||||
|
||||
Otherwise, the method must connect the point (x0, y0) to the start
|
||||
tangent point by a straight line, then connect the start tangent point
|
||||
to the end tangent point by The Arc, and finally add the start and end
|
||||
tangent points to the subpath.
|
||||
|
||||
Negative or zero values for radius must cause the implementation to
|
||||
raise an INDEX_SIZE_ERR exception.
|
||||
*/
|
||||
arcTo: function(x, y, w, h) {
|
||||
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method draws an arc. If the context has any subpaths, then the method
|
||||
must add a straight line from the last point in the subpath to the
|
||||
start point of the arc. In any case, it must draw the arc between the
|
||||
start point of the arc and the end point of the arc, and add the start
|
||||
and end points of the arc to the subpath. The arc and its start and
|
||||
end points are defined as follows:
|
||||
|
||||
Consider a circle that has its origin at (x, y) and that has radius
|
||||
radius. The points at startAngle and endAngle along the circle's
|
||||
circumference, measured in radians clockwise from the positive x-axis,
|
||||
are the start and end points respectively. The arc is the path along
|
||||
the circumference of this circle from the start point to the end point,
|
||||
going anti-clockwise if the anticlockwise argument is true, and
|
||||
clockwise otherwise.
|
||||
|
||||
Negative or zero values for radius must cause the implementation to
|
||||
raise an INDEX_SIZE_ERR exception.
|
||||
*/
|
||||
arc: function(x, y, rad, a0, a1, cw) {
|
||||
if(this.rot === 0) rad *= this.Z;
|
||||
|
||||
var x0 = Math.cos(a0) * rad,
|
||||
y0 = Math.sin(a0) * rad,
|
||||
x1 = Math.cos(a1) * rad,
|
||||
y1 = Math.sin(a1) * rad;
|
||||
|
||||
if (this.rot !== 0) {
|
||||
var da = Math.PI / 24;
|
||||
this.lineTo(x0 + x, y0 + y);
|
||||
if(cw) {
|
||||
if (a0 < a1) a0 += 2 * Math.PI;
|
||||
while(a0 - da > a1) this.lineTo(x + Math.cos(a0 -= da) * rad, y + Math.sin(a0) * rad);
|
||||
} else {
|
||||
if (a1 < a0) a1 += 2 * Math.PI;
|
||||
while(a0 + da < a1) this.lineTo(x + Math.cos(a0 += da) * rad, y + Math.sin(a0) * rad);
|
||||
}
|
||||
this.lineTo(x1 + x, y1 + y);
|
||||
return;
|
||||
}
|
||||
|
||||
if (x0 == x1 && !cw) x0 += 0.125;
|
||||
|
||||
var c = this.getCoords(x, y);
|
||||
this.path.push(cw ? 'at ' : 'wa ',
|
||||
Math.round(c.x - this.arcScaleX * rad) + ',' + Math.round(c.y - this.arcScaleY * rad), ' ',
|
||||
Math.round(c.x + this.arcScaleX * rad) + ',' + Math.round(c.y + this.arcScaleY * rad), ' ',
|
||||
this.coord(x0 + x - this.Z2, y0 + y - this.Z2), ' ',
|
||||
this.coord(x1 + x - this.Z2, y1 + y - this.Z2)
|
||||
);
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
method must create a new subpath containing just the four points
|
||||
(x, y), (x+w, y), (x+w, y+h), (x, y+h), with those four points
|
||||
connected by straight lines, and must then mark the subpath as
|
||||
closed. It must then create a new subpath with the point (x, y)
|
||||
as the only point in the subpath.
|
||||
|
||||
Negative values for w and h must cause the implementation to raise
|
||||
an INDEX_SIZE_ERR exception.
|
||||
*/
|
||||
rect: function(x, y, w, h) {
|
||||
this.moveTo(x, y);
|
||||
this.lineTo(x + w, y);
|
||||
this.lineTo(x + w, y + h);
|
||||
this.lineTo(x, y + h);
|
||||
this.closePath();
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must fill each subpath of the current path in turn, using
|
||||
fillStyle, and using the non-zero winding number rule. Open subpaths
|
||||
must be implicitly closed when being filled (without affecting the
|
||||
actual subpaths).
|
||||
*/
|
||||
fill: function() {
|
||||
this.stroke(true);
|
||||
},
|
||||
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must stroke each subpath of the current path in turn, using
|
||||
the strokeStyle, lineWidth, lineJoin, and (if appropriate) miterLimit
|
||||
attributes.
|
||||
|
||||
Paths, when filled or stroked, must be painted without affecting the
|
||||
current path, and must be subject to transformations, shadow effects,
|
||||
global alpha, clipping paths, and global composition operators.
|
||||
|
||||
The transformation is applied to the path when it is drawn, not when
|
||||
the path is constructed. Thus, a single path can be constructed and
|
||||
then drawn according to different transformations without recreating
|
||||
the path.
|
||||
*/
|
||||
|
||||
stroke: function(fill) {
|
||||
if(!this.path.length) return;
|
||||
var a, color;
|
||||
if (fill) {
|
||||
a = [1000, '<v:fill ' + this.processColorObject(this.fillStyle) + '></v:fill>'];
|
||||
} else {
|
||||
color = this.processColor(this.strokeStyle);
|
||||
a = [10,
|
||||
'<v:stroke ' +
|
||||
'endcap="' + ((this.lineCap == 'butt') ? 'flat' : this.lineCap) + '" ' +
|
||||
'joinstyle="' + this.lineJoin + '" ' +
|
||||
'color="' + color.color + '" ' +
|
||||
'opacity="' + color.opacity + '"' +
|
||||
'/>'];
|
||||
}
|
||||
this.element.insertAdjacentHTML('beforeEnd',
|
||||
'<v:shape ' +
|
||||
'path="' + this.path.join('') + 'e" ' +
|
||||
'stroked="' + !fill + '" ' +
|
||||
(!fill ? ('strokeweight="' + 0.8 * this.lineWidth * this.m[0][0] + '" ') : '') +
|
||||
'filled="' + !!fill + '" ' +
|
||||
'coordsize="' + this.Z * a[0] + ',' + this.Z * a[0] + '" ' +
|
||||
'style="width:' + a[0] + 'px; height:' + a[0] + 'px; position: absolute;">' +
|
||||
a[1] +
|
||||
'</v:shape>'
|
||||
);
|
||||
|
||||
this.parent.appendChild(this.fragment);
|
||||
|
||||
if(fill && this.fillStyle.img) this.element.getLast().fill.alignshape = false; // not sure why this has to be called explicitly
|
||||
|
||||
this.path = [];
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must create a new clipping path by calculating the intersection
|
||||
of the current clipping path and the area described by the current path
|
||||
(after applying the current transformation), using the non-zero winding
|
||||
number rule. Open subpaths must be implicitly closed when computing the
|
||||
clipping path, without affecting the actual subpaths.
|
||||
|
||||
When the context is created, the initial clipping path is the rectangle
|
||||
with the top left corner at (0,0) and the width and height of the
|
||||
coordinate space.
|
||||
*/
|
||||
clip: function() {
|
||||
|
||||
},
|
||||
|
||||
/*
|
||||
Property:
|
||||
Method must return true if the point given by the x and y coordinates
|
||||
passed to the method, when treated as coordinates in the canvas'
|
||||
coordinate space unaffected by the current transformation, is within
|
||||
the area of the canvas that is inside the current path; and must
|
||||
return false otherwise.
|
||||
*/
|
||||
isPointInPath: function(x, y) {
|
||||
|
||||
},
|
||||
|
||||
processColor: function(col) { //path
|
||||
var a = this.globalAlpha;
|
||||
if (col.substr(0, 3) == 'rgb') {
|
||||
if (col.charAt(3) == "a") {
|
||||
a*= col.match(/([\d.]*)\)$/)[1];
|
||||
}
|
||||
|
||||
col = col.rgbToHex();
|
||||
}
|
||||
return {
|
||||
color: col,
|
||||
opacity: a
|
||||
};
|
||||
},
|
||||
|
||||
/*
|
||||
If a gradient has no stops defined, then the gradient must be treated as a
|
||||
solid transparent black. Gradients are, naturally, only painted where the
|
||||
stroking or filling effect requires that they be drawn.
|
||||
*/
|
||||
processColorObject: function(obj) {
|
||||
var ret = '', col;
|
||||
if(obj.addColorStop) {
|
||||
ret += ((obj.r0) ? (
|
||||
'type="gradientradial" ' +
|
||||
'focusposition="0.2, 0.2" ' +
|
||||
'focussize="0.2, 0.2" '
|
||||
) : (
|
||||
'type="gradient" ' +
|
||||
'focus="0" ' +
|
||||
'angle="' + (180 + (180 * obj.angle(obj.x0, obj.y0, obj.x1, obj.y1) / Math.PI)) + '" '
|
||||
)) +
|
||||
'color="' + obj.col0.color + '" ' +
|
||||
'opacity="' + obj.col0.opacity * 100 + '%" ' +
|
||||
'color2="' + obj.col1.color + '" ' +
|
||||
'o:opacity2="' + obj.col1.opacity * 100 + '%" ' +
|
||||
'colors="';
|
||||
if(obj.stops) {
|
||||
for (var i = 0, l = obj.stops.length; i < l; i++) {
|
||||
ret += Math.round(100 * obj.stops[i][0]) + '% ' + obj.stops[i][1];
|
||||
}
|
||||
}
|
||||
ret +=
|
||||
'" ';
|
||||
} else if(obj.img) { //pattern
|
||||
ret +=
|
||||
'type="tile" ' +
|
||||
'src="' + obj.img.src + '" ';
|
||||
} else {
|
||||
col = this.processColor(obj);
|
||||
ret +=
|
||||
'color="' + col.color + '" ' +
|
||||
'opacity="' + col.opacity + '" ';
|
||||
}
|
||||
|
||||
return ret;
|
||||
},
|
||||
|
||||
getCoords: function(x, y) {
|
||||
var m = this.m;
|
||||
return {
|
||||
x: this.Z * (x * m[0][0] + y * m[1][0] + m[2][0]) - this.Z2,
|
||||
y: this.Z * (x * m[0][1] + y * m[1][1] + m[2][1]) - this.Z2
|
||||
};
|
||||
},
|
||||
|
||||
coord: function(x, y) {
|
||||
var m = this.m;
|
||||
return [
|
||||
Math.round(this.Z * (x * m[0][0] + y * m[1][0] + m[2][0]) - this.Z2), ',',
|
||||
Math.round(this.Z * (x * m[0][1] + y * m[1][1] + m[2][1]) - this.Z2)
|
||||
].join('');
|
||||
}
|
||||
});
|
||||
/*
|
||||
Script: Rects.js
|
||||
|
||||
Dependencies:
|
||||
Canvas.js, Path.js
|
||||
|
||||
Author:
|
||||
Olmo Maldonado, <http://olmo-maldonado.com/>
|
||||
|
||||
Credits:
|
||||
Lightly based from Ralph Sommerer's work: <http://blogs.msdn.com/sompost/archive/2006/02/22/536967.aspx>
|
||||
Moderately based from excanvas: <http://excanvas.sourceforge.net/>
|
||||
Great thanks to Inviz, <http://inviz.ru/>, for his optimizing help.
|
||||
|
||||
License:
|
||||
MIT License, <http://en.wikipedia.org/wiki/MIT_License>
|
||||
*/
|
||||
|
||||
CanvasRenderingContext2D.implement({
|
||||
|
||||
/*
|
||||
Property: clearRect
|
||||
Clears the pixels in the specified rectangle.
|
||||
If height or width are zero has no effect.
|
||||
|
||||
If no arguments, clears all of the canvas
|
||||
|
||||
Currently, clearRect clears all of the canvas.
|
||||
*/
|
||||
clearRect: function(x, y, w, h) {
|
||||
//if((x <= 0) && (y <= 0) && ( x + w >= this.element.width) && (y + h >= this.element.height)){
|
||||
this.element.innerHTML = '';
|
||||
//} else {
|
||||
// var f0 = this.fillStyle;
|
||||
// this.fillStyle = '#fff';
|
||||
// this.fillRect(x, y, w, h);
|
||||
// this.fillStyle = f0;
|
||||
//}
|
||||
},
|
||||
|
||||
/*
|
||||
Property: fillRect
|
||||
Paints the specified rectangle using fillStyle.
|
||||
If height or width are zero, this method has no effect.
|
||||
*/
|
||||
fillRect: function(x, y, w, h) {
|
||||
this.rect(x, y, w, h);
|
||||
this.fill();
|
||||
},
|
||||
|
||||
/*
|
||||
Draws a rectangular outline of the specified size.
|
||||
If width or height are zero: ??
|
||||
*/
|
||||
strokeRect: function(x, y, w, h) {
|
||||
this.rect(x, y, w, h);
|
||||
this.stroke();
|
||||
}
|
||||
|
||||
});
|
||||
/*
|
||||
Script: Transform.js
|
||||
|
||||
Dependencies:
|
||||
Canvas.js
|
||||
|
||||
Author:
|
||||
Olmo Maldonado, <http://olmo-maldonado.com/>
|
||||
|
||||
Credits:
|
||||
Lightly based from Ralph Sommerer's work: <http://blogs.msdn.com/sompost/archive/2006/02/22/536967.aspx>
|
||||
Moderately based from excanvas: <http://excanvas.sourceforge.net/>
|
||||
Great thanks to Inviz, <http://inviz.ru/>, for his optimizing help.
|
||||
|
||||
License:
|
||||
MIT License, <http://en.wikipedia.org/wiki/MIT_License>
|
||||
*/
|
||||
|
||||
CanvasRenderingContext2D.implement({
|
||||
/*
|
||||
The transformation matrix is applied to all drawing operations prior
|
||||
to their being rendered. It is also applied when creating the clip region.
|
||||
* The transformations must be performed in reverse order. For instance,
|
||||
if a scale transformation that doubles the width is applied, followed
|
||||
by a rotation transformation that rotates drawing operations by a
|
||||
quarter turn, and a rectangle twice as wide as it is tall is then
|
||||
drawn on the canvas, the actual result will be a square.
|
||||
*/
|
||||
|
||||
/*
|
||||
Property: scale
|
||||
Method must add the scaling transformation described by the arguments
|
||||
to the transformation matrix. The x argument represents the scale factor
|
||||
in the horizontal direction and the y argument represents the scale
|
||||
factor in the vertical direction. The factors are multiples.
|
||||
*/
|
||||
scale: function(x, y) {
|
||||
this.arcScaleX *= x;
|
||||
this.arcScaleY *= y;
|
||||
|
||||
this.matMult([
|
||||
[x, 0, 0],
|
||||
[0, y, 0],
|
||||
[0, 0, 1]
|
||||
]);
|
||||
},
|
||||
|
||||
/*
|
||||
Property: rotate
|
||||
Method must add the rotation transformation described by the argument
|
||||
to the transformation matrix. The angle argument represents a clockwise
|
||||
rotation angle expressed in radians.
|
||||
*/
|
||||
rotate: function(ang) {
|
||||
this.rot += ang;
|
||||
var c = Math.cos(ang),
|
||||
s = Math.sin(ang);
|
||||
|
||||
this.matMult([
|
||||
[ c, s, 0],
|
||||
[-s, c, 0],
|
||||
[ 0, 0, 1]
|
||||
]);
|
||||
},
|
||||
|
||||
/*
|
||||
Property: translate
|
||||
Method must add the translation transformation described by the arguments
|
||||
to the transformation matrix. The x argument represents the translation
|
||||
distance in the horizontal direction and the y argument represents the
|
||||
translation distance in the vertical direction. The arguments are in
|
||||
coordinate space units.
|
||||
*/
|
||||
translate: function(x, y) {
|
||||
this.matMult([
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[x, y, 1]
|
||||
]);
|
||||
},
|
||||
|
||||
/*
|
||||
Property: transform
|
||||
Method must multiply the current transformation matrix with the matrix described
|
||||
by the inputs.
|
||||
*/
|
||||
transform: function(m11, m12, m21, m22, dx, dy) {
|
||||
this.matMult([
|
||||
[m11, m21, dx],
|
||||
[m12, m22, dy],
|
||||
[ 0, 0, 1]
|
||||
]);
|
||||
},
|
||||
|
||||
/*
|
||||
Property: setTransform
|
||||
Method must reset the current transform to the identity matrix, and then invoke
|
||||
the transform method with the same arguments.
|
||||
*/
|
||||
setTransform: function(m11, m12, m21, m22, dx, dy) {
|
||||
this.m = [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
|
||||
this.transform(m11, m12, m21, m22, dx, dy);
|
||||
},
|
||||
|
||||
/*
|
||||
Property: matMult
|
||||
Method to multiply 3x3 matrice. Currently takes input and multiplies against
|
||||
the transform matrix and saves the result to the transform matrix.
|
||||
|
||||
This is an optimized multiplication method. Will only multiply if the input
|
||||
value is not zero. Thus, minimizing multiplications and additions.
|
||||
*/
|
||||
matMult: function(b) {
|
||||
var m = this.m,
|
||||
o = [
|
||||
[0, 0, 0],
|
||||
[0, 0, 0],
|
||||
[0, 0, 0]
|
||||
];
|
||||
|
||||
for(var i = 0; i < 3; i++) {
|
||||
if(b[0][i] !== 0) this.sum(o[0], this.mult(b[0][i], m[i]));
|
||||
if(b[1][i] !== 0) this.sum(o[1], this.mult(b[1][i], m[i]));
|
||||
if(b[2][i] !== 0) this.sum(o[2], this.mult(b[2][i], m[i]));
|
||||
}
|
||||
|
||||
this.m = [o[0], o[1], o[2]];
|
||||
},
|
||||
|
||||
mult: function(x, y) {
|
||||
return [x * y[0], x * y[1], x * y[2]];
|
||||
},
|
||||
|
||||
sum: function(o, v) {
|
||||
o[0] += v[0];
|
||||
o[1] += v[1];
|
||||
o[2] += v[2];
|
||||
}
|
||||
});
|
||||
/*
|
||||
Script: Image.js
|
||||
|
||||
Dependencies:
|
||||
Canvas.js
|
||||
|
||||
Author:
|
||||
Olmo Maldonado, <http://olmo-maldonado.com/>
|
||||
|
||||
Credits:
|
||||
Lightly based from Ralph Sommerer's work: <http://blogs.msdn.com/sompost/archive/2006/02/22/536967.aspx>
|
||||
Moderately based from excanvas: <http://excanvas.sourceforge.net/>
|
||||
Great thanks to Inviz, <http://inviz.ru/>, for his optimizing help.
|
||||
|
||||
License:
|
||||
MIT License, <http://en.wikipedia.org/wiki/MIT_License>
|
||||
*/
|
||||
|
||||
CanvasRenderingContext2D.implement({
|
||||
/*
|
||||
Property: drawImage
|
||||
This method is overloaded with three variants: drawImage(image, dx, dy),
|
||||
drawImage(image, dx, dy, dw, dh), and drawImage(image, sx, sy, sw, sh,
|
||||
dx, dy, dw, dh). (Actually it is overloaded with six; each of those three
|
||||
can take either an HTMLImageElement or an HTMLCanvasElement for the image
|
||||
argument.) If not specified, the dw and dh arguments default to the values
|
||||
of sw and sh, interpreted such that one CSS pixel in the image is treated
|
||||
as one unit in the canvas coordinate space. If the sx, sy, sw, and sh
|
||||
arguments are omitted, they default to 0, 0, the image's intrinsic width
|
||||
in image pixels, and the image's intrinsic height in image pixels,
|
||||
respectively.
|
||||
|
||||
If the image is of the wrong type, the implementation must raise a
|
||||
TYPE_MISMATCH_ERR exception. If one of the sy, sw, sw, and sh arguments
|
||||
is outside the size of the image, or if one of the dw and dh arguments
|
||||
is negative, the implementation must raise an INDEX_SIZE_ERR exception.
|
||||
|
||||
The specified region of the image specified by the source rectangle
|
||||
(sx, sy, sw, sh) must be painted on the region of the canvas specified
|
||||
by the destination rectangle (dx, dy, dw, dh).
|
||||
|
||||
Images are painted without affecting the current path, and are subject to
|
||||
transformations, shadow effects, global alpha, clipping paths, and global
|
||||
composition operators.
|
||||
*/
|
||||
drawImage: function (image, var_args) {
|
||||
var args = arguments,
|
||||
length = args.length,
|
||||
off = (length == 9) ? 4 : 0;
|
||||
|
||||
if(!((length + '').test(/3|5|9/))) throw 'Wrong number of arguments';
|
||||
|
||||
var w0 = image.runtimeStyle.width,
|
||||
h0 = image.runtimeStyle.height;
|
||||
image.runtimeStyle.width = 'auto';
|
||||
image.runtimeStyle.height = 'auto';
|
||||
|
||||
var w = image.width,
|
||||
h = image.height;
|
||||
image.runtimeStyle.width = w0;
|
||||
image.runtimeStyle.height = h0;
|
||||
|
||||
var sx = 0,
|
||||
sy = 0,
|
||||
sw = w,
|
||||
sh = h,
|
||||
dx = args[1 + off],
|
||||
dy = args[2 + off],
|
||||
dw = args[3 + off] || w,
|
||||
dh = args[4 + off] || h;
|
||||
|
||||
if (length == 9) {
|
||||
sx = args[1];
|
||||
sy = args[2];
|
||||
sw = args[3];
|
||||
sh = args[4];
|
||||
}
|
||||
|
||||
var d = this.getCoords(dx, dy),
|
||||
vmlStr =
|
||||
'<v:group coordsize="' + this.Z * 10 + ',' + this.Z * 10 + '" ' +
|
||||
'coordorigin="0,0" ' +
|
||||
'style="width:10;height:10;position:absolute;';
|
||||
|
||||
if (this.m[0][0] != 1 || this.m[0][1]) {
|
||||
var max = Math.max(
|
||||
this.getCoords(dx + dw, dy),
|
||||
this.getCoords(dx, dy + dh),
|
||||
this.getCoords(dx + dw, dy + dh)
|
||||
);
|
||||
|
||||
vmlStr +=
|
||||
'padding:0;' +
|
||||
'padding-right:' + Math.round(Math.max(d.x, max) / this.Z) + 'px;' +
|
||||
'padding-bottom:' + Math.round(Math.max(d.y, max) / this.Z) + 'px;' +
|
||||
'filter:progid:DXImageTransform.Microsoft.Matrix(' +
|
||||
"M11='" + this.m[0][0] + "', M12='" + this.m[1][0] + "', " +
|
||||
"M21='" + this.m[0][1] + "', M22='" + this.m[1][1] + "', " +
|
||||
"Dx='" + Math.round(d.x / this.Z) + "', Dy='" + Math.round(d.y / this.Z) + "', " +
|
||||
"sizingmethod='clip'" +
|
||||
');';
|
||||
} else {
|
||||
vmlStr +=
|
||||
'top:' + Math.round(d.y / this.Z) + 'px;' +
|
||||
'left:' + Math.round(d.x / this.Z) + 'px;';
|
||||
}
|
||||
|
||||
this.element.insertAdjacentHTML('BeforeEnd', vmlStr +
|
||||
'"><v:image src="' + image.src + '" ' +
|
||||
'style="width:' + this.Z * dw + ';height:' + this.Z * dh + ';" ' +
|
||||
'cropleft="' + sx / w + '" ' +
|
||||
'croptop="' + sy / h + '" ' +
|
||||
'cropright="' + (w - sx - sw) / w + '" ' +
|
||||
'cropbottom="' + (h - sy - sh) / h + '" ' +
|
||||
'/></v:group>'
|
||||
);
|
||||
|
||||
this.parent.appendChild(this.fragment);
|
||||
},
|
||||
|
||||
drawImageFromRect: Function.empty,
|
||||
|
||||
/*
|
||||
Property: getImageData
|
||||
Method must return an ImageData object representing the underlying
|
||||
pixel data for the area of the canvas denoted by the rectangle which
|
||||
has one corner at the (sx, sy) coordinate, and that has width sw and
|
||||
height sh. Pixels outside the canvas must be returned as transparent
|
||||
black.
|
||||
*/
|
||||
getImageData: function(sx, sy, sw, sh) {
|
||||
|
||||
},
|
||||
|
||||
/*
|
||||
Property: putImageData
|
||||
Method must take the given ImageData structure, and draw it at the
|
||||
specified location dx,dy in the canvas coordinate space, mapping each
|
||||
pixel represented by the ImageData structure into one device pixel.
|
||||
*/
|
||||
putImageData: function(image, dx, dy) {
|
||||
|
||||
},
|
||||
|
||||
getCoords: function(x, y) {
|
||||
var m = this.m;
|
||||
return {
|
||||
x: this.Z * (x * m[0][0] + y * m[1][0] + m[2][0]) - this.Z2,
|
||||
y: this.Z * (x * m[0][1] + y * m[1][1] + m[2][1]) - this.Z2
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
2409
gulliver/js/ext/mootools.js
Executable file
2409
gulliver/js/ext/mootools.js
Executable file
File diff suppressed because it is too large
Load Diff
14
gulliver/js/ext/ux/ux-all.js
Executable file
14
gulliver/js/ext/ux/ux-all.js
Executable file
File diff suppressed because one or more lines are too long
937
gulliver/js/ext/wz_jsgraphics.js
Executable file
937
gulliver/js/ext/wz_jsgraphics.js
Executable file
@@ -0,0 +1,937 @@
|
||||
/* This notice must be untouched at all times.
|
||||
|
||||
wz_jsgraphics.js v. 2.36
|
||||
The latest version is available at
|
||||
http://www.walterzorn.com
|
||||
or http://www.devira.com
|
||||
or http://www.walterzorn.de
|
||||
|
||||
Copyright (c) 2002-2004 Walter Zorn. All rights reserved.
|
||||
Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
|
||||
Last modified: 21. 6. 2006
|
||||
|
||||
Performance optimizations for Internet Explorer
|
||||
by Thomas Frank and John Holdsworth.
|
||||
fillPolygon method implemented by Matthieu Haller.
|
||||
|
||||
High Performance JavaScript Graphics Library.
|
||||
Provides methods
|
||||
- to draw lines, rectangles, ellipses, polygons
|
||||
with specifiable line thickness,
|
||||
- to fill rectangles and ellipses
|
||||
- to draw text.
|
||||
NOTE: Operations, functions and branching have rather been optimized
|
||||
to efficiency and speed than to shortness of source code.
|
||||
|
||||
LICENSE: LGPL
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License (LGPL) as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA,
|
||||
or see http://www.gnu.org/copyleft/lesser.html
|
||||
*/
|
||||
|
||||
|
||||
var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz,
|
||||
jg_n4 = (document.layers && typeof document.classes != "undefined");
|
||||
|
||||
|
||||
function chkDHTM(x, i)
|
||||
{
|
||||
x = document.body || null;
|
||||
jg_ie = x && typeof x.insertAdjacentHTML != "undefined";
|
||||
jg_dom = (x && !jg_ie &&
|
||||
typeof x.appendChild != "undefined" &&
|
||||
typeof document.createRange != "undefined" &&
|
||||
typeof (i = document.createRange()).setStartBefore != "undefined" &&
|
||||
typeof i.createContextualFragment != "undefined");
|
||||
jg_ihtm = !jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined";
|
||||
jg_fast = jg_ie && document.all && !window.opera;
|
||||
jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined";
|
||||
}
|
||||
|
||||
|
||||
function pntDoc()
|
||||
{
|
||||
this.wnd.document.write(jg_fast? this.htmRpc() : this.htm);
|
||||
this.htm = '';
|
||||
}
|
||||
|
||||
|
||||
function pntCnvDom()
|
||||
{
|
||||
var x = this.wnd.document.createRange();
|
||||
x.setStartBefore(this.cnv);
|
||||
x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm);
|
||||
if(this.cnv) this.cnv.appendChild(x);
|
||||
this.htm = '';
|
||||
}
|
||||
|
||||
|
||||
function pntCnvIe()
|
||||
{
|
||||
if(this.cnv) this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm);
|
||||
this.htm = '';
|
||||
}
|
||||
|
||||
|
||||
function pntCnvIhtm()
|
||||
{
|
||||
if(this.cnv) this.cnv.innerHTML += this.htm;
|
||||
this.htm = '';
|
||||
}
|
||||
|
||||
|
||||
function pntCnv()
|
||||
{
|
||||
this.htm = '';
|
||||
}
|
||||
|
||||
|
||||
function mkDiv(x, y, w, h)
|
||||
{
|
||||
this.htm += '<div style="position:absolute;left:' + x + 'px;top:' + y + 'px;width:' + w + 'px;height:' + h + 'px;clip:rect(0,'+w+'px,'+h+'px,0);background-color:' + this.color +(!jg_moz? ';overflow:hidden' : '')+';"><\/div>';
|
||||
}
|
||||
|
||||
|
||||
function mkDivIe(x, y, w, h)
|
||||
{
|
||||
this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';';
|
||||
}
|
||||
|
||||
|
||||
function mkDivPrt(x, y, w, h)
|
||||
{
|
||||
this.htm += '<div style="position:absolute;'+
|
||||
'border-left:' + w + 'px solid ' + this.color + ';'+
|
||||
'left:' + x + 'px;'+
|
||||
'top:' + y + 'px;'+
|
||||
'width:0px;'+
|
||||
'height:' + h + 'px;'+
|
||||
'clip:rect(0,'+w+'px,'+h+'px,0);'+
|
||||
'background-color:' + this.color +
|
||||
(!jg_moz? ';overflow:hidden' : '')+
|
||||
';"><\/div>';
|
||||
}
|
||||
|
||||
|
||||
function mkLyr(x, y, w, h)
|
||||
{
|
||||
this.htm += '<layer '+
|
||||
'left="' + x + '" '+
|
||||
'top="' + y + '" '+
|
||||
'width="' + w + '" '+
|
||||
'height="' + h + '" '+
|
||||
'bgcolor="' + this.color + '"><\/layer>\n';
|
||||
}
|
||||
|
||||
|
||||
var regex = /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g;
|
||||
function htmRpc()
|
||||
{
|
||||
return this.htm.replace(
|
||||
regex,
|
||||
'<div style="overflow:hidden;position:absolute;background-color:'+
|
||||
'$1;left:$2;top:$3;width:$4;height:$5"></div>\n');
|
||||
}
|
||||
|
||||
|
||||
function htmPrtRpc()
|
||||
{
|
||||
return this.htm.replace(
|
||||
regex,
|
||||
'<div style="overflow:hidden;position:absolute;background-color:'+
|
||||
'$1;left:$2;top:$3;width:$4;height:$5;border-left:$4px solid $1"></div>\n');
|
||||
}
|
||||
|
||||
|
||||
function mkLin(x1, y1, x2, y2)
|
||||
{
|
||||
if (x1 > x2)
|
||||
{
|
||||
var _x2 = x2;
|
||||
var _y2 = y2;
|
||||
x2 = x1;
|
||||
y2 = y1;
|
||||
x1 = _x2;
|
||||
y1 = _y2;
|
||||
}
|
||||
var dx = x2-x1, dy = Math.abs(y2-y1),
|
||||
x = x1, y = y1,
|
||||
yIncr = (y1 > y2)? -1 : 1;
|
||||
|
||||
if (dx >= dy)
|
||||
{
|
||||
var pr = dy<<1,
|
||||
pru = pr - (dx<<1),
|
||||
p = pr-dx,
|
||||
ox = x;
|
||||
while ((dx--) > 0)
|
||||
{
|
||||
++x;
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(ox, y, x-ox, 1);
|
||||
y += yIncr;
|
||||
p += pru;
|
||||
ox = x;
|
||||
}
|
||||
else p += pr;
|
||||
}
|
||||
this.mkDiv(ox, y, x2-ox+1, 1);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var pr = dx<<1,
|
||||
pru = pr - (dy<<1),
|
||||
p = pr-dy,
|
||||
oy = y;
|
||||
if (y2 <= y1)
|
||||
{
|
||||
while ((dy--) > 0)
|
||||
{
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(x++, y, 1, oy-y+1);
|
||||
y += yIncr;
|
||||
p += pru;
|
||||
oy = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
y += yIncr;
|
||||
p += pr;
|
||||
}
|
||||
}
|
||||
this.mkDiv(x2, y2, 1, oy-y2+1);
|
||||
}
|
||||
else
|
||||
{
|
||||
while ((dy--) > 0)
|
||||
{
|
||||
y += yIncr;
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(x++, oy, 1, y-oy);
|
||||
p += pru;
|
||||
oy = y;
|
||||
}
|
||||
else p += pr;
|
||||
}
|
||||
this.mkDiv(x2, oy, 1, y2-oy+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function mkLin2D(x1, y1, x2, y2)
|
||||
{
|
||||
if (x1 > x2)
|
||||
{
|
||||
var _x2 = x2;
|
||||
var _y2 = y2;
|
||||
x2 = x1;
|
||||
y2 = y1;
|
||||
x1 = _x2;
|
||||
y1 = _y2;
|
||||
}
|
||||
var dx = x2-x1, dy = Math.abs(y2-y1),
|
||||
x = x1, y = y1,
|
||||
yIncr = (y1 > y2)? -1 : 1;
|
||||
|
||||
var s = this.stroke;
|
||||
if (dx >= dy)
|
||||
{
|
||||
if (dx > 0 && s-3 > 0)
|
||||
{
|
||||
var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx;
|
||||
_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
|
||||
}
|
||||
else var _s = s;
|
||||
var ad = Math.ceil(s/2);
|
||||
|
||||
var pr = dy<<1,
|
||||
pru = pr - (dx<<1),
|
||||
p = pr-dx,
|
||||
ox = x;
|
||||
while ((dx--) > 0)
|
||||
{
|
||||
++x;
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(ox, y, x-ox+ad, _s);
|
||||
y += yIncr;
|
||||
p += pru;
|
||||
ox = x;
|
||||
}
|
||||
else p += pr;
|
||||
}
|
||||
this.mkDiv(ox, y, x2-ox+ad+1, _s);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (s-3 > 0)
|
||||
{
|
||||
var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy;
|
||||
_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
|
||||
}
|
||||
else var _s = s;
|
||||
var ad = Math.round(s/2);
|
||||
|
||||
var pr = dx<<1,
|
||||
pru = pr - (dy<<1),
|
||||
p = pr-dy,
|
||||
oy = y;
|
||||
if (y2 <= y1)
|
||||
{
|
||||
++ad;
|
||||
while ((dy--) > 0)
|
||||
{
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(x++, y, _s, oy-y+ad);
|
||||
y += yIncr;
|
||||
p += pru;
|
||||
oy = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
y += yIncr;
|
||||
p += pr;
|
||||
}
|
||||
}
|
||||
this.mkDiv(x2, y2, _s, oy-y2+ad);
|
||||
}
|
||||
else
|
||||
{
|
||||
while ((dy--) > 0)
|
||||
{
|
||||
y += yIncr;
|
||||
if (p > 0)
|
||||
{
|
||||
this.mkDiv(x++, oy, _s, y-oy+ad);
|
||||
p += pru;
|
||||
oy = y;
|
||||
}
|
||||
else p += pr;
|
||||
}
|
||||
this.mkDiv(x2, oy, _s, y2-oy+ad+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function mkLinDott(x1, y1, x2, y2)
|
||||
{
|
||||
if (x1 > x2)
|
||||
{
|
||||
var _x2 = x2;
|
||||
var _y2 = y2;
|
||||
x2 = x1;
|
||||
y2 = y1;
|
||||
x1 = _x2;
|
||||
y1 = _y2;
|
||||
}
|
||||
var dx = x2-x1, dy = Math.abs(y2-y1),
|
||||
x = x1, y = y1,
|
||||
yIncr = (y1 > y2)? -1 : 1,
|
||||
drw = true;
|
||||
if (dx >= dy)
|
||||
{
|
||||
var pr = dy<<1,
|
||||
pru = pr - (dx<<1),
|
||||
p = pr-dx;
|
||||
while ((dx--) > 0)
|
||||
{
|
||||
if (drw) this.mkDiv(x, y, 1, 1);
|
||||
drw = !drw;
|
||||
if (p > 0)
|
||||
{
|
||||
y += yIncr;
|
||||
p += pru;
|
||||
}
|
||||
else p += pr;
|
||||
++x;
|
||||
}
|
||||
if (drw) this.mkDiv(x, y, 1, 1);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var pr = dx<<1,
|
||||
pru = pr - (dy<<1),
|
||||
p = pr-dy;
|
||||
while ((dy--) > 0)
|
||||
{
|
||||
if (drw) this.mkDiv(x, y, 1, 1);
|
||||
drw = !drw;
|
||||
y += yIncr;
|
||||
if (p > 0)
|
||||
{
|
||||
++x;
|
||||
p += pru;
|
||||
}
|
||||
else p += pr;
|
||||
}
|
||||
if (drw) this.mkDiv(x, y, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function mkOv(left, top, width, height)
|
||||
{
|
||||
var a = width>>1, b = height>>1,
|
||||
wod = width&1, hod = (height&1)+1,
|
||||
cx = left+a, cy = top+b,
|
||||
x = 0, y = b,
|
||||
ox = 0, oy = b,
|
||||
aa = (a*a)<<1, bb = (b*b)<<1,
|
||||
st = (aa>>1)*(1-(b<<1)) + bb,
|
||||
tt = (bb>>1) - aa*((b<<1)-1),
|
||||
w, h;
|
||||
while (y > 0)
|
||||
{
|
||||
if (st < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3);
|
||||
tt += (bb<<1)*(++x);
|
||||
}
|
||||
else if (tt < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3) - (aa<<1)*(y-1);
|
||||
tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
|
||||
w = x-ox;
|
||||
h = oy-y;
|
||||
if (w&2 && h&2)
|
||||
{
|
||||
this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1);
|
||||
this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1);
|
||||
}
|
||||
else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h);
|
||||
ox = x;
|
||||
oy = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt -= aa*((y<<1)-3);
|
||||
st -= (aa<<1)*(--y);
|
||||
}
|
||||
}
|
||||
this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod);
|
||||
this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod);
|
||||
}
|
||||
|
||||
|
||||
function mkOv2D(left, top, width, height)
|
||||
{
|
||||
var s = this.stroke;
|
||||
width += s-1;
|
||||
height += s-1;
|
||||
var a = width>>1, b = height>>1,
|
||||
wod = width&1, hod = (height&1)+1,
|
||||
cx = left+a, cy = top+b,
|
||||
x = 0, y = b,
|
||||
aa = (a*a)<<1, bb = (b*b)<<1,
|
||||
st = (aa>>1)*(1-(b<<1)) + bb,
|
||||
tt = (bb>>1) - aa*((b<<1)-1);
|
||||
|
||||
if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0))
|
||||
{
|
||||
var ox = 0, oy = b,
|
||||
w, h,
|
||||
pxl, pxr, pxt, pxb, pxw;
|
||||
while (y > 0)
|
||||
{
|
||||
if (st < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3);
|
||||
tt += (bb<<1)*(++x);
|
||||
}
|
||||
else if (tt < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3) - (aa<<1)*(y-1);
|
||||
tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
|
||||
w = x-ox;
|
||||
h = oy-y;
|
||||
|
||||
if (w-1)
|
||||
{
|
||||
pxw = w+1+(s&1);
|
||||
h = s;
|
||||
}
|
||||
else if (h-1)
|
||||
{
|
||||
pxw = s;
|
||||
h += 1+(s&1);
|
||||
}
|
||||
else pxw = h = s;
|
||||
this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h);
|
||||
ox = x;
|
||||
oy = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt -= aa*((y<<1)-3);
|
||||
st -= (aa<<1)*(--y);
|
||||
}
|
||||
}
|
||||
this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod);
|
||||
this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var _a = (width-((s-1)<<1))>>1,
|
||||
_b = (height-((s-1)<<1))>>1,
|
||||
_x = 0, _y = _b,
|
||||
_aa = (_a*_a)<<1, _bb = (_b*_b)<<1,
|
||||
_st = (_aa>>1)*(1-(_b<<1)) + _bb,
|
||||
_tt = (_bb>>1) - _aa*((_b<<1)-1),
|
||||
|
||||
pxl = new Array(),
|
||||
pxt = new Array(),
|
||||
_pxb = new Array();
|
||||
pxl[0] = 0;
|
||||
pxt[0] = b;
|
||||
_pxb[0] = _b-1;
|
||||
while (y > 0)
|
||||
{
|
||||
if (st < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3);
|
||||
tt += (bb<<1)*(++x);
|
||||
pxl[pxl.length] = x;
|
||||
pxt[pxt.length] = y;
|
||||
}
|
||||
else if (tt < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3) - (aa<<1)*(y-1);
|
||||
tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
|
||||
pxl[pxl.length] = x;
|
||||
pxt[pxt.length] = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt -= aa*((y<<1)-3);
|
||||
st -= (aa<<1)*(--y);
|
||||
}
|
||||
|
||||
if (_y > 0)
|
||||
{
|
||||
if (_st < 0)
|
||||
{
|
||||
_st += _bb*((_x<<1)+3);
|
||||
_tt += (_bb<<1)*(++_x);
|
||||
_pxb[_pxb.length] = _y-1;
|
||||
}
|
||||
else if (_tt < 0)
|
||||
{
|
||||
_st += _bb*((_x<<1)+3) - (_aa<<1)*(_y-1);
|
||||
_tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-3);
|
||||
_pxb[_pxb.length] = _y-1;
|
||||
}
|
||||
else
|
||||
{
|
||||
_tt -= _aa*((_y<<1)-3);
|
||||
_st -= (_aa<<1)*(--_y);
|
||||
_pxb[_pxb.length-1]--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ox = 0, oy = b,
|
||||
_oy = _pxb[0],
|
||||
l = pxl.length,
|
||||
w, h;
|
||||
for (var i = 0; i < l; i++)
|
||||
{
|
||||
if (typeof _pxb[i] != "undefined")
|
||||
{
|
||||
if (_pxb[i] < _oy || pxt[i] < oy)
|
||||
{
|
||||
x = pxl[i];
|
||||
this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy);
|
||||
ox = x;
|
||||
oy = pxt[i];
|
||||
_oy = _pxb[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x = pxl[i];
|
||||
this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod);
|
||||
this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod);
|
||||
ox = x;
|
||||
oy = pxt[i];
|
||||
}
|
||||
}
|
||||
this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod);
|
||||
this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function mkOvDott(left, top, width, height)
|
||||
{
|
||||
var a = width>>1, b = height>>1,
|
||||
wod = width&1, hod = height&1,
|
||||
cx = left+a, cy = top+b,
|
||||
x = 0, y = b,
|
||||
aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1,
|
||||
st = (aa2>>1)*(1-(b<<1)) + bb,
|
||||
tt = (bb>>1) - aa2*((b<<1)-1),
|
||||
drw = true;
|
||||
while (y > 0)
|
||||
{
|
||||
if (st < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3);
|
||||
tt += (bb<<1)*(++x);
|
||||
}
|
||||
else if (tt < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3) - aa4*(y-1);
|
||||
tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3);
|
||||
}
|
||||
else
|
||||
{
|
||||
tt -= aa2*((y<<1)-3);
|
||||
st -= aa4*(--y);
|
||||
}
|
||||
if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1);
|
||||
drw = !drw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function mkRect(x, y, w, h)
|
||||
{
|
||||
var s = this.stroke;
|
||||
this.mkDiv(x, y, w, s);
|
||||
this.mkDiv(x+w, y, s, h);
|
||||
this.mkDiv(x, y+h, w+s, s);
|
||||
this.mkDiv(x, y+s, s, h-s);
|
||||
}
|
||||
|
||||
|
||||
function mkRectDott(x, y, w, h)
|
||||
{
|
||||
this.drawLine(x, y, x+w, y);
|
||||
this.drawLine(x+w, y, x+w, y+h);
|
||||
this.drawLine(x, y+h, x+w, y+h);
|
||||
this.drawLine(x, y, x, y+h);
|
||||
}
|
||||
|
||||
|
||||
function jsgFont()
|
||||
{
|
||||
this.PLAIN = 'font-weight:normal;';
|
||||
this.BOLD = 'font-weight:bold;';
|
||||
this.ITALIC = 'font-style:italic;';
|
||||
this.ITALIC_BOLD = this.ITALIC + this.BOLD;
|
||||
this.BOLD_ITALIC = this.ITALIC_BOLD;
|
||||
}
|
||||
var Font = new jsgFont();
|
||||
|
||||
|
||||
function jsgStroke()
|
||||
{
|
||||
this.DOTTED = -1;
|
||||
}
|
||||
var Stroke = new jsgStroke();
|
||||
|
||||
|
||||
function jsGraphics(id, wnd)
|
||||
{
|
||||
this.setColor = new Function('arg', 'this.color = arg.toLowerCase();');
|
||||
|
||||
this.setStroke = function(x)
|
||||
{
|
||||
this.stroke = x;
|
||||
if (!(x+1))
|
||||
{
|
||||
this.drawLine = mkLinDott;
|
||||
this.mkOv = mkOvDott;
|
||||
this.drawRect = mkRectDott;
|
||||
}
|
||||
else if (x-1 > 0)
|
||||
{
|
||||
this.drawLine = mkLin2D;
|
||||
this.mkOv = mkOv2D;
|
||||
this.drawRect = mkRect;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.drawLine = mkLin;
|
||||
this.mkOv = mkOv;
|
||||
this.drawRect = mkRect;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.setPrintable = function(arg)
|
||||
{
|
||||
this.printable = arg;
|
||||
if (jg_fast)
|
||||
{
|
||||
this.mkDiv = mkDivIe;
|
||||
this.htmRpc = arg? htmPrtRpc : htmRpc;
|
||||
}
|
||||
else this.mkDiv = jg_n4? mkLyr : arg? mkDivPrt : mkDiv;
|
||||
};
|
||||
|
||||
|
||||
this.setFont = function(fam, sz, sty)
|
||||
{
|
||||
this.ftFam = fam;
|
||||
this.ftSz = sz;
|
||||
this.ftSty = sty || Font.PLAIN;
|
||||
};
|
||||
|
||||
|
||||
this.drawPolyline = this.drawPolyLine = function(x, y, s)
|
||||
{
|
||||
for (var i=0 ; i<x.length-1 ; i++ )
|
||||
this.drawLine(x[i], y[i], x[i+1], y[i+1]);
|
||||
};
|
||||
|
||||
|
||||
this.fillRect = function(x, y, w, h)
|
||||
{
|
||||
this.mkDiv(x, y, w, h);
|
||||
};
|
||||
|
||||
|
||||
this.drawPolygon = function(x, y)
|
||||
{
|
||||
this.drawPolyline(x, y);
|
||||
this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]);
|
||||
};
|
||||
|
||||
|
||||
this.drawEllipse = this.drawOval = function(x, y, w, h)
|
||||
{
|
||||
this.mkOv(x, y, w, h);
|
||||
};
|
||||
|
||||
|
||||
this.fillEllipse = this.fillOval = function(left, top, w, h)
|
||||
{
|
||||
var a = (w -= 1)>>1, b = (h -= 1)>>1,
|
||||
wod = (w&1)+1, hod = (h&1)+1,
|
||||
cx = left+a, cy = top+b,
|
||||
x = 0, y = b,
|
||||
ox = 0, oy = b,
|
||||
aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1,
|
||||
st = (aa2>>1)*(1-(b<<1)) + bb,
|
||||
tt = (bb>>1) - aa2*((b<<1)-1),
|
||||
pxl, dw, dh;
|
||||
if (w+1) while (y > 0)
|
||||
{
|
||||
if (st < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3);
|
||||
tt += (bb<<1)*(++x);
|
||||
}
|
||||
else if (tt < 0)
|
||||
{
|
||||
st += bb*((x<<1)+3) - aa4*(y-1);
|
||||
pxl = cx-x;
|
||||
dw = (x<<1)+wod;
|
||||
tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3);
|
||||
dh = oy-y;
|
||||
this.mkDiv(pxl, cy-oy, dw, dh);
|
||||
this.mkDiv(pxl, cy+y+hod, dw, dh);
|
||||
ox = x;
|
||||
oy = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt -= aa2*((y<<1)-3);
|
||||
st -= aa4*(--y);
|
||||
}
|
||||
}
|
||||
this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod);
|
||||
};
|
||||
|
||||
|
||||
/* fillPolygon method, implemented by Matthieu Haller.
|
||||
This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib.
|
||||
C source of GD 1.8.4 found at http://www.boutell.com/gd/
|
||||
|
||||
THANKS to Kirsten Schulz for the polygon fixes!
|
||||
|
||||
The intersection finding technique of this code could be improved
|
||||
by remembering the previous intertersection, and by using the slope.
|
||||
That could help to adjust intersections to produce a nice
|
||||
interior_extrema. */
|
||||
this.fillPolygon = function(array_x, array_y)
|
||||
{
|
||||
var i;
|
||||
var y;
|
||||
var miny, maxy;
|
||||
var x1, y1;
|
||||
var x2, y2;
|
||||
var ind1, ind2;
|
||||
var ints;
|
||||
|
||||
var n = array_x.length;
|
||||
|
||||
if (!n) return;
|
||||
|
||||
|
||||
miny = array_y[0];
|
||||
maxy = array_y[0];
|
||||
for (i = 1; i < n; i++)
|
||||
{
|
||||
if (array_y[i] < miny)
|
||||
miny = array_y[i];
|
||||
|
||||
if (array_y[i] > maxy)
|
||||
maxy = array_y[i];
|
||||
}
|
||||
for (y = miny; y <= maxy; y++)
|
||||
{
|
||||
var polyInts = new Array();
|
||||
ints = 0;
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if (!i)
|
||||
{
|
||||
ind1 = n-1;
|
||||
ind2 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ind1 = i-1;
|
||||
ind2 = i;
|
||||
}
|
||||
y1 = array_y[ind1];
|
||||
y2 = array_y[ind2];
|
||||
if (y1 < y2)
|
||||
{
|
||||
x1 = array_x[ind1];
|
||||
x2 = array_x[ind2];
|
||||
}
|
||||
else if (y1 > y2)
|
||||
{
|
||||
y2 = array_y[ind1];
|
||||
y1 = array_y[ind2];
|
||||
x2 = array_x[ind1];
|
||||
x1 = array_x[ind2];
|
||||
}
|
||||
else continue;
|
||||
|
||||
// modified 11. 2. 2004 Walter Zorn
|
||||
if ((y >= y1) && (y < y2))
|
||||
polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1);
|
||||
|
||||
else if ((y == maxy) && (y > y1) && (y <= y2))
|
||||
polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1);
|
||||
}
|
||||
polyInts.sort(integer_compare);
|
||||
for (i = 0; i < ints; i+=2)
|
||||
this.mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.drawString = function(txt, x, y)
|
||||
{
|
||||
this.htm += '<div style="position:absolute;'+
|
||||
'left:' + x + 'px;'+
|
||||
'top:' + y + 'px;'+
|
||||
'font-family:' + this.ftFam + ';'+
|
||||
'font-size:' + this.ftSz + ';'+
|
||||
'color:' + this.color + ';' + this.ftSty + '">'+
|
||||
txt +
|
||||
'<\/div>';
|
||||
};
|
||||
|
||||
|
||||
/* drawStringRect() added by Rick Blommers.
|
||||
Allows to specify the size of the text rectangle and to align the
|
||||
text both horizontally (e.g. right) and vertically within that rectangle */
|
||||
this.drawStringRect = function(txt, x, y, width,height, halign)
|
||||
{
|
||||
this.ftSz = '11px';
|
||||
this.htm += '<div style="position:absolute;overflow:hidden;'+
|
||||
'left:' + x + 'px;'+
|
||||
'top:' + y + 'px;'+
|
||||
'width:'+width +'px;'+
|
||||
'height:'+height +'px;'+
|
||||
'text-align:'+halign+';'+
|
||||
'font-family:' + this.ftFam + ';'+
|
||||
'font-size:' + this.ftSz + ';'+
|
||||
'color:' + this.color + ';' + this.ftSty + '">'+
|
||||
txt +
|
||||
'<\/div>';
|
||||
};
|
||||
|
||||
|
||||
this.drawImage = function(imgSrc, x, y, w, h, a)
|
||||
{
|
||||
this.htm += '<div style="position:absolute;'+
|
||||
'left:' + x + 'px;'+
|
||||
'top:' + y + 'px;'+
|
||||
'width:' + w + 'px;'+
|
||||
'height:' + h + 'px;">'+
|
||||
'<img src="' + imgSrc + '" width="' + w + '" height="' + h + '"' + (a? (' '+a) : '') + '>'+
|
||||
'<\/div>';
|
||||
};
|
||||
|
||||
|
||||
this.clear = function()
|
||||
{
|
||||
this.htm = "";
|
||||
if (this.cnv) this.cnv.innerHTML = this.defhtm;
|
||||
};
|
||||
|
||||
|
||||
this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h)
|
||||
{
|
||||
this.mkDiv(xr+cx, yt+cy, w, h);
|
||||
this.mkDiv(xr+cx, yb+cy, w, h);
|
||||
this.mkDiv(xl+cx, yb+cy, w, h);
|
||||
this.mkDiv(xl+cx, yt+cy, w, h);
|
||||
};
|
||||
|
||||
this.setStroke(1);
|
||||
this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN);
|
||||
this.color = '#000000';
|
||||
this.htm = '';
|
||||
this.wnd = wnd || window;
|
||||
|
||||
if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM();
|
||||
if (typeof id != 'string' || !id) this.paint = pntDoc;
|
||||
else
|
||||
{
|
||||
this.cnv = document.all? (this.wnd.document.all[id] || null)
|
||||
: document.getElementById? (this.wnd.document.getElementById(id) || null)
|
||||
: null;
|
||||
this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : '';
|
||||
this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe : jg_ihtm? pntCnvIhtm : pntCnv;
|
||||
}
|
||||
|
||||
this.setPrintable(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function integer_compare(x,y)
|
||||
{
|
||||
return (x < y) ? -1 : ((x > y)*1);
|
||||
}
|
||||
|
||||
2097
gulliver/js/form/core/form.js
Normal file
2097
gulliver/js/form/core/form.js
Normal file
File diff suppressed because it is too large
Load Diff
243
gulliver/js/form/core/pagedTable.js
Normal file
243
gulliver/js/form/core/pagedTable.js
Normal file
@@ -0,0 +1,243 @@
|
||||
/* PACKAGE : GULLIVER FORMS
|
||||
*/
|
||||
function G_PagedTable( )
|
||||
{
|
||||
this.id='';
|
||||
this.name='';
|
||||
this.event='';
|
||||
this.element = null;
|
||||
this.field='';
|
||||
this.ajaxUri='';
|
||||
this.currentOrder='';
|
||||
this.currentFilter='';
|
||||
this.currentPage=1;
|
||||
this.totalRows=0;
|
||||
this.rowsPerPage=25;
|
||||
this.onInsertField='';
|
||||
this.onDeleteField='';
|
||||
this.afterDeleteField='';
|
||||
this.onUpdateField='';
|
||||
this.form;
|
||||
var me = this;
|
||||
function loadTable( func, uri ) {
|
||||
var div = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,func,uri);
|
||||
if (div.outerHTML) {
|
||||
div.outerHTML=div.outerHTML.split(div.innerHTML).join(newContent);
|
||||
} else {
|
||||
div.innerHTML=newContent;
|
||||
}
|
||||
var myScripts = div.getElementsByTagName('SCRIPT');
|
||||
for(var rr=0; rr<myScripts.length ; rr++){
|
||||
try {
|
||||
if (myScripts[rr].innerHTML!=='')
|
||||
if (window.execScript)
|
||||
window.execScript( myScripts[rr].innerHTML, 'javascript' );
|
||||
else
|
||||
window.setTimeout( myScripts[rr].innerHTML, 0 );
|
||||
} catch (e) {
|
||||
alert(e.description);
|
||||
}
|
||||
}
|
||||
eval("if (loadPopupMenu_"+me.id+")loadPopupMenu_"+me.id+"();");
|
||||
delete div;
|
||||
delete myScripts;
|
||||
}
|
||||
this.showHideField=function(field)
|
||||
{
|
||||
uri='field='+encodeURIComponent(field);
|
||||
var ns=[],showIt=true;
|
||||
for(var i=0,j=me.shownFields.length;i<j;i++){
|
||||
if (me.shownFields[i]!==field) ns.push(me.shownFields[i]);
|
||||
else showIt=false;
|
||||
}
|
||||
if (showIt) ns.push(field);
|
||||
me.shownFields=ns;
|
||||
loadTable('showHideField',uri);
|
||||
}
|
||||
this.updateField=function(field, title, width, height)
|
||||
{
|
||||
width = width || 500;
|
||||
height= height || 200;
|
||||
popupWindow(title,this.popupPage + '&field='+ encodeURIComponent(field), width, height);
|
||||
//this.form=document.getElementById('xmlPopup');
|
||||
}
|
||||
this.deleteField=function(field)
|
||||
{
|
||||
}
|
||||
this.doFilter = function ( searchForm )
|
||||
{
|
||||
var inputs,r,uri;
|
||||
inputs=searchForm.elements;
|
||||
me.currentFilter='';
|
||||
for(r=0;r<inputs.length;r++)
|
||||
if(inputs[r].value!='')
|
||||
{
|
||||
if (me.currentFilter!='') me.currentFilter+='&';
|
||||
me.currentFilter+=inputs[r].id+'='+encodeURIComponent(inputs[r].value);
|
||||
}
|
||||
uri='order='+encodeURIComponent(me.currentOrder)
|
||||
+'&page='+me.currentPage;
|
||||
if(me.currentFilter!='')
|
||||
uri=uri +'&filter='+encodeURIComponent(me.currentFilter);
|
||||
loadTable('paint',uri);
|
||||
/*var ee = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,'paint',uri);
|
||||
if (ee.outerHTML) {
|
||||
ee.outerHTML=ee.outerHTML.split(ee.innerHTML).join(newContent);
|
||||
} else {
|
||||
ee.innerHTML=newContent;
|
||||
}
|
||||
delete ee;
|
||||
delete newContent;*/
|
||||
}
|
||||
this.doFastSearch = function( criteria )
|
||||
{
|
||||
uri='fastSearch='+encodeURIComponent(criteria);
|
||||
/*var ee = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,'paint',uri);
|
||||
if (ee.outerHTML) {
|
||||
ee.outerHTML=ee.outerHTML.split(ee.innerHTML).join(newContent);
|
||||
} else {
|
||||
ee.innerHTML=newContent;
|
||||
}
|
||||
delete ee;
|
||||
delete newContent;*/
|
||||
loadTable('paint',uri);
|
||||
}
|
||||
this.doSort = function ( fieldName , orderDirection)
|
||||
{
|
||||
var inputs,r,uri;
|
||||
if (orderDirection)
|
||||
me.currentOrder = fieldName + '=' + orderDirection;
|
||||
else
|
||||
me.currentOrder = '';
|
||||
uri='order='+encodeURIComponent(me.currentOrder)
|
||||
+'&page='+me.currentPage;
|
||||
if(me.currentFilter!='')
|
||||
uri=uri +'&filter='+encodeURIComponent(me.currentFilter);
|
||||
loadTable('paint',uri);
|
||||
/*var ee = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,'paint',uri);
|
||||
if (ee.outerHTML)
|
||||
ee.outerHTML=ee.outerHTML.split(ee.innerHTML).join(newContent);
|
||||
else
|
||||
ee.innerHTML=newContent;
|
||||
delete ee;
|
||||
delete newContent;*/
|
||||
}
|
||||
this.refresh = function()
|
||||
{
|
||||
loadTable('paint','');
|
||||
/*var ee = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,'paint','');
|
||||
if (ee.outerHTML)
|
||||
ee.outerHTML=ee.outerHTML.split(ee.innerHTML).join(newContent);
|
||||
else
|
||||
ee.innerHTML=newContent;
|
||||
delete ee;
|
||||
delete newContent;*/
|
||||
}
|
||||
this.doGoToPage = function( nextCurrentPage )
|
||||
{
|
||||
var inputs,r,uri;
|
||||
me.currentPage = nextCurrentPage;
|
||||
uri='order='+encodeURIComponent(me.currentOrder)
|
||||
+'&page='+me.currentPage;
|
||||
if(me.currentFilter!='')
|
||||
uri=uri +'&filter='+encodeURIComponent(me.currentFilter);
|
||||
var ee = document.getElementById('table[' + me.id + ']');
|
||||
var newContent=ajax_function(me.ajaxUri,'paint',uri);
|
||||
if (ee.outerHTML)
|
||||
ee.outerHTML=ee.outerHTML.split(ee.innerHTML).join(newContent);
|
||||
else
|
||||
ee.innerHTML=newContent;
|
||||
delete ee;
|
||||
delete newContent;
|
||||
}
|
||||
function encodeData(data)
|
||||
{
|
||||
var enc;
|
||||
enc='';
|
||||
if (typeof(data)=='object')
|
||||
for (u in data)
|
||||
enc+='&'+u+'='+encodeURIComponent(data[u]);
|
||||
return encodeURIComponent(enc);
|
||||
}
|
||||
}
|
||||
|
||||
function popup(url)
|
||||
{
|
||||
var h;
|
||||
lleft=((document.body.clientWidth/2)+document.body.scrollLeft);
|
||||
ltop=((document.body.clientHeight/2)+document.body.scrollTop);
|
||||
|
||||
panelPopup=leimnud.panel.create({w:popupWidth,h:popupHeight},{x:lleft,y:ltop,center:true},"popup",9,false,{
|
||||
botones:{cerrar:true},
|
||||
style:{
|
||||
panel:{
|
||||
border:"1px solid #000000",
|
||||
color:"#000000",
|
||||
backgroundColor:"#FEFEFE"
|
||||
},
|
||||
html:{
|
||||
textAlign:"left",
|
||||
padding:"5px",
|
||||
paddingTop:"12px"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
leimnud.panel.loader.begin(panelPopup);
|
||||
uyh=new leimnud.rpc.xmlhttp({
|
||||
method :"GET",
|
||||
url : url,
|
||||
callback :{
|
||||
_function :function($)
|
||||
{
|
||||
leimnud.panel.loader.end($.arguments.obj);
|
||||
dc=$dce("div");
|
||||
leimnud.style.set(dc,{textAlign:"justify"});
|
||||
dc.innerHTML=$.request.responseText;
|
||||
leimnud.panel.html($.arguments.obj,dc);
|
||||
leimnud.panel.sombra($.arguments.obj,{sombra:{color:"#000000",opacity:30}});
|
||||
},
|
||||
arguments:{obj:panelPopup}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//global function for paged table
|
||||
function setRowClass (theRow, thePointerClass)
|
||||
{
|
||||
if (thePointerClass == '' || typeof(theRow.className) == 'undefined') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(globalRowSelected == null || globalRowSelected.id != theRow.id){
|
||||
globalRowSelectedClass = theRow.className;
|
||||
theRow.className = thePointerClass;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
var globalRowSelected = null;
|
||||
var globalRowSelectedClass;
|
||||
|
||||
function focusRow(o, className){
|
||||
if (className == '' || typeof(o.className) == 'undefined') {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* restore its previous class at the other object*/
|
||||
if( globalRowSelected != null ){
|
||||
globalRowSelected.className = globalRowSelectedClass;
|
||||
}
|
||||
|
||||
globalRowSelected = o;
|
||||
//globalRowSelectedClass = o.className;
|
||||
|
||||
o.className = className;
|
||||
|
||||
return true;
|
||||
}
|
||||
902
gulliver/js/grid/core/grid.js
Normal file
902
gulliver/js/grid/core/grid.js
Normal file
@@ -0,0 +1,902 @@
|
||||
var G_Grid = function(oForm, sGridName) {
|
||||
// G_Field integration - Start
|
||||
var oGrid = this;
|
||||
this.parent = G_Field;
|
||||
this.parent(oForm, '', sGridName);
|
||||
// G_Field integration - End
|
||||
this.sGridName = sGridName;
|
||||
this.sAJAXPage = oForm.ajaxServer || '';
|
||||
this.oGrid = document.getElementById(this.sGridName);
|
||||
this.aFields = [];
|
||||
this.aElements = [];
|
||||
this.aFunctions = [];
|
||||
this.aFormulas = [];
|
||||
this.setFields = function(aFields, iRow) {
|
||||
this.aFields = aFields;
|
||||
var i, j, k, aAux, oAux, sDependentFields;
|
||||
for (i = 0; i < this.aFields.length; i++) {
|
||||
j = iRow || 1;
|
||||
switch (this.aFields[i].sType) {
|
||||
case 'text':
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']')) {
|
||||
this.aElements.push(new G_Text(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['
|
||||
+ this.aFields[i].sFieldName));
|
||||
this.aElements[this.aElements.length - 1].validate = this.aFields[i].oProperties.validate;
|
||||
if (aFields[i].oProperties) {
|
||||
this.aElements[this.aElements.length - 1].mask = aFields[i].oProperties.mask;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
break;
|
||||
case 'currency':
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']')) {
|
||||
this.aElements.push(new G_Currency(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['
|
||||
+ this.aFields[i].sFieldName));
|
||||
if (aFields[i].oProperties) {
|
||||
this.aElements[this.aElements.length - 1].mask = aFields[i].oProperties.mask;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
break;
|
||||
case 'percentage':
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']')) {
|
||||
this.aElements.push(new G_Percentage(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j
|
||||
+ '][' + this.aFields[i].sFieldName));
|
||||
if (aFields[i].oProperties) {
|
||||
this.aElements[this.aElements.length - 1].mask = aFields[i].oProperties.mask;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
break;
|
||||
case 'dropdown':
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']')) {
|
||||
this.aElements.push(new G_DropDown(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['
|
||||
+ this.aFields[i].sFieldName));
|
||||
if (aFields[i].oProperties) {
|
||||
this.aElements[this.aElements.length - 1].mask = aFields[i].oProperties.sMask;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Set dependent fields
|
||||
for (i = 0; i < this.aFields.length; i++) {
|
||||
j = iRow || 1;
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']')) {
|
||||
if (aFields[i].oProperties.dependentFields != '') {
|
||||
this.setDependents(j, this.getElementByName(j, this.aFields[i].sFieldName), aFields[i].oProperties.dependentFields);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.setDependents = function(iRow, me, theDependentFields) {
|
||||
var i;
|
||||
var dependentFields = theDependentFields || '';
|
||||
dependentFields = dependentFields.split(',');
|
||||
for (i = 0; i < dependentFields.length; i++) {
|
||||
var oField = this.getElementByName(iRow, dependentFields[i]);
|
||||
if (oField) {
|
||||
me.dependentFields[i] = oField;
|
||||
me.dependentFields[i].addDependencie(me);
|
||||
}
|
||||
}
|
||||
};
|
||||
this.unsetFields = function() {
|
||||
var i, j = 0, k, l = 0;
|
||||
k = this.aElements.length / this.aFields.length;
|
||||
for (i = 0; i < this.aFields.length; i++) {
|
||||
|
||||
j += k;
|
||||
l++;
|
||||
this.aElements.splice(j - l, 1);
|
||||
}
|
||||
//////for (i = 0; i < this.aElements.length ;i++) {
|
||||
//////alert(this.aElements[i].name +" --- "+this.aElements[i].value());
|
||||
//////}
|
||||
|
||||
};
|
||||
this.getElementByName = function(iRow, sName) {
|
||||
var i;
|
||||
for (i = 0; i < this.aElements.length; i++) {
|
||||
if (this.aElements[i].name === this.sGridName + '][' + iRow + '][' + sName) {
|
||||
return this.aElements[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
this.getElementValueByName = function(iRow, sName) {
|
||||
var oAux = document.getElementById('form[' + this.sGridName + '][' + iRow + '][' + sName + ']');
|
||||
if (oAux) {
|
||||
return oAux.value;
|
||||
} else {
|
||||
return 'Object not found!';
|
||||
}
|
||||
};
|
||||
this.getFunctionResult = function(sName) {
|
||||
var oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + this.sGridName + '_' + sName + ']');
|
||||
if (oAux) {
|
||||
return oAux.value;
|
||||
} else {
|
||||
return 'Object not found!';
|
||||
}
|
||||
};
|
||||
|
||||
this.addGridRow = function() {
|
||||
var i, aObjects, aDatePicker;
|
||||
var oRow = document.getElementById('firstRow_' + this.sGridName);
|
||||
var aCells = oRow.getElementsByTagName('td');
|
||||
var oNewRow = this.oGrid.insertRow(this.oGrid.rows.length - 1);
|
||||
oNewRow.onmouseover=function(){
|
||||
highlightRow(this, '#D9E8FF');
|
||||
}
|
||||
oNewRow.onmouseout=function(){
|
||||
highlightRow(this, '#fff');
|
||||
}
|
||||
|
||||
for (i = 0; i < aCells.length; i++) {
|
||||
oNewRow.appendChild(aCells[i].cloneNode(true));
|
||||
if (i == 0) {
|
||||
oNewRow.getElementsByTagName('td')[i].innerHTML = this.oGrid.rows.length - 2;
|
||||
} else {
|
||||
if (i == (aCells.length - 1)) {
|
||||
oNewRow.getElementsByTagName('td')[i].innerHTML = oNewRow.getElementsByTagName('td')[i].innerHTML.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
} else {
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enodename = aCells[i].innerHTML.substring(aCells[i].innerHTML.indexOf('<')+1, aCells[i].innerHTML.indexOf(' '));
|
||||
enodename = enodename.toLowerCase();
|
||||
|
||||
switch (enodename) {
|
||||
case 'input':
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('input');
|
||||
|
||||
if (aObjects) {
|
||||
newID = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
|
||||
aObjects[0].setAttribute('id', newID);
|
||||
aObjects[0].setAttribute('name', newID);
|
||||
|
||||
if (aObjects[0].type != 'checkbox') {
|
||||
aObjects[0].value = '';
|
||||
} else {
|
||||
aObjects[0].checked = false;
|
||||
}
|
||||
if (aObjects[0].detachEvent) {
|
||||
try {
|
||||
aObjects[0].detachEvent('onkeypress', this.getElementByName(1, aObjects[0].id.split('][')[2].replace(']', '')).validateKey);
|
||||
}
|
||||
catch (e) {
|
||||
//Nothing
|
||||
}
|
||||
}
|
||||
|
||||
//verifying if it is a datepickey
|
||||
tags = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a');
|
||||
if( tags.length == 2 ){ //then it is a datepicker
|
||||
|
||||
if (tags[0].onclick) {
|
||||
evOnclick = new String(tags[0].onclick);
|
||||
eval('tags[0].onclick = ' + evOnclick.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
tags[1].id = tags[1].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
//alert(tags[1].onmouseover);
|
||||
if (tags[1].onmouseover) {
|
||||
evOnclick = new String(tags[1].onmouseover);
|
||||
eval('tags[1].onmouseover = ' + evOnclick.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('span');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
// aObjects[0].name =
|
||||
// aObjects[0].name.replace(/\[1\]/g, '\[' +
|
||||
// (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
}
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('div');
|
||||
|
||||
if (aObjects.length > 0) {
|
||||
|
||||
if (aObjects[0]) {
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].name = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'select':
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('select');
|
||||
if (aObjects) {
|
||||
var oAux = document.createElement(aObjects[0].tagName);
|
||||
oAux.name = aObjects[0].name.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
oAux.setAttribute("required", aObjects[0].getAttribute("required"));
|
||||
oAux.id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
for ( var j = 0; j < aObjects[0].options.length; j++) {
|
||||
var oOption = document.createElement('OPTION');
|
||||
oOption.value = aObjects[0].options[j].value;
|
||||
oOption.text = aObjects[0].options[j].text;
|
||||
oAux.options.add(oOption);
|
||||
}
|
||||
aObjects[0].parentNode.replaceChild(oAux, aObjects[0]);
|
||||
/**
|
||||
* note added by gustavo cruz gustavo-at-colosa-dot-com
|
||||
* the piece of code below has been comented in revision 2123
|
||||
* i have tested it and seems to work well, please check this.
|
||||
* aObjects[0].name.replace(/\[1\]/g, '\[' +
|
||||
* (this.oGrid.rows.length - 2) + '\]');
|
||||
* aObjects[0].id = aObjects[0].id.replace(/\[1\]/g,
|
||||
* '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
* aObjects[0].selectedIndex = 0;
|
||||
*/
|
||||
}
|
||||
break;
|
||||
case 'textarea':
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('textarea');
|
||||
if (aObjects) {
|
||||
aObjects[0].name = aObjects[0].name.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].value = '';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
aObjects = oNewRow.getElementsByTagName('td')[i].getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
aObjects[0].name = aObjects[0].name.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].value = '';
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
oNewRow.getElementsByTagName('td')[i].innerHTML = ' ';
|
||||
break;
|
||||
}
|
||||
aObjects = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.aFields.length > 0) {
|
||||
this.setFields(this.aFields, this.oGrid.rows.length - 2);
|
||||
}
|
||||
if (this.aFunctions.length > 0) {
|
||||
this.assignFunctions(this.aFunctions, 'change', this.oGrid.rows.length - 2);
|
||||
}
|
||||
if (this.aFormulas.length > 0) {
|
||||
this.assignFormulas(this.aFormulas, 'change', this.oGrid.rows.length - 2);
|
||||
}
|
||||
if (this.onaddrow) {
|
||||
this.onaddrow(this.oGrid.rows.length - 2);
|
||||
}
|
||||
};
|
||||
this.deleteGridRow = function(sRow) {
|
||||
var i, iRow, iRowAux, oAux, ooAux;
|
||||
if (this.oGrid.rows.length == 3) {
|
||||
new leimnud.module.app.alert().make( {
|
||||
label : G_STRINGS.ID_MSG_NODELETE_GRID_ITEM
|
||||
});
|
||||
return false;
|
||||
}
|
||||
new leimnud.module.app.confirm().make( {
|
||||
label : G_STRINGS.ID_MSG_DELETE_GRID_ITEM,
|
||||
action : function() {
|
||||
//this.aElements = [];
|
||||
sRow = sRow.replace('[', '');
|
||||
sRow = sRow.replace(']', '');
|
||||
iRow = Number(sRow);
|
||||
|
||||
/*
|
||||
* delete the respective session row grid variables from
|
||||
* Dynaform - by Nyeke <erik@colosa.com
|
||||
*/
|
||||
|
||||
deleteRowOnDybaform(this, iRow);
|
||||
|
||||
iRowAux = iRow + 1;
|
||||
while (iRowAux <= (this.oGrid.rows.length - 2)) {
|
||||
for (i = 1; i < this.oGrid.rows[iRowAux - 1].cells.length; i++) {
|
||||
var oCell1 = this.oGrid.rows[iRowAux - 1].cells[i];
|
||||
var oCell2 = this.oGrid.rows[iRowAux].cells[i];
|
||||
switch (oCell1.innerHTML.replace(/^\s+|\s+$/g, '').substr(0, 6).toLowerCase()) {
|
||||
case '<input':
|
||||
aObjects1 = oCell1.getElementsByTagName('input');
|
||||
aObjects2 = oCell2.getElementsByTagName('input');
|
||||
if (aObjects1 && aObjects2) {
|
||||
if(aObjects1[0].type=='checkbox'){
|
||||
aObjects1[0].checked = aObjects2[0].checked;
|
||||
}
|
||||
aObjects1[0].value = aObjects2[0].value;
|
||||
/*if(oCell1.innerHTML.indexOf('<div id=')!=-1)
|
||||
oCell1.innerHTML = oCell2.innerHTML;*/
|
||||
}
|
||||
|
||||
aObjects = oCell1.getElementsByTagName('div');
|
||||
|
||||
if (aObjects.length > 0) {
|
||||
|
||||
if (aObjects[0]) {
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].name = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
aObjects = oCell1.getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case '<selec':
|
||||
aObjects1 = oCell1.getElementsByTagName('select');
|
||||
aObjects2 = oCell2.getElementsByTagName('select');
|
||||
if (aObjects1 && aObjects2) {
|
||||
var vValue = aObjects2[0].value;
|
||||
/*
|
||||
* for (var j = (aObjects1[0].options.length-1);
|
||||
* j >= 0; j--) { aObjects1[0].options[j] =
|
||||
* null; }
|
||||
*/
|
||||
aObjects1[0].options.length = 0;
|
||||
for ( var j = 0; j < aObjects2[0].options.length; j++) {
|
||||
var optn = $dce("OPTION");
|
||||
optn.text = aObjects2[0].options[j].text;
|
||||
optn.value = aObjects2[0].options[j].value;
|
||||
aObjects1[0].options[j] = optn;
|
||||
}
|
||||
aObjects1[0].value = vValue;
|
||||
}
|
||||
break;
|
||||
case '<texta':
|
||||
aObjects1 = oCell1.getElementsByTagName('textarea');
|
||||
aObjects2 = oCell2.getElementsByTagName('textarea');
|
||||
if (aObjects1 && aObjects2) {
|
||||
aObjects1[0].value = aObjects2[0].value;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (( oCell2.innerHTML.indexOf('changeValues')==111 || oCell2.innerHTML.indexOf('changeValues')==115 ) ) {
|
||||
break;
|
||||
}
|
||||
if (oCell2.innerHTML.toLowerCase().indexOf('deletegridrow') == -1) {
|
||||
oCell1.innerHTML = oCell2.innerHTML;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
iRowAux++;
|
||||
}
|
||||
this.oGrid.deleteRow(this.oGrid.rows.length - 2);
|
||||
if (this.sAJAXPage != '') {
|
||||
}
|
||||
/* this slice of code was comented because it could be the problem to do that sum function is working wrong
|
||||
if (this.aFields.length > 0) {
|
||||
this.unsetFields();
|
||||
}*/
|
||||
//this slice of code was added to fill the grid after to delete some row
|
||||
this.aElements = [];
|
||||
for (var k=1;k<= this.oGrid.rows.length-2;k++){
|
||||
for (var i = 0; i < this.aFields.length; i++) {
|
||||
var j = k;
|
||||
switch (this.aFields[i].sType) {
|
||||
case 'text':
|
||||
this.aElements.push(new G_Text(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName));
|
||||
this.aElements[this.aElements.length - 1].validate = this.aFields[i].oProperties.validate;
|
||||
break;
|
||||
case 'currency':
|
||||
this.aElements.push(new G_Currency(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName));
|
||||
break;
|
||||
case 'percentage':
|
||||
this.aElements.push(new G_Percentage(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j+ '][' + this.aFields[i].sFieldName));
|
||||
break;
|
||||
case 'dropdown':
|
||||
this.aElements.push(new G_DropDown(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName));
|
||||
break;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.aFunctions.length > 0) {
|
||||
|
||||
for (i = 0; i < this.aFunctions.length; i++) {
|
||||
oAux = document.getElementById('form[' + this.sGridName + '][1][' + this.aFunctions[i].sFieldName + ']');
|
||||
if (oAux) {
|
||||
switch (this.aFunctions[i].sFunction) {
|
||||
case 'sum':
|
||||
this.sum(false, oAux);
|
||||
/*
|
||||
aaAux=oAux.name.split('][');
|
||||
sNamef=aaAux[2].replace(']', '');
|
||||
var sumaSol = 0;
|
||||
this.aElements.length;
|
||||
var j=1;k=0;
|
||||
for ( var i = 0; i < this.aElements.length; i++) {
|
||||
nnName= this.aElements[i].name.split('][');
|
||||
if (nnName[2] == sNamef && j <= (this.oGrid.rows.length-2)){
|
||||
ooAux=this.getElementByName(j, nnName[2]);
|
||||
|
||||
if(ooAux!=null){
|
||||
|
||||
sumaSol += parseFloat(G.cleanMask(ooAux.value() || 0, ooAux.mask).result.replace(/,/g, ''))
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
sumaSol = sumaSol.toFixed(2);
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + sNamef + ']');
|
||||
oAux.value = sumaSol;
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + sNamef + ']');
|
||||
oAux.innerHTML = sumaSol;//return;
|
||||
*/
|
||||
break;
|
||||
case 'avg':
|
||||
this.avg(false, oAux);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.ondeleterow) {
|
||||
this.ondeleterow();
|
||||
}
|
||||
|
||||
}.extend(this)
|
||||
});
|
||||
};
|
||||
this.assignFunctions = function(aFields, sEvent, iRow) {
|
||||
iRow = iRow || 1;
|
||||
var i, j, oAux;
|
||||
for (i = 0; i < aFields.length; i++) {
|
||||
j = iRow;
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + aFields[i].sFieldName + ']')) {
|
||||
switch (aFields[i].sFunction) {
|
||||
case 'sum':
|
||||
leimnud.event.add(oAux, sEvent, {
|
||||
method : this.sum,
|
||||
instance : this,
|
||||
event : true
|
||||
});
|
||||
break;
|
||||
case 'avg':
|
||||
leimnud.event.add(oAux, sEvent, {
|
||||
method : this.avg,
|
||||
instance : this,
|
||||
event : true
|
||||
});
|
||||
break;
|
||||
default:
|
||||
leimnud.event.add(oAux, sEvent, {
|
||||
method : aFields[i].sFunction,
|
||||
instance : this,
|
||||
event : true
|
||||
});
|
||||
break;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.setFunctions = function(aFunctions) {
|
||||
this.aFunctions = aFunctions;
|
||||
this.assignFunctions(this.aFunctions, 'change');
|
||||
};
|
||||
this.sum = function(oEvent, oDOM) {
|
||||
oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement);
|
||||
var i, aAux, oAux, fTotal, sMask, nnName;
|
||||
aAux = oDOM.name.split('][');
|
||||
i = 1;
|
||||
fTotal = 0;
|
||||
aAux[2] = aAux[2].replace(']', '');
|
||||
|
||||
var j=1;
|
||||
for ( var k = 0; k < this.aElements.length; k++) {
|
||||
nnName= this.aElements[k].name.split('][');
|
||||
if (aAux[2] == nnName[2] && j <= (this.oGrid.rows.length-2)){
|
||||
oAux=this.getElementByName(j, nnName[2]);
|
||||
if(oAux!=null){
|
||||
fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, ''))
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
while (oAux = this.getElementByName(i, aAux[2])) {
|
||||
fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, ''));
|
||||
sMask = oAux.mask;
|
||||
i++;
|
||||
}*/
|
||||
fTotal = fTotal.toFixed(2);
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']');
|
||||
oAux.value = fTotal;
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']');
|
||||
// oAux.innerHTML = G.toMask(fTotal, sMask).result;
|
||||
oAux.innerHTML = fTotal;
|
||||
};
|
||||
this.avg = function(oEvent, oDOM) {
|
||||
oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement);
|
||||
var i, aAux, oAux, fTotal, sMask;
|
||||
aAux = oDOM.name.split('][');
|
||||
i = 1;
|
||||
fTotal = 0;
|
||||
aAux[2] = aAux[2].replace(']', '');
|
||||
while (oAux = this.getElementByName(i, aAux[2])) {
|
||||
fTotal += parseFloat(G.cleanMask(oAux.value() || 0, oAux.mask).result.replace(/,/g, ''));
|
||||
sMask = oAux.mask;
|
||||
i++;
|
||||
}
|
||||
i--;
|
||||
if (fTotal > 0) {
|
||||
fTotal = (fTotal / i).toFixed(2);
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']');
|
||||
oAux.value = fTotal;
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']');
|
||||
// oAux.innerHTML = G.toMask((fTotal / i), sMask).result;
|
||||
oAux.innerHTML = fTotal;
|
||||
} else {
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + aAux[2] + ']');
|
||||
oAux.value = 0;
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + aAux[2] + ']');
|
||||
// oAux.innerHTML = G.toMask(0, sMask).result;
|
||||
oAux.innerHTML = 0;
|
||||
}
|
||||
};
|
||||
this.assignFormulas = function(aFields, sEvent, iRow) {
|
||||
iRow = iRow || 1;
|
||||
var i, j, oAux;
|
||||
for (i = 0; i < aFields.length; i++) {
|
||||
j = iRow;
|
||||
while (oAux = document.getElementById('form[' + this.sGridName + '][' + j + '][' + aFields[i].sDependentOf + ']')) {
|
||||
leimnud.event.add(oAux, sEvent, {
|
||||
method : this.evaluateFormula,
|
||||
instance : this,
|
||||
args : [ oAux, aFields[i] ],
|
||||
event : true
|
||||
});
|
||||
j++;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.setFormulas = function(aFormulas) {
|
||||
this.aFormulas = aFormulas;
|
||||
this.assignFormulas(this.aFormulas, 'change');
|
||||
};
|
||||
this.evaluateFormula = function(oEvent, oDOM, oField) {
|
||||
oDOM = (oDOM ? oDOM : oEvent.target || window.event.srcElement);
|
||||
var aAux, sAux, i, oAux;
|
||||
var oContinue = true;
|
||||
aAux = oDOM.name.split('][');
|
||||
sAux = oField.sFormula.replace(/\+|\-|\*|\/|\(|\)|\[|\]|\{|\}|\%|\$/g, ' ');
|
||||
sAux = sAux.replace(/^\s+|\s+$/g, '');
|
||||
sAux = sAux.replace(/ /g, ' ');
|
||||
sAux = sAux.replace(/ /g, ' ');
|
||||
sAux = sAux.replace(/ /g, ' ');
|
||||
sAux = sAux.replace(/ /g, ' ');
|
||||
sAux = sAux.replace(/ /g, ' ');
|
||||
aFields = sAux.split(' ');
|
||||
aFields = aFields.unique();
|
||||
sAux = oField.sFormula;
|
||||
for (i = 0; i < aFields.length; i++) {
|
||||
if (!isNumber(aFields[i])) {
|
||||
oAux = this.getElementByName(aAux[1], aFields[i]);
|
||||
sAux = sAux.replace(new RegExp(aFields[i], "g"), "parseFloat(G.cleanMask(this.getElementByName(" + aAux[1] + ", '" + aFields[i] + "').value() || 0, '" + (oAux.sMask ? oAux.sMask : '')
|
||||
+ "').result.replace(/,/g, ''))");
|
||||
eval("if (!document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + aFields[i] + "]')) { oContinue = false; }");
|
||||
}
|
||||
}
|
||||
eval("if (!document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + "]')) { oContinue = false; }");
|
||||
if (oContinue) {
|
||||
//we're selecting the mask to put in the field with the formula
|
||||
for (i = 0; i < this.aFields.length; i++) {
|
||||
if(oField.sFieldName==this.aFields[i].sFieldName) {
|
||||
maskformula =this.aFields[i].oProperties.mask;
|
||||
}
|
||||
}
|
||||
if(maskformula!=''){
|
||||
maskDecimal=maskformula.split(";");
|
||||
if(maskDecimal.length > 1) {
|
||||
maskDecimal=maskDecimal[1].split(".");
|
||||
} else {
|
||||
maskDecimal=maskformula.split(".");
|
||||
}
|
||||
maskToPut=maskDecimal[1].length;
|
||||
}else{
|
||||
maskToPut=0;
|
||||
}
|
||||
eval("document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + "]').value = (" + sAux + ').toFixed('+maskToPut+');');
|
||||
//eval("document.getElementById('" + aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + "]').value = (" + sAux + ').toFixed(2);');
|
||||
if (this.aFunctions.length > 0) {
|
||||
for (i = 0; i < this.aFunctions.length; i++) {
|
||||
oAux = document.getElementById('form[' + this.sGridName + '][' + aAux[1] + '][' + this.aFunctions[i].sFieldName + ']');
|
||||
if (oAux) {
|
||||
if (oAux.name == aAux[0] + '][' + aAux[1] + '][' + oField.sFieldName + ']') {
|
||||
switch (this.aFunctions[i].sFunction) {
|
||||
case 'sum':
|
||||
this.sum(false, oAux);
|
||||
break;
|
||||
case 'avg':
|
||||
this.avg(false, oAux);
|
||||
break;
|
||||
}
|
||||
if (oAux.fireEvent) {
|
||||
oAux.fireEvent('onchange');
|
||||
} else {
|
||||
var evObj = document.createEvent('HTMLEvents');
|
||||
evObj.initEvent('change', true, true);
|
||||
oAux.dispatchEvent(evObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
new leimnud.module.app.alert().make( {
|
||||
label : "Check your formula!\n\n" + oField.sFormula
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/*add*/
|
||||
this.deleteGridRownomsg = function(sRow) {
|
||||
var i, iRow, iRowAux, oAux, ooAux;
|
||||
|
||||
|
||||
//action : function() {
|
||||
//this.aElements = [];
|
||||
sRow = sRow.replace('[', '');
|
||||
sRow = sRow.replace(']', '');
|
||||
iRow = Number(sRow);
|
||||
|
||||
/*
|
||||
* delete the respective session row grid variables from
|
||||
* Dynaform - by Nyeke <erik@colosa.com
|
||||
*/
|
||||
|
||||
deleteRowOnDybaform(this, iRow);
|
||||
|
||||
iRowAux = iRow + 1;
|
||||
while (iRowAux <= (this.oGrid.rows.length - 2)) {
|
||||
for (i = 1; i < this.oGrid.rows[iRowAux - 1].cells.length; i++) {
|
||||
var oCell1 = this.oGrid.rows[iRowAux - 1].cells[i];
|
||||
var oCell2 = this.oGrid.rows[iRowAux].cells[i];
|
||||
switch (oCell1.innerHTML.replace(/^\s+|\s+$/g, '').substr(0, 6).toLowerCase()) {
|
||||
case '<input':
|
||||
aObjects1 = oCell1.getElementsByTagName('input');
|
||||
aObjects2 = oCell2.getElementsByTagName('input');
|
||||
if (aObjects1 && aObjects2) {
|
||||
if(aObjects1[0].type=='checkbox'){
|
||||
aObjects1[0].checked = aObjects2[0].checked;
|
||||
}
|
||||
aObjects1[0].value = aObjects2[0].value;
|
||||
// if(oCell1.innerHTML.indexOf('<div id=')!=-1)
|
||||
// oCell1.innerHTML = oCell2.innerHTML;
|
||||
}
|
||||
|
||||
aObjects = oCell1.getElementsByTagName('div');
|
||||
|
||||
if (aObjects.length > 0) {
|
||||
|
||||
if (aObjects[0]) {
|
||||
aObjects[0].id = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
aObjects[0].name = aObjects[0].id.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]');
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
aObjects = oCell1.getElementsByTagName('a');
|
||||
if (aObjects) {
|
||||
if (aObjects[0]) {
|
||||
if (aObjects[0].onclick) {
|
||||
sAux = new String(aObjects[0].onclick);
|
||||
eval('aObjects[0].onclick = ' + sAux.replace(/\[1\]/g, '\[' + (this.oGrid.rows.length - 2) + '\]') + ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//oCell1.innerHTML= aux.innerHTM;
|
||||
break;
|
||||
case '<selec':
|
||||
aObjects1 = oCell1.getElementsByTagName('select');
|
||||
aObjects2 = oCell2.getElementsByTagName('select');
|
||||
if (aObjects1 && aObjects2) {
|
||||
var vValue = aObjects2[0].value;
|
||||
/*
|
||||
* for (var j = (aObjects1[0].options.length-1);
|
||||
* j >= 0; j--) { aObjects1[0].options[j] =
|
||||
* null; }
|
||||
*/
|
||||
aObjects1[0].options.length = 0;
|
||||
for ( var j = 0; j < aObjects2[0].options.length; j++) {
|
||||
var optn = $dce("OPTION");
|
||||
optn.text = aObjects2[0].options[j].text;
|
||||
optn.value = aObjects2[0].options[j].value;
|
||||
aObjects1[0].options[j] = optn;
|
||||
}
|
||||
aObjects1[0].value = vValue;
|
||||
}
|
||||
break;
|
||||
case '<texta':
|
||||
aObjects1 = oCell1.getElementsByTagName('textarea');
|
||||
aObjects2 = oCell2.getElementsByTagName('textarea');
|
||||
if (aObjects1 && aObjects2) {
|
||||
aObjects1[0].value = aObjects2[0].value;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (( oCell2.innerHTML.indexOf('changeValues')==111 || oCell2.innerHTML.indexOf('changeValues')==115 ) ) {
|
||||
alert('erik2');
|
||||
break;
|
||||
}
|
||||
if (oCell2.innerHTML.toLowerCase().indexOf('deletegridrow') == -1) {
|
||||
oCell1.innerHTML = oCell2.innerHTML;
|
||||
alert('erik');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
iRowAux++;
|
||||
}
|
||||
this.oGrid.deleteRow(this.oGrid.rows.length - 2);
|
||||
if (this.sAJAXPage != '') {
|
||||
}
|
||||
/* this slice of code was comented because it could be the problem to do that sum function is working wrong
|
||||
if (this.aFields.length > 0) {
|
||||
this.unsetFields();
|
||||
}*/
|
||||
//this slice of code was added to fill the grid after to delete some row
|
||||
this.aElements = [];
|
||||
for (var k=1;k<= this.oGrid.rows.length-2;k++){
|
||||
for (var i = 0; i < this.aFields.length; i++) {
|
||||
var j = k;
|
||||
switch (this.aFields[i].sType) {
|
||||
case 'text':
|
||||
this.aElements.push(new G_Text(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName));
|
||||
this.aElements[this.aElements.length - 1].validate = this.aFields[i].oProperties.validate;
|
||||
break;
|
||||
case 'currency':
|
||||
this.aElements.push(new G_Currency(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName));
|
||||
break;
|
||||
case 'percentage':
|
||||
this.aElements.push(new G_Percentage(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j+ '][' + this.aFields[i].sFieldName));
|
||||
break;
|
||||
case 'dropdown':
|
||||
this.aElements.push(new G_DropDown(oForm, document.getElementById('form[' + this.sGridName + '][' + j + '][' + this.aFields[i].sFieldName + ']'), this.sGridName + '][' + j + ']['+ this.aFields[i].sFieldName));
|
||||
break;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.aFunctions.length > 0) {
|
||||
|
||||
for (i = 0; i < this.aFunctions.length; i++) {
|
||||
oAux = document.getElementById('form[' + this.sGridName + '][1][' + this.aFunctions[i].sFieldName + ']');
|
||||
if (oAux) {
|
||||
switch (this.aFunctions[i].sFunction) {
|
||||
case 'sum':
|
||||
this.sum(false, oAux);
|
||||
/*
|
||||
aaAux=oAux.name.split('][');
|
||||
sNamef=aaAux[2].replace(']', '');
|
||||
var sumaSol = 0;
|
||||
this.aElements.length;
|
||||
var j=1;k=0;
|
||||
for ( var i = 0; i < this.aElements.length; i++) {
|
||||
nnName= this.aElements[i].name.split('][');
|
||||
if (nnName[2] == sNamef && j <= (this.oGrid.rows.length-2)){
|
||||
ooAux=this.getElementByName(j, nnName[2]);
|
||||
|
||||
if(ooAux!=null){
|
||||
|
||||
sumaSol += parseFloat(G.cleanMask(ooAux.value() || 0, ooAux.mask).result.replace(/,/g, ''))
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
sumaSol = sumaSol.toFixed(2);
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '_' + sNamef + ']');
|
||||
oAux.value = sumaSol;
|
||||
oAux = document.getElementById('form[SYS_GRID_AGGREGATE_' + oGrid.sGridName + '__' + sNamef + ']');
|
||||
oAux.innerHTML = sumaSol;//return;
|
||||
*/
|
||||
break;
|
||||
case 'avg':
|
||||
this.avg(false, oAux);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.ondeleterow) {
|
||||
this.ondeleterow();
|
||||
}
|
||||
|
||||
//}.extend(this)
|
||||
|
||||
};
|
||||
/*add end*/
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete the respective session row grid variables from Dynaform
|
||||
*
|
||||
* @Param grid
|
||||
* [object: grid]
|
||||
* @Param sRow
|
||||
* [integer: row index]
|
||||
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@mail.com>
|
||||
*/
|
||||
function deleteRowOnDybaform(grid, sRow) {
|
||||
var oRPC = new leimnud.module.rpc.xmlhttp( {
|
||||
url : '../gulliver/genericAjax',
|
||||
args : 'request=deleteGridRowOnDynaform&gridname=' + grid.sGridName + '&rowpos=' + sRow
|
||||
});
|
||||
oRPC.callback = function(rpc) {
|
||||
if(oPanel)
|
||||
oPanel.loader.hide();
|
||||
scs = rpc.xmlhttp.responseText.extractScript();
|
||||
scs.evalScript();
|
||||
|
||||
/**
|
||||
* We verify if the debug panel is open, if it is-> update its content
|
||||
*/
|
||||
if ( typeof(oDebuggerPanel) != 'undefined' && oDebuggerPanel != null) {
|
||||
oDebuggerPanel.clearContent();
|
||||
oDebuggerPanel.loader.show();
|
||||
var oRPC = new leimnud.module.rpc.xmlhttp( {
|
||||
url : 'cases_Ajax',
|
||||
args : 'action=showdebug'
|
||||
});
|
||||
oRPC.callback = function(rpc) {
|
||||
oDebuggerPanel.loader.hide();
|
||||
var scs = rpc.xmlhttp.responseText.extractScript();
|
||||
oDebuggerPanel.addContent(rpc.xmlhttp.responseText);
|
||||
scs.evalScript();
|
||||
}.extend(this);
|
||||
oRPC.make();
|
||||
}
|
||||
}.extend(this);
|
||||
oRPC.make();
|
||||
}
|
||||
19
gulliver/js/highlight/core/AUTHORS.en.txt
Normal file
19
gulliver/js/highlight/core/AUTHORS.en.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
Syntax highlighting with language autodetection.
|
||||
|
||||
URL: http://softwaremaniacs.org/soft/highlight/en/
|
||||
|
||||
Original author and current maintainer:
|
||||
Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
|
||||
|
||||
Contributors:
|
||||
|
||||
- Peter Leonov <gojpeg@gmail.com>
|
||||
- Victor Karamzin <Victor.Karamzin@enterra-inc.com>
|
||||
- Vsevolod Solovyov <vsevolod.solovyov@gmail.com>
|
||||
- Anton Kovalyov <anton@kovalyov.net>
|
||||
- Nikita Ledyaev <lenikita@yandex.ru>
|
||||
- Konstantin Evdokimenko <qewerty@gmail.com>
|
||||
- Dmitri Roudakov <dmitri@roudakov.ru>
|
||||
- Yuri Ivanov <ivanov@supersoft.ru>
|
||||
- Vladimir Ermakov <vooon341@mail.ru>
|
||||
- Vladimir Gubarkov <xonixx@gmail.com>
|
||||
19
gulliver/js/highlight/core/AUTHORS.ru.txt
Normal file
19
gulliver/js/highlight/core/AUTHORS.ru.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
Подсветка синтаксиса с автоопределением языка.
|
||||
|
||||
URL: http://softwaremaniacs.org/soft/highlight/
|
||||
|
||||
Первоначальный автор и ведущий проекта:
|
||||
Иван Сагалаев <Maniac@SoftwareManiacs.Org>
|
||||
|
||||
Внесли свой вклад:
|
||||
|
||||
- Петр Леонов <gojpeg@gmail.com>
|
||||
- Виктор Карамзин <Victor.Karamzin@enterra-inc.com>
|
||||
- Всеволод Соловьёв <vsevolod.solovyov@gmail.com>
|
||||
- Антон Ковалёв <anton@kovalyov.net>
|
||||
- Никита Ледяев <lenikita@yandex.ru>
|
||||
- Константин Евдокименко <qewerty@gmail.com>
|
||||
- Дмитрий Рудаков <dmitri@roudakov.ru>
|
||||
- Юрий Иванов <ivanov@supersoft.ru>
|
||||
- Владимир Ермаков <vooon341@mail.ru>
|
||||
- Владимир Губарьков <xonixx@gmail.com>
|
||||
24
gulliver/js/highlight/core/LICENSE
Normal file
24
gulliver/js/highlight/core/LICENSE
Normal file
@@ -0,0 +1,24 @@
|
||||
Copyright (c) 2006, Ivan Sagalaev
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of highlight.js nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
88
gulliver/js/highlight/core/export.html
Normal file
88
gulliver/js/highlight/core/export.html
Normal file
@@ -0,0 +1,88 @@
|
||||
<!-- saved from url=(0013)about:internet -->
|
||||
<!-- ^^^ This is for IE not to show security warning for local files,
|
||||
see http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2brows.mspx-->
|
||||
|
||||
<!--
|
||||
Highlighted code export
|
||||
Copyright (c) Vladimir Gubarkov <xonixx@gmail.com>
|
||||
-->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Highlited code export</title>
|
||||
<link rel="stylesheet" href="sample.css">
|
||||
<style type="text/css">
|
||||
#t1, #t2 { width: 100%;}
|
||||
tr { vertical-align: top; }
|
||||
address { margin-top: 4em; }
|
||||
</style>
|
||||
<script type="text/javascript" src="highlight.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
injectScripts(ALL_LANGUAGES); // all
|
||||
|
||||
String.prototype.escape = function() {
|
||||
return this.replace(/&/gm, '&').replace(/</gm, '<').replace(/>/gm, '>');
|
||||
}
|
||||
|
||||
function doIt() {
|
||||
var viewDiv = document.getElementById("highlight-view");
|
||||
var t1 = document.getElementById("t1");
|
||||
var t2 = document.getElementById("t2");
|
||||
var selector = document.getElementById("langSelector");
|
||||
var selectedLang = selector.options[selector.selectedIndex].value.toLowerCase();
|
||||
initHighlighting.called = false;
|
||||
if(selectedLang) {
|
||||
viewDiv.innerHTML = '<pre><code class="'+selectedLang+'">'+t1.value.escape()+"</code></pre>";
|
||||
initHighlighting(selectedLang);
|
||||
} else { // try auto
|
||||
viewDiv.innerHTML = '<pre><code>' + t1.value.escape() + "</code></pre>";
|
||||
initHighlighting();
|
||||
}
|
||||
t2.value = viewDiv.innerHTML;
|
||||
}
|
||||
|
||||
function copyToBuffer(textToCopy) {
|
||||
if (window.clipboardData) { // IE
|
||||
window.clipboardData.setData("Text", textToCopy);
|
||||
} else if (window.netscape) { // FF
|
||||
// from http://developer.mozilla.org/en/docs/Using_the_Clipboard
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
||||
var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
|
||||
gClipboardHelper.copyString(textToCopy);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
var langSelectorHtml = '<label>Language <select id="langSelector">';
|
||||
langSelectorHtml += '<option value="">Auto</option>';
|
||||
for (var lang in LANGUAGES) {
|
||||
langSelectorHtml += '<option value=\"'+lang+'\">'+lang.charAt(0).toUpperCase()+lang.substr(1)+'</option>';
|
||||
}
|
||||
langSelectorHtml += '</select></label>';
|
||||
document.write(langSelectorHtml);
|
||||
</script>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td><textarea rows="20" cols="50" id="t1"></textarea></td>
|
||||
<td><textarea rows="20" cols="50" id="t2"></textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Write a code snippet</td>
|
||||
<td>Get HTML to paste anywhere (for actual styles and colors see sample.css)</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width="98%">
|
||||
<tr>
|
||||
<td><input type="button" value="Export →" onclick="doIt()"/></td>
|
||||
<td align="right"><input type="button" value="Copy to buffer" onclick="copyToBuffer(document.getElementById('t2').value);"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="highlight-view"></div>
|
||||
<address>
|
||||
Export script: <a href="mailto:xonixx@gmail.com">Vladimir Gubarkov</a><br>
|
||||
Highlighting: <a href="http://softwaremaniacs.org/soft/highlight/">highlight.js</a>
|
||||
</address>
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user