添加到 trunk
+YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@137 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
This commit is contained in:
@@ -0,0 +1,458 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
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 this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
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
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser 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 Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "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
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY 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
|
||||
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
+1
@@ -0,0 +1 @@
|
||||
This directory must be writable by the webserver user.
|
||||
@@ -0,0 +1 @@
|
||||
This directory must be writable by the webserver user.
|
||||
@@ -0,0 +1,389 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Config_File class.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License 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
|
||||
*
|
||||
* @link http://smarty.php.net/
|
||||
* @version 2.6.18
|
||||
* @copyright Copyright: 2001-2005 New Digital Group, Inc.
|
||||
* @author Andrei Zmievski <andrei@php.net>
|
||||
* @access public
|
||||
* @package Smarty
|
||||
*/
|
||||
|
||||
/* $Id: Config_File.class.php 11186 2007-06-21 10:49:03Z richie $ */
|
||||
|
||||
/**
|
||||
* Config file reading class
|
||||
* @package Smarty
|
||||
*/
|
||||
class Config_File {
|
||||
/**#@+
|
||||
* Options
|
||||
* @var boolean
|
||||
*/
|
||||
/**
|
||||
* Controls whether variables with the same name overwrite each other.
|
||||
*/
|
||||
var $overwrite = true;
|
||||
|
||||
/**
|
||||
* Controls whether config values of on/true/yes and off/false/no get
|
||||
* converted to boolean values automatically.
|
||||
*/
|
||||
var $booleanize = true;
|
||||
|
||||
/**
|
||||
* Controls whether hidden config sections/vars are read from the file.
|
||||
*/
|
||||
var $read_hidden = true;
|
||||
|
||||
/**
|
||||
* Controls whether or not to fix mac or dos formatted newlines.
|
||||
* If set to true, \r or \r\n will be changed to \n.
|
||||
*/
|
||||
var $fix_newlines = true;
|
||||
/**#@-*/
|
||||
|
||||
/** @access private */
|
||||
var $_config_path = "";
|
||||
var $_config_data = array();
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* Constructs a new config file class.
|
||||
*
|
||||
* @param string $config_path (optional) path to the config files
|
||||
*/
|
||||
function Config_File($config_path = NULL)
|
||||
{
|
||||
if (isset($config_path))
|
||||
$this->set_path($config_path);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the path where configuration files can be found.
|
||||
*
|
||||
* @param string $config_path path to the config files
|
||||
*/
|
||||
function set_path($config_path)
|
||||
{
|
||||
if (!empty($config_path)) {
|
||||
if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) {
|
||||
$this->_trigger_error_msg("Bad config file path '$config_path'");
|
||||
return;
|
||||
}
|
||||
if(substr($config_path, -1) != DIRECTORY_SEPARATOR) {
|
||||
$config_path .= DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
$this->_config_path = $config_path;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves config info based on the file, section, and variable name.
|
||||
*
|
||||
* @param string $file_name config file to get info for
|
||||
* @param string $section_name (optional) section to get info for
|
||||
* @param string $var_name (optional) variable to get info for
|
||||
* @return string|array a value or array of values
|
||||
*/
|
||||
function get($file_name, $section_name = NULL, $var_name = NULL)
|
||||
{
|
||||
if (empty($file_name)) {
|
||||
$this->_trigger_error_msg('Empty config file name');
|
||||
return;
|
||||
} else {
|
||||
$file_name = $this->_config_path . $file_name;
|
||||
if (!isset($this->_config_data[$file_name]))
|
||||
$this->load_file($file_name, false);
|
||||
}
|
||||
|
||||
if (!empty($var_name)) {
|
||||
if (empty($section_name)) {
|
||||
return $this->_config_data[$file_name]["vars"][$var_name];
|
||||
} else {
|
||||
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]))
|
||||
return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name];
|
||||
else
|
||||
return array();
|
||||
}
|
||||
} else {
|
||||
if (empty($section_name)) {
|
||||
return (array)$this->_config_data[$file_name]["vars"];
|
||||
} else {
|
||||
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"]))
|
||||
return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"];
|
||||
else
|
||||
return array();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves config info based on the key.
|
||||
*
|
||||
* @param $file_name string config key (filename/section/var)
|
||||
* @return string|array same as get()
|
||||
* @uses get() retrieves information from config file and returns it
|
||||
*/
|
||||
function &get_key($config_key)
|
||||
{
|
||||
list($file_name, $section_name, $var_name) = explode('/', $config_key, 3);
|
||||
$result = &$this->get($file_name, $section_name, $var_name);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all loaded config file names.
|
||||
*
|
||||
* @return array an array of loaded config file names
|
||||
*/
|
||||
function get_file_names()
|
||||
{
|
||||
return array_keys($this->_config_data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all section names from a loaded file.
|
||||
*
|
||||
* @param string $file_name config file to get section names from
|
||||
* @return array an array of section names from the specified file
|
||||
*/
|
||||
function get_section_names($file_name)
|
||||
{
|
||||
$file_name = $this->_config_path . $file_name;
|
||||
if (!isset($this->_config_data[$file_name])) {
|
||||
$this->_trigger_error_msg("Unknown config file '$file_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
return array_keys($this->_config_data[$file_name]["sections"]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all global or section variable names.
|
||||
*
|
||||
* @param string $file_name config file to get info for
|
||||
* @param string $section_name (optional) section to get info for
|
||||
* @return array an array of variables names from the specified file/section
|
||||
*/
|
||||
function get_var_names($file_name, $section = NULL)
|
||||
{
|
||||
if (empty($file_name)) {
|
||||
$this->_trigger_error_msg('Empty config file name');
|
||||
return;
|
||||
} else if (!isset($this->_config_data[$file_name])) {
|
||||
$this->_trigger_error_msg("Unknown config file '$file_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (empty($section))
|
||||
return array_keys($this->_config_data[$file_name]["vars"]);
|
||||
else
|
||||
return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clear loaded config data for a certain file or all files.
|
||||
*
|
||||
* @param string $file_name file to clear config data for
|
||||
*/
|
||||
function clear($file_name = NULL)
|
||||
{
|
||||
if ($file_name === NULL)
|
||||
$this->_config_data = array();
|
||||
else if (isset($this->_config_data[$file_name]))
|
||||
$this->_config_data[$file_name] = array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load a configuration file manually.
|
||||
*
|
||||
* @param string $file_name file name to load
|
||||
* @param boolean $prepend_path whether current config path should be
|
||||
* prepended to the filename
|
||||
*/
|
||||
function load_file($file_name, $prepend_path = true)
|
||||
{
|
||||
if ($prepend_path && $this->_config_path != "")
|
||||
$config_file = $this->_config_path . $file_name;
|
||||
else
|
||||
$config_file = $file_name;
|
||||
|
||||
ini_set('track_errors', true);
|
||||
$fp = @fopen($config_file, "r");
|
||||
if (!is_resource($fp)) {
|
||||
$this->_trigger_error_msg("Could not open config file '$config_file'");
|
||||
return false;
|
||||
}
|
||||
|
||||
$contents = ($size = filesize($config_file)) ? fread($fp, $size) : '';
|
||||
fclose($fp);
|
||||
|
||||
$this->_config_data[$config_file] = $this->parse_contents($contents);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the contents of a file manually.
|
||||
*
|
||||
* @param string $config_file file name of the related contents
|
||||
* @param string $contents the file-contents to parse
|
||||
*/
|
||||
function set_file_contents($config_file, $contents)
|
||||
{
|
||||
$this->_config_data[$config_file] = $this->parse_contents($contents);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse the source of a configuration file manually.
|
||||
*
|
||||
* @param string $contents the file-contents to parse
|
||||
*/
|
||||
function parse_contents($contents)
|
||||
{
|
||||
if($this->fix_newlines) {
|
||||
// fix mac/dos formatted newlines
|
||||
$contents = preg_replace('!\r\n?!', "\n", $contents);
|
||||
}
|
||||
|
||||
$config_data = array();
|
||||
$config_data['sections'] = array();
|
||||
$config_data['vars'] = array();
|
||||
|
||||
/* reference to fill with data */
|
||||
$vars =& $config_data['vars'];
|
||||
|
||||
/* parse file line by line */
|
||||
preg_match_all('!^.*\r?\n?!m', $contents, $match);
|
||||
$lines = $match[0];
|
||||
for ($i=0, $count=count($lines); $i<$count; $i++) {
|
||||
$line = $lines[$i];
|
||||
if (empty($line)) continue;
|
||||
|
||||
if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) {
|
||||
/* section found */
|
||||
if (substr($match[1], 0, 1) == '.') {
|
||||
/* hidden section */
|
||||
if ($this->read_hidden) {
|
||||
$section_name = substr($match[1], 1);
|
||||
} else {
|
||||
/* break reference to $vars to ignore hidden section */
|
||||
unset($vars);
|
||||
$vars = array();
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$section_name = $match[1];
|
||||
}
|
||||
if (!isset($config_data['sections'][$section_name]))
|
||||
$config_data['sections'][$section_name] = array('vars' => array());
|
||||
$vars =& $config_data['sections'][$section_name]['vars'];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) {
|
||||
/* variable found */
|
||||
$var_name = rtrim($match[1]);
|
||||
if (strpos($match[2], '"""') === 0) {
|
||||
/* handle multiline-value */
|
||||
$lines[$i] = substr($match[2], 3);
|
||||
$var_value = '';
|
||||
while ($i<$count) {
|
||||
if (($pos = strpos($lines[$i], '"""')) === false) {
|
||||
$var_value .= $lines[$i++];
|
||||
} else {
|
||||
/* end of multiline-value */
|
||||
$var_value .= substr($lines[$i], 0, $pos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
$booleanize = false;
|
||||
|
||||
} else {
|
||||
/* handle simple value */
|
||||
$var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2]));
|
||||
$booleanize = $this->booleanize;
|
||||
|
||||
}
|
||||
$this->_set_config_var($vars, $var_name, $var_value, $booleanize);
|
||||
}
|
||||
/* else unparsable line / means it is a comment / means ignore it */
|
||||
}
|
||||
return $config_data;
|
||||
}
|
||||
|
||||
/**#@+ @access private */
|
||||
/**
|
||||
* @param array &$container
|
||||
* @param string $var_name
|
||||
* @param mixed $var_value
|
||||
* @param boolean $booleanize determines whether $var_value is converted to
|
||||
* to true/false
|
||||
*/
|
||||
function _set_config_var(&$container, $var_name, $var_value, $booleanize)
|
||||
{
|
||||
if (substr($var_name, 0, 1) == '.') {
|
||||
if (!$this->read_hidden)
|
||||
return;
|
||||
else
|
||||
$var_name = substr($var_name, 1);
|
||||
}
|
||||
|
||||
if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) {
|
||||
$this->_trigger_error_msg("Bad variable name '$var_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($booleanize) {
|
||||
if (preg_match("/^(on|true|yes)$/i", $var_value))
|
||||
$var_value = true;
|
||||
else if (preg_match("/^(off|false|no)$/i", $var_value))
|
||||
$var_value = false;
|
||||
}
|
||||
|
||||
if (!isset($container[$var_name]) || $this->overwrite)
|
||||
$container[$var_name] = $var_value;
|
||||
else {
|
||||
settype($container[$var_name], 'array');
|
||||
$container[$var_name][] = $var_value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @uses trigger_error() creates a PHP warning/error
|
||||
* @param string $error_msg
|
||||
* @param integer $error_type one of
|
||||
*/
|
||||
function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING)
|
||||
{
|
||||
trigger_error("Config_File error: $error_msg", $error_type);
|
||||
}
|
||||
/**#@-*/
|
||||
}
|
||||
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,157 @@
|
||||
{* Smarty *}
|
||||
{* debug.tpl, last updated version 2.1.0 *}
|
||||
{assign_debug_info}
|
||||
{capture assign=debug_output}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<title>Smarty Debug Console</title>
|
||||
{literal}
|
||||
<style type="text/css">
|
||||
/* <![CDATA[ */
|
||||
body, h1, h2, td, th, p {
|
||||
font-family: sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 0.9em;
|
||||
margin: 1px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
padding: 2px;
|
||||
background-color: #f0c040;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
background-color: #9B410E;
|
||||
color: white;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
padding: 2px;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
||||
body {
|
||||
background: black;
|
||||
}
|
||||
|
||||
p, table, div {
|
||||
background: #f0ead8;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
font-family: monospace;
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
td {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.odd {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.even {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.exectime {
|
||||
font-size: 0.8em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#table_assigned_vars th {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
#table_config_vars th {
|
||||
color: maroon;
|
||||
}
|
||||
/* ]]> */
|
||||
</style>
|
||||
{/literal}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Smarty Debug Console</h1>
|
||||
|
||||
<h2>included templates & config files (load time in seconds)</h2>
|
||||
|
||||
<div>
|
||||
{section name=templates loop=$_debug_tpls}
|
||||
{section name=indent loop=$_debug_tpls[templates].depth} {/section}
|
||||
<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>
|
||||
{$_debug_tpls[templates].filename|escape:html}</font>
|
||||
{if isset($_debug_tpls[templates].exec_time)}
|
||||
<span class="exectime">
|
||||
({$_debug_tpls[templates].exec_time|string_format:"%.5f"})
|
||||
{if %templates.index% eq 0}(total){/if}
|
||||
</span>
|
||||
{/if}
|
||||
<br />
|
||||
{sectionelse}
|
||||
<p>no templates included</p>
|
||||
{/section}
|
||||
</div>
|
||||
|
||||
<h2>assigned template variables</h2>
|
||||
|
||||
<table id="table_assigned_vars">
|
||||
{section name=vars loop=$_debug_keys}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<th>{ldelim}${$_debug_keys[vars]|escape:'html'}{rdelim}</th>
|
||||
<td>{$_debug_vals[vars]|@debug_print_var}</td></tr>
|
||||
{sectionelse}
|
||||
<tr><td><p>no template variables assigned</p></td></tr>
|
||||
{/section}
|
||||
</table>
|
||||
|
||||
<h2>assigned config file variables (outer template scope)</h2>
|
||||
|
||||
<table id="table_config_vars">
|
||||
{section name=config_vars loop=$_debug_config_keys}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<th>{ldelim}#{$_debug_config_keys[config_vars]|escape:'html'}#{rdelim}</th>
|
||||
<td>{$_debug_config_vals[config_vars]|@debug_print_var}</td></tr>
|
||||
{sectionelse}
|
||||
<tr><td><p>no config vars assigned</p></td></tr>
|
||||
{/section}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
{/capture}
|
||||
{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"}
|
||||
{$debug_output}
|
||||
{else}
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
if ( self.name == '' ) {ldelim}
|
||||
var title = 'Console';
|
||||
{rdelim}
|
||||
else {ldelim}
|
||||
var title = 'Console_' + self.name;
|
||||
{rdelim}
|
||||
_smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
|
||||
_smarty_console.document.write('{$debug_output|escape:'javascript'}');
|
||||
_smarty_console.document.close();
|
||||
// ]]>
|
||||
</script>
|
||||
{/if}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* assemble filepath of requested plugin
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $name
|
||||
* @return string|false
|
||||
*/
|
||||
function smarty_core_assemble_plugin_filepath($params, &$smarty)
|
||||
{
|
||||
static $_filepaths_cache = array();
|
||||
|
||||
$_plugin_filename = $params['type'] . '.' . $params['name'] . '.php';
|
||||
if (isset($_filepaths_cache[$_plugin_filename])) {
|
||||
return $_filepaths_cache[$_plugin_filename];
|
||||
}
|
||||
$_return = false;
|
||||
|
||||
foreach ((array)$smarty->plugins_dir as $_plugin_dir) {
|
||||
|
||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
|
||||
|
||||
// see if path is relative
|
||||
if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) {
|
||||
$_relative_paths[] = $_plugin_dir;
|
||||
// relative path, see if it is in the SMARTY_DIR
|
||||
if (@is_readable(SMARTY_DIR . $_plugin_filepath)) {
|
||||
$_return = SMARTY_DIR . $_plugin_filepath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// try relative to cwd (or absolute)
|
||||
if (@is_readable($_plugin_filepath)) {
|
||||
$_return = $_plugin_filepath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($_return === false) {
|
||||
// still not found, try PHP include_path
|
||||
if(isset($_relative_paths)) {
|
||||
foreach ((array)$_relative_paths as $_plugin_dir) {
|
||||
|
||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
|
||||
|
||||
$_params = array('file_path' => $_plugin_filepath);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
|
||||
if(smarty_core_get_include_path($_params, $smarty)) {
|
||||
$_return = $_params['new_file_path'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$_filepaths_cache[$_plugin_filename] = $_return;
|
||||
return $_return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty assign_smarty_interface core plugin
|
||||
*
|
||||
* Type: core<br>
|
||||
* Name: assign_smarty_interface<br>
|
||||
* Purpose: assign the $smarty interface variable
|
||||
* @param array Format: null
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_core_assign_smarty_interface($params, &$smarty)
|
||||
{
|
||||
if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$_globals_map = array('g' => 'HTTP_GET_VARS',
|
||||
'p' => 'HTTP_POST_VARS',
|
||||
'c' => 'HTTP_COOKIE_VARS',
|
||||
's' => 'HTTP_SERVER_VARS',
|
||||
'e' => 'HTTP_ENV_VARS');
|
||||
|
||||
$_smarty_vars_request = array();
|
||||
|
||||
foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) {
|
||||
if (isset($_globals_map[$_c])) {
|
||||
$_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]);
|
||||
}
|
||||
}
|
||||
$_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']);
|
||||
|
||||
$smarty->_smarty_vars['request'] = $_smarty_vars_request;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* create full directory structure
|
||||
*
|
||||
* @param string $dir
|
||||
*/
|
||||
|
||||
// $dir
|
||||
|
||||
function smarty_core_create_dir_structure($params, &$smarty)
|
||||
{
|
||||
if (!file_exists($params['dir'])) {
|
||||
$_open_basedir_ini = ini_get('open_basedir');
|
||||
|
||||
if (DIRECTORY_SEPARATOR=='/') {
|
||||
/* unix-style paths */
|
||||
$_dir = $params['dir'];
|
||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
|
||||
$_new_dir = (substr($_dir, 0, 1)=='/') ? '/' : getcwd().'/';
|
||||
if($_use_open_basedir = !empty($_open_basedir_ini)) {
|
||||
$_open_basedirs = explode(':', $_open_basedir_ini);
|
||||
}
|
||||
|
||||
} else {
|
||||
/* other-style paths */
|
||||
$_dir = str_replace('\\','/', $params['dir']);
|
||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
|
||||
if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {
|
||||
/* leading "//" for network volume, or "[letter]:/" for full path */
|
||||
$_new_dir = $_root_dir[1];
|
||||
/* remove drive-letter from _dir_parts */
|
||||
if (isset($_root_dir[3])) array_shift($_dir_parts);
|
||||
|
||||
} else {
|
||||
$_new_dir = str_replace('\\', '/', getcwd()).'/';
|
||||
|
||||
}
|
||||
|
||||
if($_use_open_basedir = !empty($_open_basedir_ini)) {
|
||||
$_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* all paths use "/" only from here */
|
||||
foreach ($_dir_parts as $_dir_part) {
|
||||
$_new_dir .= $_dir_part;
|
||||
|
||||
if ($_use_open_basedir) {
|
||||
// do not attempt to test or make directories outside of open_basedir
|
||||
$_make_new_dir = false;
|
||||
foreach ($_open_basedirs as $_open_basedir) {
|
||||
if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {
|
||||
$_make_new_dir = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$_make_new_dir = true;
|
||||
}
|
||||
|
||||
if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {
|
||||
$smarty->trigger_error("problem creating directory '" . $_new_dir . "'");
|
||||
return false;
|
||||
}
|
||||
$_new_dir .= '/';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty debug_console function plugin
|
||||
*
|
||||
* Type: core<br>
|
||||
* Name: display_debug_console<br>
|
||||
* Purpose: display the javascript debug console window
|
||||
* @param array Format: null
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_core_display_debug_console($params, &$smarty)
|
||||
{
|
||||
// we must force compile the debug template in case the environment
|
||||
// changed between separate applications.
|
||||
|
||||
if(empty($smarty->debug_tpl)) {
|
||||
// set path to debug template from SMARTY_DIR
|
||||
$smarty->debug_tpl = SMARTY_DIR . 'debug.tpl';
|
||||
if($smarty->security && is_file($smarty->debug_tpl)) {
|
||||
$smarty->secure_dir[] = realpath($smarty->debug_tpl);
|
||||
}
|
||||
$smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl';
|
||||
}
|
||||
|
||||
$_ldelim_orig = $smarty->left_delimiter;
|
||||
$_rdelim_orig = $smarty->right_delimiter;
|
||||
|
||||
$smarty->left_delimiter = '{';
|
||||
$smarty->right_delimiter = '}';
|
||||
|
||||
$_compile_id_orig = $smarty->_compile_id;
|
||||
$smarty->_compile_id = null;
|
||||
|
||||
$_compile_path = $smarty->_get_compile_path($smarty->debug_tpl);
|
||||
if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path))
|
||||
{
|
||||
ob_start();
|
||||
$smarty->_include($_compile_path);
|
||||
$_results = ob_get_contents();
|
||||
ob_end_clean();
|
||||
} else {
|
||||
$_results = '';
|
||||
}
|
||||
|
||||
$smarty->_compile_id = $_compile_id_orig;
|
||||
|
||||
$smarty->left_delimiter = $_ldelim_orig;
|
||||
$smarty->right_delimiter = $_rdelim_orig;
|
||||
|
||||
return $_results;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get path to file from include_path
|
||||
*
|
||||
* @param string $file_path
|
||||
* @param string $new_file_path
|
||||
* @return boolean
|
||||
* @staticvar array|null
|
||||
*/
|
||||
|
||||
// $file_path, &$new_file_path
|
||||
|
||||
function smarty_core_get_include_path(&$params, &$smarty)
|
||||
{
|
||||
static $_path_array = null;
|
||||
|
||||
if(!isset($_path_array)) {
|
||||
$_ini_include_path = ini_get('include_path');
|
||||
|
||||
if(strstr($_ini_include_path,';')) {
|
||||
// windows pathnames
|
||||
$_path_array = explode(';',$_ini_include_path);
|
||||
} else {
|
||||
$_path_array = explode(':',$_ini_include_path);
|
||||
}
|
||||
}
|
||||
foreach ($_path_array as $_include_path) {
|
||||
if (@is_readable($_include_path . DIRECTORY_SEPARATOR . $params['file_path'])) {
|
||||
$params['new_file_path'] = $_include_path . DIRECTORY_SEPARATOR . $params['file_path'];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get seconds and microseconds
|
||||
* @return double
|
||||
*/
|
||||
function smarty_core_get_microtime($params, &$smarty)
|
||||
{
|
||||
$mtime = microtime();
|
||||
$mtime = explode(" ", $mtime);
|
||||
$mtime = (double)($mtime[1]) + (double)($mtime[0]);
|
||||
return ($mtime);
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Retrieves PHP script resource
|
||||
*
|
||||
* sets $php_resource to the returned resource
|
||||
* @param string $resource
|
||||
* @param string $resource_type
|
||||
* @param $php_resource
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
function smarty_core_get_php_resource(&$params, &$smarty)
|
||||
{
|
||||
|
||||
$params['resource_base_path'] = $smarty->trusted_dir;
|
||||
$smarty->_parse_resource_name($params, $smarty);
|
||||
|
||||
/*
|
||||
* Find out if the resource exists.
|
||||
*/
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$_readable = false;
|
||||
if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) {
|
||||
$_readable = true;
|
||||
} else {
|
||||
// test for file in include_path
|
||||
$_params = array('file_path' => $params['resource_name']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
|
||||
if(smarty_core_get_include_path($_params, $smarty)) {
|
||||
$_include_path = $_params['new_file_path'];
|
||||
$_readable = true;
|
||||
}
|
||||
}
|
||||
} else if ($params['resource_type'] != 'file') {
|
||||
$_template_source = null;
|
||||
$_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0])
|
||||
&& call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0],
|
||||
array($params['resource_name'], &$_template_source, &$smarty));
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the error function, depending on which class calls us.
|
||||
*/
|
||||
if (method_exists($smarty, '_syntax_error')) {
|
||||
$_error_funcc = '_syntax_error';
|
||||
} else {
|
||||
$_error_funcc = 'trigger_error';
|
||||
}
|
||||
|
||||
if ($_readable) {
|
||||
if ($smarty->security) {
|
||||
require_once(SMARTY_CORE_DIR . 'core.is_trusted.php');
|
||||
if (!smarty_core_is_trusted($params, $smarty)) {
|
||||
$smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable');
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$params['php_resource'] = $params['resource_name'];
|
||||
} else {
|
||||
$params['php_resource'] = $_template_source;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* determines if a resource is secure or not.
|
||||
*
|
||||
* @param string $resource_type
|
||||
* @param string $resource_name
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $resource_type, $resource_name
|
||||
|
||||
function smarty_core_is_secure($params, &$smarty)
|
||||
{
|
||||
if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$_rp = realpath($params['resource_name']);
|
||||
if (isset($params['resource_base_path'])) {
|
||||
foreach ((array)$params['resource_base_path'] as $curr_dir) {
|
||||
if ( ($_cd = realpath($curr_dir)) !== false &&
|
||||
strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
|
||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($smarty->secure_dir)) {
|
||||
foreach ((array)$smarty->secure_dir as $curr_dir) {
|
||||
if ( ($_cd = realpath($curr_dir)) !== false) {
|
||||
if($_cd == $_rp) {
|
||||
return true;
|
||||
} elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
|
||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// resource is not on local file system
|
||||
return call_user_func_array(
|
||||
$smarty->_plugins['resource'][$params['resource_type']][0][2],
|
||||
array($params['resource_name'], &$smarty));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* determines if a resource is trusted or not
|
||||
*
|
||||
* @param string $resource_type
|
||||
* @param string $resource_name
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $resource_type, $resource_name
|
||||
|
||||
function smarty_core_is_trusted($params, &$smarty)
|
||||
{
|
||||
$_smarty_trusted = false;
|
||||
if ($params['resource_type'] == 'file') {
|
||||
if (!empty($smarty->trusted_dir)) {
|
||||
$_rp = realpath($params['resource_name']);
|
||||
foreach ((array)$smarty->trusted_dir as $curr_dir) {
|
||||
if (!empty($curr_dir) && is_readable ($curr_dir)) {
|
||||
$_cd = realpath($curr_dir);
|
||||
if (strncmp($_rp, $_cd, strlen($_cd)) == 0
|
||||
&& substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
|
||||
$_smarty_trusted = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// resource is not on local file system
|
||||
$_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3],
|
||||
array($params['resource_name'], $smarty));
|
||||
}
|
||||
|
||||
return $_smarty_trusted;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Load requested plugins
|
||||
*
|
||||
* @param array $plugins
|
||||
*/
|
||||
|
||||
// $plugins
|
||||
|
||||
function smarty_core_load_plugins($params, &$smarty)
|
||||
{
|
||||
|
||||
foreach ($params['plugins'] as $_plugin_info) {
|
||||
list($_type, $_name, $_tpl_file, $_tpl_line, $_delayed_loading) = $_plugin_info;
|
||||
$_plugin = &$smarty->_plugins[$_type][$_name];
|
||||
|
||||
/*
|
||||
* We do not load plugin more than once for each instance of Smarty.
|
||||
* The following code checks for that. The plugin can also be
|
||||
* registered dynamically at runtime, in which case template file
|
||||
* and line number will be unknown, so we fill them in.
|
||||
*
|
||||
* The final element of the info array is a flag that indicates
|
||||
* whether the dynamically registered plugin function has been
|
||||
* checked for existence yet or not.
|
||||
*/
|
||||
if (isset($_plugin)) {
|
||||
if (empty($_plugin[3])) {
|
||||
if (!is_callable($_plugin[0])) {
|
||||
$smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
} else {
|
||||
$_plugin[1] = $_tpl_file;
|
||||
$_plugin[2] = $_tpl_line;
|
||||
$_plugin[3] = true;
|
||||
if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */
|
||||
}
|
||||
}
|
||||
continue;
|
||||
} else if ($_type == 'insert') {
|
||||
/*
|
||||
* For backwards compatibility, we check for insert functions in
|
||||
* the symbol table before trying to load them as a plugin.
|
||||
*/
|
||||
$_plugin_func = 'insert_' . $_name;
|
||||
if (function_exists($_plugin_func)) {
|
||||
$_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$_plugin_file = $smarty->_get_plugin_filepath($_type, $_name);
|
||||
|
||||
if (! $_found = ($_plugin_file != false)) {
|
||||
$_message = "could not load plugin file '$_type.$_name.php'\n";
|
||||
}
|
||||
|
||||
/*
|
||||
* If plugin file is found, it -must- provide the properly named
|
||||
* plugin function. In case it doesn't, simply output the error and
|
||||
* do not fall back on any other method.
|
||||
*/
|
||||
if ($_found) {
|
||||
include_once $_plugin_file;
|
||||
|
||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
|
||||
if (!function_exists($_plugin_func)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* In case of insert plugins, their code may be loaded later via
|
||||
* 'script' attribute.
|
||||
*/
|
||||
else if ($_type == 'insert' && $_delayed_loading) {
|
||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
|
||||
$_found = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Plugin specific processing and error checking.
|
||||
*/
|
||||
if (!$_found) {
|
||||
if ($_type == 'modifier') {
|
||||
/*
|
||||
* In case modifier falls back on using PHP functions
|
||||
* directly, we only allow those specified in the security
|
||||
* context.
|
||||
*/
|
||||
if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) {
|
||||
$_message = "(secure mode) modifier '$_name' is not allowed";
|
||||
} else {
|
||||
if (!function_exists($_name)) {
|
||||
$_message = "modifier '$_name' is not implemented";
|
||||
} else {
|
||||
$_plugin_func = $_name;
|
||||
$_found = true;
|
||||
}
|
||||
}
|
||||
} else if ($_type == 'function') {
|
||||
/*
|
||||
* This is a catch-all situation.
|
||||
*/
|
||||
$_message = "unknown tag - '$_name'";
|
||||
}
|
||||
}
|
||||
|
||||
if ($_found) {
|
||||
$smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true);
|
||||
} else {
|
||||
// output error
|
||||
$smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* load a resource plugin
|
||||
*
|
||||
* @param string $type
|
||||
*/
|
||||
|
||||
// $type
|
||||
|
||||
function smarty_core_load_resource_plugin($params, &$smarty)
|
||||
{
|
||||
/*
|
||||
* Resource plugins are not quite like the other ones, so they are
|
||||
* handled differently. The first element of plugin info is the array of
|
||||
* functions provided by the plugin, the second one indicates whether
|
||||
* all of them exist or not.
|
||||
*/
|
||||
|
||||
$_plugin = &$smarty->_plugins['resource'][$params['type']];
|
||||
if (isset($_plugin)) {
|
||||
if (!$_plugin[1] && count($_plugin[0])) {
|
||||
$_plugin[1] = true;
|
||||
foreach ($_plugin[0] as $_plugin_func) {
|
||||
if (!is_callable($_plugin_func)) {
|
||||
$_plugin[1] = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$_plugin[1]) {
|
||||
$smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']);
|
||||
$_found = ($_plugin_file != false);
|
||||
|
||||
if ($_found) { /*
|
||||
* If the plugin file is found, it -must- provide the properly named
|
||||
* plugin functions.
|
||||
*/
|
||||
include_once($_plugin_file);
|
||||
|
||||
/*
|
||||
* Locate functions that we require the plugin to provide.
|
||||
*/
|
||||
$_resource_ops = array('source', 'timestamp', 'secure', 'trusted');
|
||||
$_resource_funcs = array();
|
||||
foreach ($_resource_ops as $_op) {
|
||||
$_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op;
|
||||
if (!function_exists($_plugin_func)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__);
|
||||
return;
|
||||
} else {
|
||||
$_resource_funcs[] = $_plugin_func;
|
||||
}
|
||||
}
|
||||
|
||||
$smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true);
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Replace cached inserts with the actual results
|
||||
*
|
||||
* @param string $results
|
||||
* @return string
|
||||
*/
|
||||
function smarty_core_process_cached_inserts($params, &$smarty)
|
||||
{
|
||||
preg_match_all('!'.$smarty->_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis',
|
||||
$params['results'], $match);
|
||||
list($cached_inserts, $insert_args) = $match;
|
||||
|
||||
for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) {
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
$args = unserialize($insert_args[$i]);
|
||||
$name = $args['name'];
|
||||
|
||||
if (isset($args['script'])) {
|
||||
$_params = array('resource_name' => $smarty->_dequote($args['script']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
if(!smarty_core_get_php_resource($_params, $smarty)) {
|
||||
return false;
|
||||
}
|
||||
$resource_type = $_params['resource_type'];
|
||||
$php_resource = $_params['php_resource'];
|
||||
|
||||
|
||||
if ($resource_type == 'file') {
|
||||
$smarty->_include($php_resource, true);
|
||||
} else {
|
||||
$smarty->_eval($php_resource);
|
||||
}
|
||||
}
|
||||
|
||||
$function_name = $smarty->_plugins['insert'][$name][0];
|
||||
if (empty($args['assign'])) {
|
||||
$replace = $function_name($args, $smarty);
|
||||
} else {
|
||||
$smarty->assign($args['assign'], $function_name($args, $smarty));
|
||||
$replace = '';
|
||||
}
|
||||
|
||||
$params['results'] = substr_replace($params['results'], $replace, strpos($params['results'], $cached_inserts[$i]), strlen($cached_inserts[$i]));
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'insert',
|
||||
'filename' => 'insert_'.$name,
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time);
|
||||
}
|
||||
}
|
||||
|
||||
return $params['results'];
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Replace nocache-tags by results of the corresponding non-cacheable
|
||||
* functions and return it
|
||||
*
|
||||
* @param string $compiled_tpl
|
||||
* @param string $cached_source
|
||||
* @return string
|
||||
*/
|
||||
|
||||
function smarty_core_process_compiled_include($params, &$smarty)
|
||||
{
|
||||
$_cache_including = $smarty->_cache_including;
|
||||
$smarty->_cache_including = true;
|
||||
|
||||
$_return = $params['results'];
|
||||
|
||||
foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) {
|
||||
$smarty->_include($_include_file_path, true);
|
||||
}
|
||||
|
||||
foreach ($smarty->_cache_serials as $_include_file_path=>$_cache_serial) {
|
||||
$_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s',
|
||||
array(&$smarty, '_process_compiled_include_callback'),
|
||||
$_return);
|
||||
}
|
||||
$smarty->_cache_including = $_cache_including;
|
||||
return $_return;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* read a cache file, determine if it needs to be
|
||||
* regenerated or not
|
||||
*
|
||||
* @param string $tpl_file
|
||||
* @param string $cache_id
|
||||
* @param string $compile_id
|
||||
* @param string $results
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $tpl_file, $cache_id, $compile_id, &$results
|
||||
|
||||
function smarty_core_read_cache_file(&$params, &$smarty)
|
||||
{
|
||||
static $content_cache = array();
|
||||
|
||||
if ($smarty->force_compile) {
|
||||
// force compile enabled, always regenerate
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) {
|
||||
list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']];
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!empty($smarty->cache_handler_func)) {
|
||||
// use cache_handler function
|
||||
call_user_func_array($smarty->cache_handler_func,
|
||||
array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null));
|
||||
} else {
|
||||
// use local cache file
|
||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
|
||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id);
|
||||
$params['results'] = $smarty->_read_file($_cache_file);
|
||||
}
|
||||
|
||||
if (empty($params['results'])) {
|
||||
// nothing to parse (error?), regenerate cache
|
||||
return false;
|
||||
}
|
||||
|
||||
$_contents = $params['results'];
|
||||
$_info_start = strpos($_contents, "\n") + 1;
|
||||
$_info_len = (int)substr($_contents, 0, $_info_start - 1);
|
||||
$_cache_info = unserialize(substr($_contents, $_info_start, $_info_len));
|
||||
$params['results'] = substr($_contents, $_info_start + $_info_len);
|
||||
|
||||
if ($smarty->caching == 2 && isset ($_cache_info['expires'])){
|
||||
// caching by expiration time
|
||||
if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) {
|
||||
// cache expired, regenerate
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// caching by lifetime
|
||||
if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) {
|
||||
// cache expired, regenerate
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($smarty->compile_check) {
|
||||
$_params = array('get_source' => false, 'quiet'=>true);
|
||||
foreach (array_keys($_cache_info['template']) as $_template_dep) {
|
||||
$_params['resource_name'] = $_template_dep;
|
||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) {
|
||||
// template file has changed, regenerate cache
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_cache_info['config'])) {
|
||||
$_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true);
|
||||
foreach (array_keys($_cache_info['config']) as $_config_dep) {
|
||||
$_params['resource_name'] = $_config_dep;
|
||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) {
|
||||
// config file has changed, regenerate cache
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info);
|
||||
|
||||
$smarty->_cache_info = $_cache_info;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* delete an automagically created file by name and id
|
||||
*
|
||||
* @param string $auto_base
|
||||
* @param string $auto_source
|
||||
* @param string $auto_id
|
||||
* @param integer $exp_time
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $auto_base, $auto_source = null, $auto_id = null, $exp_time = null
|
||||
|
||||
function smarty_core_rm_auto($params, &$smarty)
|
||||
{
|
||||
if (!@is_dir($params['auto_base']))
|
||||
return false;
|
||||
|
||||
if(!isset($params['auto_id']) && !isset($params['auto_source'])) {
|
||||
$_params = array(
|
||||
'dirname' => $params['auto_base'],
|
||||
'level' => 0,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
|
||||
$_res = smarty_core_rmdir($_params, $smarty);
|
||||
} else {
|
||||
$_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']);
|
||||
|
||||
if(isset($params['auto_source'])) {
|
||||
if (isset($params['extensions'])) {
|
||||
$_res = false;
|
||||
foreach ((array)$params['extensions'] as $_extension)
|
||||
$_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']);
|
||||
} else {
|
||||
$_res = $smarty->_unlink($_tname, $params['exp_time']);
|
||||
}
|
||||
} elseif ($smarty->use_sub_dirs) {
|
||||
$_params = array(
|
||||
'dirname' => $_tname,
|
||||
'level' => 1,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
|
||||
$_res = smarty_core_rmdir($_params, $smarty);
|
||||
} else {
|
||||
// remove matching file names
|
||||
$_handle = opendir($params['auto_base']);
|
||||
$_res = true;
|
||||
while (false !== ($_filename = readdir($_handle))) {
|
||||
if($_filename == '.' || $_filename == '..') {
|
||||
continue;
|
||||
} elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) {
|
||||
$_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $_res;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* delete a dir recursively (level=0 -> keep root)
|
||||
* WARNING: no tests, it will try to remove what you tell it!
|
||||
*
|
||||
* @param string $dirname
|
||||
* @param integer $level
|
||||
* @param integer $exp_time
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $dirname, $level = 1, $exp_time = null
|
||||
|
||||
function smarty_core_rmdir($params, &$smarty)
|
||||
{
|
||||
if(!isset($params['level'])) { $params['level'] = 1; }
|
||||
if(!isset($params['exp_time'])) { $params['exp_time'] = null; }
|
||||
|
||||
if($_handle = @opendir($params['dirname'])) {
|
||||
|
||||
while (false !== ($_entry = readdir($_handle))) {
|
||||
if ($_entry != '.' && $_entry != '..') {
|
||||
if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) {
|
||||
$_params = array(
|
||||
'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry,
|
||||
'level' => $params['level'] + 1,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
smarty_core_rmdir($_params, $smarty);
|
||||
}
|
||||
else {
|
||||
$smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($_handle);
|
||||
}
|
||||
|
||||
if ($params['level']) {
|
||||
return @rmdir($params['dirname']);
|
||||
}
|
||||
return (bool)$_handle;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handle insert tags
|
||||
*
|
||||
* @param array $args
|
||||
* @return string
|
||||
*/
|
||||
function smarty_core_run_insert_handler($params, &$smarty)
|
||||
{
|
||||
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
if ($smarty->caching) {
|
||||
$_arg_string = serialize($params['args']);
|
||||
$_name = $params['args']['name'];
|
||||
if (!isset($smarty->_cache_info['insert_tags'][$_name])) {
|
||||
$smarty->_cache_info['insert_tags'][$_name] = array('insert',
|
||||
$_name,
|
||||
$smarty->_plugins['insert'][$_name][1],
|
||||
$smarty->_plugins['insert'][$_name][2],
|
||||
!empty($params['args']['script']) ? true : false);
|
||||
}
|
||||
return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5;
|
||||
} else {
|
||||
if (isset($params['args']['script'])) {
|
||||
$_params = array('resource_name' => $smarty->_dequote($params['args']['script']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
if(!smarty_core_get_php_resource($_params, $smarty)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($_params['resource_type'] == 'file') {
|
||||
$smarty->_include($_params['php_resource'], true);
|
||||
} else {
|
||||
$smarty->_eval($_params['php_resource']);
|
||||
}
|
||||
unset($params['args']['script']);
|
||||
}
|
||||
|
||||
$_funcname = $smarty->_plugins['insert'][$params['args']['name']][0];
|
||||
$_content = $_funcname($params['args'], $smarty);
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'insert',
|
||||
'filename' => 'insert_'.$params['args']['name'],
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time);
|
||||
}
|
||||
|
||||
if (!empty($params['args']["assign"])) {
|
||||
$smarty->assign($params['args']["assign"], $_content);
|
||||
} else {
|
||||
return $_content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* called for included php files within templates
|
||||
*
|
||||
* @param string $smarty_file
|
||||
* @param string $smarty_assign variable to assign the included template's
|
||||
* output into
|
||||
* @param boolean $smarty_once uses include_once if this is true
|
||||
* @param array $smarty_include_vars associative array of vars from
|
||||
* {include file="blah" var=$var}
|
||||
*/
|
||||
|
||||
// $file, $assign, $once, $_smarty_include_vars
|
||||
|
||||
function smarty_core_smarty_include_php($params, &$smarty)
|
||||
{
|
||||
$_params = array('resource_name' => $params['smarty_file']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
smarty_core_get_php_resource($_params, $smarty);
|
||||
$_smarty_resource_type = $_params['resource_type'];
|
||||
$_smarty_php_resource = $_params['php_resource'];
|
||||
|
||||
if (!empty($params['smarty_assign'])) {
|
||||
ob_start();
|
||||
if ($_smarty_resource_type == 'file') {
|
||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']);
|
||||
} else {
|
||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']);
|
||||
}
|
||||
$smarty->assign($params['smarty_assign'], ob_get_contents());
|
||||
ob_end_clean();
|
||||
} else {
|
||||
if ($_smarty_resource_type == 'file') {
|
||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']);
|
||||
} else {
|
||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Prepend the cache information to the cache file
|
||||
* and write it
|
||||
*
|
||||
* @param string $tpl_file
|
||||
* @param string $cache_id
|
||||
* @param string $compile_id
|
||||
* @param string $results
|
||||
* @return true|null
|
||||
*/
|
||||
|
||||
// $tpl_file, $cache_id, $compile_id, $results
|
||||
|
||||
function smarty_core_write_cache_file($params, &$smarty)
|
||||
{
|
||||
|
||||
// put timestamp in cache header
|
||||
$smarty->_cache_info['timestamp'] = time();
|
||||
if ($smarty->cache_lifetime > -1){
|
||||
// expiration set
|
||||
$smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime;
|
||||
} else {
|
||||
// cache will never expire
|
||||
$smarty->_cache_info['expires'] = -1;
|
||||
}
|
||||
|
||||
// collapse nocache.../nocache-tags
|
||||
if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) {
|
||||
// remove everything between every pair of outermost noache.../nocache-tags
|
||||
// and replace it by a single nocache-tag
|
||||
// this new nocache-tag will be replaced by dynamic contents in
|
||||
// smarty_core_process_compiled_includes() on a cache-read
|
||||
|
||||
$match_count = count($match[0]);
|
||||
$results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||
|
||||
$level = 0;
|
||||
$j = 0;
|
||||
for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) {
|
||||
if ($results[$i] == $match[0][$j]) {
|
||||
// nocache tag
|
||||
if ($match[1][$j]) { // closing tag
|
||||
$level--;
|
||||
unset($results[$i]);
|
||||
} else { // opening tag
|
||||
if ($level++ > 0) unset($results[$i]);
|
||||
}
|
||||
$j++;
|
||||
} elseif ($level > 0) {
|
||||
unset($results[$i]);
|
||||
}
|
||||
}
|
||||
$params['results'] = implode('', $results);
|
||||
}
|
||||
$smarty->_cache_info['cache_serials'] = $smarty->_cache_serials;
|
||||
|
||||
// prepend the cache header info into cache file
|
||||
$_cache_info = serialize($smarty->_cache_info);
|
||||
$params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results'];
|
||||
|
||||
if (!empty($smarty->cache_handler_func)) {
|
||||
// use cache_handler function
|
||||
call_user_func_array($smarty->cache_handler_func,
|
||||
array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null));
|
||||
} else {
|
||||
// use local cache file
|
||||
|
||||
if(!@is_writable($smarty->cache_dir)) {
|
||||
// cache_dir not writable, see if it exists
|
||||
if(!@is_dir($smarty->cache_dir)) {
|
||||
$smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
$smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
|
||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id);
|
||||
$_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true);
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Extract non-cacheable parts out of compiled template and write it
|
||||
*
|
||||
* @param string $compile_path
|
||||
* @param string $template_compiled
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
function smarty_core_write_compiled_include($params, &$smarty)
|
||||
{
|
||||
$_tag_start = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; endif;';
|
||||
$_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{/nocache\:(\\2)#(\\3)\}\'; endif;';
|
||||
|
||||
preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us',
|
||||
$params['compiled_content'], $_match_source, PREG_SET_ORDER);
|
||||
|
||||
// no nocache-parts found: done
|
||||
if (count($_match_source)==0) return;
|
||||
|
||||
// convert the matched php-code to functions
|
||||
$_include_compiled = "<?php /* Smarty version ".$smarty->_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n";
|
||||
$_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n";
|
||||
|
||||
$_compile_path = $params['include_file_path'];
|
||||
|
||||
$smarty->_cache_serials[$_compile_path] = $params['cache_serial'];
|
||||
$_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>";
|
||||
|
||||
$_include_compiled .= $params['plugins_code'];
|
||||
$_include_compiled .= "<?php";
|
||||
|
||||
$this_varname = ((double)phpversion() >= 5.0) ? '_smarty' : 'this';
|
||||
for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) {
|
||||
$_match =& $_match_source[$_i];
|
||||
$source = $_match[4];
|
||||
if ($this_varname == '_smarty') {
|
||||
/* rename $this to $_smarty in the sourcecode */
|
||||
$tokens = token_get_all('<?php ' . $_match[4]);
|
||||
|
||||
/* remove trailing <?php */
|
||||
$open_tag = '';
|
||||
while ($tokens) {
|
||||
$token = array_shift($tokens);
|
||||
if (is_array($token)) {
|
||||
$open_tag .= $token[1];
|
||||
} else {
|
||||
$open_tag .= $token;
|
||||
}
|
||||
if ($open_tag == '<?php ') break;
|
||||
}
|
||||
|
||||
for ($i=0, $count = count($tokens); $i < $count; $i++) {
|
||||
if (is_array($tokens[$i])) {
|
||||
if ($tokens[$i][0] == T_VARIABLE && $tokens[$i][1] == '$this') {
|
||||
$tokens[$i] = '$' . $this_varname;
|
||||
} else {
|
||||
$tokens[$i] = $tokens[$i][1];
|
||||
}
|
||||
}
|
||||
}
|
||||
$source = implode('', $tokens);
|
||||
}
|
||||
|
||||
/* add function to compiled include */
|
||||
$_include_compiled .= "
|
||||
function _smarty_tplfunc_$_match[2]_$_match[3](&\$$this_varname)
|
||||
{
|
||||
$source
|
||||
}
|
||||
|
||||
";
|
||||
}
|
||||
$_include_compiled .= "\n\n?>\n";
|
||||
|
||||
$_params = array('filename' => $_compile_path,
|
||||
'contents' => $_include_compiled, 'create_dirs' => true);
|
||||
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* write the compiled resource
|
||||
*
|
||||
* @param string $compile_path
|
||||
* @param string $compiled_content
|
||||
* @return true
|
||||
*/
|
||||
function smarty_core_write_compiled_resource($params, &$smarty)
|
||||
{
|
||||
if(!@is_writable($smarty->compile_dir)) {
|
||||
// compile_dir not writable, see if it exists
|
||||
if(!@is_dir($smarty->compile_dir)) {
|
||||
$smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
$smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
$_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true);
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* write out a file to disk
|
||||
*
|
||||
* @param string $filename
|
||||
* @param string $contents
|
||||
* @param boolean $create_dirs
|
||||
* @return boolean
|
||||
*/
|
||||
function smarty_core_write_file($params, &$smarty)
|
||||
{
|
||||
$_dirname = dirname($params['filename']);
|
||||
|
||||
if ($params['create_dirs']) {
|
||||
$_params = array('dir' => $_dirname);
|
||||
require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php');
|
||||
smarty_core_create_dir_structure($_params, $smarty);
|
||||
}
|
||||
|
||||
// write to tmp file, then rename it to avoid file locking race condition
|
||||
$_tmp_file = tempnam($_dirname, 'wrt');
|
||||
|
||||
if (!($fd = @fopen($_tmp_file, 'wb'))) {
|
||||
$_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt');
|
||||
if (!($fd = @fopen($_tmp_file, 'wb'))) {
|
||||
$smarty->trigger_error("problem writing temporary file '$_tmp_file'");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
fwrite($fd, $params['contents']);
|
||||
fclose($fd);
|
||||
|
||||
if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) {
|
||||
// On platforms and filesystems that cannot overwrite with rename()
|
||||
// delete the file before renaming it -- because windows always suffers
|
||||
// this, it is short-circuited to avoid the initial rename() attempt
|
||||
@unlink($params['filename']);
|
||||
@rename($_tmp_file, $params['filename']);
|
||||
}
|
||||
@chmod($params['filename'], $smarty->_file_perms);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {textformat}{/textformat} block plugin
|
||||
*
|
||||
* Type: block function<br>
|
||||
* Name: textformat<br>
|
||||
* Purpose: format text a certain way with preset styles
|
||||
* or custom wrap/indent settings<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat}
|
||||
* (Smarty online manual)
|
||||
* @param array
|
||||
* <pre>
|
||||
* Params: style: string (email)
|
||||
* indent: integer (0)
|
||||
* wrap: integer (80)
|
||||
* wrap_char string ("\n")
|
||||
* indent_char: string (" ")
|
||||
* wrap_boundary: boolean (true)
|
||||
* </pre>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string contents of the block
|
||||
* @param Smarty clever simulation of a method
|
||||
* @return string string $content re-formatted
|
||||
*/
|
||||
function smarty_block_textformat($params, $content, &$smarty)
|
||||
{
|
||||
if (is_null($content)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$style = null;
|
||||
$indent = 0;
|
||||
$indent_first = 0;
|
||||
$indent_char = ' ';
|
||||
$wrap = 80;
|
||||
$wrap_char = "\n";
|
||||
$wrap_cut = false;
|
||||
$assign = null;
|
||||
|
||||
foreach ($params as $_key => $_val) {
|
||||
switch ($_key) {
|
||||
case 'style':
|
||||
case 'indent_char':
|
||||
case 'wrap_char':
|
||||
case 'assign':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'indent':
|
||||
case 'indent_first':
|
||||
case 'wrap':
|
||||
$$_key = (int)$_val;
|
||||
break;
|
||||
|
||||
case 'wrap_cut':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("textformat: unknown attribute '$_key'");
|
||||
}
|
||||
}
|
||||
|
||||
if ($style == 'email') {
|
||||
$wrap = 72;
|
||||
}
|
||||
|
||||
// split into paragraphs
|
||||
$_paragraphs = preg_split('![\r\n][\r\n]!',$content);
|
||||
$_output = '';
|
||||
|
||||
for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) {
|
||||
if ($_paragraphs[$_x] == '') {
|
||||
continue;
|
||||
}
|
||||
// convert mult. spaces & special chars to single space
|
||||
$_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]);
|
||||
// indent first line
|
||||
if($indent_first > 0) {
|
||||
$_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x];
|
||||
}
|
||||
// wordwrap sentences
|
||||
$_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut);
|
||||
// indent lines
|
||||
if($indent > 0) {
|
||||
$_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]);
|
||||
}
|
||||
}
|
||||
$_output = implode($wrap_char . $wrap_char, $_paragraphs);
|
||||
|
||||
return $assign ? $smarty->assign($assign, $_output) : $_output;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {assign} compiler function plugin
|
||||
*
|
||||
* Type: compiler function<br>
|
||||
* Name: assign<br>
|
||||
* Purpose: assign a value to a template variable
|
||||
* @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com> (initial author)
|
||||
* @auther messju mohr <messju at lammfellpuschen dot de> (conversion to compiler function)
|
||||
* @param string containing var-attribute and value-attribute
|
||||
* @param Smarty_Compiler
|
||||
*/
|
||||
function smarty_compiler_assign($tag_attrs, &$compiler)
|
||||
{
|
||||
$_params = $compiler->_parse_attrs($tag_attrs);
|
||||
|
||||
if (!isset($_params['var'])) {
|
||||
$compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($_params['value'])) {
|
||||
$compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
return "\$this->assign({$_params['var']}, {$_params['value']});";
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {assign_debug_info} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: assign_debug_info<br>
|
||||
* Purpose: assign debug info to the template<br>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array unused in this plugin, this plugin uses {@link Smarty::$_config},
|
||||
* {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info}
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_assign_debug_info($params, &$smarty)
|
||||
{
|
||||
$assigned_vars = $smarty->_tpl_vars;
|
||||
ksort($assigned_vars);
|
||||
if (@is_array($smarty->_config[0])) {
|
||||
$config_vars = $smarty->_config[0];
|
||||
ksort($config_vars);
|
||||
$smarty->assign("_debug_config_keys", array_keys($config_vars));
|
||||
$smarty->assign("_debug_config_vals", array_values($config_vars));
|
||||
}
|
||||
|
||||
$included_templates = $smarty->_smarty_debug_info;
|
||||
|
||||
$smarty->assign("_debug_keys", array_keys($assigned_vars));
|
||||
$smarty->assign("_debug_vals", array_values($assigned_vars));
|
||||
|
||||
$smarty->assign("_debug_tpls", $included_templates);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {config_load} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: config_load<br>
|
||||
* Purpose: load config file vars
|
||||
* @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author messju mohr <messju at lammfellpuschen dot de> (added use of resources)
|
||||
* @param array Format:
|
||||
* <pre>
|
||||
* array('file' => required config file name,
|
||||
* 'section' => optional config file section to load
|
||||
* 'scope' => local/parent/global
|
||||
* 'global' => overrides scope, setting to parent if true)
|
||||
* </pre>
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_config_load($params, &$smarty)
|
||||
{
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
$_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null;
|
||||
$_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null;
|
||||
$_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global';
|
||||
$_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false;
|
||||
|
||||
if (!isset($_file) || strlen($_file) == 0) {
|
||||
$smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__);
|
||||
}
|
||||
|
||||
if (isset($_scope)) {
|
||||
if ($_scope != 'local' &&
|
||||
$_scope != 'parent' &&
|
||||
$_scope != 'global') {
|
||||
$smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__);
|
||||
}
|
||||
} else {
|
||||
if ($_global) {
|
||||
$_scope = 'parent';
|
||||
} else {
|
||||
$_scope = 'local';
|
||||
}
|
||||
}
|
||||
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
'get_source' => false);
|
||||
$smarty->_parse_resource_name($_params);
|
||||
$_file_path = $_params['resource_type'] . ':' . $_params['resource_name'];
|
||||
if (isset($_section))
|
||||
$_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section);
|
||||
else
|
||||
$_compile_file = $smarty->_get_compile_path($_file_path);
|
||||
|
||||
if($smarty->force_compile || !file_exists($_compile_file)) {
|
||||
$_compile = true;
|
||||
} elseif ($smarty->compile_check) {
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
'get_source' => false);
|
||||
$_compile = $smarty->_fetch_resource_info($_params) &&
|
||||
$_params['resource_timestamp'] > filemtime($_compile_file);
|
||||
} else {
|
||||
$_compile = false;
|
||||
}
|
||||
|
||||
if($_compile) {
|
||||
// compile config file
|
||||
if(!is_object($smarty->_conf_obj)) {
|
||||
require_once SMARTY_DIR . $smarty->config_class . '.class.php';
|
||||
$smarty->_conf_obj = new $smarty->config_class();
|
||||
$smarty->_conf_obj->overwrite = $smarty->config_overwrite;
|
||||
$smarty->_conf_obj->booleanize = $smarty->config_booleanize;
|
||||
$smarty->_conf_obj->read_hidden = $smarty->config_read_hidden;
|
||||
$smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines;
|
||||
}
|
||||
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
$_params['get_source'] = true);
|
||||
if (!$smarty->_fetch_resource_info($_params)) {
|
||||
return;
|
||||
}
|
||||
$smarty->_conf_obj->set_file_contents($_file, $_params['source_content']);
|
||||
$_config_vars = array_merge($smarty->_conf_obj->get($_file),
|
||||
$smarty->_conf_obj->get($_file, $_section));
|
||||
if(function_exists('var_export')) {
|
||||
$_output = '<?php $_config_vars = ' . var_export($_config_vars, true) . '; ?>';
|
||||
} else {
|
||||
$_output = '<?php $_config_vars = unserialize(\'' . strtr(serialize($_config_vars),array('\''=>'\\\'', '\\'=>'\\\\')) . '\'); ?>';
|
||||
}
|
||||
$_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php');
|
||||
smarty_core_write_compiled_resource($_params, $smarty);
|
||||
} else {
|
||||
include($_compile_file);
|
||||
}
|
||||
|
||||
if ($smarty->caching) {
|
||||
$smarty->_cache_info['config'][$_file] = true;
|
||||
}
|
||||
|
||||
$smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars);
|
||||
$smarty->_config[0]['files'][$_file] = true;
|
||||
|
||||
if ($_scope == 'parent') {
|
||||
$smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars);
|
||||
$smarty->_config[1]['files'][$_file] = true;
|
||||
} else if ($_scope == 'global') {
|
||||
for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) {
|
||||
$smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars);
|
||||
$smarty->_config[$i]['files'][$_file] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'config',
|
||||
'filename' => $_file.' ['.$_section.'] '.$_scope,
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {counter} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: counter<br>
|
||||
* Purpose: print out a counter value
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @link http://smarty.php.net/manual/en/language.function.counter.php {counter}
|
||||
* (Smarty online manual)
|
||||
* @param array parameters
|
||||
* @param Smarty
|
||||
* @return string|null
|
||||
*/
|
||||
function smarty_function_counter($params, &$smarty)
|
||||
{
|
||||
static $counters = array();
|
||||
|
||||
$name = (isset($params['name'])) ? $params['name'] : 'default';
|
||||
if (!isset($counters[$name])) {
|
||||
$counters[$name] = array(
|
||||
'start'=>1,
|
||||
'skip'=>1,
|
||||
'direction'=>'up',
|
||||
'count'=>1
|
||||
);
|
||||
}
|
||||
$counter =& $counters[$name];
|
||||
|
||||
if (isset($params['start'])) {
|
||||
$counter['start'] = $counter['count'] = (int)$params['start'];
|
||||
}
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$counter['assign'] = $params['assign'];
|
||||
}
|
||||
|
||||
if (isset($counter['assign'])) {
|
||||
$smarty->assign($counter['assign'], $counter['count']);
|
||||
}
|
||||
|
||||
if (isset($params['print'])) {
|
||||
$print = (bool)$params['print'];
|
||||
} else {
|
||||
$print = empty($counter['assign']);
|
||||
}
|
||||
|
||||
if ($print) {
|
||||
$retval = $counter['count'];
|
||||
} else {
|
||||
$retval = null;
|
||||
}
|
||||
|
||||
if (isset($params['skip'])) {
|
||||
$counter['skip'] = $params['skip'];
|
||||
}
|
||||
|
||||
if (isset($params['direction'])) {
|
||||
$counter['direction'] = $params['direction'];
|
||||
}
|
||||
|
||||
if ($counter['direction'] == "down")
|
||||
$counter['count'] -= $counter['skip'];
|
||||
else
|
||||
$counter['count'] += $counter['skip'];
|
||||
|
||||
return $retval;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {cycle} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: cycle<br>
|
||||
* Date: May 3, 2002<br>
|
||||
* Purpose: cycle through given values<br>
|
||||
* Input:
|
||||
* - name = name of cycle (optional)
|
||||
* - values = comma separated list of values to cycle,
|
||||
* or an array of values to cycle
|
||||
* (this can be left out for subsequent calls)
|
||||
* - reset = boolean - resets given var to true
|
||||
* - print = boolean - print var or not. default is true
|
||||
* - advance = boolean - whether or not to advance the cycle
|
||||
* - delimiter = the value delimiter, default is ","
|
||||
* - assign = boolean, assigns to template var instead of
|
||||
* printed.
|
||||
*
|
||||
* Examples:<br>
|
||||
* <pre>
|
||||
* {cycle values="#eeeeee,#d0d0d0d"}
|
||||
* {cycle name=row values="one,two,three" reset=true}
|
||||
* {cycle name=row}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credit to Mark Priatel <mpriatel@rogers.com>
|
||||
* @author credit to Gerard <gerard@interfold.com>
|
||||
* @author credit to Jason Sweat <jsweat_php@yahoo.com>
|
||||
* @version 1.3
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string|null
|
||||
*/
|
||||
function smarty_function_cycle($params, &$smarty)
|
||||
{
|
||||
static $cycle_vars;
|
||||
|
||||
$name = (empty($params['name'])) ? 'default' : $params['name'];
|
||||
$print = (isset($params['print'])) ? (bool)$params['print'] : true;
|
||||
$advance = (isset($params['advance'])) ? (bool)$params['advance'] : true;
|
||||
$reset = (isset($params['reset'])) ? (bool)$params['reset'] : false;
|
||||
|
||||
if (!in_array('values', array_keys($params))) {
|
||||
if(!isset($cycle_vars[$name]['values'])) {
|
||||
$smarty->trigger_error("cycle: missing 'values' parameter");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if(isset($cycle_vars[$name]['values'])
|
||||
&& $cycle_vars[$name]['values'] != $params['values'] ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
}
|
||||
$cycle_vars[$name]['values'] = $params['values'];
|
||||
}
|
||||
|
||||
$cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ',';
|
||||
|
||||
if(is_array($cycle_vars[$name]['values'])) {
|
||||
$cycle_array = $cycle_vars[$name]['values'];
|
||||
} else {
|
||||
$cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
|
||||
}
|
||||
|
||||
if(!isset($cycle_vars[$name]['index']) || $reset ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
}
|
||||
|
||||
if (isset($params['assign'])) {
|
||||
$print = false;
|
||||
$smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
|
||||
}
|
||||
|
||||
if($print) {
|
||||
$retval = $cycle_array[$cycle_vars[$name]['index']];
|
||||
} else {
|
||||
$retval = null;
|
||||
}
|
||||
|
||||
if($advance) {
|
||||
if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
} else {
|
||||
$cycle_vars[$name]['index']++;
|
||||
}
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {debug} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: debug<br>
|
||||
* Date: July 1, 2002<br>
|
||||
* Purpose: popup debug window
|
||||
* @link http://smarty.php.net/manual/en/language.function.debug.php {debug}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string output from {@link Smarty::_generate_debug_output()}
|
||||
*/
|
||||
function smarty_function_debug($params, &$smarty)
|
||||
{
|
||||
if (isset($params['output'])) {
|
||||
$smarty->assign('_smarty_debug_output', $params['output']);
|
||||
}
|
||||
require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php');
|
||||
return smarty_core_display_debug_console(null, $smarty);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {eval} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: eval<br>
|
||||
* Purpose: evaluate a template variable as a template<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.eval.php {eval}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_eval($params, &$smarty)
|
||||
{
|
||||
|
||||
if (!isset($params['var'])) {
|
||||
$smarty->trigger_error("eval: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if($params['var'] == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty->_compile_source('evaluated template', $params['var'], $_var_compiled);
|
||||
|
||||
ob_start();
|
||||
$smarty->_eval('?>' . $_var_compiled);
|
||||
$_contents = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_contents);
|
||||
} else {
|
||||
return $_contents;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,221 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {fetch} plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: fetch<br>
|
||||
* Purpose: fetch file, web or ftp data and display results
|
||||
* @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string|null if the assign parameter is passed, Smarty assigns the
|
||||
* result to a template variable
|
||||
*/
|
||||
function smarty_function_fetch($params, &$smarty)
|
||||
{
|
||||
if (empty($params['file'])) {
|
||||
$smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty");
|
||||
return;
|
||||
}
|
||||
|
||||
$content = '';
|
||||
if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) {
|
||||
$_params = array('resource_type' => 'file', 'resource_name' => $params['file']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
|
||||
if(!smarty_core_is_secure($_params, $smarty)) {
|
||||
$smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed');
|
||||
return;
|
||||
}
|
||||
|
||||
// fetch the file
|
||||
if($fp = @fopen($params['file'],'r')) {
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets ($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\'');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// not a local file
|
||||
if(preg_match('!^http://!i',$params['file'])) {
|
||||
// http fetch
|
||||
if($uri_parts = parse_url($params['file'])) {
|
||||
// set defaults
|
||||
$host = $server_name = $uri_parts['host'];
|
||||
$timeout = 30;
|
||||
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
|
||||
$agent = "Smarty Template Engine ".$smarty->_version;
|
||||
$referer = "";
|
||||
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
|
||||
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
|
||||
$_is_proxy = false;
|
||||
if(empty($uri_parts['port'])) {
|
||||
$port = 80;
|
||||
} else {
|
||||
$port = $uri_parts['port'];
|
||||
}
|
||||
if(!empty($uri_parts['user'])) {
|
||||
$user = $uri_parts['user'];
|
||||
}
|
||||
if(!empty($uri_parts['pass'])) {
|
||||
$pass = $uri_parts['pass'];
|
||||
}
|
||||
// loop through parameters, setup headers
|
||||
foreach($params as $param_key => $param_value) {
|
||||
switch($param_key) {
|
||||
case "file":
|
||||
case "assign":
|
||||
case "assign_headers":
|
||||
break;
|
||||
case "user":
|
||||
if(!empty($param_value)) {
|
||||
$user = $param_value;
|
||||
}
|
||||
break;
|
||||
case "pass":
|
||||
if(!empty($param_value)) {
|
||||
$pass = $param_value;
|
||||
}
|
||||
break;
|
||||
case "accept":
|
||||
if(!empty($param_value)) {
|
||||
$accept = $param_value;
|
||||
}
|
||||
break;
|
||||
case "header":
|
||||
if(!empty($param_value)) {
|
||||
if(!preg_match('![\w\d-]+: .+!',$param_value)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'");
|
||||
return;
|
||||
} else {
|
||||
$extra_headers[] = $param_value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "proxy_host":
|
||||
if(!empty($param_value)) {
|
||||
$proxy_host = $param_value;
|
||||
}
|
||||
break;
|
||||
case "proxy_port":
|
||||
if(!preg_match('!\D!', $param_value)) {
|
||||
$proxy_port = (int) $param_value;
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "agent":
|
||||
if(!empty($param_value)) {
|
||||
$agent = $param_value;
|
||||
}
|
||||
break;
|
||||
case "referer":
|
||||
if(!empty($param_value)) {
|
||||
$referer = $param_value;
|
||||
}
|
||||
break;
|
||||
case "timeout":
|
||||
if(!preg_match('!\D!', $param_value)) {
|
||||
$timeout = (int) $param_value;
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(!empty($proxy_host) && !empty($proxy_port)) {
|
||||
$_is_proxy = true;
|
||||
$fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
|
||||
} else {
|
||||
$fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
|
||||
}
|
||||
|
||||
if(!$fp) {
|
||||
$smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)");
|
||||
return;
|
||||
} else {
|
||||
if($_is_proxy) {
|
||||
fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
|
||||
} else {
|
||||
fputs($fp, "GET $uri HTTP/1.0\r\n");
|
||||
}
|
||||
if(!empty($host)) {
|
||||
fputs($fp, "Host: $host\r\n");
|
||||
}
|
||||
if(!empty($accept)) {
|
||||
fputs($fp, "Accept: $accept\r\n");
|
||||
}
|
||||
if(!empty($agent)) {
|
||||
fputs($fp, "User-Agent: $agent\r\n");
|
||||
}
|
||||
if(!empty($referer)) {
|
||||
fputs($fp, "Referer: $referer\r\n");
|
||||
}
|
||||
if(isset($extra_headers) && is_array($extra_headers)) {
|
||||
foreach($extra_headers as $curr_header) {
|
||||
fputs($fp, $curr_header."\r\n");
|
||||
}
|
||||
}
|
||||
if(!empty($user) && !empty($pass)) {
|
||||
fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
|
||||
}
|
||||
|
||||
fputs($fp, "\r\n");
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
$csplit = split("\r\n\r\n",$content,2);
|
||||
|
||||
$content = $csplit[1];
|
||||
|
||||
if(!empty($params['assign_headers'])) {
|
||||
$smarty->assign($params['assign_headers'],split("\r\n",$csplit[0]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// ftp fetch
|
||||
if($fp = @fopen($params['file'],'r')) {
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets ($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\'');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'],$content);
|
||||
} else {
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_checkboxes} function plugin
|
||||
*
|
||||
* File: function.html_checkboxes.php<br>
|
||||
* Type: function<br>
|
||||
* Name: html_checkboxes<br>
|
||||
* Date: 24.Feb.2003<br>
|
||||
* Purpose: Prints out a list of checkbox input types<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "checkbox"
|
||||
* - values (required) - array
|
||||
* - options (optional) - associative array
|
||||
* - checked (optional) - array default not set
|
||||
* - separator (optional) - ie <br> or
|
||||
* - output (optional) - the output next to each checkbox
|
||||
* - assign (optional) - assign the output as an array to this variable
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {html_checkboxes values=$ids output=$names}
|
||||
* {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
|
||||
* {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
* @author credits to Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_checkboxes($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = 'checkbox';
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = null;
|
||||
$separator = '';
|
||||
$labels = true;
|
||||
$output = null;
|
||||
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
case 'separator':
|
||||
$$_key = $_val;
|
||||
break;
|
||||
|
||||
case 'labels':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'checked':
|
||||
case 'selected':
|
||||
$selected = array_map('strval', array_values((array)$_val));
|
||||
break;
|
||||
|
||||
case 'checkboxes':
|
||||
$smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING);
|
||||
$options = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'assign':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
settype($selected, 'array');
|
||||
$_html_result = array();
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
|
||||
|
||||
|
||||
} else {
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_html_result);
|
||||
} else {
|
||||
return implode("\n",$_html_result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) {
|
||||
$_output = '';
|
||||
if ($labels) $_output .= '<label>';
|
||||
$_output .= '<input type="checkbox" name="'
|
||||
. smarty_function_escape_special_chars($name) . '[]" value="'
|
||||
. smarty_function_escape_special_chars($value) . '"';
|
||||
|
||||
if (in_array((string)$value, $selected)) {
|
||||
$_output .= ' checked="checked"';
|
||||
}
|
||||
$_output .= $extra . ' />' . $output;
|
||||
if ($labels) $_output .= '</label>';
|
||||
$_output .= $separator;
|
||||
|
||||
return $_output;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_image} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_image<br>
|
||||
* Date: Feb 24, 2003<br>
|
||||
* Purpose: format HTML tags for the image<br>
|
||||
* Input:<br>
|
||||
* - file = file (and path) of image (required)
|
||||
* - height = image height (optional, default actual height)
|
||||
* - width = image width (optional, default actual width)
|
||||
* - basedir = base directory for absolute paths, default
|
||||
* is environment variable DOCUMENT_ROOT
|
||||
* - path_prefix = prefix for path output (optional, default empty)
|
||||
*
|
||||
* Examples: {html_image file="/images/masthead.gif"}
|
||||
* Output: <img src="/images/masthead.gif" width=400 height=23>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credits to Duda <duda@big.hu> - wrote first image function
|
||||
* in repository, helped with lots of functionality
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_image($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$alt = '';
|
||||
$file = '';
|
||||
$height = '';
|
||||
$width = '';
|
||||
$extra = '';
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$path_prefix = '';
|
||||
$server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
|
||||
$basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : '';
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'file':
|
||||
case 'height':
|
||||
case 'width':
|
||||
case 'dpi':
|
||||
case 'path_prefix':
|
||||
case 'basedir':
|
||||
$$_key = $_val;
|
||||
break;
|
||||
|
||||
case 'alt':
|
||||
if(!is_array($_val)) {
|
||||
$$_key = smarty_function_escape_special_chars($_val);
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'link':
|
||||
case 'href':
|
||||
$prefix = '<a href="' . $_val . '">';
|
||||
$suffix = '</a>';
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($file)) {
|
||||
$smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (substr($file,0,1) == '/') {
|
||||
$_image_path = $basedir . $file;
|
||||
} else {
|
||||
$_image_path = $file;
|
||||
}
|
||||
|
||||
if(!isset($params['width']) || !isset($params['height'])) {
|
||||
if(!$_image_data = @getimagesize($_image_path)) {
|
||||
if(!file_exists($_image_path)) {
|
||||
$smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
|
||||
return;
|
||||
} else if(!is_readable($_image_path)) {
|
||||
$smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
|
||||
return;
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ($smarty->security &&
|
||||
($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) &&
|
||||
(require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) &&
|
||||
(!smarty_core_is_secure($_params, $smarty)) ) {
|
||||
$smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE);
|
||||
}
|
||||
|
||||
if(!isset($params['width'])) {
|
||||
$width = $_image_data[0];
|
||||
}
|
||||
if(!isset($params['height'])) {
|
||||
$height = $_image_data[1];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(isset($params['dpi'])) {
|
||||
if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) {
|
||||
$dpi_default = 72;
|
||||
} else {
|
||||
$dpi_default = 96;
|
||||
}
|
||||
$_resize = $dpi_default/$params['dpi'];
|
||||
$width = round($width * $_resize);
|
||||
$height = round($height * $_resize);
|
||||
}
|
||||
|
||||
return $prefix . '<img src="'.$path_prefix.$file.'" alt="'.$alt.'" width="'.$width.'" height="'.$height.'"'.$extra.' />' . $suffix;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_options} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_options<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "select"
|
||||
* - values (required if no options supplied) - array
|
||||
* - options (required if no values supplied) - associative array
|
||||
* - selected (optional) - string default not set
|
||||
* - output (required if not options supplied) - array
|
||||
* Purpose: Prints the list of <option> tags generated from
|
||||
* the passed parameters
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_options($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = null;
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = array();
|
||||
$output = null;
|
||||
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'selected':
|
||||
$$_key = array_map('strval', array_values((array)$_val));
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
$_html_result = '';
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
|
||||
|
||||
} else {
|
||||
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($name)) {
|
||||
$_html_result = '<select name="' . $name . '"' . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
|
||||
}
|
||||
|
||||
return $_html_result;
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_options_optoutput($key, $value, $selected) {
|
||||
if(!is_array($value)) {
|
||||
$_html_result = '<option label="' . smarty_function_escape_special_chars($value) . '" value="' .
|
||||
smarty_function_escape_special_chars($key) . '"';
|
||||
if (in_array((string)$key, $selected))
|
||||
$_html_result .= ' selected="selected"';
|
||||
$_html_result .= '>' . smarty_function_escape_special_chars($value) . '</option>' . "\n";
|
||||
} else {
|
||||
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected);
|
||||
}
|
||||
return $_html_result;
|
||||
}
|
||||
|
||||
function smarty_function_html_options_optgroup($key, $values, $selected) {
|
||||
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
|
||||
foreach ($values as $key => $value) {
|
||||
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected);
|
||||
}
|
||||
$optgroup_html .= "</optgroup>\n";
|
||||
return $optgroup_html;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_radios} function plugin
|
||||
*
|
||||
* File: function.html_radios.php<br>
|
||||
* Type: function<br>
|
||||
* Name: html_radios<br>
|
||||
* Date: 24.Feb.2003<br>
|
||||
* Purpose: Prints out a list of radio input types<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "radio"
|
||||
* - values (required) - array
|
||||
* - options (optional) - associative array
|
||||
* - checked (optional) - array default not set
|
||||
* - separator (optional) - ie <br> or
|
||||
* - output (optional) - the output next to each radio button
|
||||
* - assign (optional) - assign the output as an array to this variable
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {html_radios values=$ids output=$names}
|
||||
* {html_radios values=$ids name='box' separator='<br>' output=$names}
|
||||
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
* @author credits to Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_radios($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = 'radio';
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = null;
|
||||
$separator = '';
|
||||
$labels = true;
|
||||
$label_ids = false;
|
||||
$output = null;
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
case 'separator':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'checked':
|
||||
case 'selected':
|
||||
if(is_array($_val)) {
|
||||
$smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
|
||||
} else {
|
||||
$selected = (string)$_val;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'labels':
|
||||
case 'label_ids':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'radios':
|
||||
$smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING);
|
||||
$options = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'assign':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
$_html_result = array();
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
|
||||
|
||||
} else {
|
||||
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_html_result);
|
||||
} else {
|
||||
return implode("\n",$_html_result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids) {
|
||||
$_output = '';
|
||||
if ($labels) {
|
||||
if($label_ids) {
|
||||
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value));
|
||||
$_output .= '<label for="' . $_id . '">';
|
||||
} else {
|
||||
$_output .= '<label>';
|
||||
}
|
||||
}
|
||||
$_output .= '<input type="radio" name="'
|
||||
. smarty_function_escape_special_chars($name) . '" value="'
|
||||
. smarty_function_escape_special_chars($value) . '"';
|
||||
|
||||
if ($labels && $label_ids) $_output .= ' id="' . $_id . '"';
|
||||
|
||||
if ((string)$value==$selected) {
|
||||
$_output .= ' checked="checked"';
|
||||
}
|
||||
$_output .= $extra . ' />' . $output;
|
||||
if ($labels) $_output .= '</label>';
|
||||
$_output .= $separator;
|
||||
|
||||
return $_output;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,331 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {html_select_date} plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_select_date<br>
|
||||
* Purpose: Prints the dropdowns for date selection.
|
||||
*
|
||||
* ChangeLog:<br>
|
||||
* - 1.0 initial release
|
||||
* - 1.1 added support for +/- N syntax for begin
|
||||
* and end year values. (Monte)
|
||||
* - 1.2 added support for yyyy-mm-dd syntax for
|
||||
* time value. (Jan Rosier)
|
||||
* - 1.3 added support for choosing format for
|
||||
* month values (Gary Loescher)
|
||||
* - 1.3.1 added support for choosing format for
|
||||
* day values (Marcus Bointon)
|
||||
* - 1.3.2 support negative timestamps, force year
|
||||
* dropdown to include given date unless explicitly set (Monte)
|
||||
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
|
||||
* of 0000-00-00 dates (cybot, boots)
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
|
||||
* (Smarty online manual)
|
||||
* @version 1.3.4
|
||||
* @author Andrei Zmievski
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_select_date($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
|
||||
require_once $smarty->_get_plugin_filepath('function','html_options');
|
||||
/* Default values. */
|
||||
$prefix = "Date_";
|
||||
$start_year = strftime("%Y");
|
||||
$end_year = $start_year;
|
||||
$display_days = true;
|
||||
$display_months = true;
|
||||
$display_years = true;
|
||||
$month_format = "%B";
|
||||
/* Write months as numbers by default GL */
|
||||
$month_value_format = "%m";
|
||||
$day_format = "%02d";
|
||||
/* Write day values using this format MB */
|
||||
$day_value_format = "%d";
|
||||
$year_as_text = false;
|
||||
/* Display years in reverse order? Ie. 2000,1999,.... */
|
||||
$reverse_years = false;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Day]",
|
||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
|
||||
$field_array = null;
|
||||
/* <select size>'s of the different <select> tags.
|
||||
If not set, uses default dropdown. */
|
||||
$day_size = null;
|
||||
$month_size = null;
|
||||
$year_size = null;
|
||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags.
|
||||
An example might be in the template: all_extra ='class ="foo"'. */
|
||||
$all_extra = null;
|
||||
/* Separate attributes for the tags. */
|
||||
$day_extra = null;
|
||||
$month_extra = null;
|
||||
$year_extra = null;
|
||||
/* Order in which to display the fields.
|
||||
"D" -> day, "M" -> month, "Y" -> year. */
|
||||
$field_order = 'MDY';
|
||||
/* String printed between the different fields. */
|
||||
$field_separator = "\n";
|
||||
$time = time();
|
||||
$all_empty = null;
|
||||
$day_empty = null;
|
||||
$month_empty = null;
|
||||
$year_empty = null;
|
||||
$extra_attrs = '';
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'prefix':
|
||||
case 'time':
|
||||
case 'start_year':
|
||||
case 'end_year':
|
||||
case 'month_format':
|
||||
case 'day_format':
|
||||
case 'day_value_format':
|
||||
case 'field_array':
|
||||
case 'day_size':
|
||||
case 'month_size':
|
||||
case 'year_size':
|
||||
case 'all_extra':
|
||||
case 'day_extra':
|
||||
case 'month_extra':
|
||||
case 'year_extra':
|
||||
case 'field_order':
|
||||
case 'field_separator':
|
||||
case 'month_value_format':
|
||||
case 'month_empty':
|
||||
case 'day_empty':
|
||||
case 'year_empty':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'all_empty':
|
||||
$$_key = (string)$_value;
|
||||
$day_empty = $month_empty = $year_empty = $all_empty;
|
||||
break;
|
||||
|
||||
case 'display_days':
|
||||
case 'display_months':
|
||||
case 'display_years':
|
||||
case 'year_as_text':
|
||||
case 'reverse_years':
|
||||
$$_key = (bool)$_value;
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_value)) {
|
||||
$extra_attrs .= ' '.$_key.'="'.smarty_function_escape_special_chars($_value).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (preg_match('!^-\d+$!', $time)) {
|
||||
// negative timestamp, use date()
|
||||
$time = date('Y-m-d', $time);
|
||||
}
|
||||
// If $time is not in format yyyy-mm-dd
|
||||
if (preg_match('/^(\d{0,4}-\d{0,2}-\d{0,2})/', $time, $found)) {
|
||||
$time = $found[1];
|
||||
} else {
|
||||
// use smarty_make_timestamp to get an unix timestamp and
|
||||
// strftime to make yyyy-mm-dd
|
||||
$time = strftime('%Y-%m-%d', smarty_make_timestamp($time));
|
||||
}
|
||||
// Now split this in pieces, which later can be used to set the select
|
||||
$time = explode("-", $time);
|
||||
|
||||
// make syntax "+N" or "-N" work with start_year and end_year
|
||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
|
||||
if ($match[1] == '+') {
|
||||
$end_year = strftime('%Y') + $match[2];
|
||||
} else {
|
||||
$end_year = strftime('%Y') - $match[2];
|
||||
}
|
||||
}
|
||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) {
|
||||
if ($match[1] == '+') {
|
||||
$start_year = strftime('%Y') + $match[2];
|
||||
} else {
|
||||
$start_year = strftime('%Y') - $match[2];
|
||||
}
|
||||
}
|
||||
if (strlen($time[0]) > 0) {
|
||||
if ($start_year > $time[0] && !isset($params['start_year'])) {
|
||||
// force start year to include given date if not explicitly set
|
||||
$start_year = $time[0];
|
||||
}
|
||||
if($end_year < $time[0] && !isset($params['end_year'])) {
|
||||
// force end year to include given date if not explicitly set
|
||||
$end_year = $time[0];
|
||||
}
|
||||
}
|
||||
|
||||
$field_order = strtoupper($field_order);
|
||||
|
||||
$html_result = $month_result = $day_result = $year_result = "";
|
||||
|
||||
$field_separator_count = -1;
|
||||
if ($display_months) {
|
||||
$field_separator_count++;
|
||||
$month_names = array();
|
||||
$month_values = array();
|
||||
if(isset($month_empty)) {
|
||||
$month_names[''] = $month_empty;
|
||||
$month_values[''] = '';
|
||||
}
|
||||
for ($i = 1; $i <= 12; $i++) {
|
||||
$month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
$month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
}
|
||||
|
||||
$month_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
|
||||
} else {
|
||||
$month_result .= '"' . $prefix . 'Month"';
|
||||
}
|
||||
if (null !== $month_size){
|
||||
$month_result .= ' size="' . $month_size . '"';
|
||||
}
|
||||
if (null !== $month_extra){
|
||||
$month_result .= ' ' . $month_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$month_result .= ' ' . $all_extra;
|
||||
}
|
||||
$month_result .= $extra_attrs . '>'."\n";
|
||||
|
||||
$month_result .= smarty_function_html_options(array('output' => $month_names,
|
||||
'values' => $month_values,
|
||||
'selected' => (int)$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '',
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$month_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_days) {
|
||||
$field_separator_count++;
|
||||
$days = array();
|
||||
if (isset($day_empty)) {
|
||||
$days[''] = $day_empty;
|
||||
$day_values[''] = '';
|
||||
}
|
||||
for ($i = 1; $i <= 31; $i++) {
|
||||
$days[] = sprintf($day_format, $i);
|
||||
$day_values[] = sprintf($day_value_format, $i);
|
||||
}
|
||||
|
||||
$day_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
|
||||
} else {
|
||||
$day_result .= '"' . $prefix . 'Day"';
|
||||
}
|
||||
if (null !== $day_size){
|
||||
$day_result .= ' size="' . $day_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$day_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $day_extra){
|
||||
$day_result .= ' ' . $day_extra;
|
||||
}
|
||||
$day_result .= $extra_attrs . '>'."\n";
|
||||
$day_result .= smarty_function_html_options(array('output' => $days,
|
||||
'values' => $day_values,
|
||||
'selected' => $time[2],
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$day_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_years) {
|
||||
$field_separator_count++;
|
||||
if (null !== $field_array){
|
||||
$year_name = $field_array . '[' . $prefix . 'Year]';
|
||||
} else {
|
||||
$year_name = $prefix . 'Year';
|
||||
}
|
||||
if ($year_as_text) {
|
||||
$year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"';
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= ' />';
|
||||
} else {
|
||||
$years = range((int)$start_year, (int)$end_year);
|
||||
if ($reverse_years) {
|
||||
rsort($years, SORT_NUMERIC);
|
||||
} else {
|
||||
sort($years, SORT_NUMERIC);
|
||||
}
|
||||
$yearvals = $years;
|
||||
if(isset($year_empty)) {
|
||||
array_unshift($years, $year_empty);
|
||||
array_unshift($yearvals, '');
|
||||
}
|
||||
$year_result .= '<select name="' . $year_name . '"';
|
||||
if (null !== $year_size){
|
||||
$year_result .= ' size="' . $year_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= $extra_attrs . '>'."\n";
|
||||
$year_result .= smarty_function_html_options(array('output' => $years,
|
||||
'values' => $yearvals,
|
||||
'selected' => $time[0],
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$year_result .= '</select>';
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the field_order field
|
||||
for ($i = 0; $i <= 2; $i++){
|
||||
$c = substr($field_order, $i, 1);
|
||||
switch ($c){
|
||||
case 'D':
|
||||
$html_result .= $day_result;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
$html_result .= $month_result;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
$html_result .= $year_result;
|
||||
break;
|
||||
}
|
||||
// Add the field seperator
|
||||
if($i < $field_separator_count) {
|
||||
$html_result .= $field_separator;
|
||||
}
|
||||
}
|
||||
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_select_time} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_select_time<br>
|
||||
* Purpose: Prints the dropdowns for time selection
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time}
|
||||
* (Smarty online manual)
|
||||
* @author Roberto Berto <roberto@berto.net>
|
||||
* @credits Monte Ohrt <monte AT ohrt DOT com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_make_timestamp()
|
||||
*/
|
||||
function smarty_function_html_select_time($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
|
||||
require_once $smarty->_get_plugin_filepath('function','html_options');
|
||||
/* Default values. */
|
||||
$prefix = "Time_";
|
||||
$time = time();
|
||||
$display_hours = true;
|
||||
$display_minutes = true;
|
||||
$display_seconds = true;
|
||||
$display_meridian = true;
|
||||
$use_24_hours = true;
|
||||
$minute_interval = 1;
|
||||
$second_interval = 1;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Hour]",
|
||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]".
|
||||
Can be combined with prefix. */
|
||||
$field_array = null;
|
||||
$all_extra = null;
|
||||
$hour_extra = null;
|
||||
$minute_extra = null;
|
||||
$second_extra = null;
|
||||
$meridian_extra = null;
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'prefix':
|
||||
case 'time':
|
||||
case 'field_array':
|
||||
case 'all_extra':
|
||||
case 'hour_extra':
|
||||
case 'minute_extra':
|
||||
case 'second_extra':
|
||||
case 'meridian_extra':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'display_hours':
|
||||
case 'display_minutes':
|
||||
case 'display_seconds':
|
||||
case 'display_meridian':
|
||||
case 'use_24_hours':
|
||||
$$_key = (bool)$_value;
|
||||
break;
|
||||
|
||||
case 'minute_interval':
|
||||
case 'second_interval':
|
||||
$$_key = (int)$_value;
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
if ($display_hours) {
|
||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12);
|
||||
$hour_fmt = $use_24_hours ? '%H' : '%I';
|
||||
for ($i = 0, $for_max = count($hours); $i < $for_max; $i++)
|
||||
$hours[$i] = sprintf('%02d', $hours[$i]);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Hour"';
|
||||
}
|
||||
if (null !== $hour_extra){
|
||||
$html_result .= ' ' . $hour_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
$html_result .= smarty_function_html_options(array('output' => $hours,
|
||||
'values' => $hours,
|
||||
'selected' => strftime($hour_fmt, $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_minutes) {
|
||||
$all_minutes = range(0, 59);
|
||||
for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval)
|
||||
$minutes[] = sprintf('%02d', $all_minutes[$i]);
|
||||
$selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Minute"';
|
||||
}
|
||||
if (null !== $minute_extra){
|
||||
$html_result .= ' ' . $minute_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => $minutes,
|
||||
'values' => $minutes,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_seconds) {
|
||||
$all_seconds = range(0, 59);
|
||||
for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval)
|
||||
$seconds[] = sprintf('%02d', $all_seconds[$i]);
|
||||
$selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Second"';
|
||||
}
|
||||
|
||||
if (null !== $second_extra){
|
||||
$html_result .= ' ' . $second_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => $seconds,
|
||||
'values' => $seconds,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_meridian && !$use_24_hours) {
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Meridian"';
|
||||
}
|
||||
|
||||
if (null !== $meridian_extra){
|
||||
$html_result .= ' ' . $meridian_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'),
|
||||
'values' => array('am', 'pm'),
|
||||
'selected' => strtolower(strftime('%p', $time)),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_table} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_table<br>
|
||||
* Date: Feb 17, 2003<br>
|
||||
* Purpose: make an html table from an array of data<br>
|
||||
* Input:<br>
|
||||
* - loop = array to loop through
|
||||
* - cols = number of columns, comma separated list of column names
|
||||
* or array of column names
|
||||
* - rows = number of rows
|
||||
* - table_attr = table attributes
|
||||
* - th_attr = table heading attributes (arrays are cycled)
|
||||
* - tr_attr = table row attributes (arrays are cycled)
|
||||
* - td_attr = table cell attributes (arrays are cycled)
|
||||
* - trailpad = value to pad trailing cells with
|
||||
* - caption = text for caption element
|
||||
* - vdir = vertical direction (default: "down", means top-to-bottom)
|
||||
* - hdir = horizontal direction (default: "right", means left-to-right)
|
||||
* - inner = inner loop (default "cols": print $loop line by line,
|
||||
* $loop will be printed column by column otherwise)
|
||||
*
|
||||
*
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {table loop=$data}
|
||||
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
|
||||
* {table loop=$data cols="first,second,third" tr_attr=$colors}
|
||||
* </pre>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credit to Messju Mohr <messju at lammfellpuschen dot de>
|
||||
* @author credit to boots <boots dot smarty at yahoo dot com>
|
||||
* @version 1.1
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
|
||||
* (Smarty online manual)
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_table($params, &$smarty)
|
||||
{
|
||||
$table_attr = 'border="1"';
|
||||
$tr_attr = '';
|
||||
$th_attr = '';
|
||||
$td_attr = '';
|
||||
$cols = $cols_count = 3;
|
||||
$rows = 3;
|
||||
$trailpad = ' ';
|
||||
$vdir = 'down';
|
||||
$hdir = 'right';
|
||||
$inner = 'cols';
|
||||
$caption = '';
|
||||
|
||||
if (!isset($params['loop'])) {
|
||||
$smarty->trigger_error("html_table: missing 'loop' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'loop':
|
||||
$$_key = (array)$_value;
|
||||
break;
|
||||
|
||||
case 'cols':
|
||||
if (is_array($_value) && !empty($_value)) {
|
||||
$cols = $_value;
|
||||
$cols_count = count($_value);
|
||||
} elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
|
||||
$cols = explode(',', $_value);
|
||||
$cols_count = count($cols);
|
||||
} elseif (!empty($_value)) {
|
||||
$cols_count = (int)$_value;
|
||||
} else {
|
||||
$cols_count = $cols;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'rows':
|
||||
$$_key = (int)$_value;
|
||||
break;
|
||||
|
||||
case 'table_attr':
|
||||
case 'trailpad':
|
||||
case 'hdir':
|
||||
case 'vdir':
|
||||
case 'inner':
|
||||
case 'caption':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'tr_attr':
|
||||
case 'td_attr':
|
||||
case 'th_attr':
|
||||
$$_key = $_value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$loop_count = count($loop);
|
||||
if (empty($params['rows'])) {
|
||||
/* no rows specified */
|
||||
$rows = ceil($loop_count/$cols_count);
|
||||
} elseif (empty($params['cols'])) {
|
||||
if (!empty($params['rows'])) {
|
||||
/* no cols specified, but rows */
|
||||
$cols_count = ceil($loop_count/$rows);
|
||||
}
|
||||
}
|
||||
|
||||
$output = "<table $table_attr>\n";
|
||||
|
||||
if (!empty($caption)) {
|
||||
$output .= '<caption>' . $caption . "</caption>\n";
|
||||
}
|
||||
|
||||
if (is_array($cols)) {
|
||||
$cols = ($hdir == 'right') ? $cols : array_reverse($cols);
|
||||
$output .= "<thead><tr>\n";
|
||||
|
||||
for ($r=0; $r<$cols_count; $r++) {
|
||||
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
|
||||
$output .= $cols[$r];
|
||||
$output .= "</th>\n";
|
||||
}
|
||||
$output .= "</tr></thead>\n";
|
||||
}
|
||||
|
||||
$output .= "<tbody>\n";
|
||||
for ($r=0; $r<$rows; $r++) {
|
||||
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
|
||||
$rx = ($vdir == 'down') ? $r*$cols_count : ($rows-1-$r)*$cols_count;
|
||||
|
||||
for ($c=0; $c<$cols_count; $c++) {
|
||||
$x = ($hdir == 'right') ? $rx+$c : $rx+$cols_count-1-$c;
|
||||
if ($inner!='cols') {
|
||||
/* shuffle x to loop over rows*/
|
||||
$x = floor($x/$cols_count) + ($x%$cols_count)*$rows;
|
||||
}
|
||||
|
||||
if ($x<$loop_count) {
|
||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
|
||||
} else {
|
||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
|
||||
}
|
||||
}
|
||||
$output .= "</tr>\n";
|
||||
}
|
||||
$output .= "</tbody>\n";
|
||||
$output .= "</table>\n";
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function smarty_function_html_table_cycle($name, $var, $no) {
|
||||
if(!is_array($var)) {
|
||||
$ret = $var;
|
||||
} else {
|
||||
$ret = $var[$no % count($var)];
|
||||
}
|
||||
|
||||
return ($ret) ? ' '.$ret : '';
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {mailto} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: mailto<br>
|
||||
* Date: May 21, 2002
|
||||
* Purpose: automate mailto address link creation, and optionally
|
||||
* encode them.<br>
|
||||
* Input:<br>
|
||||
* - address = e-mail address
|
||||
* - text = (optional) text to display, default is address
|
||||
* - encode = (optional) can be one of:
|
||||
* * none : no encoding (default)
|
||||
* * javascript : encode with javascript
|
||||
* * javascript_charcode : encode with javascript charcode
|
||||
* * hex : encode with hexidecimal (no javascript)
|
||||
* - cc = (optional) address(es) to carbon copy
|
||||
* - bcc = (optional) address(es) to blind carbon copy
|
||||
* - subject = (optional) e-mail subject
|
||||
* - newsgroups = (optional) newsgroup(s) to post to
|
||||
* - followupto = (optional) address(es) to follow up to
|
||||
* - extra = (optional) extra tags for the href link
|
||||
*
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {mailto address="me@domain.com"}
|
||||
* {mailto address="me@domain.com" encode="javascript"}
|
||||
* {mailto address="me@domain.com" encode="hex"}
|
||||
* {mailto address="me@domain.com" subject="Hello to you!"}
|
||||
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
|
||||
* {mailto address="me@domain.com" extra='class="mailto"'}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
|
||||
* (Smarty online manual)
|
||||
* @version 1.2
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credits to Jason Sweat (added cc, bcc and subject functionality)
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_mailto($params, &$smarty)
|
||||
{
|
||||
$extra = '';
|
||||
|
||||
if (empty($params['address'])) {
|
||||
$smarty->trigger_error("mailto: missing 'address' parameter");
|
||||
return;
|
||||
} else {
|
||||
$address = $params['address'];
|
||||
}
|
||||
|
||||
$text = $address;
|
||||
|
||||
// netscape and mozilla do not decode %40 (@) in BCC field (bug?)
|
||||
// so, don't encode it.
|
||||
$search = array('%40', '%2C');
|
||||
$replace = array('@', ',');
|
||||
$mail_parms = array();
|
||||
foreach ($params as $var=>$value) {
|
||||
switch ($var) {
|
||||
case 'cc':
|
||||
case 'bcc':
|
||||
case 'followupto':
|
||||
if (!empty($value))
|
||||
$mail_parms[] = $var.'='.str_replace($search,$replace,rawurlencode($value));
|
||||
break;
|
||||
|
||||
case 'subject':
|
||||
case 'newsgroups':
|
||||
$mail_parms[] = $var.'='.rawurlencode($value);
|
||||
break;
|
||||
|
||||
case 'extra':
|
||||
case 'text':
|
||||
$$var = $value;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
$mail_parm_vals = '';
|
||||
for ($i=0; $i<count($mail_parms); $i++) {
|
||||
$mail_parm_vals .= (0==$i) ? '?' : '&';
|
||||
$mail_parm_vals .= $mail_parms[$i];
|
||||
}
|
||||
$address .= $mail_parm_vals;
|
||||
|
||||
$encode = (empty($params['encode'])) ? 'none' : $params['encode'];
|
||||
if (!in_array($encode,array('javascript','javascript_charcode','hex','none')) ) {
|
||||
$smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($encode == 'javascript' ) {
|
||||
$string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';
|
||||
|
||||
$js_encode = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$js_encode .= '%' . bin2hex($string[$x]);
|
||||
}
|
||||
|
||||
return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
|
||||
|
||||
} elseif ($encode == 'javascript_charcode' ) {
|
||||
$string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
|
||||
|
||||
for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
|
||||
$ord[] = ord($string[$x]);
|
||||
}
|
||||
|
||||
$_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
|
||||
$_ret .= "<!--\n";
|
||||
$_ret .= "{document.write(String.fromCharCode(";
|
||||
$_ret .= implode(',',$ord);
|
||||
$_ret .= "))";
|
||||
$_ret .= "}\n";
|
||||
$_ret .= "//-->\n";
|
||||
$_ret .= "</script>\n";
|
||||
|
||||
return $_ret;
|
||||
|
||||
|
||||
} elseif ($encode == 'hex') {
|
||||
|
||||
preg_match('!^(.*)(\?.*)$!',$address,$match);
|
||||
if(!empty($match[2])) {
|
||||
$smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
|
||||
return;
|
||||
}
|
||||
$address_encode = '';
|
||||
for ($x=0; $x < strlen($address); $x++) {
|
||||
if(preg_match('!\w!',$address[$x])) {
|
||||
$address_encode .= '%' . bin2hex($address[$x]);
|
||||
} else {
|
||||
$address_encode .= $address[$x];
|
||||
}
|
||||
}
|
||||
$text_encode = '';
|
||||
for ($x=0; $x < strlen($text); $x++) {
|
||||
$text_encode .= '&#x' . bin2hex($text[$x]).';';
|
||||
}
|
||||
|
||||
$mailto = "mailto:";
|
||||
return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
|
||||
|
||||
} else {
|
||||
// no encoding
|
||||
return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {math} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: math<br>
|
||||
* Purpose: handle math computations in template<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.math.php {math}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_math($params, &$smarty)
|
||||
{
|
||||
// be sure equation parameter is present
|
||||
if (empty($params['equation'])) {
|
||||
$smarty->trigger_error("math: missing equation parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$equation = $params['equation'];
|
||||
|
||||
// make sure parenthesis are balanced
|
||||
if (substr_count($equation,"(") != substr_count($equation,")")) {
|
||||
$smarty->trigger_error("math: unbalanced parenthesis");
|
||||
return;
|
||||
}
|
||||
|
||||
// match all vars in equation, make sure all are passed
|
||||
preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!",$equation, $match);
|
||||
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
|
||||
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
|
||||
|
||||
foreach($match[1] as $curr_var) {
|
||||
if ($curr_var && !in_array($curr_var, array_keys($params)) && !in_array($curr_var, $allowed_funcs)) {
|
||||
$smarty->trigger_error("math: function call $curr_var not allowed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($params as $key => $val) {
|
||||
if ($key != "equation" && $key != "format" && $key != "assign") {
|
||||
// make sure value is not empty
|
||||
if (strlen($val)==0) {
|
||||
$smarty->trigger_error("math: parameter $key is empty");
|
||||
return;
|
||||
}
|
||||
if (!is_numeric($val)) {
|
||||
$smarty->trigger_error("math: parameter $key: is not numeric");
|
||||
return;
|
||||
}
|
||||
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
|
||||
}
|
||||
}
|
||||
|
||||
eval("\$smarty_math_result = ".$equation.";");
|
||||
|
||||
if (empty($params['format'])) {
|
||||
if (empty($params['assign'])) {
|
||||
return $smarty_math_result;
|
||||
} else {
|
||||
$smarty->assign($params['assign'],$smarty_math_result);
|
||||
}
|
||||
} else {
|
||||
if (empty($params['assign'])){
|
||||
printf($params['format'],$smarty_math_result);
|
||||
} else {
|
||||
$smarty->assign($params['assign'],sprintf($params['format'],$smarty_math_result));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {popup} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: popup<br>
|
||||
* Purpose: make text pop up in windows via overlib
|
||||
* @link http://smarty.php.net/manual/en/language.function.popup.php {popup}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_popup($params, &$smarty)
|
||||
{
|
||||
$append = '';
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'text':
|
||||
case 'trigger':
|
||||
case 'function':
|
||||
case 'inarray':
|
||||
$$_key = (string)$_value;
|
||||
if ($_key == 'function' || $_key == 'inarray')
|
||||
$append .= ',' . strtoupper($_key) . ",'$_value'";
|
||||
break;
|
||||
|
||||
case 'caption':
|
||||
case 'closetext':
|
||||
case 'status':
|
||||
$append .= ',' . strtoupper($_key) . ",'" . str_replace("'","\'",$_value) . "'";
|
||||
break;
|
||||
|
||||
case 'fgcolor':
|
||||
case 'bgcolor':
|
||||
case 'textcolor':
|
||||
case 'capcolor':
|
||||
case 'closecolor':
|
||||
case 'textfont':
|
||||
case 'captionfont':
|
||||
case 'closefont':
|
||||
case 'fgbackground':
|
||||
case 'bgbackground':
|
||||
case 'caparray':
|
||||
case 'capicon':
|
||||
case 'background':
|
||||
case 'frame':
|
||||
$append .= ',' . strtoupper($_key) . ",'$_value'";
|
||||
break;
|
||||
|
||||
case 'textsize':
|
||||
case 'captionsize':
|
||||
case 'closesize':
|
||||
case 'width':
|
||||
case 'height':
|
||||
case 'border':
|
||||
case 'offsetx':
|
||||
case 'offsety':
|
||||
case 'snapx':
|
||||
case 'snapy':
|
||||
case 'fixx':
|
||||
case 'fixy':
|
||||
case 'padx':
|
||||
case 'pady':
|
||||
case 'timeout':
|
||||
case 'delay':
|
||||
$append .= ',' . strtoupper($_key) . ",$_value";
|
||||
break;
|
||||
|
||||
case 'sticky':
|
||||
case 'left':
|
||||
case 'right':
|
||||
case 'center':
|
||||
case 'above':
|
||||
case 'below':
|
||||
case 'noclose':
|
||||
case 'autostatus':
|
||||
case 'autostatuscap':
|
||||
case 'fullhtml':
|
||||
case 'hauto':
|
||||
case 'vauto':
|
||||
case 'mouseoff':
|
||||
case 'followmouse':
|
||||
case 'closeclick':
|
||||
if ($_value) $append .= ',' . strtoupper($_key);
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("[popup] unknown parameter $_key", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($text) && !isset($inarray) && empty($function)) {
|
||||
$smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($trigger)) { $trigger = "onmouseover"; }
|
||||
|
||||
$retval = $trigger . '="return overlib(\''.preg_replace(array("!'!","![\r\n]!"),array("\'",'\r'),$text).'\'';
|
||||
$retval .= $append . ');"';
|
||||
if ($trigger == 'onmouseover')
|
||||
$retval .= ' onmouseout="nd();"';
|
||||
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {popup_init} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: popup_init<br>
|
||||
* Purpose: initialize overlib
|
||||
* @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_popup_init($params, &$smarty)
|
||||
{
|
||||
$zindex = 1000;
|
||||
|
||||
if (!empty($params['zindex'])) {
|
||||
$zindex = $params['zindex'];
|
||||
}
|
||||
|
||||
if (!empty($params['src'])) {
|
||||
return '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:'.$zindex.';"></div>' . "\n"
|
||||
. '<script type="text/javascript" language="JavaScript" src="'.$params['src'].'"></script>' . "\n";
|
||||
} else {
|
||||
$smarty->trigger_error("popup_init: missing src parameter");
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty capitalize modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: capitalize<br>
|
||||
* Purpose: capitalize words in the string
|
||||
* @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE
|
||||
* capitalize (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_capitalize($string, $uc_digits = false)
|
||||
{
|
||||
smarty_modifier_capitalize_ucfirst(null, $uc_digits);
|
||||
return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'smarty_modifier_capitalize_ucfirst', $string);
|
||||
}
|
||||
|
||||
function smarty_modifier_capitalize_ucfirst($string, $uc_digits = null)
|
||||
{
|
||||
static $_uc_digits = false;
|
||||
|
||||
if(isset($uc_digits)) {
|
||||
$_uc_digits = $uc_digits;
|
||||
return;
|
||||
}
|
||||
|
||||
if(substr($string[0],0,1) != "'" && !preg_match("!\d!",$string[0]) || $_uc_digits)
|
||||
return ucfirst($string[0]);
|
||||
else
|
||||
return $string[0];
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty cat modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: cat<br>
|
||||
* Date: Feb 24, 2003
|
||||
* Purpose: catenate a value to a variable
|
||||
* Input: string to catenate
|
||||
* Example: {$var|cat:"foo"}
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_cat($string, $cat)
|
||||
{
|
||||
return $string . $cat;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_characters modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_characteres<br>
|
||||
* Purpose: count the number of characters in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.characters.php
|
||||
* count_characters (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param boolean include whitespace in the character count
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_characters($string, $include_spaces = false)
|
||||
{
|
||||
if ($include_spaces)
|
||||
return(strlen($string));
|
||||
|
||||
return preg_match_all("/[^\s]/",$string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_paragraphs modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_paragraphs<br>
|
||||
* Purpose: count the number of paragraphs in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
|
||||
* count_paragraphs (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_paragraphs($string)
|
||||
{
|
||||
// count \r or \n characters
|
||||
return count(preg_split('/[\r\n]+/', $string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_sentences modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_sentences
|
||||
* Purpose: count the number of sentences in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
|
||||
* count_sentences (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_sentences($string)
|
||||
{
|
||||
// find periods with a word before but not after.
|
||||
return preg_match_all('/[^\s]\.(?!\w)/', $string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_words modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_words<br>
|
||||
* Purpose: count the number of words in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.words.php
|
||||
* count_words (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_words($string)
|
||||
{
|
||||
// split text by ' ',\r,\n,\f,\t
|
||||
$split_array = preg_split('/\s+/',$string);
|
||||
// count matches that contain alphanumerics
|
||||
$word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array);
|
||||
|
||||
return count($word_count);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Include the {@link shared.make_timestamp.php} plugin
|
||||
*/
|
||||
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
|
||||
/**
|
||||
* Smarty date_format modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: date_format<br>
|
||||
* Purpose: format datestamps via strftime<br>
|
||||
* Input:<br>
|
||||
* - string: input date string
|
||||
* - format: strftime format for output
|
||||
* - default_date: default date if $string is empty
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.date.format.php
|
||||
* date_format (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string|void
|
||||
* @uses smarty_make_timestamp()
|
||||
*/
|
||||
function smarty_modifier_date_format($string, $format = '%b %e, %Y', $default_date = '')
|
||||
{
|
||||
if ($string != '') {
|
||||
$timestamp = smarty_make_timestamp($string);
|
||||
} elseif ($default_date != '') {
|
||||
$timestamp = smarty_make_timestamp($default_date);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
if (DIRECTORY_SEPARATOR == '\\') {
|
||||
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
|
||||
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
|
||||
if (strpos($format, '%e') !== false) {
|
||||
$_win_from[] = '%e';
|
||||
$_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
|
||||
}
|
||||
if (strpos($format, '%l') !== false) {
|
||||
$_win_from[] = '%l';
|
||||
$_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
|
||||
}
|
||||
$format = str_replace($_win_from, $_win_to, $format);
|
||||
}
|
||||
return strftime($format, $timestamp);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty debug_print_var modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: debug_print_var<br>
|
||||
* Purpose: formats variable contents for display in the console
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php
|
||||
* debug_print_var (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array|object
|
||||
* @param integer
|
||||
* @param integer
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
|
||||
{
|
||||
$_replace = array(
|
||||
"\n" => '<i>\n</i>',
|
||||
"\r" => '<i>\r</i>',
|
||||
"\t" => '<i>\t</i>'
|
||||
);
|
||||
|
||||
switch (gettype($var)) {
|
||||
case 'array' :
|
||||
$results = '<b>Array (' . count($var) . ')</b>';
|
||||
foreach ($var as $curr_key => $curr_val) {
|
||||
$results .= '<br>' . str_repeat(' ', $depth * 2)
|
||||
. '<b>' . strtr($curr_key, $_replace) . '</b> => '
|
||||
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
|
||||
$depth--;
|
||||
}
|
||||
break;
|
||||
case 'object' :
|
||||
$object_vars = get_object_vars($var);
|
||||
$results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
|
||||
foreach ($object_vars as $curr_key => $curr_val) {
|
||||
$results .= '<br>' . str_repeat(' ', $depth * 2)
|
||||
. '<b> ->' . strtr($curr_key, $_replace) . '</b> = '
|
||||
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
|
||||
$depth--;
|
||||
}
|
||||
break;
|
||||
case 'boolean' :
|
||||
case 'NULL' :
|
||||
case 'resource' :
|
||||
if (true === $var) {
|
||||
$results = 'true';
|
||||
} elseif (false === $var) {
|
||||
$results = 'false';
|
||||
} elseif (null === $var) {
|
||||
$results = 'null';
|
||||
} else {
|
||||
$results = htmlspecialchars((string) $var);
|
||||
}
|
||||
$results = '<i>' . $results . '</i>';
|
||||
break;
|
||||
case 'integer' :
|
||||
case 'float' :
|
||||
$results = htmlspecialchars((string) $var);
|
||||
break;
|
||||
case 'string' :
|
||||
$results = strtr($var, $_replace);
|
||||
if (strlen($var) > $length ) {
|
||||
$results = substr($var, 0, $length - 3) . '...';
|
||||
}
|
||||
$results = htmlspecialchars('"' . $results . '"');
|
||||
break;
|
||||
case 'unknown type' :
|
||||
default :
|
||||
$results = strtr((string) $var, $_replace);
|
||||
if (strlen($results) > $length ) {
|
||||
$results = substr($results, 0, $length - 3) . '...';
|
||||
}
|
||||
$results = htmlspecialchars($results);
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty default modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: default<br>
|
||||
* Purpose: designate default value for empty variables
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.default.php
|
||||
* default (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_default($string, $default = '')
|
||||
{
|
||||
if (!isset($string) || $string === '')
|
||||
return $default;
|
||||
else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty escape modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: escape<br>
|
||||
* Purpose: Escape the string according to escapement type
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.escape.php
|
||||
* escape (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param html|htmlall|url|quotes|hex|hexentity|javascript
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'UTF-8')
|
||||
{
|
||||
switch ($esc_type) {
|
||||
case 'html':
|
||||
return htmlspecialchars($string, ENT_QUOTES, $char_set);
|
||||
|
||||
case 'htmlall':
|
||||
return htmlentities($string, ENT_QUOTES, $char_set);
|
||||
|
||||
case 'url':
|
||||
return rawurlencode($string);
|
||||
|
||||
case 'urlpathinfo':
|
||||
return str_replace('%2F','/',rawurlencode($string));
|
||||
|
||||
case 'quotes':
|
||||
// escape unescaped single quotes
|
||||
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||
|
||||
case 'hex':
|
||||
// escape every character into hex
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '%' . bin2hex($string[$x]);
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'hexentity':
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '&#x' . bin2hex($string[$x]) . ';';
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'decentity':
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '&#' . ord($string[$x]) . ';';
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'javascript':
|
||||
// escape quotes and backslashes, newlines, etc.
|
||||
return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/'));
|
||||
|
||||
case 'mail':
|
||||
// safe way to display e-mail address on a web page
|
||||
return str_replace(array('@', '.'),array(' [AT] ', ' [DOT] '), $string);
|
||||
|
||||
case 'nonstd':
|
||||
// escape non-standard chars, such as ms document quotes
|
||||
$_res = '';
|
||||
for($_i = 0, $_len = strlen($string); $_i < $_len; $_i++) {
|
||||
$_ord = ord(substr($string, $_i, 1));
|
||||
// non-standard char, escape it
|
||||
if($_ord >= 126){
|
||||
$_res .= '&#' . $_ord . ';';
|
||||
}
|
||||
else {
|
||||
$_res .= substr($string, $_i, 1);
|
||||
}
|
||||
}
|
||||
return $_res;
|
||||
|
||||
default:
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty indent modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: indent<br>
|
||||
* Purpose: indent lines of text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.indent.php
|
||||
* indent (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param integer
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_indent($string,$chars=4,$char=" ")
|
||||
{
|
||||
return preg_replace('!^!m',str_repeat($char,$chars),$string);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty lower modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: lower<br>
|
||||
* Purpose: convert string to lowercase
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.lower.php
|
||||
* lower (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_lower($string)
|
||||
{
|
||||
return strtolower($string);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: nl2br<br>
|
||||
* Date: Feb 26, 2003
|
||||
* Purpose: convert \r\n, \r or \n to <<br>>
|
||||
* Input:<br>
|
||||
* - contents = contents to replace
|
||||
* - preceed_test = if true, includes preceeding break tags
|
||||
* in replacement
|
||||
* Example: {$text|nl2br}
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.nl2br.php
|
||||
* nl2br (Smarty online manual)
|
||||
* @version 1.0
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_nl2br($string)
|
||||
{
|
||||
return nl2br($string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty regex_replace modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: regex_replace<br>
|
||||
* Purpose: regular expression search/replace
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
|
||||
* regex_replace (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string|array
|
||||
* @param string|array
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_regex_replace($string, $search, $replace)
|
||||
{
|
||||
if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
|
||||
/* remove eval-modifier from $search */
|
||||
$search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
|
||||
}
|
||||
|
||||
return preg_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty replace modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: replace<br>
|
||||
* Purpose: simple search/replace
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.replace.php
|
||||
* replace (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_replace($string, $search, $replace)
|
||||
{
|
||||
return str_replace($search, $replace, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty spacify modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: spacify<br>
|
||||
* Purpose: add spaces between characters in a string
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.spacify.php
|
||||
* spacify (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_spacify($string, $spacify_char = ' ')
|
||||
{
|
||||
return implode($spacify_char,
|
||||
preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty string_format modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: string_format<br>
|
||||
* Purpose: format strings via sprintf
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.string.format.php
|
||||
* string_format (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_string_format($string, $format)
|
||||
{
|
||||
return sprintf($format, $string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty strip modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: strip<br>
|
||||
* Purpose: Replace all repeated spaces, newlines, tabs
|
||||
* with a single space or supplied replacement string.<br>
|
||||
* Example: {$var|strip} {$var|strip:" "}
|
||||
* Date: September 25th, 2002
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.strip.php
|
||||
* strip (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_strip($text, $replace = ' ')
|
||||
{
|
||||
return preg_replace('!\s+!', $replace, $text);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty strip_tags modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: strip_tags<br>
|
||||
* Purpose: strip html tags from text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php
|
||||
* strip_tags (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param boolean
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_strip_tags($string, $replace_with_space = true)
|
||||
{
|
||||
if ($replace_with_space)
|
||||
return preg_replace('!<[^>]*?>!', ' ', $string);
|
||||
else
|
||||
return strip_tags($string);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty truncate modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: truncate<br>
|
||||
* Purpose: Truncate a string to a certain length if necessary,
|
||||
* optionally splitting in the middle of a word, and
|
||||
* appending the $etc string or inserting $etc into the middle.
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php
|
||||
* truncate (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param integer
|
||||
* @param string
|
||||
* @param boolean
|
||||
* @param boolean
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
|
||||
$break_words = false, $middle = false)
|
||||
{
|
||||
if ($length == 0)
|
||||
return '';
|
||||
|
||||
if (strlen($string) > $length) {
|
||||
$length -= min($length, strlen($etc));
|
||||
if (!$break_words && !$middle) {
|
||||
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
|
||||
}
|
||||
if(!$middle) {
|
||||
return substr($string, 0, $length) . $etc;
|
||||
} else {
|
||||
return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
|
||||
}
|
||||
} else {
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty upper modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: upper<br>
|
||||
* Purpose: convert string to uppercase
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.upper.php
|
||||
* upper (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_upper($string)
|
||||
{
|
||||
return strtoupper($string);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty wordwrap modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: wordwrap<br>
|
||||
* Purpose: wrap a string of text at a given length
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php
|
||||
* wordwrap (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param integer
|
||||
* @param string
|
||||
* @param boolean
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_wordwrap($string,$length=80,$break="\n",$cut=false)
|
||||
{
|
||||
return wordwrap($string,$length,$break,$cut);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty trimwhitespace outputfilter plugin
|
||||
*
|
||||
* File: outputfilter.trimwhitespace.php<br>
|
||||
* Type: outputfilter<br>
|
||||
* Name: trimwhitespace<br>
|
||||
* Date: Jan 25, 2003<br>
|
||||
* Purpose: trim leading white space and blank lines from
|
||||
* template source after it gets interpreted, cleaning
|
||||
* up code and saving bandwidth. Does not affect
|
||||
* <<PRE>></PRE> and <SCRIPT></SCRIPT> blocks.<br>
|
||||
* Install: Drop into the plugin directory, call
|
||||
* <code>$smarty->load_filter('output','trimwhitespace');</code>
|
||||
* from application.
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author Contributions from Lars Noschinski <lars@usenet.noschinski.de>
|
||||
* @version 1.3
|
||||
* @param string
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_outputfilter_trimwhitespace($source, &$smarty)
|
||||
{
|
||||
// Pull out the script blocks
|
||||
preg_match_all("!<script[^>]+>.*?</script>!is", $source, $match);
|
||||
$_script_blocks = $match[0];
|
||||
$source = preg_replace("!<script[^>]+>.*?</script>!is",
|
||||
'@@@SMARTY:TRIM:SCRIPT@@@', $source);
|
||||
|
||||
// Pull out the pre blocks
|
||||
preg_match_all("!<pre>.*?</pre>!is", $source, $match);
|
||||
$_pre_blocks = $match[0];
|
||||
$source = preg_replace("!<pre>.*?</pre>!is",
|
||||
'@@@SMARTY:TRIM:PRE@@@', $source);
|
||||
|
||||
// Pull out the textarea blocks
|
||||
preg_match_all("!<textarea[^>]+>.*?</textarea>!is", $source, $match);
|
||||
$_textarea_blocks = $match[0];
|
||||
$source = preg_replace("!<textarea[^>]+>.*?</textarea>!is",
|
||||
'@@@SMARTY:TRIM:TEXTAREA@@@', $source);
|
||||
|
||||
// remove all leading spaces, tabs and carriage returns NOT
|
||||
// preceeded by a php close tag.
|
||||
$source = trim(preg_replace('/((?<!\?>)\n)[\s]+/m', '\1', $source));
|
||||
|
||||
// replace textarea blocks
|
||||
smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:TEXTAREA@@@",$_textarea_blocks, $source);
|
||||
|
||||
// replace pre blocks
|
||||
smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:PRE@@@",$_pre_blocks, $source);
|
||||
|
||||
// replace script blocks
|
||||
smarty_outputfilter_trimwhitespace_replace("@@@SMARTY:TRIM:SCRIPT@@@",$_script_blocks, $source);
|
||||
|
||||
return $source;
|
||||
}
|
||||
|
||||
function smarty_outputfilter_trimwhitespace_replace($search_str, $replace, &$subject) {
|
||||
$_len = strlen($search_str);
|
||||
$_pos = 0;
|
||||
for ($_i=0, $_count=count($replace); $_i<$_count; $_i++)
|
||||
if (($_pos=strpos($subject, $search_str, $_pos))!==false)
|
||||
$subject = substr_replace($subject, $replace[$_i], $_pos, $_len);
|
||||
else
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty shared plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* escape_special_chars common function
|
||||
*
|
||||
* Function: smarty_function_escape_special_chars<br>
|
||||
* Purpose: used by other smarty functions to escape
|
||||
* special chars except for already escaped ones
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_escape_special_chars($string)
|
||||
{
|
||||
if(!is_array($string)) {
|
||||
$string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
|
||||
$string = htmlspecialchars($string);
|
||||
$string = str_replace(array('%%%SMARTY_START%%%','%%%SMARTY_END%%%'), array('&',';'), $string);
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty shared plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Function: smarty_make_timestamp<br>
|
||||
* Purpose: used by other smarty functions to make a timestamp
|
||||
* from a string.
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_make_timestamp($string)
|
||||
{
|
||||
if(empty($string)) {
|
||||
// use "now":
|
||||
$time = time();
|
||||
|
||||
} elseif (preg_match('/^\d{14}$/', $string)) {
|
||||
// it is mysql timestamp format of YYYYMMDDHHMMSS?
|
||||
$time = mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
|
||||
substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
|
||||
|
||||
} elseif (is_numeric($string)) {
|
||||
// it is a numeric string, we handle it as timestamp
|
||||
$time = (int)$string;
|
||||
|
||||
} else {
|
||||
// strtotime should handle it
|
||||
$time = strtotime($string);
|
||||
if ($time == -1 || $time === false) {
|
||||
// strtotime() was not able to parse $string, use "now":
|
||||
$time = time();
|
||||
}
|
||||
}
|
||||
return $time;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,6 @@
|
||||
Feel free to put the smarty icon on your site.
|
||||
You can cut-and-paste the following code, be sure
|
||||
to adjust the path to the image:
|
||||
|
||||
<a href="http://smarty.php.net/">
|
||||
<img src="smarty_icon.gif" border="0" height="31" width="88" /></a>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,61 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<link rel="stylesheet" type="text/css" href="{$THEME_PATH}style.css">
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/general.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/{php} echo $_SESSION['authenticated_user_language'];{/php}.lang.js?{php} echo $_SESSION['vtiger_version'];{/php}"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="modules/{$MODULE}/{$MODULE}.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="include/scriptaculous/prototype.js"></script>
|
||||
|
||||
{include file='Buttons_List1.tpl'}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{*<!-- Contents -->*}
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=98% align=center>
|
||||
<tr>
|
||||
<td valign=top><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
|
||||
<td class="showPanelBg" valign="top" width=100% style="padding:10px;">
|
||||
<table width="100%" border="0" cellpadding="5" cellspacing="0">
|
||||
<tr>
|
||||
<td class="moduleName" style="padding-left:10px;">{$APP.LBL_ACCOUNT_HIERARCHY}</td>
|
||||
<td align="right"><input type="button" class="crmbutton small cancel" onclick="window.history.back();" value="{$APP.LBL_BACK}" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="ListViewContents">
|
||||
{foreach key=header item=detail from=$ACCOUNT_HIERARCHY}
|
||||
{if $header eq 'header'}
|
||||
<table border=0 cellspacing=1 cellpadding=3 width=100% style="background-color:#eaeaea;" class="small">
|
||||
<tr style="height:25px" bgcolor=white>
|
||||
{foreach key=header item=headerfields from=$detail}
|
||||
<td class="lvtCol">{$headerfields}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
{elseif $header eq 'entries'}
|
||||
{foreach key=header item=detail from=$detail}
|
||||
<tr bgcolor=white>
|
||||
{foreach key=header item=listfields from=$detail}
|
||||
<td>{$listfields}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign=top><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,699 @@
|
||||
{*<!--
|
||||
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
|
||||
-->*}
|
||||
<script type="text/javascript" src="modules/{$MODULE}/Calendar.js"></script>
|
||||
<script type="text/javascript" src="include/js/reflection.js"></script>
|
||||
<script src="include/scriptaculous/scriptaculous.js" type="text/javascript"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/dtlviewajax.js"></script>
|
||||
<span id="crmspanid" style="display:none;position:absolute;" onmouseover="show('crmspanid');">
|
||||
<a class="link" align="right" href="javascript:;">{$APP.LBL_EDIT_BUTTON}</a>
|
||||
</span>
|
||||
|
||||
<script>
|
||||
function tagvalidate()
|
||||
{ldelim}
|
||||
if(trim(document.getElementById('txtbox_tagfields').value) != '')
|
||||
SaveTag('txtbox_tagfields','{$ID}','{$MODULE}');
|
||||
else
|
||||
{ldelim}
|
||||
alert("{$APP.PLEASE_ENTER_TAG}");
|
||||
return false;
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
|
||||
{literal}
|
||||
function setCoOrdinate(elemId)
|
||||
{
|
||||
oBtnObj = document.getElementById(elemId);
|
||||
var tagName = document.getElementById('lstRecordLayout');
|
||||
leftpos = 0;
|
||||
toppos = 0;
|
||||
aTag = oBtnObj;
|
||||
do
|
||||
{
|
||||
leftpos += aTag.offsetLeft;
|
||||
toppos += aTag.offsetTop;
|
||||
} while(aTag = aTag.offsetParent);
|
||||
|
||||
tagName.style.top= toppos + 20 + 'px';
|
||||
tagName.style.left= leftpos - 276 + 'px';
|
||||
}
|
||||
|
||||
function getListOfRecords(obj, sModule, iId,sParentTab)
|
||||
{
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: 'module=Users&action=getListOfRecords&ajax=true&CurModule='+sModule+'&CurRecordId='+iId+'&CurParentTab='+sParentTab,
|
||||
onComplete: function(response) {
|
||||
sResponse = response.responseText;
|
||||
$("lstRecordLayout").innerHTML = sResponse;
|
||||
Lay = 'lstRecordLayout';
|
||||
var tagName = document.getElementById(Lay);
|
||||
var leftSide = findPosX(obj);
|
||||
var topSide = findPosY(obj);
|
||||
var maxW = tagName.style.width;
|
||||
var widthM = maxW.substring(0,maxW.length-2);
|
||||
var getVal = eval(leftSide) + eval(widthM);
|
||||
if(getVal > document.body.clientWidth ){
|
||||
leftSide = eval(leftSide) - eval(widthM);
|
||||
tagName.style.left = leftSide + 230 + 'px';
|
||||
}
|
||||
else
|
||||
tagName.style.left= leftSide + 388 + 'px';
|
||||
|
||||
setCoOrdinate(obj.id);
|
||||
|
||||
tagName.style.display = 'block';
|
||||
tagName.style.visibility = "visible";
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
{/literal}
|
||||
function DeleteTag(id,recordid)
|
||||
{ldelim}
|
||||
$("vtbusy_info").style.display="inline";
|
||||
Effect.Fade('tag_'+id);
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody: "file=TagCloud&module={$MODULE}&action={$MODULE}Ajax&ajxaction=DELETETAG&recordid="+recordid+"&tagid=" +id,
|
||||
onComplete: function(response) {ldelim}
|
||||
getTagCloud();
|
||||
$("vtbusy_info").style.display="none";
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
{rdelim}
|
||||
|
||||
</script>
|
||||
|
||||
<div id="lstRecordLayout" class="layerPopup" style="display:none;width:325px;height:300px;"></div> <!-- Code added by SAKTI on 17th Jun, 2008 -->
|
||||
|
||||
<table width="100%" cellpadding="2" cellspacing="0" border="0">
|
||||
<tr><td> </td>
|
||||
<td>
|
||||
<table cellpadding="0" cellspacing="5" border="0">
|
||||
</table>
|
||||
|
||||
<!-- Contents -->
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%" >
|
||||
<tr>
|
||||
<td style="border-bottom:1px dotted #cccccc">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<span class="lvtHeaderText"><font color="purple">[ {$ID} ] </font>{$NAME} - {$SINGLE_MOD} {$APP.LBL_INFORMATION}</span> <span class="small">{$UPDATEINFO}</span> <span id="vtbusy_info" style="display:none;" valign="bottom"><img src="{'vtbusy.gif'|@vtiger_imageurl:$THEME}" border="0"></span><span id="vtbusy_info" style="visibility:hidden;" valign="bottom"><img src="{'vtbusy.gif'|@vtiger_imageurl:$THEME}" border="0"></span>
|
||||
</td>
|
||||
<td align="right">
|
||||
{if $EDIT_DUPLICATE eq 'permitted'}
|
||||
<input title="{$APP.LBL_EDIT_BUTTON_TITLE}" accessKey="{$APP.LBL_EDIT_BUTTON_KEY}" class="crmbutton small edit" onclick="DetailView.return_module.value='{$MODULE}'; DetailView.return_action.value='DetailView'; DetailView.return_id.value='{$ID}';DetailView.module.value='{$MODULE}'; submitFormForAction('DetailView','EditView');" type="button" name="Edit" value=" {$APP.LBL_EDIT_BUTTON_LABEL} ">
|
||||
{/if}
|
||||
|
||||
{if $EDIT_DUPLICATE eq 'permitted'}
|
||||
<input title="{$APP.LBL_DUPLICATE_BUTTON_TITLE}" accessKey="{$APP.LBL_DUPLICATE_BUTTON_KEY}" class="crmbutton small create" onclick="DetailView.return_module.value='{$MODULE}'; DetailView.return_action.value='DetailView'; DetailView.isDuplicate.value='true';DetailView.module.value='{$MODULE}'; submitFormForAction('DetailView','EditView');" type="button" name="Duplicate" value="{$APP.LBL_DUPLICATE_BUTTON_LABEL}">
|
||||
{/if}
|
||||
|
||||
{if $DELETE eq 'permitted'}
|
||||
<input title="{$APP.LBL_DELETE_BUTTON_TITLE}" accessKey="{$APP.LBL_DELETE_BUTTON_KEY}" class="crmbutton small delete" onclick="DetailView.return_module.value='{$MODULE}'; {if $VIEWTYPE eq 'calendar'} DetailView.return_action.value='index'; {else} DetailView.return_action.value='ListView'; {/if} submitFormForActionWithConfirmation('DetailView', 'Delete', '{$APP.NTC_DELETE_CONFIRMATION}');" type="button" name="Delete" value="{$APP.LBL_DELETE_BUTTON_LABEL}">
|
||||
{/if}
|
||||
|
||||
{if $privrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_PREVIOUS}" accessKey="{$APP.LNK_LIST_PREVIOUS}" onclick="location.href='index.php?module={$MODULE}&viewtype={$VIEWTYPE}&action=DetailView&record={$privrecord}&parenttab={$CATEGORY}'" name="privrecord" value="{$APP.LNK_LIST_PREVIOUS}" src="{'rec_prev.gif'|@vtiger_imageurl:$THEME}">
|
||||
{else}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_PREVIOUS}" src="{'rec_prev_disabled.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
|
||||
{if $privrecord neq '' || $nextrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LBL_JUMP_BTN}" accessKey="{$APP.LBL_JUMP_BTN}" onclick="var obj = this;var lhref = getListOfRecords(obj, '{$MODULE}',{$ID},'{$CATEGORY}');" name="jumpBtnIdTop" id="jumpBtnIdTop" src="{'rec_jump.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
|
||||
{if $nextrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_NEXT}" accessKey="{$APP.LNK_LIST_NEXT}" onclick="location.href='index.php?module={$MODULE}&viewtype={$VIEWTYPE}&action=DetailView&record={$nextrecord}&parenttab={$CATEGORY}'" name="nextrecord" src="{'rec_next.gif'|@vtiger_imageurl:$THEME}">
|
||||
{else}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_NEXT}" src="{'rec_next_disabled.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td valign=top align=left >
|
||||
<table border=0 cellspacing=0 cellpadding=3 width=100%>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<form action="index.php" method="post" name="DetailView" id="form" onsubmit="VtigerJS_DialogBox.block();">
|
||||
{include file='DetailViewHidden.tpl'}
|
||||
<!-- content cache -->
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100%>
|
||||
<tr>
|
||||
<td style="padding:3px">
|
||||
<!-- General details -->
|
||||
{foreach key=header item=detail from=$BLOCKS}
|
||||
{if $header neq $APP.LBL_CUSTOM_INFORMATION}
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="small">
|
||||
<tr>{strip}
|
||||
<td colspan=4 class="tableHeading">
|
||||
<b>{$header}</b>
|
||||
</td>{/strip}
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{if $ACTIVITYDATA.activitytype neq 'Task'}
|
||||
<!-- display of fields starts -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
{if $LABEL.activitytype neq ''}
|
||||
{assign var=type value=$ACTIVITYDATA.activitytype}
|
||||
<td class="cellLabel" width="20%" align="right"><b>{$MOD.LBL_EVENTTYPE}</b></td>
|
||||
<td class="cellInfo" width="30%"align="left">{$type}</td>
|
||||
{/if}
|
||||
{if $LABEL.visibility neq ''}
|
||||
{assign var=vblty value=$ACTIVITYDATA.visibility}
|
||||
<td class="cellLabel" width="20%" align="right"><b>{$LABEL.visibility}</b></td>
|
||||
<td class="cellInfo" width="30%" align="left" >{$vblty}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="cellLabel" align="right"><b>{$MOD.LBL_EVENTNAME}</b></td>
|
||||
<td class="cellInfo" colspan=3 align="left" >{$ACTIVITYDATA.subject}</td>
|
||||
</tr>
|
||||
{if $LABEL.description neq ''}
|
||||
<tr>
|
||||
<td class="cellLabel" align="right" nowrap valign="top"><b>{$LABEL.description}</b></td>
|
||||
<td class="cellInfo" valign="top" align="left" colspan="3" height="60px">{$ACTIVITYDATA.description} </td>
|
||||
</tr>
|
||||
{/if}
|
||||
{if $LABEL.location neq ''}
|
||||
<tr>
|
||||
<td class="cellLabel" align="right" valign="top"><b>{$LABEL.location}</b></td>
|
||||
<td class="cellInfo" colspan=3 align="left" >{$ACTIVITYDATA.location} </td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
{if $LABEL.eventstatus neq ''}
|
||||
<td class="cellLabel" align="right" nowrap valign="top"><b>{$LABEL.eventstatus}</b></td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">
|
||||
{if $ACTIVITYDATA.eventstatus eq $APP.LBL_NOT_ACCESSIBLE}
|
||||
<font color="red">{$ACTIVITYDATA.eventstatus}</font>
|
||||
{else}
|
||||
{$ACTIVITYDATA.eventstatus}
|
||||
{/if}
|
||||
</td>
|
||||
{/if}
|
||||
{if $LABEL.assigned_user_id neq ''}
|
||||
<td class="cellLabel" align="right" nowrap valign="top"><b>{$LABEL.assigned_user_id}</b></td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">{$ACTIVITYDATA.assigned_user_id}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{if $LABEL.taskpriority neq '' || $LABEL.sendnotification neq ''}
|
||||
<tr>
|
||||
{if $LABEL.taskpriority neq ''}
|
||||
<td class="cellLabel" align="right" nowrap valign="top"><b>{$LABEL.taskpriority}</b></td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">
|
||||
{if $ACTIVITYDATA.taskpriority eq $APP.LBL_NOT_ACCESSIBLE}
|
||||
<font color="red" >{$ACTIVITYDATA.taskpriority}</font>
|
||||
{else}
|
||||
{$ACTIVITYDATA.taskpriority}
|
||||
{/if}
|
||||
</td>
|
||||
{/if}
|
||||
{if $LABEL.sendnotification neq ''}
|
||||
<td class="cellLabel" align="right" nowrap valign="top"><b>{$LABEL.sendnotification}</b></td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">{$ACTIVITYDATA.sendnotification}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/if}
|
||||
{if $LABEL.createdtime neq '' || $LABEL.modifiedtime neq ''}
|
||||
<tr>
|
||||
<td class="cellLabel" align="right" nowrap valign="top"align="right">{if $LABEL.createdtime neq ''}<b>{$LABEL.createdtime}</b>{/if}</td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">{if $LABEL.createdtime neq ''}{$ACTIVITYDATA.createdtime}{/if}</td>
|
||||
<td class="cellLabel" align="right" nowrap valign="top"align="right">{if $LABEL.modifiedtime neq ''}<b>{$LABEL.modifiedtime}</b>{/if}</td>
|
||||
<td class="cellInfo" align="left" nowrap valign="top">{if $LABEL.modifiedtime neq ''}{$ACTIVITYDATA.modifiedtime}{/if}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
<table border=0 cellspacing=1 cellpadding=0 width=100%>
|
||||
<tr><td width=50% valign=top >
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100%>
|
||||
<tr><td class="mailSubHeader"><b>{$MOD.LBL_EVENTSTAT}</b></td></tr>
|
||||
<tr><td class=small>{$ACTIVITYDATA.starthr}:{$ACTIVITYDATA.startmin}{$ACTIVITYDATA.startfmt}</td></tr>
|
||||
<tr><td class=small>{$ACTIVITYDATA.date_start}</td></tr>
|
||||
</table></td>
|
||||
<td width=50% valign=top >
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100%>
|
||||
<tr><td class="mailSubHeader"><b>{$MOD.LBL_EVENTEDAT}</b></td></tr>
|
||||
<tr><td class=small>{$ACTIVITYDATA.endhr}:{$ACTIVITYDATA.endmin}{$ACTIVITYDATA.endfmt}</td></tr>
|
||||
<tr><td class=small>{$ACTIVITYDATA.due_date}</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
{if $CUSTOM_FIELDS_DATA|@count > 0}
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>{strip}
|
||||
<td colspan=4 class="tableHeading">
|
||||
<b>{$APP.LBL_CUSTOM_INFORMATION}</b>
|
||||
</td>{/strip}
|
||||
</tr>
|
||||
<tr>
|
||||
{foreach key=index item=custom_field from=$CUSTOM_FIELDS_DATA}
|
||||
{assign var=keyid value=$custom_field.2}
|
||||
{assign var=keyval value=$custom_field.1}
|
||||
{assign var=keyfldname value=$custom_field.0}
|
||||
{assign var=keyoptions value=$custom_field.options}
|
||||
<td class="cellLabel" align="right" width="20%"><b>{$keyfldname}</b></td>
|
||||
{include file="DetailViewFields.tpl"}
|
||||
{if ($index+1)% 2 == 0}
|
||||
</tr><tr>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{if ($index+1)% 2 != 0}
|
||||
<td width="20%"></td><td width="30%"></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% align=center>
|
||||
<tr>
|
||||
<td>
|
||||
<table border=0 cellspacing=0 cellpadding=3 width=100%>
|
||||
<tr>
|
||||
<td class="dvtTabCache" style="width:10px" nowrap> </td>
|
||||
<td id="cellTabInvite" class="dvtSelectedCell" align=center nowrap><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','on');switchClass('cellTabAlarm','off');switchClass('cellTabRepeat','off');switchClass('cellTabRelatedto','off');ghide('addEventAlarmUI');dispLayer('addEventInviteUI');ghide('addEventRepeatUI');ghide('addEventRelatedtoUI');">{$MOD.LBL_INVITE}</a></td>
|
||||
<td class="dvtTabCache" style="width:10px"> </td>
|
||||
{if $LABEL.reminder_time neq ''}
|
||||
<td id="cellTabAlarm" class="dvtUnSelectedCell" align=center nowrap><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','off');switchClass('cellTabAlarm','on');switchClass('cellTabRepeat','off');switchClass('cellTabRelatedto','off');dispLayer('addEventAlarmUI');ghide('addEventInviteUI');ghide('addEventRepeatUI');ghide('addEventRelatedtoUI');">{$MOD.LBL_REMINDER}</a></td>
|
||||
{/if}
|
||||
<td class="dvtTabCache" style="width:10px"> </td>
|
||||
{if $LABEL.recurringtype neq ''}
|
||||
<td id="cellTabRepeat" class="dvtUnSelectedCell" align=center nowrap><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','off');switchClass('cellTabAlarm','off');switchClass('cellTabRepeat','on');switchClass('cellTabRelatedto','off');ghide('addEventAlarmUI');ghide('addEventInviteUI');dispLayer('addEventRepeatUI');ghide('addEventRelatedtoUI');">{$MOD.LBL_REPEAT}</a></td>
|
||||
{/if}
|
||||
<td class="dvtTabCache" style="width:10px"> </td>
|
||||
<td id="cellTabRelatedto" class="dvtUnSelectedCell" align=center nowrap><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','off');switchClass('cellTabAlarm','off');switchClass('cellTabRepeat','off');switchClass('cellTabRelatedto','on');ghide('addEventAlarmUI');ghide('addEventInviteUI');dispLayer('addEventRelatedtoUI');ghide('addEventRepeatUI');">{$MOD.LBL_LIST_RELATED_TO}</a></td>
|
||||
<td class="dvtTabCache" style="width:100%"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width=100% valign=top align=left class="dvtContentSpace" style="padding:10px;height:120px">
|
||||
<!-- Invite UI -->
|
||||
<DIV id="addEventInviteUI" style="display:block;width:100%">
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td width="30%" valign="top" align=right><b>{$MOD.LBL_USERS}</b></td>
|
||||
<td width="70%" align=left valign="top" >
|
||||
{foreach item=username key=userid from=$INVITEDUSERS}
|
||||
{$username}<br>
|
||||
{/foreach}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</DIV>
|
||||
<!-- Reminder UI -->
|
||||
<DIV id="addEventAlarmUI" style="display:none;width:100%">
|
||||
{if $LABEL.reminder_time != ''}
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td width="30%" align=right><b>{$MOD.LBL_SENDREMINDER}</b></td>
|
||||
<td width="70%" align=left>{$ACTIVITYDATA.set_reminder}</td>
|
||||
</tr>
|
||||
{if $ACTIVITYDATA.set_reminder != 'No'}
|
||||
<tr>
|
||||
<td width="30%" align=right><b>{$MOD.LBL_RMD_ON}</b></td>
|
||||
<td width="70%" align=left>{$ACTIVITYDATA.reminder_str}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
{/if}
|
||||
</DIV>
|
||||
<!-- Repeat UI -->
|
||||
<div id="addEventRepeatUI" style="display:none;width:100%">
|
||||
{if $LABEL.recurringtype neq ''}
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td width="30%" align=right><b>{$MOD.LBL_ENABLE_REPEAT}</b></td>
|
||||
<td width="70%" align=left>{$ACTIVITYDATA.recurringcheck}</td>
|
||||
</tr>
|
||||
{if $ACTIVITYDATA.recurringcheck != 'No'}
|
||||
<tr>
|
||||
<td width="30%" align=right> </td>
|
||||
<td>{$MOD.LBL_REPEATEVENT} {$ACTIVITYDATA.repeat_frequency} {$MOD[$ACTIVITYDATA.recurringtype]}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="30%" align=right> </td>
|
||||
<td>{$ACTIVITYDATA.repeat_str}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
<!-- Relatedto UI -->
|
||||
<div id="addEventRelatedtoUI" style="display:none;width:100%">
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
{if $LABEL.parent_id neq ''}
|
||||
<tr>
|
||||
<td width="30%" align=right valign="top"><b>{$LABEL.parent_id}</b></td>
|
||||
<td width="70%" align=left valign="top">{$ACTIVITYDATA.parent_name}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td width="30%" valign="top" align=right><b>{$MOD.LBL_CONTACT_NAME}</b></td>
|
||||
<td width="70%" valign="top" align=left>
|
||||
{foreach item=contactname key=cntid from=$CONTACTS}
|
||||
{$contactname.0}
|
||||
{if $IS_PERMITTED_CNT_FNAME == '0'}
|
||||
{$contactname.1}
|
||||
{/if}
|
||||
<br>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{else}
|
||||
<!-- detailed view of a ToDo -->
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="cellLabel" width="20%" align="right"><b>{$MOD.LBL_TODO}</b></td>
|
||||
<td class="cellInfo" width="80%" align="left">{$ACTIVITYDATA.subject}</td>
|
||||
</tr>
|
||||
{if $LABEL.description neq ''}
|
||||
<tr>
|
||||
<td class="cellLabel" align="right" valign="top"><b>{$LABEL.description}</b></td>
|
||||
<td class="cellInfo" align="left" colspan="3" valign="top" height="60px">{$ACTIVITYDATA.description} </td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td colspan="2" align="center" style="padding:0px">
|
||||
<table border="0" cellpadding="5" cellspacing="1" width="100%" >
|
||||
<tr>
|
||||
{if $LABEL.taskstatus neq ''}
|
||||
<td class="cellLabel" width=33% align="left"><b>{$LABEL.taskstatus}</b></td>
|
||||
{/if}
|
||||
{if $LABEL.taskpriority neq ''}
|
||||
<td class="cellLabel" width=33% align="left"><b>{$LABEL.taskpriority}</b></td>
|
||||
{/if}
|
||||
<td class="cellLabel" width=34% align="left"><b>{$LABEL.assigned_user_id}</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
{if $LABEL.taskstatus neq ''}
|
||||
<td class="cellInfo" align="left" valign="top">
|
||||
{if $ACTIVITYDATA.taskstatus eq $APP.LBL_NOT_ACCESSIBLE}
|
||||
<font color="red">{$ACTIVITYDATA.taskstatus}</font>
|
||||
{else} {$ACTIVITYDATA.taskstatus}{/if}
|
||||
</td>
|
||||
{/if}
|
||||
{if $LABEL.taskpriority neq ''}
|
||||
<td class="cellInfo" align="left" valign="top">
|
||||
{if $ACTIVITYDATA.taskpriority eq $APP.LBL_NOT_ACCESSIBLE}
|
||||
<font color="red">{$ACTIVITYDATA.taskpriority}</font>
|
||||
{else}{$ACTIVITYDATA.taskpriority}{/if}
|
||||
</td>
|
||||
{/if}
|
||||
<td class="cellInfo" align="left" valign="top">{$ACTIVITYDATA.assigned_user_id}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" align=center>
|
||||
<tr><td width=50% valign=top >
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100% align=center>
|
||||
<tr><td class="mailSubHeader" align=left ><b>{$MOD.LBL_TIMEDATE}</b></td></tr>
|
||||
<tr><td class="small" >{$ACTIVITYDATA.starthr}:{$ACTIVITYDATA.startmin}{$ACTIVITYDATA.startfmt}</td></tr>
|
||||
<tr><td class="cellInfo" style="padding-left:0px">{$ACTIVITYDATA.date_start}</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width=50% valign="top">
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100% align=center>
|
||||
<tr><td class="mailSubHeader"><b>{$LABEL.due_date}</b></td></tr>
|
||||
<tr><td class="small">{$ACTIVITYDATA.due_date}</td></tr>
|
||||
<tr><td class="cellInfo"> </td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="cellLabel" align=right nowrap width=20%>{if $LABEL.createdtime neq ''}<b>{$LABEL.createdtime}</b>{/if}</td>
|
||||
<td class="cellInfo" align=left nowrap width=30%>{if $LABEL.createdtime neq ''}{$ACTIVITYDATA.createdtime}{/if}</td>
|
||||
<td class="cellLabel" align=right nowrap width=20%>{if $LABEL.modifiedtime neq ''}<b>{$LABEL.modifiedtime}</b>{/if}</td>
|
||||
<td class="cellInfo" align=left nowrap width=30%>{if $LABEL.modifiedtime neq ''}{$ACTIVITYDATA.modifiedtime}{/if}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{if $CUSTOM_FIELDS_DATA|@count > 0}
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>{strip}
|
||||
<td colspan=4 class="tableHeading">
|
||||
<b>{$APP.LBL_CUSTOM_INFORMATION}</b>
|
||||
</td>{/strip}
|
||||
</tr>
|
||||
<tr>
|
||||
{foreach key=index item=custom_field from=$CUSTOM_FIELDS_DATA}
|
||||
{assign var=keyid value=$custom_field.2}
|
||||
{assign var=keyval value=$custom_field.1}
|
||||
{assign var=keyfldname value=$custom_field.0}
|
||||
{assign var=keyoptions value=$custom_field.options}
|
||||
<td class="cellLabel" align="right" width="20%"><b>{$keyfldname}</b></td>
|
||||
{include file="DetailViewFields.tpl"}
|
||||
{if ($index+1)% 2 == 0}
|
||||
</tr><tr>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{if ($index+1)% 2 != 0}
|
||||
<td width="20%"></td><td width="30%"></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
<br>
|
||||
|
||||
{if $LABEL.sendnotification neq '' || ($LABEL.parent_id neq '') || ($LABEL.contact_id neq '') }
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<table border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="dvtTabCache" style="width: 10px;" nowrap="nowrap"> </td>
|
||||
{if $LABEL.sendnotification neq ''}
|
||||
{assign var='class_val' value='dvtUnSelectedCell'}
|
||||
<td id="cellTabInvite" class="dvtSelectedCell" align="center" nowrap="nowrap"><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','on');switchClass('cellTabRelatedto','off');dispLayer('addTaskAlarmUI');ghide('addTaskRelatedtoUI');">{$MOD.LBL_NOTIFICATION}</td></a></td>
|
||||
{else}
|
||||
{assign var='class_val' value='dvtSelectedCell'}
|
||||
{/if}
|
||||
<td class="dvtTabCache" style="width: 10px;" nowrap="nowrap"> </td>
|
||||
{if ($LABEL.parent_id neq '') || ($LABEL.contact_id neq '') }
|
||||
<td id="cellTabRelatedto" class={$class_val} align=center nowrap><a href="javascript:doNothing()" onClick="switchClass('cellTabInvite','off');switchClass('cellTabRelatedto','on');dispLayer('addTaskRelatedtoUI');ghide('addTaskAlarmUI');">{$MOD.LBL_RELATEDTO}</a></td>
|
||||
{/if}
|
||||
|
||||
<td class="dvtTabCache" style="width: 100%;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=100% valign=top align=left class="dvtContentSpace" style="padding:10px;height:120px">
|
||||
<!-- Notification UI -->
|
||||
<DIV id="addTaskAlarmUI" style="display:block;width:100%">
|
||||
{if $LABEL.sendnotification neq ''}
|
||||
{assign var='vision' value='none'}
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td width="30%" align=right><b>{$MOD.LBL_SENDNOTIFICATION}</b></td>
|
||||
<td width="70%" align=left>{$ACTIVITYDATA.sendnotification}</td>
|
||||
</tr>
|
||||
</table>
|
||||
{else}
|
||||
{assign var='vision' value='block'}
|
||||
{/if}
|
||||
</DIV>
|
||||
<div id="addTaskRelatedtoUI" style="display:{$vision};width:100%">
|
||||
<table width="100%" cellpadding="5" cellspacing="0" border="0">
|
||||
<tr>
|
||||
{if $LABEL.parent_id neq ''}
|
||||
<td width="30%" align=right><b>{$LABEL.parent_id}</b></td>
|
||||
<td width="70%" align=left>{$ACTIVITYDATA.parent_name}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
<tr>
|
||||
{if $LABEL.contact_id neq ''}
|
||||
<td width="30%" align=right><b>{$MOD.LBL_CONTACT_NAME}</b></td>
|
||||
<td width="70%" align=left><a href="{$ACTIVITYDATA.contact_idlink}">{$ACTIVITYDATA.contact_id}</a></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
</table>
|
||||
</form>
|
||||
</td>
|
||||
<td width=22% valign=top style="border-left:2px dashed #cccccc;padding:13px">
|
||||
<!-- right side relevant info -->
|
||||
{* vtlib customization: Custom links on the Detail view *}
|
||||
{if $CUSTOM_LINKS}
|
||||
<table width="100%" border="0" cellpadding="5" cellspacing="0">
|
||||
<tr><td align="left" class="dvtUnSelectedCell dvtCellLabel">
|
||||
<a href="javascript:;" onmouseover="fnvshobj(this,'vtlib_customLinksLay');" onclick="fnvshobj(this,'vtlib_customLinksLay');"><b>{$APP.LBL_MORE} {$APP.LBL_ACTIONS} »</b></a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
<div style="display: none; left: 193px; top: 106px;width:155px; position:absolute;" id="vtlib_customLinksLay"
|
||||
onmouseout="fninvsh('vtlib_customLinksLay')" onmouseover="fnvshNrm('vtlib_customLinksLay')">
|
||||
<table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr><td style="border-bottom: 1px solid rgb(204, 204, 204); padding: 5px;"><b>{$APP.LBL_MORE} {$APP.LBL_ACTIONS} »</b></td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
{foreach item=CUSTOMLINK from=$CUSTOM_LINKS}
|
||||
{assign var="customlink_href" value=$CUSTOMLINK->linkurl}
|
||||
{assign var="customlink_label" value=$CUSTOMLINK->linklabel}
|
||||
{assign var="customlink_module" value=$CUSTOMLINK->module()}
|
||||
{if $customlink_label eq ''}
|
||||
{assign var="customlink_label" value=$customlink_href}
|
||||
{else}
|
||||
{* Pickup the translated label provided by the module *}
|
||||
{assign var="customlink_label" value=$customlink_label|@getTranslatedString:$customlink_module}
|
||||
{/if}
|
||||
<a href="{$customlink_href}" class="drop_down">{$customlink_label}</a>
|
||||
{/foreach}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
{* END *}
|
||||
|
||||
{if $TAG_CLOUD_DISPLAY eq 'true'}
|
||||
<!-- Tag cloud display -->
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="tagCloud">
|
||||
<tr>
|
||||
<td class="tagCloudTopBg"><img src="{$IMAGE_PATH}tagCloudName.gif" border=0></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div id="tagdiv" style="display:visible;"><form method="POST" action="javascript:void(0);" onsubmit="return tagvalidate();"><input class="textbox" type="text" id="txtbox_tagfields" name="textbox_First Name" value="" style="width:100px;margin-left:5px;"></input> <input name="button_tagfileds" type="submit" class="crmbutton small save" value="{$APP.LBL_TAG_IT}" /></form></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tagCloudDisplay" valign=top> <span id="tagfields">{$ALL_TAG}</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- End Tag cloud display -->
|
||||
{/if}
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- PUBLIC CONTENTS STOPS-->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" style="border-top:1px dotted #cccccc">
|
||||
{if $EDIT_DUPLICATE eq 'permitted'}
|
||||
<input title="{$APP.LBL_EDIT_BUTTON_TITLE}" accessKey="{$APP.LBL_EDIT_BUTTON_KEY}" class="crmbutton small edit" onclick="DetailView.return_module.value='{$MODULE}'; DetailView.return_action.value='DetailView'; DetailView.return_id.value='{$ID}';DetailView.module.value='{$MODULE}'; submitFormForAction('DetailView','EditView');" type="button" name="Edit" value=" {$APP.LBL_EDIT_BUTTON_LABEL} ">
|
||||
{/if}
|
||||
|
||||
{if $EDIT_DUPLICATE eq 'permitted'}
|
||||
<input title="{$APP.LBL_DUPLICATE_BUTTON_TITLE}" accessKey="{$APP.LBL_DUPLICATE_BUTTON_KEY}" class="crmbutton small create" onclick="DetailView.return_module.value='{$MODULE}'; DetailView.return_action.value='DetailView'; DetailView.isDuplicate.value='true';DetailView.module.value='{$MODULE}'; submitFormForAction('DetailView','EditView');" type="button" name="Duplicate" value="{$APP.LBL_DUPLICATE_BUTTON_LABEL}">
|
||||
{/if}
|
||||
|
||||
{if $DELETE eq 'permitted'}
|
||||
<input title="{$APP.LBL_DELETE_BUTTON_TITLE}" accessKey="{$APP.LBL_DELETE_BUTTON_KEY}" class="crmbutton small delete" onclick="DetailView.return_module.value='{$MODULE}'; {if $VIEWTYPE eq 'calendar'} DetailView.return_action.value='index'; {else} DetailView.return_action.value='ListView'; {/if} submitFormForActionWithConfirmation('DetailView', 'Delete', '{$APP.NTC_DELETE_CONFIRMATION}');" type="button" name="Delete" value="{$APP.LBL_DELETE_BUTTON_LABEL}">
|
||||
{/if}
|
||||
|
||||
{if $privrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_PREVIOUS}" accessKey="{$APP.LNK_LIST_PREVIOUS}" onclick="location.href='index.php?module={$MODULE}&viewtype={$VIEWTYPE}&action=DetailView&record={$privrecord}&parenttab={$CATEGORY}'" name="privrecord" value="{$APP.LNK_LIST_PREVIOUS}" src="{'rec_prev.gif'|@vtiger_imageurl:$THEME}">
|
||||
{else}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_PREVIOUS}" src="{'rec_prev_disabled.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
|
||||
{if $privrecord neq '' || $nextrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LBL_JUMP_BTN}" accessKey="{$APP.LBL_JUMP_BTN}" onclick="var obj = this;var lhref = getListOfRecords(obj, '{$MODULE}',{$ID},'{$CATEGORY}');" name="jumpBtnIdBottom" id="jumpBtnIdBottom" src="{'rec_jump.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
|
||||
{if $nextrecord neq ''}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_NEXT}" accessKey="{$APP.LNK_LIST_NEXT}" onclick="location.href='index.php?module={$MODULE}&viewtype={$VIEWTYPE}&action=DetailView&record={$nextrecord}&parenttab={$CATEGORY}'" name="nextrecord" src="{'rec_next.gif'|@vtiger_imageurl:$THEME}">
|
||||
{else}
|
||||
<img align="absmiddle" title="{$APP.LNK_LIST_NEXT}" src="{'rec_next_disabled.gif'|@vtiger_imageurl:$THEME}">
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{if $MODULE eq 'Products'}
|
||||
<script language="JavaScript" type="text/javascript" src="modules/Products/Productsslide.js"></script>
|
||||
<script language="JavaScript" type="text/javascript">Carousel();</script>
|
||||
{/if}
|
||||
|
||||
<script>
|
||||
function getTagCloud()
|
||||
{ldelim}
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody: 'module={$MODULE}&action={$MODULE}Ajax&file=TagCloud&ajxaction=GETTAGCLOUD&recordid={$ID}',
|
||||
onComplete: function(response) {ldelim}
|
||||
$("tagfields").innerHTML=response.responseText;
|
||||
$("txtbox_tagfields").value ='';
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
{rdelim}
|
||||
getTagCloud();
|
||||
</script>
|
||||
<!-- added for validation -->
|
||||
<script language="javascript">
|
||||
var fieldname = new Array({$VALIDATION_DATA_FIELDNAME});
|
||||
var fieldlabel = new Array({$VALIDATION_DATA_FIELDLABEL});
|
||||
var fielddatatype = new Array({$VALIDATION_DATA_FIELDDATATYPE});
|
||||
</script>
|
||||
</td>
|
||||
|
||||
</tr></table>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</td>
|
||||
<td valign=top><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,634 @@
|
||||
{*<!--
|
||||
/*+********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
{*<!-- module header -->*}
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/general.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/ListView.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/search.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
var typeofdata = new Array();
|
||||
typeofdata['V'] = ['is','isn','bwt','ewt','cts','dcts'];
|
||||
typeofdata['N'] = ['is','isn','lst','grt','lsteq','grteq'];
|
||||
typeofdata['T'] = ['is','isn','lst','grt','lsteq','grteq'];
|
||||
typeofdata['I'] = ['is','isn','lst','grt','lsteq','grteq'];
|
||||
typeofdata['C'] = ['is','isn'];
|
||||
typeofdata['DT'] = ['is','isn','lst','grt','lsteq','grteq'];
|
||||
typeofdata['D'] = ['is','isn','lst','grt','lsteq','grteq'];
|
||||
var fLabels = new Array();
|
||||
fLabels['is'] = "{$APP.is}";
|
||||
fLabels['isn'] = "{$APP.is_not}";
|
||||
fLabels['bwt'] = "{$APP.begins_with}";
|
||||
fLabels['ewt'] = "{$APP.ends_with}";
|
||||
fLabels['cts'] = "{$APP.contains}";
|
||||
fLabels['dcts'] = "{$APP.does_not_contains}";
|
||||
fLabels['lst'] = "{$APP.less_than}";
|
||||
fLabels['grt'] = "{$APP.greater_than}";
|
||||
fLabels['lsteq'] = "{$APP.less_or_equal}";
|
||||
fLabels['grteq'] = "{$APP.greater_or_equal}";
|
||||
var noneLabel;
|
||||
{literal}
|
||||
function trimfValues(value)
|
||||
{
|
||||
var string_array;
|
||||
string_array = value.split(":");
|
||||
return string_array[4];
|
||||
}
|
||||
|
||||
function updatefOptions(sel, opSelName) {
|
||||
var selObj = document.getElementById(opSelName);
|
||||
var fieldtype = null ;
|
||||
|
||||
var currOption = selObj.options[selObj.selectedIndex];
|
||||
var currField = sel.options[sel.selectedIndex];
|
||||
|
||||
var fld = currField.value.split(":");
|
||||
var tod = fld[4];
|
||||
/* if(fld[4] == 'D' || (fld[4] == 'T' && fld[1] != 'time_start' && fld[1] != 'time_end') || fld[4] == 'DT')
|
||||
{
|
||||
$("and"+sel.id).innerHTML = "";
|
||||
if(sel.id != "fcol5")
|
||||
$("and"+sel.id).innerHTML = "<em old='(yyyy-mm-dd)'>("+$("user_dateformat").value+")</em> "+alert_arr.LBL_AND;
|
||||
else
|
||||
$("and"+sel.id).innerHTML = "<em old='(yyyy-mm-dd)'>("+$("user_dateformat").value+")</em> ";
|
||||
}
|
||||
else {
|
||||
$("and"+sel.id).innerHTML = "";
|
||||
if(sel.id != "fcol5")
|
||||
$("and"+sel.id).innerHTML = " "+alert_arr.LBL_AND;
|
||||
else
|
||||
$("and"+sel.id).innerHTML = " ";
|
||||
}
|
||||
*/
|
||||
if(currField.value != null && currField.value.length != 0)
|
||||
{
|
||||
fieldtype = trimfValues(currField.value);
|
||||
fieldtype = fieldtype.replace(/\\'/g,'');
|
||||
ops = typeofdata[fieldtype];
|
||||
var off = 0;
|
||||
if(ops != null)
|
||||
{
|
||||
|
||||
var nMaxVal = selObj.length;
|
||||
for(nLoop = 0; nLoop < nMaxVal; nLoop++)
|
||||
{
|
||||
selObj.remove(0);
|
||||
}
|
||||
/* selObj.options[0] = new Option ('None', '');
|
||||
if (currField.value == '') {
|
||||
selObj.options[0].selected = true;
|
||||
}*/
|
||||
for (var i = 0; i < ops.length; i++)
|
||||
{
|
||||
var label = fLabels[ops[i]];
|
||||
if (label == null) continue;
|
||||
var option = new Option (fLabels[ops[i]], ops[i]);
|
||||
selObj.options[i] = option;
|
||||
if (currOption != null && currOption.value == option.value)
|
||||
{
|
||||
option.selected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else
|
||||
{
|
||||
var nMaxVal = selObj.length;
|
||||
for(nLoop = 0; nLoop < nMaxVal; nLoop++)
|
||||
{
|
||||
selObj.remove(0);
|
||||
}
|
||||
selObj.options[0] = new Option ('None', '');
|
||||
if (currField.value == '') {
|
||||
selObj.options[0].selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
{/literal}
|
||||
</script>
|
||||
|
||||
<script language="javascript">
|
||||
function checkgroup()
|
||||
{ldelim}
|
||||
|
||||
if(document.change_ownerform_name.user_lead_owner[1].checked)
|
||||
{ldelim}
|
||||
document.change_ownerform_name.lead_group_owner.style.display = "block";
|
||||
document.change_ownerform_name.lead_owner.style.display = "none";
|
||||
{rdelim}
|
||||
else
|
||||
{ldelim}
|
||||
document.change_ownerform_name.lead_owner.style.display = "block";
|
||||
document.change_ownerform_name.lead_group_owner.style.display = "none";
|
||||
{rdelim}
|
||||
|
||||
{rdelim}
|
||||
function callSearch(searchtype)
|
||||
{ldelim}
|
||||
for(i=1;i<=26;i++)
|
||||
{ldelim}
|
||||
var data_td_id = 'alpha_'+ eval(i);
|
||||
getObj(data_td_id).className = 'searchAlph';
|
||||
{rdelim}
|
||||
gPopupAlphaSearchUrl = '';
|
||||
search_fld_val= document.basicSearch.search_field[document.basicSearch.search_field.selectedIndex].value;
|
||||
search_txt_val=encodeURIComponent(document.basicSearch.search_text.value);
|
||||
var urlstring = '';
|
||||
if(searchtype == 'Basic')
|
||||
{ldelim}
|
||||
urlstring = 'search_field='+search_fld_val+'&searchtype=BasicSearch&search_text='+search_txt_val+'&';
|
||||
{rdelim}
|
||||
else if(searchtype == 'Advanced')
|
||||
{ldelim}
|
||||
var no_rows = document.basicSearch.search_cnt.value;
|
||||
for(jj = 0 ; jj < no_rows; jj++)
|
||||
{ldelim}
|
||||
var sfld_name = getObj("Fields"+jj);
|
||||
var scndn_name= getObj("Condition"+jj);
|
||||
var srchvalue_name = getObj("Srch_value"+jj);
|
||||
urlstring = urlstring+'Fields'+jj+'='+sfld_name[sfld_name.selectedIndex].value+'&';
|
||||
urlstring = urlstring+'Condition'+jj+'='+scndn_name[scndn_name.selectedIndex].value+'&';
|
||||
urlstring = urlstring+'Srch_value'+jj+'='+encodeURIComponent(srchvalue_name.value)+'&';
|
||||
|
||||
{rdelim}
|
||||
for (i=0;i<getObj("matchtype").length;i++){ldelim}
|
||||
if (getObj("matchtype")[i].checked==true)
|
||||
urlstring += 'matchtype='+getObj("matchtype")[i].value+'&';
|
||||
{rdelim}
|
||||
urlstring += 'search_cnt='+no_rows+'&';
|
||||
urlstring += 'searchtype=advance&'
|
||||
{rdelim}
|
||||
$("status").style.display="inline";
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody:urlstring +'query=true&file=ListView&module={$MODULE}&action={$MODULE}Ajax&ajax=true&search=true',
|
||||
onComplete: function(response) {ldelim}
|
||||
$("status").style.display="none";
|
||||
result = response.responseText.split('&#&#&#');
|
||||
$("ListViewContents").innerHTML= result[2];
|
||||
if(result[1] != '')
|
||||
alert(result[1]);
|
||||
$('basicsearchcolumns').innerHTML = '';
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
return false;
|
||||
|
||||
{rdelim}
|
||||
function alphabetic(module,url,dataid)
|
||||
{ldelim}
|
||||
for(i=1;i<=26;i++)
|
||||
{ldelim}
|
||||
var data_td_id = 'alpha_'+ eval(i);
|
||||
getObj(data_td_id).className = 'searchAlph';
|
||||
|
||||
{rdelim}
|
||||
getObj(dataid).className = 'searchAlphselected';
|
||||
$("status").style.display="inline";
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody: 'module='+module+'&action='+module+'Ajax&file=ListView&ajax=true&search=true&'+url,
|
||||
onComplete: function(response) {ldelim}
|
||||
$("status").style.display="none";
|
||||
result = response.responseText.split('&#&#&#');
|
||||
$("ListViewContents").innerHTML= result[2];
|
||||
if(result[1] != '')
|
||||
alert(result[1]);
|
||||
$('basicsearchcolumns').innerHTML = '';
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
{rdelim}
|
||||
|
||||
</script>
|
||||
|
||||
{include file='Buttons_List.tpl'}
|
||||
<div id="searchingUI" style="display:none;">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100%>
|
||||
<tr>
|
||||
<td align=center>
|
||||
<img src="{'searching.gif'|@vtiger_imageurl:$THEME}" alt="{$APP.LBL_SEARCHING}" title="{$APP.LBL_SEARCHING}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
{*<!-- Contents -->*}
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=98% align=center>
|
||||
<tr>
|
||||
<td valign=top><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
|
||||
<td class="showPanelBg" valign="top" width=100% style="padding:10px;">
|
||||
<!-- SIMPLE SEARCH -->
|
||||
<div id="searchAcc" style="z-index:1;display:none;position:relative;">
|
||||
<form name="basicSearch" method="post" action="index.php" onSubmit="return callSearch('Basic');">
|
||||
<table width="80%" cellpadding="5" cellspacing="0" class="searchUIBasic small" align="center" border=0>
|
||||
<tr>
|
||||
<td class="searchUIName small" nowrap align="left">
|
||||
<span class="moduleName">{$APP.LBL_SEARCH}</span><br><span class="small"><a href="#" onClick="fnhide('searchAcc');show('advSearch');updatefOptions(document.getElementById('Fields0'), 'Condition0');document.basicSearch.searchtype.value='advance';">{$APP.LBL_GO_TO} {$APP.LNK_ADVANCED_SEARCH}</a></span>
|
||||
<!-- <img src="{'basicSearchLens.gif'|@vtiger_imageurl:$THEME}" align="absmiddle" alt="{$APP.LNK_BASIC_SEARCH}" title="{$APP.LNK_BASIC_SEARCH}" border=0> -->
|
||||
</td>
|
||||
<td class="small" nowrap align=right><b>{$APP.LBL_SEARCH_FOR}</b></td>
|
||||
<td class="small"><input type="text" class="txtBox" style="width:120px" name="search_text"></td>
|
||||
<td class="small" nowrap><b>{$APP.LBL_IN}</b> </td>
|
||||
<td class="small" nowrap>
|
||||
<div id="basicsearchcolumns_real">
|
||||
<select name="search_field" id="bas_searchfield" class="txtBox" style="width:150px">
|
||||
{html_options options=$SEARCHLISTHEADER }
|
||||
</select>
|
||||
</div>
|
||||
<input type="hidden" name="searchtype" value="BasicSearch">
|
||||
<input type="hidden" name="module" value="{$MODULE}">
|
||||
<input type="hidden" name="parenttab" value="{$CATEGORY}">
|
||||
<input type="hidden" name="action" value="index">
|
||||
<input type="hidden" name="query" value="true">
|
||||
<input type="hidden" name="search_cnt">
|
||||
</td>
|
||||
<td class="small" nowrap width=40% >
|
||||
<input name="submit" type="button" class="crmbutton small create" onClick="callSearch('Basic');" value=" {$APP.LBL_SEARCH_NOW_BUTTON} ">
|
||||
|
||||
</td>
|
||||
<td class="small" valign="top" onMouseOver="this.style.cursor='pointer';" onclick="moveMe('searchAcc');searchshowhide('searchAcc','advSearch')">[x]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="7" align="center" class="small">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100%>
|
||||
<tr>
|
||||
{$ALPHABETICAL}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<!-- ADVANCED SEARCH -->
|
||||
<div id="advSearch" style="display:none;">
|
||||
<form name="advSearch" method="post" action="index.php" onSubmit="totalnoofrows();return callSearch('Advanced');">
|
||||
<table cellspacing=0 cellpadding=5 width=80% class="searchUIAdv1 small" align="center" border=0>
|
||||
<tr>
|
||||
<td class="searchUIName small" nowrap align="left"><span class="moduleName">{$APP.LBL_SEARCH}</span><br><span class="small"><a href="#" onClick="show('searchAcc');fnhide('advSearch')">{$APP.LBL_GO_TO} {$APP.LNK_BASIC_SEARCH}</a></span></td>
|
||||
<td nowrap class="small"><b><input name="matchtype" type="radio" value="all"> {$APP.LBL_ADV_SEARCH_MSG_ALL}</b></td>
|
||||
<td nowrap width=60% class="small" ><b><input name="matchtype" type="radio" value="any" checked> {$APP.LBL_ADV_SEARCH_MSG_ANY}</b></td>
|
||||
<td class="small" valign="top" onMouseOver="this.style.cursor='pointer';" onclick="moveMe('searchAcc');searchshowhide('searchAcc','advSearch')">[x]</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table cellpadding="2" cellspacing="0" width="80%" align="center" class="searchUIAdv2 small" border=0>
|
||||
<tr>
|
||||
<td align="center" class="small" width=90%>
|
||||
<div id="fixed" style="position:relative;width:95%;height:80px;padding:0px; overflow:auto;border:1px solid #CCCCCC;background-color:#ffffff" class="small">
|
||||
<table border=0 width=95%>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<table width="100%" border="0" cellpadding="2" cellspacing="0" id="adSrc" align="left">
|
||||
<tr >
|
||||
<td width="31%"><select name="Fields0" id="Fields0" class="detailedViewTextBox" onchange="updatefOptions(this, 'Condition0')">{$FIELDNAMES}</select>
|
||||
</td>
|
||||
<td width="32%"><select name="Condition0" id="Condition0" class="detailedViewTextBox">{$CRITERIA}</select>
|
||||
</td>
|
||||
<td width="32%"><input type="text" name="Srch_value0" class="detailedViewTextBox"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=80% class="searchUIAdv3 small" align="center">
|
||||
<tr>
|
||||
<td align=left width=40%>
|
||||
<input type="button" name="more" value=" {$APP.LBL_MORE} " onClick="fnAddSrch('{$FIELDNAMES}','{$CRITERIA}')" class="crmbuttom small edit" >
|
||||
<input name="button" type="button" value=" {$APP.LBL_FEWER_BUTTON} " onclick="delRow()" class="crmbuttom small edit" >
|
||||
</td>
|
||||
<td align=left class="small"><input type="button" class="crmbutton small create" value=" {$APP.LBL_SEARCH_NOW_BUTTON} " onClick="totalnoofrows();callSearch('Advanced');">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
{*<!-- Searching UI -->*}
|
||||
|
||||
|
||||
<div class="small" style="padding: 10px;">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<table class="small" border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="dvtTabCache" style="width: 10px;" nowrap="nowrap"> </td>
|
||||
<td class="dvtUnSelectedCell" align="center" nowrap="nowrap"><a href="index.php?action=index&module=Calendar&parenttab={$CATEGORY}">{$APP.Calendar}</a></td>
|
||||
<td class="dvtTabCache" style="width: 10px;"> </td>
|
||||
<td class="dvtSelectedCell" align="center" nowrap="nowrap">{$MOD.LBL_ALL_EVENTS_TODOS}</td>
|
||||
<td class="dvtTabCache" style="width: 100%;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<table class="dvtContentSpace" border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<!-- content cache -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 10px;">
|
||||
|
||||
<!-- PUBLIC CONTENTS STARTS-->
|
||||
<div id="ListViewContents" class="small" style="width:100%;position:relative;">
|
||||
<form name="massdelete" method="POST">
|
||||
<input name='search_url' id="search_url" type='hidden' value='{$SEARCH_URL}'>
|
||||
<input name="idlist" id="idlist" type="hidden">
|
||||
<input name="change_owner" type="hidden">
|
||||
<input name="change_status" type="hidden">
|
||||
<input name="allids" type="hidden" value="{$ALLIDS}">
|
||||
<input name="selectedboxes" id="selectedboxes" type="hidden" value="{$SELECTEDIDS}">
|
||||
<input name="allselectedboxes" id="allselectedboxes" type="hidden" value="{$ALLSELECTEDIDS}">
|
||||
<input name="current_page_boxes" id="current_page_boxes" type="hidden" value="{$CURRENT_PAGE_BOXES}">
|
||||
<table border=0 cellspacing=1 cellpadding=0 width=100% class="lvtBg">
|
||||
<tr >
|
||||
<td>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100% class="small">
|
||||
<tr>
|
||||
<td style="padding-right:20px" nowrap>
|
||||
{foreach key=button_check item=button_label from=$BUTTONS}
|
||||
{if $button_check eq 'del'}
|
||||
<input class="crmbutton small delete" type="button" value="{$button_label}" onclick="return massDelete('{$MODULE}')"/>
|
||||
{elseif $button_check eq 's_mail'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return eMail('{$MODULE}',this);"/>
|
||||
{elseif $button_check eq 's_cmail'}
|
||||
<input class="crmbutton small edit" type="submit" value="{$button_label}" onclick="return massMail('{$MODULE}')"/>
|
||||
{elseif $button_check eq 'c_status'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return change(this,'changestatus')"/>
|
||||
{elseif $button_check eq 'c_owner'}
|
||||
{if $MODULE neq 'Documents' && $MODULE neq 'Products' && $MODULE neq 'Faq' && $MODULE neq 'Vendors' && $MODULE neq 'PriceBooks'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return change(this,'changeowner')"/>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{/foreach}
|
||||
</td>
|
||||
<td class="small" nowrap>
|
||||
{$recordListRange}
|
||||
</td>
|
||||
<!-- Page Navigation -->
|
||||
<td nowrap width="30%" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="small">
|
||||
<tr>{$NAVIGATION}</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width="100%" align="right">
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="small">
|
||||
<tr>
|
||||
<td>{$APP.LBL_VIEW}</td>
|
||||
<td style="padding-left:5px;padding-right:5px">
|
||||
<SELECT NAME="viewname" id="viewname" class="small" onchange="showDefaultCustomView(this,'{$MODULE}','{$CATEGORY}')">{$CUSTOMVIEW_OPTION}</SELECT>
|
||||
</td>
|
||||
<td>
|
||||
{if $ALL eq 'All'}
|
||||
<a href="index.php?module={$MODULE}&action=CustomView&parenttab={$CATEGORY}">{$APP.LNK_CV_CREATEVIEW}</a>
|
||||
<span class="small">|</span>
|
||||
<span class="small" disabled>{$APP.LNK_CV_EDIT}</span>
|
||||
<span class="small">|</span>
|
||||
<span class="small" disabled>{$APP.LNK_CV_DELETE}</span></td>
|
||||
{else}
|
||||
<a href="index.php?module={$MODULE}&action=CustomView&parenttab={$CATEGORY}">{$APP.LNK_CV_CREATEVIEW}</a>
|
||||
<span class="small">|</span>
|
||||
<a href="index.php?module={$MODULE}&action=CustomView&record={$VIEWID}&parenttab={$CATEGORY}">{$APP.LNK_CV_EDIT}</a>
|
||||
<span class="small">|</span>
|
||||
<a href="javascript:confirmdelete('index.php?module=CustomView&action=Delete&dmodule={$MODULE}&record={$VIEWID}&parenttab={$CATEGORY}')">{$APP.LNK_CV_DELETE}</a>
|
||||
{/if}
|
||||
{if $CUSTOMVIEW_PERMISSION.ChangedStatus neq '' && $CUSTOMVIEW_PERMISSION.Label neq ''}
|
||||
<span class="small">|</span>
|
||||
<a href="#" id="customstatus_id" onClick="ChangeCustomViewStatus({$VIEWID},{$CUSTOMVIEW_PERMISSION.Status},{$CUSTOMVIEW_PERMISSION.ChangedStatus},'{$MODULE}','{$CATEGORY}')">{$CUSTOMVIEW_PERMISSION.Label}</a>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="calDIV" style="overflow:auto;">
|
||||
<table border=0 cellspacing=1 cellpadding=3 width=100% class="lvt small" class="small">
|
||||
<tr>
|
||||
<td class="lvtCol"><input type="checkbox" name="selectall" onClick=toggleSelect_ListView(this.checked,"selected_id")></td>
|
||||
{foreach name="listviewforeach" item=header from=$LISTHEADER}
|
||||
<td class="lvtCol">{$header}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
{foreach item=entity key=entity_id from=$LISTENTITY}
|
||||
<tr bgcolor=white onMouseOver="this.className='lvtColDataHover'" onMouseOut="this.className='lvtColData'" id="row_{$entity_id}">
|
||||
<td width="2%"><input type="checkbox" NAME="selected_id" id="{$entity_id}" value= '{$entity_id}' onClick=check_object(this); toggleSelectAll(this.name,"selectall")></td>
|
||||
{foreach item=data from=$entity}
|
||||
<td>{$data}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
{foreachelse}
|
||||
<tr><td style="background-color:#efefef;height:340px" align="center" colspan="{$smarty.foreach.listviewforeach.iteration+1}">
|
||||
<div style="border: 3px solid rgb(153, 153, 153); background-color: rgb(255, 255, 255); width: 45%; position: relative; z-index: 10000000;">
|
||||
{assign var=vowel_conf value='LBL_A'}
|
||||
{assign var=MODULE_CREATE value=$SINGLE_MOD}
|
||||
|
||||
{if $CHECK.EditView eq 'yes' && $MODULE neq 'Emails' && $MODULE neq 'Webmails'}
|
||||
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="98%">
|
||||
<tr>
|
||||
<td rowspan="2" width="25%"><img src="{'empty.jpg'|@vtiger_imageurl:$THEME}" height="60" width="61"></td>
|
||||
<td style="border-bottom: 1px solid rgb(204, 204, 204);" nowrap="nowrap" width="75%"><span class="genHeaderSmall">{$APP.LBL_NO} {$APP.ACTIVITIES} {$APP.LBL_FOUND} !</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" align="left" nowrap="nowrap">{$APP.LBL_YOU_CAN_CREATE} {$APP.$vowel_conf} {$APP.$MODULE_CREATE} {$APP.LBL_NOW}. {$APP.LBL_CLICK_THE_LINK}:<br>
|
||||
-<a href="index.php?module={$MODULE}&action=EditView&return_module=Calendar&activity_mode=Events&return_action=DetailView&parenttab={$CATEGORY}">{$APP.LBL_CREATE} {$APP.LBL_AN} {$APP.Event}</a><br>
|
||||
-<a href="index.php?module={$MODULE}&action=EditView&return_module=Calendar&activity_mode=Task&return_action=DetailView&parenttab={$CATEGORY}">{$APP.LBL_CREATE} {$APP.LBL_A} {$APP.Todo}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{else}
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="98%">
|
||||
<tr>
|
||||
<td rowspan="2" width="25%"><img src="{'empty.jpg'|@vtiger_imageurl:$THEME}" height="60" width="61"></td>
|
||||
<td style="border-bottom: 1px solid rgb(204, 204, 204);" nowrap="nowrap" width="75%"><span class="genHeaderSmall">{$APP.LBL_NO} {$APP.ACTIVITIES} {$APP.LBL_FOUND} !</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="small" align="left" nowrap="nowrap">{$APP.LBL_YOU_ARE_NOT_ALLOWED_TO_CREATE} {$APP.$vowel_conf} {$APP.$MODULE_CREATE}<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
</td></tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
</div>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width=100%>
|
||||
<tr>
|
||||
<td style="padding-right:20px" nowrap>
|
||||
{foreach key=button_check item=button_label from=$BUTTONS}
|
||||
{if $button_check eq 'del'}
|
||||
<input class="crmbutton small delete" type="button" value="{$button_label}" onclick="return massDelete('{$MODULE}')"/>
|
||||
{elseif $button_check eq 's_mail'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return eMail('{$MODULE}',this)"/>
|
||||
{elseif $button_check eq 's_cmail'}
|
||||
<input class="crmbutton small edit" type="submit" value="{$button_label}" onclick="return massMail('{$MODULE}')"/>
|
||||
{elseif $button_check eq 'c_status'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return change(this,'changestatus')"/>
|
||||
{elseif $button_check eq 'c_owner'}
|
||||
{if $MODULE neq 'Documents' && $MODULE neq 'Products' && $MODULE neq 'Faq' && $MODULE neq 'Vendors' && $MODULE neq 'PriceBooks'}
|
||||
<input class="crmbutton small edit" type="button" value="{$button_label}" onclick="return change(this,'changeowner')"/>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{/foreach}
|
||||
</td>
|
||||
<td class="small" nowrap>
|
||||
{$recordListRange}
|
||||
</td>
|
||||
<!-- Page Navigation -->
|
||||
<td nowrap width="30%" align="center">
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="small">
|
||||
<tr>{$NAVIGATION}</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="right" width=100%>
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="small">
|
||||
<tr>
|
||||
{$WORDTEMPLATEOPTIONS}{$MERGEBUTTON}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
{$SELECT_SCRIPT}
|
||||
</div>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign=top><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<div id="changeowner" class="statechange">
|
||||
<table width="100%" border="0" cellpadding="3" cellspacing="0">
|
||||
<tr>
|
||||
<td class="genHeaderSmall" align="left" style="border-bottom:1px solid #CCCCCC;" width="60%">{$APP.LBL_CHANGE_OWNER}</td>
|
||||
<td style="border-bottom: 1px solid rgb(204, 204, 204);"> </td>
|
||||
<td align="right" style="border-bottom:1px solid #CCCCCC;" width="40%"><a href="javascript:fninvsh('changeowner')">{$APP.LBL_CLOSE}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%"><b>{$APP.LBL_TRANSFER_OWNERSHIP}</b></td>
|
||||
<td width="2%"><b>:</b></td>
|
||||
<td width="48%">
|
||||
<form name="change_ownerform_name">
|
||||
<input type = "radio" id= "user_checkbox" name = "user_lead_owner" {if $CHANGE_GROUP_OWNER neq ''} onclick=checkgroup();{/if} checked>{$APP.LBL_USER}
|
||||
{if $CHANGE_GROUP_OWNER neq ''}
|
||||
<input type = "radio" id = "group_checkbox" name = "user_lead_owner" onclick=checkgroup(); >{$APP.LBL_GROUP}<br>
|
||||
<select name="lead_group_owner" id="lead_group_owner" class="detailedViewTextBox" style="display:none;">
|
||||
{$CHANGE_GROUP_OWNER}
|
||||
</select>
|
||||
{/if}
|
||||
<select name="lead_owner" id="lead_owner" class="detailedViewTextBox">
|
||||
{$CHANGE_OWNER}
|
||||
</select>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td colspan="3" style="border-bottom:1px dashed #CCCCCC;"> </td></tr>
|
||||
<tr>
|
||||
<td colspan="3" align="center">
|
||||
|
||||
<input type="button" name="button" class="crmbutton small edit" value="{$APP.LBL_UPDATE_OWNER}" onClick="ajaxChangeStatus('owner')">
|
||||
<input type="button" name="button" class="crmbutton small cancel" value="{$APP.LBL_CANCEL_BUTTON_LABEL}" onClick="fninvsh('changeowner')">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
{literal}
|
||||
|
||||
function ajaxChangeStatus(statusname)
|
||||
{
|
||||
$("status").style.display="inline";
|
||||
var viewid = document.massdelete.viewname.value;
|
||||
var idstring = document.getElementById('idlist').value;
|
||||
if(statusname == 'status')
|
||||
{
|
||||
fninvsh('changestatus');
|
||||
var url='&leadval='+document.getElementById('lead_status').options[document.getElementById('lead_status').options.selectedIndex].value;
|
||||
var urlstring ="module=Users&action=updateLeadDBStatus&return_module=Leads"+url+"&viewname="+viewid+"&idlist="+idstring;
|
||||
}
|
||||
else if(statusname == 'owner')
|
||||
{
|
||||
|
||||
if($("user_checkbox").checked)
|
||||
{
|
||||
fninvsh('changeowner');
|
||||
var url='&owner_id='+document.getElementById('lead_owner').options[document.getElementById('lead_owner').options.selectedIndex].value+'&owner_type=User';
|
||||
{/literal}
|
||||
var urlstring ="module=Users&action=updateLeadDBStatus&return_module={$MODULE}"+url+"&viewname="+viewid+"&idlist="+idstring;
|
||||
{literal}
|
||||
}
|
||||
else
|
||||
{
|
||||
fninvsh('changeowner');
|
||||
var url='&owner_id='+document.getElementById('lead_group_owner').options[document.getElementById('lead_group_owner').options.selectedIndex].value+'&owner_type=Group';
|
||||
{/literal}
|
||||
var urlstring ="module=Users&action=updateLeadDBStatus&return_module={$MODULE}"+url+"&viewname="+viewid+"&idlist="+idstring;
|
||||
{literal}
|
||||
}
|
||||
|
||||
}
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: urlstring,
|
||||
onComplete: function(response) {
|
||||
$("status").style.display="none";
|
||||
result = response.responseText.split('&#&#&#');
|
||||
$("ListViewContents").innerHTML= result[2];
|
||||
if(result[1] != '')
|
||||
alert(result[1]);
|
||||
$('basicsearchcolumns').innerHTML = '';
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
</script>
|
||||
{/literal}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
<div id="{$popupid}" style="float: right; border-style: solid; border-color: rgb(141, 141, 141); border-width: 1px 3px 3px 1px; overflow: hidden; padding-left: 5px; padding-right: 5px; padding-top: 5px; padding-bottom: 10px; margin-left: 2px; font-weight: normal; height: 75px;">
|
||||
|
||||
<table border='0' cellpadding='2' cellspacing='0'>
|
||||
<tr>
|
||||
<td align='left'><b>
|
||||
<img align="top" src="themes/images/{$activitytype}s.gif"/> {$activitytype} - {$cbstatus}</b> </td>
|
||||
<td align='right'><b><font color={$cbcolor}>{$cbdate} {$cbtime}</font></b></td>
|
||||
<td align='right'>
|
||||
<a style='padding-left: 10px;' href="javascript:;" onclick="ActivityReminderCallbackReset(0, '{$popupid}');ActivityReminderRemovePopupDOM('{$popupid}');"><img src='{'close.gif'|@vtiger_imageurl:$THEME}' align='absmiddle' border='0'></a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan='3'><hr></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan='3' align='left'><b>{$cbsubject}</b><a style='padding: 2px;' href='index.php?action=DetailView&module={$cbmodule}&record={$cbrecord}'>[{$APP.LBL_MORE}...]</a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align='center'>
|
||||
<a style='padding: 0 5px 0 5px;' href='javascript:;' onclick="ActivityReminderPostponeCallback('{$cbmodule}','{$cbrecord}','{$cbreminderid}');ActivityReminderRemovePopupDOM('{$popupid}');"><b>{$APP.LBL_POSTPONE}</b></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,169 @@
|
||||
{*<!--
|
||||
/*+********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/menu.js"></script>
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
|
||||
<tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" valign="top" width="100%">
|
||||
<div class="small" style="padding: 10px;">
|
||||
<span class="lvtHeaderText">{$MOD.LBL_MY_MAIL_SERVER_DET}</span> <br>
|
||||
<hr noshade="noshade" size="1"><br>
|
||||
|
||||
<form action="index.php" method="post" name="EditView" id="form" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type="hidden" name="module" value="Users">
|
||||
<input type="hidden" name="action">
|
||||
<input type="hidden" name="server_type" value="email">
|
||||
<input type="hidden" name="record" value="{$ID}">
|
||||
<input type="hidden" name="edit" value="{$EDIT}">
|
||||
<input type="hidden" name="return_module" value="{$RETURN_MODULE}">
|
||||
<input type="hidden" name="return_action" value="{$RETURN_ACTION}">
|
||||
<input type="hidden" name="changepassword" value="">
|
||||
</tr>
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="95%">
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
<table class="small" border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="dvtTabCache" style="width: 10px;" nowrap="nowrap"> </td>
|
||||
<td class="dvtSelectedCell" style="width: 100px;" align="center" nowrap="nowrap"><b>{$MOD.LBL_MY_MAIL_SERVER_DET} </b></td>
|
||||
<td class="dvtTabCache" nowrap="nowrap"> </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
|
||||
<!-- General Contents for Mail Server Starts Here -->
|
||||
|
||||
<table class="dvtContentSpace" border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td align="left">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 10px;"><table width="100%" border="0" cellspacing="0" cellpadding="5">
|
||||
<tr>
|
||||
<td colspan="3" class="detailedViewHeader"><b>{$MOD.LBL_EMAIL_ID}</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right" width="33%">{$MOD.LBL_DISPLAY_NAME}</td>
|
||||
<td class="dvtCellInfo" width="33%"><input type="text" name="displayname" class="detailedViewTextBox" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'" value="{$DISPLAYNAME}"/></td>
|
||||
<td class="dvtCellInfo" width="34%">{$MOD.LBL_NAME_EXAMPLE}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right"><FONT class="required" color="red">{$APP.LBL_REQUIRED_SYMBOL}</FONT> {$MOD.LBL_EMAIL_ADDRESS} </td>
|
||||
<td class="dvtCellInfo"><input type="text" name="email" class="detailedViewTextBox" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'" value="{$EMAIL}"/></td>
|
||||
<td class="dvtCellInfo">{$MOD.LBL_EMAIL_EXAMPLE}</td>
|
||||
</tr>
|
||||
<tr><td colspan="3" > </td></tr>
|
||||
<tr>
|
||||
<td colspan="3" class="detailedViewHeader"><b>{$MOD.LBL_INCOME_SERVER_SETTINGS}</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right"><FONT class="required" color="red">{$APP.LBL_REQUIRED_SYMBOL}</FONT>{$MOD.LBL_MAIL_SERVER_NAME}</td>
|
||||
<td class="dvtCellInfo"><input type="text" name="mail_servername" value="{$SERVERNAME}" class="detailedViewTextBox" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'"/></td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right"><FONT class="required" color="red">{$APP.LBL_REQUIRED_SYMBOL}</FONT>{$APP.LBL_LIST_USER_NAME}</td>
|
||||
<td class="dvtCellInfo"><input type="text" name="server_username" value="{$SERVERUSERNAME}" class="detailedViewTextBox" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'"/></td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right"><FONT class="required" color="red">{$APP.LBL_REQUIRED_SYMBOL}</FONT>{$MOD.LBL_LIST_PASSWORD}</td>
|
||||
<td class="dvtCellInfo"> {$CHANGE_PW_BUTTON}</td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_MAIL_PROTOCOL}</td>
|
||||
<td class="dvtCellInfo">
|
||||
<!-- <input type="radio" name="mailprotocol" value="pop3" {$POP3}/> {$MOD.LBL_POP} <font color="red">* *</font>
|
||||
<input type="radio" name="mailprotocol" value="imap" {$IMAP}/> {$MOD.LBL_IMAP} <font color="red">* *</font> -->
|
||||
<input type="radio" name="mailprotocol" value="imap2" {$IMAP2}/> {$MOD.LBL_IMAP2}
|
||||
<input type="radio" name="mailprotocol" value="IMAP4" {$IMAP4}/> {$MOD.LBL_IMAP4}
|
||||
</td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_SSL_OPTIONS}</td>
|
||||
<td class="dvtCellInfo">
|
||||
<input type="radio" name="ssltype" value="notls" {$NOTLS} /> {$MOD.LBL_NO_TLS}
|
||||
<input type="radio" name="ssltype" value="tls" {$TLS} /> {$MOD.LBL_TLS}
|
||||
<input type="radio" name="ssltype" value="ssl" {$SSL} /> {$MOD.LBL_SSL} </td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_CERT_VAL}</td>
|
||||
<td class="dvtCellInfo">
|
||||
<input type="radio" name="sslmeth" value="validate-cert" {$VALIDATECERT} /> {$MOD.LBL_VAL_SSL_CERT}
|
||||
<input type="radio" name="sslmeth" value="novalidate-cert" {$NOVALIDATECERT} /> {$MOD.LBL_DONOT_VAL_SSL_CERT}
|
||||
</td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<!--<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_INT_MAILER}</td>
|
||||
<td class="dvtCellInfo">
|
||||
<input type="radio" name="int_mailer" value="1" {$INT_MAILER_USE} /> {$MOD.LBL_INT_MAILER_USE}
|
||||
<input type="radio" name="int_mailer" value="0" {$INT_MAILER_NOUSE} /> {$MOD.LBL_INT_MAILER_NOUSE}
|
||||
</td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>-->
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_REFRESH_TIMEOUT}</td>
|
||||
<td class="dvtCellInfo">
|
||||
<select value="{$BOX_REFRESH}" name="box_refresh">
|
||||
<option value="60000" {$BOX_OPT1}>{$MOD.LBL_1_MIN}</option>
|
||||
<option value="120000" {$BOX_OPT2}>{$MOD.LBL_2_MIN}</option>
|
||||
<option value="180000" {$BOX_OPT3}>{$MOD.LBL_3_MIN}</option>
|
||||
<option value="240000" {$BOX_OPT4}>{$MOD.LBL_4_MIN}</option>
|
||||
<option value="300000" {$BOX_OPT5}>{$MOD.LBL_5_MIN}</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="dvtCellLabel" align="right">{$MOD.LBL_EMAILS_PER_PAGE}</td>
|
||||
<td class="dvtCellInfo"><input type="text" name="mails_per_page" value="{$MAILS_PER_PAGE}" class="detailedViewTextBox" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'"/></td>
|
||||
<td class="dvtCellInfo"> </td>
|
||||
</tr><tr>
|
||||
<td colspan='3' align='center'>{$MOD.LBL_MAIL_DISCLAIM}</td>
|
||||
</tr>
|
||||
<tr><td colspan="3" style="border-bottom:1px dashed #CCCCCC;"> </td></tr>
|
||||
<tr>
|
||||
<td colspan="3" align="center">
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='SaveMailAccount'; return verify_data(EditView)" type="submit" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " >
|
||||
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_LABEL}>" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmbutton small cancel" onclick="window.history.back()" type="button" name="button" value="{$APP.LBL_CANCEL_BUTTON_LABEL}"></td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td colspan="3" style="border-top:1px dashed #CCCCCC;"> </td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
{$JAVASCRIPT}
|
||||
@@ -0,0 +1,166 @@
|
||||
<!--*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->
|
||||
{literal}
|
||||
<script language="javascript">
|
||||
function addtopricebook()
|
||||
{
|
||||
x = document.addToPB.selected_id.length;
|
||||
prod_array = new Array(x);
|
||||
idstring = "";
|
||||
if ( x == undefined)
|
||||
{
|
||||
if (document.addToPB.selected_id.checked)
|
||||
{
|
||||
yy = document.addToPB.selected_id.value+"_listprice";
|
||||
document.addToPB.idlist.value=document.addToPB.selected_id.value;
|
||||
var elem = document.addToPB.elements;
|
||||
var ele_len =elem.length;
|
||||
var i=0,j=0;
|
||||
|
||||
for(i=0; i<ele_len; i++)
|
||||
{
|
||||
if(elem[i].name == yy)
|
||||
{
|
||||
if (elem[i].value.replace(/^\s+/g, '').replace(/\s+$/g, '').length==0)
|
||||
{
|
||||
alert(alert_arr.LISTPRICE_CANNOT_BE_EMPTY);
|
||||
return false;
|
||||
}
|
||||
else if(isNaN(elem[i].value))
|
||||
{
|
||||
alert(alert_arr.INVALID_LIST_PRICE);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
alert(alert_arr.SELECT);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xx = 0;
|
||||
for(i = 0; i < x ; i++)
|
||||
{
|
||||
if(document.addToPB.selected_id[i].checked)
|
||||
{
|
||||
idstring = document.addToPB.selected_id[i].value +";"+idstring;
|
||||
prod_array[xx] = document.addToPB.selected_id[i].value;
|
||||
|
||||
xx++;
|
||||
}
|
||||
}
|
||||
if (xx != 0)
|
||||
{
|
||||
document.addToPB.idlist.value=idstring;
|
||||
var elem = document.addToPB.elements;
|
||||
var ele_len =elem.length;
|
||||
var i=0,j=0;
|
||||
|
||||
for(i=0; i<ele_len; i++)
|
||||
{
|
||||
for(j=0; j < xx; j++)
|
||||
{
|
||||
var xy= prod_array[j]+"_listprice";
|
||||
if(elem[i].name == xy)
|
||||
{
|
||||
if (elem[i].value.replace(/^\s+/g, '').replace(/\s+$/g, '').length==0)
|
||||
{
|
||||
alert(alert_arr.LISTPRICE_CANNOT_BE_EMPTY);
|
||||
return false;
|
||||
}
|
||||
else if(isNaN(elem[i].value)|| elem[i].value <= 0)
|
||||
{
|
||||
alert(alert_arr.INVALID_LIST_PRICE);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
alert(alert_arr.SELECT);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
{/literal}
|
||||
document.addToPB.action="index.php?module=Products&action=addPbProductRelToDB&return_module={$RETURN_MODULE}&return_action={$RETURN_ACTION}&return_id={$RETURN_ID}&parenttab={$CATEGORY}"
|
||||
{rdelim}
|
||||
|
||||
|
||||
function updateAllListPrice()
|
||||
{ldelim}
|
||||
var unitprice_array = new Array({$UNIT_PRICE_ARRAY});
|
||||
var fieldname_array = new Array({$FIELD_NAME_ARRAY});
|
||||
var unitprice,fieldname;
|
||||
var id;
|
||||
var fieldinfo;
|
||||
var checkid;
|
||||
|
||||
for(j=0; j<fieldname_array.length; j++)
|
||||
{ldelim}
|
||||
fieldinfo = fieldname_array[j].split("_");
|
||||
id = fieldinfo[0];
|
||||
checkid = "check_"+id;
|
||||
|
||||
unitprice=unitprice_array[j];
|
||||
fieldname=fieldname_array[j];
|
||||
updateListPrice(unitprice,fieldname,document.getElementById(checkid));
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
|
||||
</script>
|
||||
<script language="javascript" src="modules/Products/Products.js"></script>
|
||||
<table width="95%" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td colspan="3"> </td></tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td class="showPanelBg">
|
||||
{$PRICEBOOKLISTHEADER}
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr height="20">
|
||||
<td class="listFormHeaderLinks">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td> {$RECORD_COUNTS}</td>
|
||||
{$NAVIGATION}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="background-color: rgb(204, 204, 204);" class="small" border="0" cellpadding="3" cellspacing="1" width="90%" align="center">
|
||||
{$LISTHEADER}
|
||||
{$LISTENTITY}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td> </td></tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
</table>
|
||||
</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
<!--*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->
|
||||
<script language="javascript">
|
||||
var parenttab = "{$CATEGORY}";
|
||||
function updateAllListPrice()
|
||||
{ldelim}
|
||||
var unitprice_array = new Array({$UNIT_PRICE_ARRAY});
|
||||
var fieldname_array = new Array({$FIELD_NAME_ARRAY});
|
||||
|
||||
var n=unitprice_array.length;
|
||||
var unitprice,fieldname;
|
||||
var id;
|
||||
var fieldinfo;
|
||||
var checkid;
|
||||
|
||||
for(j=0; j<unitprice_array.length; j++)
|
||||
{ldelim}
|
||||
fieldinfo = fieldname_array[j].split("_");
|
||||
id = fieldinfo[0];
|
||||
checkid = "check_"+id;
|
||||
|
||||
unitprice=unitprice_array[j];
|
||||
fieldname=fieldname_array[j];
|
||||
updateListPrice(unitprice,fieldname,document.getElementById(checkid));
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
|
||||
</script>
|
||||
<script language="javascript" src="modules/PriceBooks/PriceBooks.js"></script>
|
||||
<BR>
|
||||
<BR>
|
||||
{$PRODUCTLISTHEADER}
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="FormBorder" width="100%">
|
||||
<tr height="20">
|
||||
<td >
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td> {$RECORD_COUNTS}</td>
|
||||
{$NAVIGATION}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td >
|
||||
<table style="background-color: rgb(204, 204, 204);" class="small" border="0" cellpadding="3" cellspacing="1" width="90%" align="center">
|
||||
{$LISTHEADER}
|
||||
{$LISTENTITY}
|
||||
</table>
|
||||
</td></tr>
|
||||
<tr><td> </td></tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<form action="index.php" method="post" name="AuditTrail" id="form" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type='hidden' name='module' value='Settings'>
|
||||
<input type='hidden' name='action' value='AuditTrail'>
|
||||
<input type='hidden' name='return_action' value='ListView'>
|
||||
<input type='hidden' name='return_module' value='Settings'>
|
||||
<input type='hidden' name='parenttab' value='Settings'>
|
||||
|
||||
<br>
|
||||
|
||||
<div align=center>
|
||||
{include file='SetMenu.tpl'}
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'audit.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_AUDIT_TRAIL}" width="48" height="48" border=0 title="{$MOD.LBL_AUDIT_TRAIL}"></td>
|
||||
<td class=heading2 valign=bottom><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > {$MOD.LBL_AUDIT_TRAIL}</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_AUDIT_TRAIL_DESC}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
<td class="big" height="40px;" width="70%"><strong>{$MOD.LBL_AUDIT_TRAIL}</strong></td>
|
||||
<td class="small" align="center" width="30%">
|
||||
<span id="audit_info" class="crmButton small cancel" style="display:none;"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="listRow">
|
||||
<tr>
|
||||
<td class="small" valign=top ><table width="100%" border="0" cellspacing="0" cellpadding="5">
|
||||
<tr>
|
||||
<td width="20%" nowrap class="small cellLabel"><strong>{$MOD.LBL_ENABLE_AUDIT_TRAIL} </strong></td>
|
||||
<td width="80%" class="small cellText">
|
||||
{if $AuditStatus eq 'enabled'}
|
||||
<input type="checkbox" checked name="enable_audit" onclick="auditenabled(this)"></input>
|
||||
{else}
|
||||
<input type="checkbox" name="enable_audit" onclick="auditenabled(this)"></input>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_USER_AUDIT}</strong></td>
|
||||
<td class="small cellText">
|
||||
<select name="user_list" id="user_list" class="small">
|
||||
{$USERLIST}
|
||||
</select>
|
||||
</td>
|
||||
<td class="small cellText" align=right>
|
||||
<input title="{$MOD.LBL_VIEW_AUDIT_TRAIL}" class="crmButton small edit" onclick="showAuditTrail();" type="button" name="button" value="{$MOD.LBL_VIEW_AUDIT_TRAIL}" >
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!--table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="small" nowrap align=right><a href="#top">{$MOD.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table-->
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
{literal}
|
||||
<script>
|
||||
|
||||
function auditenabled(ochkbox)
|
||||
{
|
||||
if(ochkbox.checked == true)
|
||||
{
|
||||
var status='enabled';
|
||||
$('audit_info').innerHTML = 'Audit Trail Enabled';
|
||||
$('audit_info').style.display = 'block';
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var status = 'disabled';
|
||||
$('audit_info').innerHTML = 'Audit Trail Disabled';
|
||||
$('audit_info').style.display = 'block';
|
||||
|
||||
}
|
||||
$("status").style.display="block";
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: 'module=Settings&action=SettingsAjax&file=SaveAuditTrail&ajax=true&audit_trail='+status,
|
||||
onComplete: function(response) {
|
||||
$("status").style.display="none";
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
setTimeout("hide('audit_info')",3000);
|
||||
}
|
||||
|
||||
function showAuditTrail()
|
||||
{
|
||||
|
||||
var userid = $('user_list').options[$('user_list').selectedIndex].value;
|
||||
window.open("index.php?module=Settings&action=SettingsAjax&file=ShowAuditTrail&userid="+userid,"","width=645,height=750,resizable=0,scrollbars=1,left=100");
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
{/literal}
|
||||
@@ -0,0 +1,141 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script type="text/javascript" src="modules/{$MODULE}/{$MODULE}.js"></script>
|
||||
|
||||
<TABLE border=0 cellspacing=0 cellpadding=0 width=100% class=small>
|
||||
<tr><td style="height:2px"></td></tr>
|
||||
<tr>
|
||||
{assign var="action" value="ListView"}
|
||||
{assign var="MODULELABEL" value=$MODULE|@getTranslatedString:$MODULE}
|
||||
<td style="padding-left:10px;padding-right:50px" class="moduleName" nowrap>{$APP.$CATEGORY} > <a class="hdrLink" href="index.php?action={$action}&module={$MODULE}&parenttab={$CATEGORY}">{$MODULELABEL}</a></td>
|
||||
<td width=100% nowrap>
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="0" >
|
||||
<tr>
|
||||
<td class="sep1" style="width:1px;"></td>
|
||||
<td class=small >
|
||||
<!-- Add and Search -->
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td>
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
{if $CHECK.EditView eq 'yes' && $MODULE neq 'Emails' && $MODULE neq 'Webmails'}
|
||||
{if $MODULE eq 'Calendar'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Add-Faded.gif'|@vtiger_imageurl:$THEME}" border=0></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="index.php?module={$MODULE}&action=EditView&return_action=DetailView&parenttab={$CATEGORY}"><img src="{$IMAGE_PATH}btnL3Add.gif" alt="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." title="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." border=0></a></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Add-Faded.gif'|@vtiger_imageurl:$THEME}" border=0></td>
|
||||
{/if}
|
||||
|
||||
{if $CHECK.index eq 'yes' && $MODULE neq 'Emails' && $MODULE neq 'Webmails'}
|
||||
<td style="padding-right:10px"><a href="javascript:;" onClick="moveMe('searchAcc');searchshowhide('searchAcc','advSearch');mergehide('mergeDup')" ><img src="{$IMAGE_PATH}btnL3Search.gif" alt="{$APP.LBL_SEARCH_ALT}{$MODULE|getTranslatedString:$MODULE}..." title="{$APP.LBL_SEARCH_TITLE}{$MODULE|getTranslatedString:$MODULE}..." border=0></a></a></td>
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'btnL3Search-Faded.gif'|@vtiger_imageurl:$THEME}" border=0></td>
|
||||
{/if}
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- Calendar Clock Calculator and Chat -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
{if $CALENDAR_DISPLAY eq 'true'}
|
||||
{if $CATEGORY eq 'Settings' || $CATEGORY eq 'Tools' || $CATEGORY eq 'Analytics'}
|
||||
{if $CHECK.Calendar eq 'yes'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="javascript:;" onClick='fnvshobj(this,"miniCal");getMiniCal("parenttab=My Home Page");'><img src="{$IMAGE_PATH}btnL3Calendar.gif" alt="{$APP.LBL_CALENDAR_ALT}" title="{$APP.LBL_CALENDAR_TITLE}" border=0></a></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Calendar-Faded.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
{/if}
|
||||
{else}
|
||||
{if $CHECK.Calendar eq 'yes'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="javascript:;" onClick='fnvshobj(this,"miniCal");getMiniCal("parenttab={$CATEGORY}");'><img src="{$IMAGE_PATH}btnL3Calendar.gif" alt="{$APP.LBL_CALENDAR_ALT}" title="{$APP.LBL_CALENDAR_TITLE}" border=0></a></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Calendar-Faded.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
{if $WORLD_CLOCK_DISPLAY eq 'true'}
|
||||
<td style="padding-right:0px"><a href="javascript:;"><img src="{$IMAGE_PATH}btnL3Clock.gif" alt="{$APP.LBL_CLOCK_ALT}" title="{$APP.LBL_CLOCK_TITLE}" border=0 onClick="fnvshobj(this,'wclock');"></a></a></td>
|
||||
{/if}
|
||||
{if $CALCULATOR_DISPLAY eq 'true'}
|
||||
<td style="padding-right:0px"><a href="#"><img src="{$IMAGE_PATH}btnL3Calc.gif" alt="{$APP.LBL_CALCULATOR_ALT}" title="{$APP.LBL_CALCULATOR_TITLE}" border=0 onClick="fnvshobj(this,'calculator_cont');fetch_calc();"></a></td>
|
||||
{/if}
|
||||
{if $CHAT_DISPLAY eq 'true'}
|
||||
<td style="padding-right:10px"><a href="javascript:;" onClick='return window.open("index.php?module=Home&action=vtchat","Chat","width=600,height=450,resizable=1,scrollbars=1");'><img src="{$IMAGE_PATH}tbarChat.gif" alt="{$APP.LBL_CHAT_ALT}" title="{$APP.LBL_CHAT_TITLE}" border=0></a>
|
||||
{/if}
|
||||
</td>
|
||||
<td style="padding-right:10px"><img src="{$IMAGE_PATH}btnL3Tracker.gif" alt="{$APP.LBL_LAST_VIEWED}" title="{$APP.LBL_LAST_VIEWED}" border=0 onClick="fnvshobj(this,'tracker');">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- Import / Export -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
|
||||
{* vtlib customization: Hook to enable import/export button for custom modules. Added CUSTOM_MODULE *}
|
||||
|
||||
{if $MODULE eq 'Vendors' || $MODULE eq 'HelpDesk' || $MODULE eq 'Contacts' || $MODULE eq 'Leads' || $MODULE eq 'Accounts' || $MODULE eq 'Potentials' || $MODULE eq 'Products' || $MODULE eq 'Documents'|| $CUSTOM_MODULE eq 'true' }
|
||||
{if $CHECK.Import eq 'yes' && $MODULE neq 'Documents'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="index.php?module={$MODULE}&action=Import&step=1&return_module={$MODULE}&return_action=index&parenttab={$CATEGORY}"><img src="{$IMAGE_PATH}tbarImport.gif" alt="{$APP.LBL_IMPORT} {$MODULE|getTranslatedString:$MODULE}" title="{$APP.LBL_IMPORT} {$MODULE|getTranslatedString:$MODULE}" border="0"></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'tbarImport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{if $CHECK.Export eq 'yes'}
|
||||
<td style="padding-right:10px"><a name='export_link' href="javascript:void(0)" onclick="return selectedRecords('{$MODULE}','{$CATEGORY}')"><img src="{$IMAGE_PATH}tbarExport.gif" alt="{$APP.LBL_EXPORT} {$MODULE|getTranslatedString:$MODULE}" title="{$APP.LBL_EXPORT} {$MODULE|getTranslatedString:$MODULE}" border="0"></a></td>
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'tbarExport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'tbarImport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
<td style="padding-right:10px"><img src="{'tbarExport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{if $MODULE eq 'Contacts' || $MODULE eq 'Leads' || $MODULE eq 'Accounts'|| $MODULE eq 'Products'|| $MODULE eq 'Potentials'|| $MODULE eq 'HelpDesk'|| $MODULE eq 'Vendors' || $CUSTOM_MODULE eq 'true'}
|
||||
{if $CHECK.DuplicatesHandling eq 'yes'}
|
||||
<!--<td style="padding-right:10px"><a href="index.php?module={$MODULE}&action=FindDuplicateRecords&button_view=true&list_view=true&parenttab={$CATEGORY}"><img src="{$IMAGE_PATH}findduplicates.gif" alt="{$APP.LBL_FIND_DUPICATES}" title="{$APP.LBL_FIND_DUPLICATES}" border="0"></a></td> -->
|
||||
<td style="padding-right:10px"><a href="javascript:;" onClick="moveMe('mergeDup');mergeshowhide('mergeDup');searchhide('searchAcc','advSearch');"><img src="{'findduplicates.gif'|@vtiger_imageurl:$THEME}" alt="{$APP.LBL_FIND_DUPICATES}" title="{$APP.LBL_FIND_DUPLICATES}" border="0"></a></td>
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'FindDuplicates-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'FindDuplicates-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- All Menu -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
<td style="padding-left:10px;"><a href="javascript:;" onmouseout="fninvsh('allMenu');" onClick="fnvshobj(this,'allMenu')"><img src="{$IMAGE_PATH}btnL3AllMenu.gif" alt="{$APP.LBL_ALL_MENU_ALT}" title="{$APP.LBL_ALL_MENU_TITLE}" border="0"></a></td>
|
||||
{if $CHECK.moduleSettings eq 'yes'}
|
||||
<td style="padding-left:10px;"><a href='index.php?module=Settings&action=ModuleManager&module_settings=true&formodule={$MODULE}&parenttab=Settings'><img src="{'settingsBox.png'|@vtiger_imageurl:$THEME}" alt="{$MODULE|getTranslatedString:$MODULE} {$APP.LBL_SETTINGS}" title="{$MODULE|getTranslatedString:$MODULE} {$APP.LBL_SETTINGS}" border="0"></a></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td style="height:2px"></td></tr>
|
||||
</TABLE>
|
||||
@@ -0,0 +1,140 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script type="text/javascript" src="modules/{$MODULE}/{$MODULE}.js"></script>
|
||||
|
||||
<TABLE border=0 cellspacing=0 cellpadding=0 width=100% class=small>
|
||||
<tr><td style="height:2px"></td></tr>
|
||||
<tr>
|
||||
{assign var="MODULELABEL" value=$MODULE|@getTranslatedString:$MODULE}
|
||||
{if $CATEGORY eq 'Settings'}
|
||||
<!-- No List View in Settings - Action is index -->
|
||||
<td style="padding-left:10px;padding-right:50px" class="moduleName" nowrap><a class="hdrLink" href="index.php?action=index&module={$MODULE}&parenttab={$CATEGORY}">{$MODULELABEL}</a></td>
|
||||
{else}
|
||||
<td style="padding-left:10px;padding-right:50px" class="moduleName" nowrap>{$APP.$CATEGORY} > <a class="hdrLink" href="index.php?action=ListView&module={$MODULE}&parenttab={$CATEGORY}">{$MODULELABEL}</a></td>
|
||||
{/if}
|
||||
<td width=100% nowrap>
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="0" >
|
||||
<tr>
|
||||
<td class="sep1" style="width:1px;"></td>
|
||||
<td class=small >
|
||||
<!-- Add and Search -->
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td>
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
{if $CHECK.EditView eq 'yes'}
|
||||
{if $MODULE eq 'Calendar'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="javascript:;" id="showSubMenu" onMouseOver="fnvshobj(this,'reportLay');" onMouseOut="fninvsh('reportLay');"><img src="{$IMAGE_PATH}btnL3Add.gif" alt="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." title="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." border=0></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="index.php?module={$MODULE}&action=EditView&return_action=DetailView&parenttab={$CATEGORY}"><img src="{$IMAGE_PATH}btnL3Add.gif" alt="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." title="{$APP.LBL_CREATE_BUTTON_LABEL} {$SINGLE_MOD|getTranslatedString:$MODULE}..." border=0></a></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Add-Faded.gif'|@vtiger_imageurl:$THEME}" border=0></td>
|
||||
{/if}
|
||||
|
||||
<td style="padding-right:10px"><img src="{'btnL3Search-Faded.gif'|@vtiger_imageurl:$THEME}" border=0></td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- Calendar Clock Calculator and Chat -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
{if $CALENDAR_DISPLAY eq 'true'}
|
||||
{if $CATEGORY eq 'Settings' || $CATEGORY eq 'Tools' || $CATEGORY eq 'Analytics'}
|
||||
{if $CHECK.Calendar eq 'yes'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="javascript:;" onClick='fnvshobj(this,"miniCal");getMiniCal("parenttab=My Home Page");'><img src="{$IMAGE_PATH}btnL3Calendar.gif" alt="{$APP.LBL_CALENDAR_ALT}" title="{$APP.LBL_CALENDAR_TITLE}" border=0></a></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Calendar-Faded.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
{/if}
|
||||
{else}
|
||||
{if $CHECK.Calendar eq 'yes'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="javascript:;" onClick='fnvshobj(this,"miniCal");getMiniCal("parenttab={$CATEGORY}");'><img src="{$IMAGE_PATH}btnL3Calendar.gif" alt="{$APP.LBL_CALENDAR_ALT}" title="{$APP.LBL_CALENDAR_TITLE}" border=0></a></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'btnL3Calendar-Faded.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
{if $WORLD_CLOCK_DISPLAY eq 'true'}
|
||||
<td style="padding-right:0px"><a href="javascript:;"><img src="{$IMAGE_PATH}btnL3Clock.gif" alt="{$APP.LBL_CLOCK_ALT}" title="{$APP.LBL_CLOCK_TITLE}" border=0 onClick="fnvshobj(this,'wclock');"></a></a></td>
|
||||
{/if}
|
||||
{if $CALCULATOR_DISPLAY eq 'true'}
|
||||
<td style="padding-right:0px"><a href="#"><img src="{$IMAGE_PATH}btnL3Calc.gif" alt="{$APP.LBL_CALCULATOR_ALT}" title="{$APP.LBL_CALCULATOR_TITLE}" border=0 onClick="fnvshobj(this,'calculator_cont');fetch_calc();"></a></td>
|
||||
{/if}
|
||||
{if $CHAT_DISPLAY eq 'true'}
|
||||
<td style="padding-right:0px"><a href="javascript:;" onClick='return window.open("index.php?module=Home&action=vtchat","Chat","width=600,height=450,resizable=1,scrollbars=1");'><img src="{$IMAGE_PATH}tbarChat.gif" alt="{$APP.LBL_CHAT_ALT}" title="{$APP.LBL_CHAT_TITLE}" border=0></a>
|
||||
{/if}
|
||||
</td>
|
||||
<td style="padding-right:10px"><img src="{$IMAGE_PATH}btnL3Tracker.gif" alt="{$APP.LBL_LAST_VIEWED}" title="{$APP.LBL_LAST_VIEWED}" border=0 onClick="fnvshobj(this,'tracker');">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- Import / Export -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
|
||||
{* vtlib customization: Hook to enable import/export button for custom modules. Added CUSTOM_MODULE *}
|
||||
|
||||
{if $MODULE eq 'Vendors' || $MODULE eq 'HelpDesk' || $MODULE eq 'Contacts' || $MODULE eq 'Leads' || $MODULE eq 'Accounts' || $MODULE eq 'Potentials' || $MODULE eq 'Products' || $MODULE eq 'Documents' || $CUSTOM_MODULE eq 'true' }
|
||||
{if $CHECK.Import eq 'yes' && $MODULE neq 'Documents'}
|
||||
<td style="padding-right:0px;padding-left:10px;"><a href="index.php?module={$MODULE}&action=Import&step=1&return_module={$MODULE}&return_action=index&parenttab={$CATEGORY}"><img src="{$IMAGE_PATH}tbarImport.gif" alt="{$APP.LBL_IMPORT} {$MODULE|getTranslatedString:$MODULE}" title="{$APP.LBL_IMPORT} {$MODULE|getTranslatedString:$MODULE}" border="0"></a></td>
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'tbarImport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{if $CHECK.Export eq 'yes'}
|
||||
<td style="padding-right:10px"><a name='export_link' href="javascript:void(0)" onclick="return selectedRecords('{$MODULE}','{$CATEGORY}')"><img src="{$IMAGE_PATH}tbarExport.gif" alt="{$APP.LBL_EXPORT} {$MODULE|getTranslatedString:$MODULE}" title="{$APP.LBL_EXPORT} {$MODULE|getTranslatedString:$MODULE}" border="0"></a></td>
|
||||
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'tbarExport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:0px;padding-left:10px;"><img src="{'tbarImport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
<td style="padding-right:10px"><img src="{'tbarExport-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{if $MODULE eq 'Contacts' || $MODULE eq 'Leads' || $MODULE eq 'Accounts'|| $MODULE eq 'Products'|| $MODULE eq 'HelpDesk'|| $MODULE eq 'Potentials'|| $MODULE eq 'Vendors'}
|
||||
{if $VIEW eq true}
|
||||
<td style="padding-right:10px"><a href="index.php?module={$MODULE}&action=FindDuplicateRecords&button_view&list_view"><img src="{'findduplicates.gif'|@vtiger_imageurl:$THEME}" alt="{$APP.LBL_FIND_DUPICATES}" title="{$APP.LBL_FIND_DUPLICATES}" border="0"></a></td>
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'FindDuplicates-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
{else}
|
||||
<td style="padding-right:10px"><img src="{'FindDuplicates-Faded.gif'|@vtiger_imageurl:$THEME}" border="0"></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
<td style="width:20px;"> </td>
|
||||
<td class="small">
|
||||
<!-- All Menu -->
|
||||
<table border=0 cellspacing=0 cellpadding=5>
|
||||
<tr>
|
||||
<td style="padding-left:10px;"><a href="javascript:;" onmouseout="fninvsh('allMenu');" onClick="fnvshobj(this,'allMenu')"><img src="{$IMAGE_PATH}btnL3AllMenu.gif" alt="{$APP.LBL_ALL_MENU_ALT}" title="{$APP.LBL_ALL_MENU_TITLE}" border="0"></a></td>
|
||||
{if $CHECK.moduleSettings eq 'yes'}
|
||||
<td style="padding-left:10px;"><a href='index.php?module=Settings&action=ModuleManager&module_settings=true&formodule={$MODULE}&parenttab=Settings'><img src="{'settingsBox.png'|@vtiger_imageurl:$THEME}" alt="{$MODULE|getTranslatedString:$MODULE} {$APP.LBL_SETTINGS}" title="{$MODULE|getTranslatedString:$MODULE} {$APP.LBL_SETTINGS}" border="0"></a></td>
|
||||
{/if}
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</TABLE>
|
||||
@@ -0,0 +1,35 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
<div id="calc" style="z-index:10000002" class="layerPopup" >
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr style="cursor:move;" >
|
||||
<td class="mailClientBg small" id="calc_Handle"><b>{$APP.LBL_CALCULATOR}</b></td>
|
||||
<td align="right"class="mailClientBg small">
|
||||
<a href="javascript:;">
|
||||
<img src="{'close.gif'|@vtiger_imageurl:$THEME}" border="0" onClick="fninvsh('calc')" hspace="5" align="absmiddle">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" class="hdrNameBg">
|
||||
</tr>
|
||||
<tr><td style="padding:10px;" colspan="2">{$CALC}</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var cal_Handle = document.getElementById("calc_Handle");
|
||||
var cal_Root = document.getElementById("calc");
|
||||
Drag.init(cal_Handle, cal_Root);
|
||||
</script>
|
||||
@@ -0,0 +1,169 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
{if $WORLD_CLOCK_DISPLAY eq 'true'}
|
||||
|
||||
<div id="wclock" style="z-index:10000001;" class="layerPopup">
|
||||
<table class="mailClientBg" align="center" border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr style="cursor:move;" >
|
||||
<td style="text-align:left;" id="Handle"><b>{$APP.LBL_WORLD_CLOCK}</b></td>
|
||||
<td align="right">
|
||||
<a href="javascript:;">
|
||||
<img src="{'close.gif'|@vtiger_imageurl:$THEME}" border="0" onClick="fninvsh('wclock')" hspace="5" align="absmiddle">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="hdrNameBg" align="center" border="0" cellpadding="2" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td nowrap="nowrap" colspan="2">
|
||||
<div style="background-image: url({$IMAGEPATH}clock_bg.gif); background-repeat: no-repeat; background-position: 4px 38px;" id="theClockLayer">
|
||||
<div id="theCities" class="citystyle">
|
||||
<form action="" name="frmtimezone">
|
||||
<input name="PHPSESSID" value="162c0ab587f6c555aaaa30d681b61f7c" type="hidden">
|
||||
<select name="clockcity" size="1" class="importBox small" id="clockcity" style="width:125px;" onchange="lcl(this.selectedIndex,this.options[0].selected)">
|
||||
<option value="0" selected="selected">Local time</option>
|
||||
<option value="4.30">Afghanistan</option>
|
||||
<option value="1">Algeria</option>
|
||||
<option value="-3">Argentina</option>
|
||||
<option value="9.30">Australia - Adelaide</option>
|
||||
<option value="8">Australia - Perth</option>
|
||||
<option value="10">Australia - Sydney</option>
|
||||
<option value="1">Austria</option>
|
||||
<option value="3">Bahrain</option>
|
||||
<option value="6">Bangladesh</option>
|
||||
<option value="1">Belgium</option>
|
||||
<option value="-4">Bolivia</option>
|
||||
<option value="-5">Brazil - Andes</option>
|
||||
<option value="-3">Brazil - East</option>
|
||||
<option value="-4">Brazil - West</option>
|
||||
<option value="2">Bulgaria</option>
|
||||
<option value="6.30">Burma (Myanmar)</option>
|
||||
<option value="-5">Chile</option>
|
||||
<option value="-7">Canada - Calgary</option>
|
||||
<option value="-3.30">Canada - Newfoundland</option>
|
||||
<option value="-4">Canada - Nova Scotia</option>
|
||||
<option value="-5">Canada - Toronto</option>
|
||||
<option value="-8">Canada - Vancouver</option>
|
||||
<option value="-6">Canada - Winnipeg</option>
|
||||
<option value="8">China - Mainland</option>
|
||||
<option value="8">China - Taiwan</option>
|
||||
<option value="-5">Colombia</option>
|
||||
<option value="-5">Cuba</option>
|
||||
<option value="1">Denmark</option>
|
||||
<option value="-5">Ecuador</option>
|
||||
<option value="2">Egypt</option>
|
||||
<option value="12">Fiji</option>
|
||||
<option value="2">Finland</option>
|
||||
<option value="1">France</option>
|
||||
<option value="1">Germany</option>
|
||||
<option value="0">Ghana</option>
|
||||
<option value="2">Greece</option>
|
||||
<option value="-3">Greenland</option>
|
||||
<option value="1">Hungary</option>
|
||||
<option value="5.30">India</option>
|
||||
<option value="8">Indonesia - Bali, Borneo</option>
|
||||
<option value="9">Indonesia - Irian Jaya</option>
|
||||
<option value="7">Indonesia - Sumatra, Java</option>
|
||||
<option value="3.30">Iran</option>
|
||||
<option value="3">Iraq</option>
|
||||
<option value="2">Israel</option>
|
||||
<option value="1">Italy</option>
|
||||
<option value="-5">Jamaica</option>
|
||||
<option value="9">Japan</option>
|
||||
<option value="3">Kenya</option>
|
||||
<option value="9">Korea (North & South)</option>
|
||||
<option value="3">Kuwait</option>
|
||||
<option value="1">Libya</option>
|
||||
<option value="8">Malaysia</option>
|
||||
<option value="5">Maldives</option>
|
||||
<option value="1">Mali</option>
|
||||
<option value="4">Mauritius</option>
|
||||
<option value="-6">Mexico</option>
|
||||
<option value="0">Morocco</option>
|
||||
<option value="5.45">Nepal</option>
|
||||
<option value="1">Netherlands</option>
|
||||
<option value="12">New Zealand</option>
|
||||
<option value="1">Nigeria</option>
|
||||
<option value="1">Norway</option>
|
||||
<option value="4">Oman</option>
|
||||
<option value="5">Pakistan</option>
|
||||
<option value="-5">Peru</option>
|
||||
<option value="8">Philippines</option>
|
||||
<option value="1">Poland</option>
|
||||
<option value="1">Portugal</option>
|
||||
<option value="3">Qatar</option>
|
||||
<option value="2">Romania</option>
|
||||
<option value="11">Russia - Kamchatka</option>
|
||||
<option value="3">Russia - Moscow</option>
|
||||
<option value="9">Russia - Vladivostok</option>
|
||||
<option value="4">Seychelles</option>
|
||||
<option value="3">Saudi Arabia</option>
|
||||
<option value="8">Singapore</option>
|
||||
<option value="2">South Africa</option>
|
||||
<option value="1">Spain</option>
|
||||
<option value="3">Syria</option>
|
||||
<option value="5.30">Sri Lanka</option>
|
||||
<option value="1">Sweden</option>
|
||||
<option value="1">Switzerland</option>
|
||||
<option value="7">Thailand</option>
|
||||
<option value="12">Tonga</option>
|
||||
<option value="2">Turkey</option>
|
||||
<option value="3">Ukraine</option>
|
||||
<option value="5">Uzbekistan</option>
|
||||
<option value="7">Vietnam</option>
|
||||
<option value="4">UAE</option>
|
||||
<option value="0">UK</option>
|
||||
<option value="-9">USA - Alaska</option>
|
||||
<option value="-9">USA - Arizona</option>
|
||||
<option value="-6">USA - Central</option>
|
||||
<option value="-5">USA - Eastern</option>
|
||||
<option value="-10">USA - Hawaii</option>
|
||||
<option value="-5">USA - Indiana East</option>
|
||||
<option value="-7">USA - Mountain</option>
|
||||
<option value="-8">USA - Pacific</option>
|
||||
<option value="3">Yemen</option>
|
||||
<option value="1">Yugoslavia</option>
|
||||
<option value="2">Zambia</option>
|
||||
<option value="2">Zimbabwe</option>
|
||||
</select>
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var theme = "{$THEME}";
|
||||
</script>
|
||||
<script type="text/javascript" src="include/js/clock.js"></script>
|
||||
|
||||
<div id="theFace0" class="facestyle" style="color: rgb(0, 0, 0); top: 81px; left: 96px;">3</div>
|
||||
<div id="theFace1" class="facestyle" style="color: rgb(0, 0, 0); top: 102px; left: 90.3731px;">4</div>
|
||||
<div id="theFace2" class="facestyle" style="color: rgb(0, 0, 0); top: 117.373px; left: 75px;">5</div>
|
||||
<div id="theFace3" class="facestyle" style="color: rgb(0, 0, 0); top: 123px; left: 54px;">6</div>
|
||||
<div id="theFace4" class="facestyle" style="color: rgb(0, 0, 0); top: 117.373px; left: 33px;">7</div>
|
||||
<div id="theFace5" class="facestyle" style="color: rgb(0, 0, 0); top: 102px; left: 17.6269px;">8</div>
|
||||
<div id="theFace6" class="facestyle" style="color: rgb(0, 0, 0); top: 81px; left: 12px;">9</div>
|
||||
<div id="theFace7" class="facestyle" style="color: rgb(0, 0, 0); top: 60px; left: 17.6269px;">10</div>
|
||||
<div id="theFace8" class="facestyle" style="color: rgb(0, 0, 0); top: 44.6269px; left: 33px;">11</div>
|
||||
<div id="theFace9" class="facestyle" style="color: rgb(0, 0, 0); top: 39px; left: 54px;">12</div>
|
||||
<div id="theFace10" class="facestyle" style="color: rgb(0, 0, 0); top: 44.6269px; left: 75px;">1</div>
|
||||
<div id="theFace11" class="facestyle" style="color: rgb(0, 0, 0); top: 60px; left: 90.3731px;">2</div>
|
||||
</div></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<script>
|
||||
var theHandle = document.getElementById("Handle");
|
||||
var theRoot = document.getElementById("wclock");
|
||||
Drag.init(theHandle, theRoot);
|
||||
</script>
|
||||
|
||||
{/if}
|
||||
@@ -0,0 +1,351 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={$APP.LBL_CHARSET}">
|
||||
<title>{$MOD.TITLE_COMPOSE_MAIL}</title>
|
||||
<link REL="SHORTCUT ICON" HREF="include/images/vtigercrm_icon.ico">
|
||||
<style type="text/css">@import url("themes/{$THEME}/style.css");</style>
|
||||
<script language="javascript" type="text/javascript" src="include/scriptaculous/prototype.js"></script>
|
||||
<script src="include/scriptaculous/scriptaculous.js" type="text/javascript"></script>
|
||||
<script src="include/js/general.js" type="text/javascript"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/{php} echo $_SESSION['authenticated_user_language'];{/php}.lang.js?{php} echo $_SESSION['vtiger_version'];{/php}"></script>
|
||||
<script type="text/javascript" src="include/fckeditor/fckeditor.js"></script>
|
||||
<script type="text/javascript" src="modules/Products/multifile.js"></script>
|
||||
</head>
|
||||
<body marginheight="0" marginwidth="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
|
||||
{literal}
|
||||
<form name="EditView" method="POST" ENCTYPE="multipart/form-data" action="index.php" onSubmit="if(email_validate(this.form,'')) { VtigerJS_DialogBox.block();} else { return false; }">
|
||||
{/literal}
|
||||
<input type="hidden" name="send_mail" >
|
||||
<input type="hidden" name="contact_id" value="{$CONTACT_ID}">
|
||||
<input type="hidden" name="user_id" value="{$USER_ID}">
|
||||
<input type="hidden" name="filename" value="{$FILENAME}">
|
||||
<input type="hidden" name="old_id" value="{$OLD_ID}">
|
||||
<input type="hidden" name="module" value="{$MODULE}">
|
||||
<input type="hidden" name="record" value="{$ID}">
|
||||
<input type="hidden" name="mode" value="{$MODE}">
|
||||
<input type="hidden" name="action">
|
||||
<input type="hidden" name="popupaction" value="create">
|
||||
<input type="hidden" name="hidden_toid" id="hidden_toid">
|
||||
<table class="small mailClient" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td colspan=3 >
|
||||
<!-- Email Header -->
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="mailClientWriteEmailHeader">
|
||||
<tr>
|
||||
<td >{$MOD.LBL_COMPOSE_EMAIL}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{foreach item=row from=$BLOCKS}
|
||||
{foreach item=elements from=$row}
|
||||
{if $elements.2.0 eq 'parent_id'}
|
||||
<tr>
|
||||
<td class="mailSubHeader" align="right"><font color="red">*</font><b>{$MOD.LBL_TO}</b></td>
|
||||
<td class="cellText" style="padding: 5px;">
|
||||
<input name="{$elements.2.0}" id="{$elements.2.0}" type="hidden" value="{$IDLISTS}">
|
||||
<input type="hidden" name="saved_toid" value="{$TO_MAIL}">
|
||||
<input id="parent_name" name="parent_name" readonly class="txtBox" type="text" value="{$TO_MAIL}" style="width: 550px;">
|
||||
</td>
|
||||
<td class="cellText" style="padding: 5px;" align="left" nowrap>
|
||||
<select name="parent_type">
|
||||
{foreach key=labelval item=selectval from=$elements.1.0}
|
||||
{if $select_module eq $APP[$labelval]}
|
||||
{assign var=selectval value="selected"}
|
||||
{else}
|
||||
{assign var=selectval value=""}
|
||||
{/if}
|
||||
<option value="{$labelval}" {$selectval}>{$APP[$labelval]}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
<span class="mailClientCSSButton">
|
||||
<img src="{'select.gif'|@vtiger_imageurl:$THEME}" alt="{$APP.LBL_SELECT}" title="{$APP.LBL_SELECT}" LANGUAGE=javascript onclick='return window.open("index.php?module="+ document.EditView.parent_type.value +"&action=Popup&html=Popup_picker&form=HelpDeskEditView&popuptype=set_return_emails","test","width=640,height=602,resizable=0,scrollbars=0,top=150,left=200");' align="absmiddle" style='cursor:hand;cursor:pointer'>
|
||||
</span><span class="mailClientCSSButton" ><img src="{'clear_field.gif'|@vtiger_imageurl:$THEME}" alt="{$APP.LBL_CLEAR}" title="{$APP.LBL_CLEAR}" LANGUAGE=javascript onClick="$('parent_id').value=''; $('hidden_toid').value='';$('parent_name').value=''; return false;" align="absmiddle" style='cursor:hand;cursor:pointer'>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{if 'ccmail'|@emails_checkFieldVisiblityPermission eq '0'}
|
||||
<td class="mailSubHeader" style="padding: 5px;" align="right">{$MOD.LBL_CC}</td>
|
||||
<td class="cellText" style="padding: 5px;">
|
||||
<input name="ccmail" id ="cc_name" class="txtBox" type="text" value="{$CC_MAIL}" style="width:99%">
|
||||
</td>
|
||||
{else}
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
{/if}
|
||||
<td valign="top" class="cellLabel" rowspan="4"><div id="attach_cont" class="addEventInnerBox" style="overflow:auto;height:100px;width:100%;position:relative;left:0px;top:0px;"></div>
|
||||
</tr>
|
||||
{if 'bccmail'|@emails_checkFieldVisiblityPermission eq '0'}
|
||||
<tr>
|
||||
<td class="mailSubHeader" style="padding: 5px;" align="right">{$MOD.LBL_BCC}</td>
|
||||
<td class="cellText" style="padding: 5px;">
|
||||
<input name="bccmail" id="bcc_name" class="txtBox" type="text" value="{$BCC_MAIL}" style="width:99%">
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{elseif $elements.2.0 eq 'subject'}
|
||||
<tr>
|
||||
<td class="mailSubHeader" style="padding: 5px;" align="right" nowrap><font color="red">*</font>{$elements.1.0} :</td>
|
||||
{if $WEBMAIL eq 'true' or $RET_ERROR eq 1}
|
||||
<td class="cellText" style="padding: 5px;"><input type="text" class="txtBox" name="{$elements.2.0}" value="{$SUBJECT}" id="{$elements.2.0}" style="width:99%"></td>
|
||||
{else}
|
||||
<td class="cellText" style="padding: 5px;"><input type="text" class="txtBox" name="{$elements.2.0}" value="{$elements.3.0}" id="{$elements.2.0}" style="width:99%"></td>
|
||||
{/if}
|
||||
</tr>
|
||||
{elseif $elements.2.0 eq 'filename'}
|
||||
|
||||
<tr>
|
||||
<td class="mailSubHeader" style="padding: 5px;" align="right" nowrap>{$elements.1.0} :</td>
|
||||
<td class="cellText" style="padding: 5px;">
|
||||
<!--<input name="{$elements.2.0}" type="file" class="small txtBox" value="" size="78"/>-->
|
||||
<input name="del_file_list" type="hidden" value="">
|
||||
<div id="files_list" style="border: 1px solid grey; width: 500px; padding: 5px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; font-size: x-small">{$APP.Files_Maximum_6}
|
||||
<input id="my_file_element" type="file" name="{$elements.2.0}" tabindex="7" onchange="validateFilename(this);">
|
||||
<input type="hidden" name="{$elements.2.0}_hidden" value="" />
|
||||
</div>
|
||||
<script>
|
||||
var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 6 );
|
||||
multi_selector.count = 0
|
||||
multi_selector.addElement( document.getElementById( 'my_file_element' ) );
|
||||
</script>
|
||||
<div id="attach_temp_cont" style="display:none;">
|
||||
<table class="small" width="100% ">
|
||||
|
||||
{if $smarty.request.attachment != ''}
|
||||
<tr><td width="100%" colspan="2">{$smarty.request.attachment|@vtlib_purify}<input type="hidden" value="{$smarty.request.attachment|@vtlib_purify}" name="pdf_attachment"></td></tr> {else}
|
||||
|
||||
{foreach item="attach_files" key="attach_id" from=$elements.3}
|
||||
<tr id="row_{$attach_id}"><td width="90%">{$attach_files}</td><td><img src="{'no.gif'|@vtiger_imageurl:$THEME}" onClick="delAttachments({$attach_id})" alt="{$APP.LBL_DELETE_BUTTON}" title="{$APP.LBL_DELETE_BUTTON}" style="cursor:pointer;"></td></tr>
|
||||
{/foreach}
|
||||
<input type='hidden' name='att_id_list' value='{$ATT_ID_LIST}' />
|
||||
{/if}
|
||||
|
||||
{if $WEBMAIL eq 'true'}
|
||||
{foreach item="attach_files" from=$webmail_attachments}
|
||||
<tr ><td width="90%">{$attach_files}</td></tr>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</table>
|
||||
</div>
|
||||
{$elements.3.0}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="mailSubHeader" style="padding: 5px;" align="center">
|
||||
<input title="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_TITLE}" accessKey="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_KEY}" class="crmbutton small edit" onclick="window.open('index.php?module=Users&action=lookupemailtemplates','emailtemplate','top=100,left=200,height=400,width=500,resizable=yes,scrollbars=yes,menubar=no,addressbar=no,status=yes')" type="button" name="button" value=" {$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_LABEL} ">
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="return email_validate(this.form,'save');" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " >
|
||||
<input name="{$MOD.LBL_SEND}" value=" {$APP.LBL_SEND} " class="crmbutton small save" type="button" onclick="return email_validate(this.form,'send');">
|
||||
<input name="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " class="crmbutton small cancel" type="button" onClick="window.close()">
|
||||
</td>
|
||||
</tr>
|
||||
{elseif $elements.2.0 eq 'description'}
|
||||
<tr>
|
||||
<td colspan="3" align="center" valign="top" height="320">
|
||||
{if $WEBMAIL eq 'true' or $RET_ERROR eq 1}
|
||||
<input type="hidden" name="from_add" value="{$from_add}">
|
||||
<input type="hidden" name="att_module" value="Webmails">
|
||||
<input type="hidden" name="mailid" value="{$mailid}">
|
||||
<input type="hidden" name="mailbox" value="{$mailbox}">
|
||||
<textarea style="display: none;" class="detailedViewTextBox" id="description" name="description" cols="90" rows="8">{$DESCRIPTION}</textarea>
|
||||
{else}
|
||||
<textarea style="display: none;" class="detailedViewTextBox" id="description" name="description" cols="90" rows="16">{$elements.3.0}</textarea> {/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
|
||||
<tr>
|
||||
<td colspan="3" class="mailSubHeader" style="padding: 5px;" align="center">
|
||||
<input title="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_TITLE}" accessKey="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_KEY}" class="crmbutton small edit" onclick="window.open('index.php?module=Users&action=lookupemailtemplates','emailtemplate','top=100,left=200,height=400,width=500,menubar=no,addressbar=no,status=yes')" type="button" name="button" value=" {$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_LABEL} ">
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="return email_validate(this.form,'save');" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " >
|
||||
<input name="{$MOD.LBL_SEND}" value=" {$APP.LBL_SEND} " class="crmbutton small save" type="button" onclick="return email_validate(this.form,'send');">
|
||||
<input name="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " class="crmbutton small cancel" type="button" onClick="window.close()">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</body>
|
||||
<script>
|
||||
var cc_err_msg = '{$MOD.LBL_CC_EMAIL_ERROR}';
|
||||
var no_rcpts_err_msg = '{$MOD.LBL_NO_RCPTS_EMAIL_ERROR}';
|
||||
var bcc_err_msg = '{$MOD.LBL_BCC_EMAIL_ERROR}';
|
||||
var conf_mail_srvr_err_msg = '{$MOD.LBL_CONF_MAILSERVER_ERROR}';
|
||||
{literal}
|
||||
function email_validate(oform,mode)
|
||||
{
|
||||
if(trim(mode) == '')
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(oform.parent_name.value.replace(/^\s+/g, '').replace(/\s+$/g, '').length==0)
|
||||
{
|
||||
//alert('No recipients were specified');
|
||||
alert(no_rcpts_err_msg);
|
||||
return false;
|
||||
}
|
||||
//Changes made to fix tickets #4633, # 5111 to accomodate all possible email formats
|
||||
var email_regex = /^[a-zA-Z0-9]+([\_\-\.]*[a-zA-Z0-9]+[\_\-]?)*@[a-zA-Z0-9]+([\_\-]?[a-zA-Z0-9]+)*\.+([\_\-]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)*$/;
|
||||
|
||||
if(document.EditView.ccmail != null){
|
||||
if(document.EditView.ccmail.value.length >= 1){
|
||||
var str = document.EditView.ccmail.value;
|
||||
arr = new Array();
|
||||
arr = str.split(",");
|
||||
var tmp;
|
||||
for(var i=0; i<=arr.length-1; i++){
|
||||
tmp = arr[i];
|
||||
if(tmp.match('<') && tmp.match('>')) {
|
||||
if(!findAngleBracket(arr[i])) {
|
||||
alert(cc_err_msg+": "+arr[i]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(trim(arr[i]) != "" && !(email_regex.test(trim(arr[i]))))
|
||||
{
|
||||
alert(cc_err_msg+": "+arr[i]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(document.EditView.bccmail != null){
|
||||
if(document.EditView.bccmail.value.length >= 1){
|
||||
var str = document.EditView.bccmail.value;
|
||||
arr = new Array();
|
||||
arr = str.split(",");
|
||||
var tmp;
|
||||
for(var i=0; i<=arr.length-1; i++){
|
||||
tmp = arr[i];
|
||||
if(tmp.match('<') && tmp.match('>')) {
|
||||
if(!findAngleBracket(arr[i])) {
|
||||
alert(bcc_err_msg+": "+arr[i]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(trim(arr[i]) != "" && !(email_regex.test(trim(arr[i])))){
|
||||
alert(bcc_err_msg+": "+arr[i]);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(oform.subject.value.replace(/^\s+/g, '').replace(/\s+$/g, '').length==0)
|
||||
{
|
||||
if(email_sub = prompt('You did not specify a subject from this email. If you would like to provide one, please type it now','(no-Subject)'))
|
||||
{
|
||||
oform.subject.value = email_sub;
|
||||
}else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(mode == 'send')
|
||||
{
|
||||
server_check()
|
||||
}else if(mode == 'save')
|
||||
{
|
||||
oform.action.value='Save';
|
||||
oform.submit();
|
||||
}else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//function to extract the mailaddress inside < > symbols.......for the bug fix #3752
|
||||
function findAngleBracket(mailadd)
|
||||
{
|
||||
var strlen = mailadd.length;
|
||||
var success = 0;
|
||||
var gt = 0;
|
||||
var lt = 0;
|
||||
var ret = '';
|
||||
for(i=0;i<strlen;i++){
|
||||
if(mailadd.charAt(i) == '<' && gt == 0){
|
||||
lt = 1;
|
||||
}
|
||||
if(mailadd.charAt(i) == '>' && lt == 1){
|
||||
gt = 1;
|
||||
}
|
||||
if(mailadd.charAt(i) != '<' && lt == 1 && gt == 0)
|
||||
ret = ret + mailadd.charAt(i);
|
||||
|
||||
}
|
||||
if(/^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/.test(ret)){
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
function server_check()
|
||||
{
|
||||
var oform = window.document.EditView;
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody:"module=Emails&action=EmailsAjax&file=Save&ajax=true&server_check=true",
|
||||
onComplete: function(response) {
|
||||
if(response.responseText.indexOf('SUCCESS') > -1)
|
||||
{
|
||||
oform.send_mail.value='true';
|
||||
oform.action.value='Save';
|
||||
oform.submit();
|
||||
}else
|
||||
{
|
||||
//alert('Please Configure Your Mail Server');
|
||||
alert(conf_mail_srvr_err_msg);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
$('attach_cont').innerHTML = $('attach_temp_cont').innerHTML;
|
||||
function delAttachments(id)
|
||||
{
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: 'module=Contacts&action=ContactsAjax&file=DelImage&attachmodule=Emails&recordid='+id,
|
||||
onComplete: function(response)
|
||||
{
|
||||
Effect.Fade('row_'+id);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
{/literal}
|
||||
</script>
|
||||
<script type="text/javascript" defer="1">
|
||||
var oFCKeditor = null;
|
||||
oFCKeditor = new FCKeditor( "description" ,"100%","370") ;
|
||||
oFCKeditor.BasePath = "include/fckeditor/" ;
|
||||
oFCKeditor.ReplaceTextarea();
|
||||
</script>
|
||||
</html>
|
||||
@@ -0,0 +1,315 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/menu.js"></script>
|
||||
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
var allOptions = null;
|
||||
|
||||
function setAllOptions(inputOptions)
|
||||
{ldelim}
|
||||
allOptions = inputOptions;
|
||||
{rdelim}
|
||||
|
||||
function modifyMergeFieldSelect(cause, effect)
|
||||
{ldelim}
|
||||
var selected = cause.options[cause.selectedIndex].value; id="mergeFieldValue"
|
||||
var s = allOptions[cause.selectedIndex];
|
||||
effect.length = s;
|
||||
for (var i = 0; i < s; i++)
|
||||
{ldelim}
|
||||
effect.options[i] = s[i];
|
||||
{rdelim}
|
||||
document.getElementById('mergeFieldValue').value = '';
|
||||
{rdelim}
|
||||
{literal}
|
||||
function init()
|
||||
{
|
||||
var blankOption = new Option('--None--', '--None--');
|
||||
var options = null;
|
||||
{/literal}
|
||||
|
||||
var allOpts = new Object({$ALL_VARIABLES|@count}+1);
|
||||
{assign var="alloptioncount" value="0"}
|
||||
{foreach key=index item=module from=$ALL_VARIABLES}
|
||||
options = new Object({$module|@count}+1);
|
||||
{assign var="optioncount" value="0"}
|
||||
options[{$optioncount}] = blankOption;
|
||||
{foreach key=header item=detail from=$module}
|
||||
{assign var="optioncount" value=$optioncount+1}
|
||||
options[{$optioncount}] = new Option('{$detail.0}', '{$detail.1}');
|
||||
{/foreach}
|
||||
{assign var="alloptioncount" value=$alloptioncount+1}
|
||||
allOpts[{$alloptioncount}] = options;
|
||||
{/foreach}
|
||||
setAllOptions(allOpts);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
{literal}
|
||||
function cancelForm(frm)
|
||||
{
|
||||
frm.action.value='detailviewemailtemplate';
|
||||
frm.parenttab.value='Settings';
|
||||
frm.submit();
|
||||
}
|
||||
{/literal}
|
||||
</script>
|
||||
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
|
||||
{include file='SetMenu.tpl'}
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
{literal}
|
||||
<form action="index.php" method="post" name="templatecreate" onsubmit="if(check4null(templatecreate)) { VtigerJS_DialogBox.block(); } else { return false; }">
|
||||
{/literal}
|
||||
<input type="hidden" name="action">
|
||||
<input type="hidden" name="mode" value="{$EMODE}">
|
||||
<input type="hidden" name="module" value="Settings">
|
||||
<input type="hidden" name="templateid" value="{$TEMPLATEID}">
|
||||
<input type="hidden" name="parenttab" value="{$PARENTTAB}">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'ViewTemplate.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_MODULE_NAME}" width="45" height="60" border=0 title="{$MOD.LBL_MODULE_NAME}"></td>
|
||||
{if $EMODE eq 'edit'}
|
||||
<td class=heading2 valign=bottom><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=listemailtemplates&parenttab=Settings">{$UMOD.LBL_EMAIL_TEMPLATES}</a> > {$MOD.LBL_EDIT} "{$TEMPLATENAME}" </b></td>
|
||||
{else}
|
||||
<td class=heading2 valign=bottom><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=listemailtemplates&parenttab=Settings">{$UMOD.LBL_EMAIL_TEMPLATES}</a> > {$MOD.LBL_CREATE_EMAIL_TEMPLATES} </b></td>
|
||||
{/if}
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$UMOD.LBL_EMAIL_TEMPLATE_DESC}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
{if $EMODE eq 'edit'}
|
||||
<td class="big"><strong>{$UMOD.LBL_PROPERTIES} "{$TEMPLATENAME}" </strong></td>
|
||||
{else}
|
||||
<td class="big"><strong>{$MOD.LBL_CREATE_EMAIL_TEMPLATES}</strong></td>
|
||||
{/if}
|
||||
<td class="small" align=right>
|
||||
<input type="submit" value="{$APP.LBL_SAVE_BUTTON_LABEL}" class="crmButton small save" onclick="this.form.action.value='saveemailtemplate'; this.form.parenttab.value='Settings'" >
|
||||
{if $EMODE eq 'edit'}
|
||||
<input type="submit" value="{$APP.LBL_CANCEL_BUTTON_LABEL}" class="crmButton small cancel" onclick="cancelForm(this.form)" />
|
||||
{else}
|
||||
<input type="button" value="{$APP.LBL_CANCEL_BUTTON_LABEL}" class="crmButton small cancel" onclick="window.history.back()" >
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td width=20% class="small cellLabel"><font color="red">*</font><strong>{$UMOD.LBL_NAME}</strong></td>
|
||||
<td width=80% class="small cellText"><input name="templatename" type="text" value="{$TEMPLATENAME}" class="detailedViewTextBox" tabindex="1"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small cellLabel"><strong>{$UMOD.LBL_DESCRIPTION}</strong></td>
|
||||
<td class="cellText small" valign=top><span class="small cellText">
|
||||
<input name="description" type="text" value="{$DESCRIPTION}" class="detailedViewTextBox" tabindex="2">
|
||||
</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small cellLabel"><strong>{$UMOD.LBL_FOLDER}</strong></td>
|
||||
<td class="cellText small" valign=top>
|
||||
{if $EMODE eq 'edit'}
|
||||
<select name="foldername" class="small" tabindex="" style="width:100%" tabindex="3">
|
||||
{foreach item=arr from=$FOLDERNAME}
|
||||
<option value="{$FOLDERNAME}" {$arr}>{$FOLDERNAME}</option>
|
||||
{if $FOLDERNAME == 'Public'}
|
||||
<option value="Personal">{$UMOD.LBL_PERSONAL}</option>
|
||||
{else}
|
||||
<option value="Public">{$UMOD.LBL_PUBLIC}</option>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</select>
|
||||
{else}
|
||||
<select name="foldername" class="small" tabindex="" value="{$FOLDERNAME}" style="width:100%" tabindex="3">
|
||||
<option value="Personal">{$UMOD.LBL_PERSONAL}</option>
|
||||
<option value="Public" selected>{$UMOD.LBL_PUBLIC}</option>
|
||||
</select>
|
||||
{/if}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td colspan="2" valign=top class="cellText small"><table width="100%" border="0" cellspacing="0" cellpadding="0" class="thickBorder">
|
||||
<tr>
|
||||
<td valign=top><table width="100%" border="0" cellspacing="0" cellpadding="5" >
|
||||
<tr>
|
||||
<td colspan="3" valign="top" class="small" style="background-color:#cccccc"><strong>{$UMOD.LBL_EMAIL_TEMPLATE}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="15%" valign="top" class="cellLabel small"><font color='red'>*</font>{$UMOD.LBL_SUBJECT}</td>
|
||||
<td width="85%" colspan="2" class="cellText small"><span class="small cellText">
|
||||
<input name="subject" type="text" value="{$SUBJECT}" class="detailedViewTextBox" tabindex="4">
|
||||
</span></td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
|
||||
<td width="15%" class="cellLabel small" valign="center">{$UMOD.LBL_SELECT_FIELD_TYPE}</td>
|
||||
<td width="85%" colspan="2" class="cellText small">
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>{$UMOD.LBL_STEP}1
|
||||
<td>
|
||||
|
||||
<td style="border-left:2px dotted #cccccc;">{$UMOD.LBL_STEP}2
|
||||
<td>
|
||||
|
||||
<td style="border-left:2px dotted #cccccc;">{$UMOD.LBL_STEP}3
|
||||
<td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<select style="font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: #000000;border:1px solid #bababa;padding-left:5px;background-color:#ffffff;" id="entityType" ONCHANGE="modifyMergeFieldSelect(this, document.getElementById('mergeFieldSelect'));" tabindex="6">
|
||||
<OPTION VALUE="0" selected>{$APP.LBL_NONE}
|
||||
<OPTION VALUE="1">{$UMOD.LBL_ACCOUNT_FIELDS}
|
||||
<OPTION VALUE="2">{$UMOD.LBL_CONTACT_FIELDS}
|
||||
<OPTION VALUE="3" >{$UMOD.LBL_LEAD_FIELDS}
|
||||
<OPTION VALUE="4" >{$UMOD.LBL_USER_FIELDS}
|
||||
<OPTION VALUE="5" >{$UMOD.LBL_GENERAL_FIELDS}
|
||||
</select>
|
||||
<td>
|
||||
|
||||
<td style="border-left:2px dotted #cccccc;">
|
||||
<select style="font-family: Arial, Helvetica, sans-serif;font-size: 11p
|
||||
x;color: #000000;border:1px solid #bababa;padding-left:5px;background-color:#ffffff;" id="mergeFieldSelect" onchange="document.getElementById('mergeFieldValue').value=this.options[this.selectedIndex].value;" tabindex="7"><option value="0" selected>{$APP.LBL_NONE}</select>
|
||||
<td>
|
||||
|
||||
<td style="border-left:2px dotted #cccccc;">
|
||||
|
||||
<input type="text" id="mergeFieldValue" name="variable" value="variable" style="font-family: Arial, Helvetica, sans-serif;font-size: 11px;color: #000000;border:1px solid #bababa;padding-left:5px;background-color:#ffffdd;" tabindex="8"/>
|
||||
<td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td valign="top" width=10% class="cellLabel small">{$UMOD.LBL_MESSAGE}</td>
|
||||
<td valign="top" colspan="2" width=60% class="cellText small"><p><textarea name="body" style="width:90%;height:200px" class=small tabindex="5">{$BODY}</textarea></p>
|
||||
</tr>
|
||||
</table></td>
|
||||
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="small" nowrap align=right><a href="#top">{$MOD.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script type="text/javascript" src="include/fckeditor/fckeditor.js"></script>
|
||||
<script type="text/javascript" defer="1">
|
||||
|
||||
var oFCKeditor = null;
|
||||
|
||||
oFCKeditor = new FCKeditor( "body" ) ;
|
||||
|
||||
oFCKeditor.BasePath = "include/fckeditor/" ;
|
||||
oFCKeditor.ReplaceTextarea() ;
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
function check4null(form)
|
||||
{ldelim}
|
||||
|
||||
var isError = false;
|
||||
var errorMessage = "";
|
||||
// Here we decide whether to submit the form.
|
||||
if (trim(form.templatename.value) =='') {ldelim}
|
||||
isError = true;
|
||||
errorMessage += "\n template name";
|
||||
form.templatename.focus();
|
||||
{rdelim}
|
||||
if (trim(form.foldername.value) =='') {ldelim}
|
||||
isError = true;
|
||||
errorMessage += "\n folder name";
|
||||
form.foldername.focus();
|
||||
{rdelim}
|
||||
if (trim(form.subject.value) =='') {ldelim}
|
||||
isError = true;
|
||||
errorMessage += "\n subject";
|
||||
form.subject.focus();
|
||||
{rdelim}
|
||||
|
||||
// Here we decide whether to submit the form.
|
||||
if (isError == true) {ldelim}
|
||||
alert("{$APP.MISSING_FIELDS}" + errorMessage);
|
||||
return false;
|
||||
{rdelim}
|
||||
return true;
|
||||
|
||||
{rdelim}
|
||||
|
||||
init();
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,217 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
{include file='SetMenu.tpl'}
|
||||
{literal}
|
||||
<form action="index.php" method="post" name="profileform" id="form" onSubmit="if(rolevalidate()) { VtigerJS_DialogBox.block();return true;}else{return false;}">
|
||||
{/literal}
|
||||
<input type="hidden" name="module" value="Settings">
|
||||
<input type="hidden" name="mode" value="{$MODE}">
|
||||
<input type="hidden" name="action" value="profilePrivileges">
|
||||
<input type="hidden" name="parenttab" value="Settings">
|
||||
<input type="hidden" name="parent_profile" value="{$PARENT_PROFILE}">
|
||||
<input type="hidden" name="radio_button" value="{$RADIO_BUTTON}">
|
||||
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'ico-profile.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_PROFILES}" width="48" height="48" border=0 title="{$MOD.LBL_PROFILES}"></td>
|
||||
<td class=heading2 valign=bottom><b> <a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=ListProfiles&parenttab=Settings">{$CMOD.LBL_PROFILE_PRIVILEGES}</a></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_PROFILE_DESCRIPTION}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tbody><tr>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tbody><tr class="small">
|
||||
<td><img src="{'prvPrfTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="prvPrfTopBg" width="100%"></td>
|
||||
<td><img src="{'prvPrfTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<table class="prvPrfOutline" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><!-- Module name heading -->
|
||||
<table class="small" border="0" cellpadding="2" cellspacing="0">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'prvPrfHdrArrow.gif'|@vtiger_imageurl:$THEME}"> </td>
|
||||
<td class="prvPrfBigText"><b> {$CMOD.LBL_STEP_1_2} : {$CMOD.LBL_WELCOME_PROFILE_CREATE} </b><br>
|
||||
<font class="small"> {$CMOD.LBL_SELECT_CHOICE_NEW_PROFILE} </font> </td>
|
||||
|
||||
<td class="small" style="padding-left: 10px;" align="right"></td>
|
||||
</tr>
|
||||
</tbody></table></td>
|
||||
<td align="right" valign="bottom"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><!-- tabs -->
|
||||
<table width="95%" border="0" cellpadding="5" cellspacing="0" align="center">
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
<tr>
|
||||
<td align="right" width="25%" style="padding-right:10px;">
|
||||
<b style="color:#FF0000;font-size:16px;">{$APP.LBL_REQUIRED_SYMBOL}</b> <b>{$CMOD.LBL_NEW_PROFILE_NAME} : </b></td>
|
||||
<td width="75%" align="left" style="padding-left:10px;">
|
||||
<input type="text" name="profile_name" id="pobox" value="{$PROFILENAME}" class="txtBox" /></td>
|
||||
</tr>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
<tr>
|
||||
<td align="right" style="padding-right:10px;" valign="top"><b>{$CMOD.LBL_DESCRIPTION} : </b></td>
|
||||
<td align="left" style="padding-left:10px;"><textarea name="profile_description" class="txtBox">{$PROFILEDESC}</textarea></td>
|
||||
</tr>
|
||||
<tr><td colspan="2" style="border-bottom:1px dashed #CCCCCC;" height="75"> </td></tr>
|
||||
<tr>
|
||||
<td align="right" width="10%" style="padding-right:10px;">
|
||||
{if $RADIO_BUTTON neq 'newprofile'}
|
||||
<input name="radiobutton" checked type="radio" value="baseprofile" />
|
||||
{else}
|
||||
<input name="radiobutton" type="radio" value="baseprofile" />
|
||||
{/if}
|
||||
</td>
|
||||
<td width="90%" align="left" style="padding-left:10px;">{$CMOD.LBL_BASE_PROFILE_MESG}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" style="padding-right:10px;"> </td>
|
||||
<td align="left" style="padding-left:10px;">{$CMOD.LBL_BASE_PROFILE}
|
||||
<select name="parentprofile" class="importBox">
|
||||
{foreach item=combo from=$PROFILE_LISTS}
|
||||
{if $PARENT_PROFILE eq $combo.1}
|
||||
<option selected value="{$combo.1}">{$combo.0}</option>
|
||||
{else}
|
||||
<option value="{$combo.1}">{$combo.0}</option>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
<tr><td align="center" colspan="2"><b>( {$CMOD.LBL_OR} )</b></td></tr>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
<tr>
|
||||
<td align="right" style="padding-right:10px;">
|
||||
{if $RADIO_BUTTON eq 'newprofile'}
|
||||
<input name="radiobutton" checked type="radio" value="newprofile" />
|
||||
{else}
|
||||
<input name="radiobutton" type="radio" value="newprofile" />
|
||||
{/if}
|
||||
</td>
|
||||
<td align="left" style="padding-left:10px;">{$CMOD.LBL_BASE_PROFILE_MESG_ADV}</td>
|
||||
</tr>
|
||||
<tr><td colspan="2" style="border-bottom:1px dashed #CCCCCC;" height="75"> </td></tr>
|
||||
<tr>
|
||||
<td colspan="2" align="right">
|
||||
<input type="button" value=" {$APP.LNK_LIST_NEXT} › " title="{$APP.LNK_LIST_NEXT}" name="Next" class="crmButton small create" onClick="return rolevalidate();"/>
|
||||
<input type="button" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " title="{$APP.LBL_CANCEL_BUTTON_TITLE}" name="Cancel" onClick="window.history.back();" class="crmButton small cancel"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td></tr>
|
||||
<table class="small" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tbody><tr>
|
||||
<td><img src="{'prvPrfBottomLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="prvPrfBottomBg" width="100%"></td>
|
||||
<td><img src="{'prvPrfBottomRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody></table></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<p> </p>
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tbody><tr><td class="small" align="right" nowrap="nowrap"><a href="#top">{$APP.LBL_SCROLL}</a></td></tr>
|
||||
</tbody></table>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</form>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<script>
|
||||
var profile_err_msg='{$MOD.LBL_ENTER_PROFILE}';
|
||||
function rolevalidate()
|
||||
{ldelim}
|
||||
var profilename = document.getElementById('pobox').value;
|
||||
profilename = trim(profilename);
|
||||
if(profilename != '')
|
||||
dup_validation(profilename);
|
||||
else
|
||||
{ldelim}
|
||||
alert(profile_err_msg);
|
||||
document.getElementById('pobox').focus();
|
||||
return false
|
||||
{rdelim}
|
||||
return false
|
||||
{rdelim}
|
||||
|
||||
|
||||
function dup_validation(profilename)
|
||||
{ldelim}
|
||||
//var status = CharValidation(profilename,'namespace');
|
||||
//if(status)
|
||||
//{ldelim}
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody: 'module=Users&action=UsersAjax&file=CreateProfile&ajax=true&dup_check=true&profile_name='+profilename,
|
||||
onComplete: function(response) {ldelim}
|
||||
if(response.responseText.indexOf('SUCCESS') > -1)
|
||||
document.profileform.submit();
|
||||
else
|
||||
alert(response.responseText);
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
//{rdelim}
|
||||
//else
|
||||
// alert(alert_arr.NO_SPECIAL+alert_arr.IN_PROFILENAME)
|
||||
{rdelim}
|
||||
</script>
|
||||
@@ -0,0 +1,319 @@
|
||||
{*<!--
|
||||
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
|
||||
-->*}
|
||||
|
||||
{*<!-- module header -->*}
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="all" href="jscalendar/calendar-win2k-cold-1.css">
|
||||
<script type="text/javascript" src="jscalendar/calendar.js"></script>
|
||||
<script type="text/javascript" src="jscalendar/lang/calendar-{$CALENDAR_LANG}.js"></script>
|
||||
<script type="text/javascript" src="jscalendar/calendar-setup.js"></script>
|
||||
|
||||
<!-- overriding the pre-defined #company to avoid clash with vtiger_field in the view -->
|
||||
{literal}
|
||||
<style type='text/css'>
|
||||
#company {
|
||||
width: 90%;
|
||||
height: auto;
|
||||
}
|
||||
</style>
|
||||
{/literal}
|
||||
|
||||
<script type="text/javascript">
|
||||
var gVTModule = '{$smarty.request.module|@vtlib_purify}';
|
||||
function sensex_info()
|
||||
{ldelim}
|
||||
var Ticker = $('tickersymbol').value;
|
||||
if(Ticker!='')
|
||||
{ldelim}
|
||||
$("vtbusy_info").style.display="inline";
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{ldelim}queue: {ldelim}position: 'end', scope: 'command'{rdelim},
|
||||
method: 'post',
|
||||
postBody: 'module={$MODULE}&action=Tickerdetail&tickersymbol='+Ticker,
|
||||
onComplete: function(response) {ldelim}
|
||||
$('autocom').innerHTML = response.responseText;
|
||||
$('autocom').style.display="block";
|
||||
$("vtbusy_info").style.display="none";
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
);
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
</script>
|
||||
|
||||
{include file='Buttons_List1.tpl'}
|
||||
|
||||
{*<!-- Contents -->*}
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=98% align=center>
|
||||
<tr>
|
||||
<td valign=top>
|
||||
<img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}">
|
||||
</td>
|
||||
|
||||
<td class="showPanelBg" valign=top width=100%>
|
||||
{*<!-- PUBLIC CONTENTS STARTS-->*}
|
||||
<div class="small" style="padding:20px">
|
||||
|
||||
{* vtlib customization: use translation only if present *}
|
||||
{assign var="SINGLE_MOD_LABEL" value=$SINGLE_MOD}
|
||||
{if $APP.$SINGLE_MOD} {assign var="SINGLE_MOD_LABEL" value=$APP.SINGLE_MOD} {/if}
|
||||
|
||||
{if $OP_MODE eq 'edit_view'}
|
||||
<span class="lvtHeaderText"><font color="purple">[ {$ID} ] </font>{$NAME} - {$APP.LBL_EDITING} {$SINGLE_MOD_LABEL} {$APP.LBL_INFORMATION}</span> <br>
|
||||
{$UPDATEINFO}
|
||||
{/if}
|
||||
|
||||
{if $OP_MODE eq 'create_view'}
|
||||
{if $DUPLICATE neq 'true'}
|
||||
{assign var=create_new value="LBL_CREATING_NEW_"|cat:$SINGLE_MOD}
|
||||
{* vtlib customization: use translation only if present *}
|
||||
{assign var="create_newlabel" value=$APP.$create_new}
|
||||
{if $create_newlabel neq ''}
|
||||
<span class="lvtHeaderText">{$create_newlabel}</span> <br>
|
||||
{else}
|
||||
<span class="lvtHeaderText">{$APP.LBL_CREATING} {$APP.LBL_NEW} {$SINGLE_MOD}</span> <br>
|
||||
{/if}
|
||||
|
||||
{else}
|
||||
<span class="lvtHeaderText">{$APP.LBL_DUPLICATING} "{$NAME}" </span> <br>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
<hr noshade size=1>
|
||||
<br>
|
||||
|
||||
{include file='EditViewHidden.tpl'}
|
||||
|
||||
{*<!-- Account details tabs -->*}
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=95% align=center>
|
||||
<tr>
|
||||
<td>
|
||||
<table border=0 cellspacing=0 cellpadding=3 width=100% class="small">
|
||||
<tr>
|
||||
<td class="dvtTabCache" style="width:10px" nowrap> </td>
|
||||
|
||||
{if $ADVBLOCKS neq ''}
|
||||
<td width=75 style="width:15%" align="center" nowrap class="dvtSelectedCell" id="bi" onclick="fnLoadValues('bi','mi','basicTab','moreTab','normal','{$MODULE}')"><b>{$APP.LBL_BASIC} {$APP.LBL_INFORMATION}</b></td>
|
||||
<td class="dvtUnSelectedCell" style="width: 100px;" align="center" nowrap id="mi" onclick="fnLoadValues('mi','bi','moreTab','basicTab','normal','{$MODULE}')"><b>{$APP.LBL_MORE} {$APP.LBL_INFORMATION} </b></td>
|
||||
<td class="dvtTabCache" style="width:65%" nowrap> </td>
|
||||
{else}
|
||||
<td class="dvtSelectedCell" align=center nowrap>{$APP.LBL_BASIC} {$APP.LBL_INFORMATION}</td>
|
||||
<td class="dvtTabCache" style="width:65%"> </td>
|
||||
{/if}
|
||||
<tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top align=left >
|
||||
|
||||
<!-- Basic Information Tab Opened -->
|
||||
<div id="basicTab">
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=3 width=100% class="dvtContentSpace">
|
||||
<tr>
|
||||
<td align=left>
|
||||
<!-- content cache -->
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100%>
|
||||
<tr>
|
||||
<td id ="autocom"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:10px">
|
||||
<!-- General details -->
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%" class="small">
|
||||
<tr>
|
||||
<td colspan=4 style="padding:5px">
|
||||
<div align="center">
|
||||
{if $MODULE eq 'Accounts'}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; if(formValidate())AjaxDuplicateValidate('Accounts','accountname',this.form);" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{else}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; return formValidate()" type="submit" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{/if}
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmbutton small cancel" onclick="window.history.back()" type="button" name="button" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " style="width:70px">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{foreach key=header item=data from=$BASBLOCKS}
|
||||
<tr>
|
||||
{if $header== $MOD.LBL_ADDRESS_INFORMATION && ($MODULE == 'Accounts' || $MODULE == 'Quotes' || $MODULE == 'PurchaseOrder' || $MODULE == 'SalesOrder'|| $MODULE == 'Invoice')}
|
||||
<td colspan=2 class="detailedViewHeader">
|
||||
<b>{$header}</b></td>
|
||||
<td class="detailedViewHeader">
|
||||
<input name="cpy" onclick="return copyAddressLeft(EditView)" type="radio"><b>{$APP.LBL_RCPY_ADDRESS}</b></td>
|
||||
<td class="detailedViewHeader">
|
||||
<input name="cpy" onclick="return copyAddressRight(EditView)" type="radio"><b>{$APP.LBL_LCPY_ADDRESS}</b></td>
|
||||
|
||||
{elseif $header== $MOD.LBL_ADDRESS_INFORMATION && $MODULE == 'Contacts'}
|
||||
<td colspan=2 class="detailedViewHeader">
|
||||
<b>{$header}</b></td>
|
||||
<td class="detailedViewHeader">
|
||||
<input name="cpy" onclick="return copyAddressLeft(EditView)" type="radio"><b>{$APP.LBL_CPY_OTHER_ADDRESS}</b></td>
|
||||
<td class="detailedViewHeader">
|
||||
<input name="cpy" onclick="return copyAddressRight(EditView)" type="radio"><b>{$APP.LBL_CPY_MAILING_ADDRESS}</b></td>
|
||||
{else}
|
||||
<td colspan=4 class="detailedViewHeader">
|
||||
<b>{$header}</b>
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Here we should include the uitype handlings-->
|
||||
{include file="DisplayFields.tpl"}
|
||||
<tr style="height:25px"><td> </td></tr>
|
||||
{/foreach}
|
||||
|
||||
<tr>
|
||||
<td colspan=4 style="padding:5px">
|
||||
<div align="center">
|
||||
{if $MODULE eq 'Emails'}
|
||||
<input title="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_TITLE}" accessKey="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_KEY}" class="crmbutton small create" onclick="window.open('index.php?module=Users&action=lookupemailtemplates&entityid={$ENTITY_ID}&entity={$ENTITY_TYPE}','emailtemplate','top=100,left=200,height=400,width=300,menubar=no,addressbar=no,status=yes')" type="button" name="button" value="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_LABEL}">
|
||||
<input title="{$MOD.LBL_SEND}" accessKey="{$MOD.LBL_SEND}" class="crmbutton small save" onclick="this.form.action.value='Save';this.form.send_mail.value='true'; return formValidate()" type="submit" name="button" value=" {$MOD.LBL_SEND} " >
|
||||
{/if}
|
||||
{if $MODULE eq 'Accounts'}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; if(formValidate())AjaxDuplicateValidate('Accounts','accountname',this.form);" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{else}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; return formValidate()" type="submit" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{/if}
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmbutton small cancel" onclick="window.history.back()" type="button" name="button" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " style="width:70px">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<!-- Basic Information Tab Closed -->
|
||||
|
||||
<!-- More Information Tab Opened -->
|
||||
<div id="moreTab">
|
||||
<table border=0 cellspacing=0 cellpadding=3 width=100% class="dvtContentSpace">
|
||||
<tr>
|
||||
<td align=left>
|
||||
{*<!-- content cache -->*}
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100%>
|
||||
<tr>
|
||||
<td id ="autocom"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:10px">
|
||||
<!-- General details -->
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="small">
|
||||
<tr>
|
||||
<td colspan=4 style="padding:5px">
|
||||
<div align="center">
|
||||
{if $MODULE eq 'Accounts'}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; if(formValidate())AjaxDuplicateValidate('Accounts','accountname',this.form);" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{else}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; return formValidate()" type="submit" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{/if}
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmbutton small cancel" onclick="window.history.back()" type="button" name="button" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " style="width:70px">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{foreach key=header item=data from=$ADVBLOCKS}
|
||||
<tr>
|
||||
<td colspan=4 class="detailedViewHeader">
|
||||
<b>{$header}</b>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Here we should include the uitype handlings-->
|
||||
{include file="DisplayFields.tpl"}
|
||||
|
||||
<tr style="height:25px"><td> </td></tr>
|
||||
{/foreach}
|
||||
|
||||
<tr>
|
||||
<td colspan=4 style="padding:5px">
|
||||
<div align="center">
|
||||
{if $MODULE eq 'Emails'}
|
||||
<input title="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_TITLE}" accessKey="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_KEY}" class="crmbutton small create" onclick="window.open('index.php?module=Users&action=lookupemailtemplates&entityid={$ENTITY_ID}&entity={$ENTITY_TYPE}','emailtemplate','top=100,left=200,height=400,width=300,menubar=no,addressbar=no,status=yes')" type="button" name="button" value="{$APP.LBL_SELECTEMAILTEMPLATE_BUTTON_LABEL}">
|
||||
<input title="{$MOD.LBL_SEND}" accessKey="{$MOD.LBL_SEND}" class="crmbutton small save" onclick="this.form.action.value='Save';this.form.send_mail.value='true'; return formValidate()" type="submit" name="button" value=" {$MOD.LBL_SEND} " >
|
||||
{/if}
|
||||
{if $MODULE eq 'Accounts'}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; if(formValidate())AjaxDuplicateValidate('Accounts','accountname',this.form);" type="button" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{else}
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_TITLE}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmbutton small save" onclick="this.form.action.value='Save'; return formValidate()" type="submit" name="button" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " style="width:70px" >
|
||||
{/if}
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_TITLE}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmbutton small cancel" onclick="window.history.back()" type="button" name="button" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " style="width:70px">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td align=right valign=top><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
{if ($MODULE eq 'Emails' || 'Documents') and ($FCKEDITOR_DISPLAY eq 'true')}
|
||||
<script type="text/javascript" src="include/fckeditor/fckeditor.js"></script>
|
||||
<script type="text/javascript" defer="1">
|
||||
|
||||
var oFCKeditor = null;
|
||||
|
||||
{if $MODULE eq 'Documents'}
|
||||
oFCKeditor = new FCKeditor( "notecontent" ) ;
|
||||
{/if}
|
||||
|
||||
oFCKeditor.BasePath = "include/fckeditor/" ;
|
||||
oFCKeditor.ReplaceTextarea() ;
|
||||
|
||||
</script>
|
||||
{/if}
|
||||
{if $MODULE eq 'Accounts'}
|
||||
<script>
|
||||
ScrollEffect.limit = 201;
|
||||
ScrollEffect.closelimit= 200;
|
||||
</script>
|
||||
{/if}
|
||||
<script>
|
||||
var fieldname = new Array({$VALIDATION_DATA_FIELDNAME})
|
||||
var fieldlabel = new Array({$VALIDATION_DATA_FIELDLABEL})
|
||||
var fielddatatype = new Array({$VALIDATION_DATA_FIELDDATATYPE})
|
||||
</script>
|
||||
|
||||
<!-- vtlib customization: Help information assocaited with the fields -->
|
||||
{if $FIELDHELPINFO}
|
||||
<script type='text/javascript'>
|
||||
{literal}var fieldhelpinfo = {}; {/literal}
|
||||
{foreach item=FIELDHELPVAL key=FIELDHELPKEY from=$FIELDHELPINFO}
|
||||
fieldhelpinfo["{$FIELDHELPKEY}"] = "{$FIELDHELPVAL}";
|
||||
{/foreach}
|
||||
</script>
|
||||
{/if}
|
||||
<!-- END -->
|
||||
@@ -0,0 +1,101 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
|
||||
{include file='SetMenu.tpl'}
|
||||
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<form action="index.php?module=Settings&action=savewordtemplate" method="post" enctype="multipart/form-data" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type="hidden" name="return_module" value="Settings">
|
||||
<input type="hidden" name="parenttab" value="{$PARENTTAB}">
|
||||
<input type="hidden" name="MAX_FILE_SIZE" value="{$MAX_FILE_SIZE}">
|
||||
<input type="hidden" name="action">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'mailmarge.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_MODULE_NAME}" width="48" height="48" border=0 title="{$MOD.LBL_MODULE_NAME}"></td>
|
||||
<td class=heading2 valign=bottom><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=listwordtemplates&parenttab=Settings">{$UMOD.LBL_WORD_TEMPLATES}</a> > {$UMOD.LBL_NEW_TEMPLATE} </b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_MAIL_MERGE_DESC}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
<td class="big"><strong>{$UMOD.LBL_NEW_TEMPLATE}</strong><br>{$ERRORFLAG}</br></td>
|
||||
<td class="small" align=right>
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_LABEL}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" type="submit" tabindex="4" name="button" value="{$APP.LBL_SAVE_BUTTON_LABEL}" onclick="this.form.action.value='savewordtemplate'; this.form.parenttab.value='Settings'" class="crmButton small save" />
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_LABEL}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" tabindex="5" onclick="window.history.back();" type="button" name="button" value="{$APP.LBL_CANCEL_BUTTON_LABEL}" class="crmButton small cancel" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr valign="top">
|
||||
<td nowrap class="cellLabel small"><font color="red">*</font><strong>{$UMOD.LBL_NEW} {$UMOD.LBL_TEMPLATE_FILE}</strong></td>
|
||||
<td class="cellText small"><strong>
|
||||
<input type="file" name="binFile" class="small" onchange="validateFilename(this);" />
|
||||
<input type="hidden" name="binFile_hidden" value="" />
|
||||
</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small cellLabel"><strong>{$UMOD.LBL_DESCRIPTION}</strong></td>
|
||||
<td class="cellText small" valign=top><textarea name="txtDescription" class=small style="width:90%;height:50px">{$smarty.request.description|@vtlib_purify}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small cellLabel"><strong>{$UMOD.LBL_MODULENAMES}</strong></td>
|
||||
<td class="cellText small" valign=top>
|
||||
<select name="target_module" size=1 class="small" tabindex="3">
|
||||
<option value="Leads" {$LEADS_SELECTED}>{$APP.COMBO_LEADS}</option>
|
||||
<option value="Accounts" {$ACCOUNTS_SELECTED}>{$APP.COMBO_ACCOUNTS}</option>
|
||||
<option value="Contacts" {$CONTACTS_SELECTED}>{$APP.COMBO_CONTACTS}</option>
|
||||
<option value="HelpDesk" {$HELPDESK_SELECTED}>{$APP.COMBO_HELPDESK}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="small" nowrap align=right><a href="#top">{$APP.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -0,0 +1,107 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/menu.js"></script>
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
{include file='SetMenu.tpl'}
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<form action="index.php" method="post" name="index" id="form" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type="hidden" name="module" value="Settings">
|
||||
<input type="hidden" name="parenttab" value="{$PARENTTAB}">
|
||||
<input type="hidden" name="action" value="index">
|
||||
<input type="hidden" name="record" value="{$ID}">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'currency.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_USERS}" width="48" height="48" border=0 title="{$MOD.LBL_USERS}"></td>
|
||||
<td class="heading2" valign="bottom" ><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=CurrencyListView&parenttab=Settings">{$MOD.LBL_CURRENCY_SETTINGS}</a> > {$MOD.LBL_VIEWING} "{$CURRENCY_NAME}" </b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_CURRENCY_DESCRIPTION}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
<td class="big"><strong>{$MOD.LBL_SETTINGS} {$APP.LBL_FOR} "{$CURRENCY_NAME|@getTranslatedCurrencyString}" </strong></td>
|
||||
<td class="small" align=right>
|
||||
<input type="submit" class="crmButton small edit" value="Edit" onclick="this.form.action.value='CurrencyEditView'; this.form.parenttab.value='Settings'; this.form.record.value='{$ID}'">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="listRow">
|
||||
<tr>
|
||||
<td class="small" valign=top >
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="5">
|
||||
<tr>
|
||||
<td width="20%" nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_NAME}</strong></td>
|
||||
<td width="80%" class="small cellText"><strong>{$CURRENCY_NAME|@getTranslatedCurrencyString}</strong></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_CODE}</strong></td>
|
||||
<td class="small cellText">{$CURRENCY_CODE}</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_SYMBOL}</strong></td>
|
||||
<td class="small cellText">{$CURRENCY_SYMBOL}</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_CRATE}</strong><br>({$MOD.LBL_BASE_CURRENCY}{$MASTER_CURRENCY|@getTranslatedCurrencyString})</td>
|
||||
|
||||
<td class="small cellText">{$CONVERSION_RATE}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_STATUS}</strong></td>
|
||||
<td class="small cellText">{$CURRENCY_STATUS}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="small" nowrap align=right><a href="#top">{$MOD.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/menu.js"></script>
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
{include file='SetMenu.tpl'}
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<form action="index.php" method="post" name="index" id="form" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type="hidden" name="module" value="Settings">
|
||||
<input type="hidden" name="parenttab" value="{$PARENTTAB}">
|
||||
<input type="hidden" name="action" value="index">
|
||||
<input type="hidden" name="record" value="{$ID}">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'currency.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_USERS}" width="48" height="48" border=0 title="{$MOD.LBL_USERS}"></td>
|
||||
<td class="heading2" valign="bottom" ><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > <a href="index.php?module=Settings&action=CurrencyListView&parenttab=Settings">{$MOD.LBL_CURRENCY_SETTINGS}</a> >
|
||||
{if $ID neq ''}
|
||||
{$MOD.LBL_EDIT} "{$CURRENCY_NAME}"
|
||||
{else}
|
||||
{$MOD.LBL_NEW_CURRENCY}
|
||||
{/if}
|
||||
</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_CURRENCY_DESCRIPTION}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
{if $ID neq ''}
|
||||
<td class="big"><strong>{$MOD.LBL_SETTINGS} {$APP.LBL_FOR} "{$CURRENCY_NAME|@getTranslatedCurrencyString}" </strong></td>
|
||||
{else}
|
||||
<td class="big"><strong>"{$MOD.LBL_NEW_CURRENCY}" </strong></td>
|
||||
{/if}
|
||||
<td class="small" align=right>
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_LABEL}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" class="crmButton small save" onclick="this.form.action.value='SaveCurrencyInfo'; return validate()" type="submit" name="button" value="{$APP.LBL_SAVE_BUTTON_LABEL}" >
|
||||
<div id="CurrencyEditLay" class="layerPopup" style="display:none;width:25%;">
|
||||
<table width="100%" border="0" cellpadding="3" cellspacing="0" class="layerHeadingULine">
|
||||
<tr>
|
||||
<td class="layerPopupHeading" align="left" width="60%">{$MOD.LBL_TRANSFER_CURRENCY}</td>
|
||||
<td align="right" width="40%"><img src="{'close.gif'|@vtiger_imageurl:$THEME}" border=0 alt="{$APP.LBL_CLOSE}" title="{$APP.LBL_CLOSE}" style="cursor:pointer;" onClick="document.getElementById('CurrencyEditLay').style.display='none'";></td>
|
||||
</tr>
|
||||
<table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=95% align=center>
|
||||
<tr>
|
||||
<td class=small >
|
||||
<table border=0 celspacing=0 cellpadding=5 width=100% align=center bgcolor=white>
|
||||
<tr>
|
||||
<td width="50%" class="cellLabel small"><b>{$MOD.LBL_CURRENT_CURRENCY}</b></td>
|
||||
<td width="50%" class="cellText small"><b>{$CURRENCY_NAME|@getTranslatedCurrencyString}</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="cellLabel small"><b>{$MOD.LBL_TRANSCURR}</b></td>
|
||||
<td class="cellText small">
|
||||
<select class="select small" name="transfer_currency_id" id="transfer_currency_id">';
|
||||
{foreach key=cur_id item=cur_name from=$OTHER_CURRENCIES}
|
||||
<option value="{$cur_id}">{$cur_name|@getTranslatedCurrencyString}</option>
|
||||
{/foreach}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="layerPopupTransport">
|
||||
<tr>
|
||||
<td align="center"><input type="button" onclick="form.submit();" name="Update" value="{$APP.LBL_SAVE_BUTTON_LABEL}" class="crmbutton small save">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_LABEL}" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" class="crmButton small cancel" onclick="window.history.back()" type="button" name="button" value="{$APP.LBL_CANCEL_BUTTON_LABEL}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=100% class="listRow">
|
||||
<tr>
|
||||
<td class="small" valign=top >
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="5">
|
||||
<tr>
|
||||
<td width="20%" nowrap class="small cellLabel"><font color="red">*</font><strong>{$MOD.LBL_CURRENCY_NAME}</strong></td>
|
||||
<td width="80%" class="small cellText">
|
||||
<!-- input type="hidden" class="detailedViewTextBox small" value="" name="currency_name" -->
|
||||
<select name="currency_name" id="currency_name" class="small" onChange='updateSymbolAndCode();'>
|
||||
{foreach key=header item=currency from=$CURRENCIES}
|
||||
{if $header eq $CURRENCY_NAME}
|
||||
<option value="{$header}" selected>{$header|@getTranslatedCurrencyString}({$currency.1})</option>
|
||||
{else}
|
||||
<option value="{$header}" >{$header|@getTranslatedCurrencyString}({$currency.1})</option>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><font color="red">*</font><strong>{$MOD.LBL_CURRENCY_CODE}</strong></td>
|
||||
<td class="small cellText"><input type="text" readonly class="detailedViewTextBox small" value="{$CURRENCY_CODE}" name="currency_code" id="currency_code"></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><font color="red">*</font><strong>{$MOD.LBL_CURRENCY_SYMBOL}</strong></td>
|
||||
<td class="small cellText"><input type="text" readonly class="detailedViewTextBox small" value="{$CURRENCY_SYMBOL}" name="currency_symbol" id="currency_symbol"></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td nowrap class="small cellLabel"><font color="red">*</font><strong>{$MOD.LBL_CURRENCY_CRATE}</strong><br>({$MOD.LBL_BASE_CURRENCY}{$MASTER_CURRENCY|@getTranslatedCurrencyString})</td>
|
||||
<td class="small cellText"><input type="text" class="detailedViewTextBox small" value="{$CONVERSION_RATE}" name="conversion_rate"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td nowrap class="small cellLabel"><strong>{$MOD.LBL_CURRENCY_STATUS}</strong></td>
|
||||
<td class="small cellText">
|
||||
<input type="hidden" value="{$CURRENCY_STATUS}" id="old_currency_status" />
|
||||
<select name="currency_status" {$STATUS_DISABLE} class="importBox">
|
||||
<option value="Active" {$ACTSELECT}>{$MOD.LBL_ACTIVE}</option>
|
||||
<option value="Inactive" {$INACTSELECT}>{$MOD.LBL_INACTIVE}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr>
|
||||
<td class="small" nowrap align=right><a href="#top">{$MOD.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{literal}
|
||||
<script>
|
||||
function validate() {
|
||||
if (!emptyCheck("currency_name","Currency Name","text")) return false
|
||||
if (!emptyCheck("currency_code","Currency Code","text")) return false
|
||||
if (!emptyCheck("currency_symbol","Currency Symbol","text")) return false
|
||||
if (!emptyCheck("conversion_rate","Conversion Rate","text")) return false
|
||||
if (!emptyCheck("currency_status","Currency Status","text")) return false
|
||||
if(isNaN(getObj("conversion_rate").value) || eval(getObj("conversion_rate").value) <= 0)
|
||||
{
|
||||
{/literal}
|
||||
alert("{$APP.ENTER_VALID_CONVERSION_RATE}")
|
||||
return false
|
||||
{literal}
|
||||
}
|
||||
if (getObj("currency_status") != null && getObj("currency_status").value == "Inactive"
|
||||
&& getObj("old_currency_status") != null && getObj("old_currency_status").value == "Active")
|
||||
{
|
||||
if (getObj("CurrencyEditLay") != null) getObj("CurrencyEditLay").style.display = "block";
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
{/literal}
|
||||
var currency_array = {$CURRENCIES_ARRAY}
|
||||
{literal}
|
||||
updateSymbolAndCode();
|
||||
function updateSymbolAndCode(){
|
||||
selected_curr = document.getElementById('currency_name').value;
|
||||
getObj('currency_code').value = currency_array[selected_curr][0];
|
||||
getObj('currency_symbol').value = currency_array[selected_curr][1];
|
||||
}
|
||||
</script>
|
||||
{/literal}
|
||||
@@ -0,0 +1,123 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->*}
|
||||
<script language="JAVASCRIPT" type="text/javascript" src="include/js/smoothscroll.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/menu.js"></script>
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
<div align=center>
|
||||
|
||||
{include file='SetMenu.tpl'}
|
||||
|
||||
<!-- DISPLAY -->
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="settingsSelUITopLine">
|
||||
<form action="index.php" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<input type="hidden" name="module" value="Settings">
|
||||
<input type="hidden" name="action" value="CurrencyEditView">
|
||||
<input type="hidden" name="parenttab" value="{$PARENTTAB}">
|
||||
<tr>
|
||||
<td width=50 rowspan=2 valign=top><img src="{'currency.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_USERS}" width="48" height="48" border=0 title="{$MOD.LBL_USERS}"></td>
|
||||
<td class="heading2" valign="bottom" ><b><a href="index.php?module=Settings&action=index&parenttab=Settings">{$MOD.LBL_SETTINGS}</a> > {$MOD.LBL_CURRENCY_SETTINGS} </b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=top class="small">{$MOD.LBL_CURRENCY_DESCRIPTION}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=10 width=100% >
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% class="tableHeading">
|
||||
<tr>
|
||||
<td class="big"><strong>{$MOD.LBL_CURRENCY_LIST}</strong></td>
|
||||
<td class="small" align="right"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table width="100%" border="0" cellpadding="5" cellspacing="0" class="listTableTopButtons">
|
||||
<tr>
|
||||
<td class=small align=right>
|
||||
<input type="submit" value="{$MOD.LBL_NEW_CURRENCY}" class="crmButton create small">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="CurrencyListViewContents">
|
||||
{include file="CurrencyListViewEntries.tpl"}
|
||||
</div>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=5 width=100% >
|
||||
<tr><td class="small" nowrap align=right><a href="#top">{$MOD.LBL_SCROLL}</a></td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</form>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div id="currencydiv" style="display:block;position:absolute;width:250px;"></div>
|
||||
|
||||
{literal}
|
||||
<script>
|
||||
function deleteCurrency(currid)
|
||||
{
|
||||
$("status").style.display="inline";
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: 'action=SettingsAjax&file=CurrencyDeleteStep1&return_action=CurrencyListView&return_module=Settings&module=Settings&parenttab=Settings&id='+currid,
|
||||
onComplete: function(response) {
|
||||
$("status").style.display="none";
|
||||
$("currencydiv").innerHTML= response.responseText;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function transferCurrency(del_currencyid)
|
||||
{
|
||||
$("status").style.display="inline";
|
||||
$("CurrencyDeleteLay").style.display = "none";
|
||||
var trans_currencyid=$("transfer_currency_id").options[$("transfer_currency_id").options.selectedIndex].value;
|
||||
new Ajax.Request(
|
||||
'index.php',
|
||||
{queue: {position: 'end', scope: 'command'},
|
||||
method: 'post',
|
||||
postBody: 'module=Settings&action=SettingsAjax&file=CurrencyDelete&ajax=true&delete_currency_id='+del_currencyid+'&transfer_currency_id='+trans_currencyid,
|
||||
onComplete: function(response) {
|
||||
$("status").style.display="none";
|
||||
$("CurrencyListViewContents").innerHTML= response.responseText;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
||||
{/literal}
|
||||
@@ -0,0 +1,40 @@
|
||||
{*<!--
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
|
||||
-->*}
|
||||
|
||||
<table width="100%" cellpadding="5" cellspacing="0" class="listTable" >
|
||||
<tr>
|
||||
<td class="colHeader small" width="3%">#</td>
|
||||
<td class="colHeader small" width="9%">{$MOD.LBL_CURRENCY_TOOL}</td>
|
||||
<td class="colHeader small" width="23%">{$MOD.LBL_CURRENCY_NAME}</td>
|
||||
<td class="colHeader small" width="20%">{$MOD.LBL_CURRENCY_CODE}</td>
|
||||
<td class="colHeader small" width="10%">{$MOD.LBL_CURRENCY_SYMBOL}</td>
|
||||
<td class="colHeader small" width="20%">{$MOD.LBL_CURRENCY_CRATE}</td>
|
||||
<td class="colHeader small" width="15%">{$MOD.LBL_CURRENCY_STATUS}</td>
|
||||
</tr>
|
||||
{foreach item=currencyvalues name=currlist key=id from=$CURRENCY_LIST}
|
||||
<tr>
|
||||
<td nowrap class="listTableRow small" valign="top">{$smarty.foreach.currlist.iteration}</td>
|
||||
<td nowrap class="listTableRow small" valign="top">{$currencyvalues.tool}</td>
|
||||
<td nowrap class="listTableRow small" valign="top"><b>{$currencyvalues.name|@getTranslatedCurrencyString}</b></td>
|
||||
<td nowrap class="listTableRow small" valign="top">{$currencyvalues.code}</td>
|
||||
<td nowrap class="listTableRow small" valign="top">{$currencyvalues.symbol}</td>
|
||||
<td nowrap class="listTableRow small" valign="top">{$currencyvalues.crate}</td>
|
||||
{if $currencyvalues.status eq 'Active'}
|
||||
<td nowrap class="listTableRow small active" valign="top">{$currencyvalues.status}</td>
|
||||
{else}
|
||||
<td nowrap class="listTableRow small inactive" valign="top">{$currencyvalues.status}</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
{*
|
||||
/*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/ *}
|
||||
<script language="JavaScript" type="text/javascript" src="include/js/customview.js"></script>
|
||||
<br>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" style="padding: 10px;" valign="top" width="100%">
|
||||
<br>
|
||||
|
||||
<div align=center>
|
||||
{include file='SetMenu.tpl'}
|
||||
<!-- DISPLAY -->
|
||||
<table class="settingsSelUITopLine" border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr align="left">
|
||||
<td rowspan="2" valign="top" width="50"><img src="{'custom.gif'|@vtiger_imageurl:$THEME}" alt="{$MOD.LBL_USERS}" title="{$MOD.LBL_USERS}" border="0" height="48" width="48"></td>
|
||||
<td class="heading2" valign="bottom"><b><a href="index.php?module=Settings&action=ModuleManager&parenttab=Settings">{$MOD.VTLIB_LBL_MODULE_MANAGER}></a><a href="index.php?module=Settings&action=ModuleManager&module_settings=true&formodule=Leads&parenttab=Settings">{$MODULE}</a> > {$MOD.LBL_CUSTOM_FIELD_SETTINGS}</b></td>
|
||||
</tr>
|
||||
|
||||
<tr align="left">
|
||||
<td class="small" valign="top">{$MOD.LEADS_CUSTOM_FIELD_MAPPING}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<form action="index.php?module=Settings&action=SaveConvertLead" method="post" name="index" onsubmit="VtigerJS_DialogBox.block();">
|
||||
<table class="listTableTopButtons" border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="big" align="left"><strong>{$MOD.LBL_EDIT_FIELD_MAPPING}</strong> </td>
|
||||
<td class="small"> </td>
|
||||
<td class="small" align="right">
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_LABEL}" accessKey="{$APP.LBL_SAVE_BUTTON_KEY}" name="save" value=" {$APP.LBL_SAVE_BUTTON_LABEL} " class="crmButton small save" type="submit" onclick ="return validateCustomFieldAccounts();">
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_LABEL}>" accessKey="{$APP.LBL_CANCEL_BUTTON_KEY}" name="cancel" value=" {$APP.LBL_CANCEL_BUTTON_LABEL} " onclick = "window.history.back()" class="crmButton small cancel" type="button">
|
||||
</tr>
|
||||
</table>
|
||||
<table class="listTable" border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td rowspan="2" class="colHeader small" width="2%">#</td>
|
||||
<td rowspan="2" class="colHeader small" width="15%">{$MOD.FieldLabel}</td>
|
||||
<td rowspan="2" class="colHeader small" width="15%">{$MOD.FieldType}</td>
|
||||
<td colspan="3" class="colHeader small" valign="top"><div align="center">{$MOD.LBL_MAPPING_OTHER_MODULES}</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="colHeader small" valign="top" width="23%">{$APP.Accounts}</td>
|
||||
<td class="colHeader small" valign="top" width="23%">{$APP.Contacts}</td>
|
||||
<td class="colHeader small" valign="top" width="24%">{$APP.Potentials}</td>
|
||||
</tr>
|
||||
{foreach key=leadcf item=cfarray name=cfarray from=$CUSTOMFIELDMAPPING}
|
||||
<tr>
|
||||
<td class="listTableRow small">{$cfarray.sno}</td>
|
||||
<td class="listTableRow small">{$cfarray.leadid}</td>
|
||||
<td class="listTableRow small">{$cfarray.fieldtype}</td>
|
||||
{foreach item=acc_cf key=fldnameacc from=$cfarray.account}
|
||||
<td class="listTableRow small">
|
||||
<select name='{$fldnameacc}' id='{$fldnameacc}' onChange='return validateTypeforCFMapping("{$cfarray.fieldtype}","{$cfarray.typeofdata}","{$fldnameacc}",this);' >
|
||||
<option value='None'>{$APP.LBL_NONE}</option>
|
||||
{foreach item=element from=$acc_cf}
|
||||
<option value="{$element.fieldid}" {$element.selected}>{$element.fieldlabel}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
{if $smarty.foreach.cfarray.index eq 0}
|
||||
{foreach item=element from=$acc_cf}
|
||||
<input type='hidden' name='{$element.fieldid}_type' id='{$element.fieldid}_type' value='{$element.fieldtype}'>
|
||||
<input type='hidden' name='{$element.fieldid}_typeofdata' id='{$element.fieldid}_typeofdata' value='{$element.typeofdata}'>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</td>
|
||||
{/foreach}
|
||||
{foreach item=con_cf key=fldnamecon from=$cfarray.contact}
|
||||
<td class="listTableRow small">
|
||||
<select name='{$fldnamecon}' id='{$fldnamecon}' onChange='return validateTypeforCFMapping("{$cfarray.fieldtype}","{$cfarray.typeofdata}","{$fldnamecon}",this);'>
|
||||
<option value='None'>{$APP.LBL_NONE}</option>
|
||||
{foreach item=element from=$con_cf}
|
||||
<option value="{$element.fieldid}" {$element.selected}>{$element.fieldlabel}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
{if $smarty.foreach.cfarray.index eq 0}
|
||||
{foreach item=element from=$con_cf}
|
||||
<input type='hidden' name='{$element.fieldid}_type' id='{$element.fieldid}_type' value='{$element.fieldtype}' >
|
||||
<input type='hidden' name='{$element.fieldid}_typeofdata' id='{$element.fieldid}_typeofdata' value='{$element.typeofdata}'>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</td>
|
||||
{/foreach}
|
||||
{foreach item=pot_cf key=fldnamepot from=$cfarray.potential}
|
||||
<td class="listTableRow small">
|
||||
<select name='{$fldnamepot}' id='{$fldnamepot}' onChange='return validateTypeforCFMapping("{$cfarray.fieldtype}","{$cfarray.typeofdata}","{$fldnamepot}",this);'>
|
||||
<option value='None'>{$APP.LBL_NONE}</option>
|
||||
{foreach item=element from=$pot_cf}
|
||||
<option value="{$element.fieldid}" {$element.selected}>{$element.fieldlabel}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
{if $smarty.foreach.cfarray.index eq 0}
|
||||
{foreach item=element from=$pot_cf}
|
||||
<input type='hidden' name='{$element.fieldid}_type' id='{$element.fieldid}_type' value='{$element.fieldtype}'>
|
||||
<input type='hidden' name='{$element.fieldid}_typeofdata' id='{$element.fieldid}_typeofdata' value='{$element.typeofdata}'>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="small">
|
||||
<strong>{$APP.LBL_NOTE}: </strong> {$MOD.LBL_CUSTOM_MAPP_INFO}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border="0" cellpadding="5" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="small" align="right" nowrap="nowrap"><a href="#top">{$MOD.LBL_SCROLL}</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
<td valign="top"><img src="{'showPanelTopRight.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<script>
|
||||
var alertmessage = new Array("{$MOD.LBL_TYPEALERT_1}","{$MOD.LBL_WITH}","{$MOD.LBL_TYPEALERT_2}","{$MOD.LBL_LENGTHALERT}","{$MOD.LBL_DECIMALALERT}");
|
||||
</script>
|
||||
@@ -0,0 +1,813 @@
|
||||
<!--*********************************************************************************
|
||||
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
********************************************************************************/
|
||||
-->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="jscalendar/calendar-win2k-cold-1.css">
|
||||
{$DATE_JS}
|
||||
<script type="text/javascript" src="jscalendar/calendar.js"></script>
|
||||
<script type="text/javascript" src="jscalendar/lang/calendar-{$APP.LBL_JSCALENDAR_LANG}.js"></script>
|
||||
<script type="text/javascript" src="jscalendar/calendar-setup.js"></script>
|
||||
<script type="text/javascript" src="modules/CustomView/CustomView.js"></script>
|
||||
<script language="JavaScript" type="text/javascript" src="include/calculator/calc.js"></script>
|
||||
{literal}
|
||||
<form enctype="multipart/form-data" name="CustomView" method="POST" action="index.php" onsubmit="if(mandatoryCheck()){VtigerJS_DialogBox.block();} else{ return false; }">
|
||||
{/literal}
|
||||
<input type="hidden" name="module" value="CustomView">
|
||||
<input type="hidden" name="action" value="Save">
|
||||
<input type="hidden" name="parenttab" value="{$CATEGORY}">
|
||||
<input type="hidden" name="cvmodule" value="{$CVMODULE}">
|
||||
<input type="hidden" name="return_module" value="{$RETURN_MODULE}">
|
||||
<input type="hidden" name="record" value="{$CUSTOMVIEWID}">
|
||||
<input type="hidden" name="return_action" value="{$RETURN_ACTION}">
|
||||
<input type="hidden" id="user_dateformat" name="user_dateformat" value="{$DATEFORMAT}">
|
||||
<script language="javascript" type="text/javascript">
|
||||
var typeofdata = new Array();
|
||||
typeofdata['V'] = ['e','n','s','ew','c','k'];
|
||||
typeofdata['N'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['T'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['I'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['C'] = ['e','n'];
|
||||
typeofdata['DT'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['D'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['NN'] = ['e','n','l','g','m','h'];
|
||||
typeofdata['E'] = ['e','n','s','ew','c','k'];
|
||||
var fLabels = new Array();
|
||||
fLabels['e'] = alert_arr.EQUALS;
|
||||
fLabels['n'] = alert_arr.NOT_EQUALS_TO;
|
||||
fLabels['s'] = alert_arr.STARTS_WITH;
|
||||
fLabels['ew'] = alert_arr.ENDS_WITH;
|
||||
fLabels['c'] = alert_arr.CONTAINS;
|
||||
fLabels['k'] = alert_arr.DOES_NOT_CONTAINS;
|
||||
fLabels['l'] = alert_arr.LESS_THAN;
|
||||
fLabels['g'] = alert_arr.GREATER_THAN;
|
||||
fLabels['m'] = alert_arr.LESS_OR_EQUALS;
|
||||
fLabels['h'] = alert_arr.GREATER_OR_EQUALS;
|
||||
var noneLabel;
|
||||
function goto_CustomAction(module)
|
||||
{ldelim}
|
||||
document.location.href = "index.php?module="+module+"&action=CustomAction&record={$CUSTOMVIEWID}";
|
||||
{rdelim}
|
||||
|
||||
function mandatoryCheck()
|
||||
{ldelim}
|
||||
|
||||
var mandatorycheck = false;
|
||||
var i,j;
|
||||
var manCheck = new Array({$MANDATORYCHECK});
|
||||
var showvalues = "{$SHOWVALUES}";
|
||||
if(manCheck)
|
||||
{ldelim}
|
||||
var isError = false;
|
||||
var errorMessage = "";
|
||||
if (trim(document.CustomView.viewName.value) == "") {ldelim}
|
||||
isError = true;
|
||||
errorMessage += "\n{$MOD.LBL_VIEW_NAME}";
|
||||
{rdelim}
|
||||
// Here we decide whether to submit the form.
|
||||
if (isError == true) {ldelim}
|
||||
alert("{$MOD.Missing_required_fields}:" + errorMessage);
|
||||
return false;
|
||||
{rdelim}
|
||||
|
||||
for(i=1;i<=9;i++)
|
||||
{ldelim}
|
||||
var columnvalue = document.getElementById("column"+i).value;
|
||||
if(columnvalue != null)
|
||||
{ldelim}
|
||||
for(j=0;j<manCheck.length;j++)
|
||||
{ldelim}
|
||||
if(columnvalue == manCheck[j])
|
||||
{ldelim}
|
||||
mandatorycheck = true;
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
if(mandatorycheck == true)
|
||||
{ldelim}
|
||||
if(($("jscal_field_date_start").value.replace(/^\s+/g, '').replace(/\s+$/g, '').length!=0) || ($("jscal_field_date_end").value.replace(/^\s+/g, '').replace(/\s+$/g, '').length!=0))
|
||||
return stdfilterdateValidate();
|
||||
else
|
||||
return true;
|
||||
{rdelim}else
|
||||
{ldelim}
|
||||
mandatorycheck = false;
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
{rdelim}
|
||||
if(mandatorycheck == false)
|
||||
{ldelim}
|
||||
alert("{$APP.MUSTHAVE_ONE_REQUIREDFIELD}"+showvalues);
|
||||
{rdelim}
|
||||
|
||||
return false;
|
||||
{rdelim}
|
||||
</script>
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="98%">
|
||||
<tbody><tr>
|
||||
<td valign="top"><img src="{'showPanelTopLeft.gif'|@vtiger_imageurl:$THEME}"></td>
|
||||
<td class="showPanelBg" valign="top" width="100%">
|
||||
<div class="small" style="padding: 20px;">
|
||||
<span class="lvtHeaderText"><a class="hdrLink" href="index.php?action=ListView&module={$MODULE}&parenttab={$CATEGORY}">{$MODULELABEL}</a> >
|
||||
{if $EXIST eq "true" && $EXIST neq ''}
|
||||
{$MOD.Edit_Custom_View}
|
||||
{else}
|
||||
{$MOD.New_Custom_View}
|
||||
{/if}
|
||||
</span> <br>
|
||||
<hr noshade="noshade" size="1">
|
||||
<form name="EditView" method="post" enctype="multipart/form-data" action="index.php">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" width="95%">
|
||||
<tbody><tr>
|
||||
<td align="left" valign="top">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="5">
|
||||
<tr>
|
||||
<td colspan="4" class="detailedViewHeader"><strong>{$MOD.Details}</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=4 width="100%" style="padding:0px">
|
||||
<table cellpadding=4 cellspacing=0 width=100% border=0>
|
||||
<tr>
|
||||
<td class="dvtCellInfo" width="10%" align="right"><span class="style1">*</span>{$MOD.LBL_VIEW_NAME}
|
||||
</td>
|
||||
<td class="dvtCellInfo" width="30%">
|
||||
<input class="detailedViewTextBox" type="text" name='viewName' value="{$VIEWNAME}" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'" size="40"/>
|
||||
</td>
|
||||
<td class="dvtCellInfo" width="20%">
|
||||
{if $CHECKED eq 'checked'}
|
||||
<input type="checkbox" name="setDefault" value="1" checked/>{$MOD.LBL_SETDEFAULT}
|
||||
{else}
|
||||
<input type="checkbox" name="setDefault" value="0" />{$MOD.LBL_SETDEFAULT}
|
||||
{/if}
|
||||
</td>
|
||||
<td class="dvtCellInfo" width="20%">
|
||||
{if $MCHECKED eq 'checked'}
|
||||
<input type="checkbox" name="setMetrics" value="1" checked/>{$MOD.LBL_LIST_IN_METRICS}
|
||||
{else}
|
||||
<input type="checkbox" name="setMetrics" value="0" />{$MOD.LBL_LIST_IN_METRICS}
|
||||
{/if}
|
||||
</td>
|
||||
<td class="dvtCellInfo" width="20%">
|
||||
{if $STATUS eq '' || $STATUS eq 1}
|
||||
<input type="checkbox" name="setStatus" value="1"/>
|
||||
{elseif $STATUS eq 2}
|
||||
<input type="checkbox" name="setStatus" value="2" checked/>
|
||||
{elseif $STATUS eq 3 || $STATUS eq 0}
|
||||
<input type="checkbox" name="setStatus" value="3" checked/>
|
||||
{/if}
|
||||
{$MOD.LBL_SET_AS_PUBLIC}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td colspan="4"> </td></tr>
|
||||
<tr>
|
||||
<td colspan="4" class="detailedViewHeader">
|
||||
<b>{$MOD.LBL_STEP_2_TITLE} </b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvtCellLabel">
|
||||
<td><select name="column1" id="column1" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN1}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN1}
|
||||
</select></td>
|
||||
<td><select name="column2" id="column2" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN2}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN2}
|
||||
</select></td>
|
||||
<td><select name="column3" id="column3" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN3}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN3}
|
||||
</select></td>
|
||||
<td><select name="column4" id="column4" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN4}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN4}
|
||||
</select></td>
|
||||
|
||||
</tr>
|
||||
<tr class="dvtCellInfo">
|
||||
<td><select name="column5" id="column5" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN5}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN5}
|
||||
</select></td>
|
||||
<td><select name="column6" id="column6" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN6}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN6}
|
||||
</select></td>
|
||||
<td><select name="column7" id="column7" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN7}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN7}
|
||||
</select></td>
|
||||
<td><select name="column8" id="column8" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN8}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN8}
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr class="dvtCellLabel">
|
||||
<td><select name="column9" id="column9" onChange="checkDuplicate();" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$CHOOSECOLUMN9}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
{assign var=option_values value=$text.text}
|
||||
<option {$text.selected} value={$text.value}>
|
||||
{if $MOD.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$MOD.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$MOD.$option_values}
|
||||
{/if}
|
||||
{elseif $APP.$option_values neq ''}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$APP.$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$APP.$option_values}
|
||||
{/if}
|
||||
{else}
|
||||
{if $DATATYPE.0.$option_values eq 'M'}
|
||||
{$option_values} {$APP.LBL_REQUIRED_SYMBOL}
|
||||
{else}
|
||||
{$option_values}
|
||||
{/if}
|
||||
{/if}
|
||||
</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{$CHOOSECOLUMN9}
|
||||
</select></td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
{*section name=SelectColumn start=1 loop=4 step=1}
|
||||
<tr class="{cycle values="dvtCellLabel,dvtCellInfo"}">
|
||||
{section name=Column start=1 loop=5 step=1}
|
||||
<td align="center">
|
||||
{math equation="(x-1)*4+ y" x=$smarty.section.SelectColumn.index y=$smarty.section.Column.index}.
|
||||
<select id="column{math equation="(x-1)*4+ y" x=$smarty.section.SelectColumn.index y=$smarty.section.Column.index}" name ="column{math equation="(x-1)*4+ y" x=$smarty.section.SelectColumn.index y=$smarty.section.Column.index}" class="detailedViewTextBox">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from={$CHOOSECOLUMN|cat: {math equation="(x-1)*4+ y" x=$smarty.section.SelectColumn.index y=$smarty.section.Column.index}}}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
{/section}
|
||||
</tr>
|
||||
{/section*}
|
||||
<tr><td colspan="4"> </td></tr>
|
||||
<tr><td colspan="4"><table align="center" border="0" cellpadding="0" cellspacing="0" width="95%">
|
||||
<tbody><tr>
|
||||
<td>
|
||||
<table class="small" border="0" cellpadding="3" cellspacing="0" width="100%">
|
||||
<tbody><tr>
|
||||
<td class="dvtTabCache" style="width: 10px;" nowrap> </td>
|
||||
{if $STDCOLUMNSCOUNT neq 0}
|
||||
<td style="width: 100px;" nowrap class="dvtSelectedCell" id="pi" onclick="fnLoadCvValues('pi','mi','mnuTab','mnuTab2')">
|
||||
<b>{$MOD.LBL_STEP_3_TITLE}</b>
|
||||
</td>
|
||||
<td class="dvtUnSelectedCell" style="width: 100px;" align="center" nowrap id="mi" onclick="fnLoadCvValues('mi','pi','mnuTab2','mnuTab')">
|
||||
<b>{$MOD.LBL_STEP_4_TITLE}</b>
|
||||
</td>
|
||||
{else}
|
||||
<td class="dvtSelectedCell" style="width: 100px;" align="center" nowrap id="mi">
|
||||
<b>{$MOD.LBL_STEP_4_TITLE}</b>
|
||||
</td>
|
||||
|
||||
{/if}
|
||||
<td class="dvtTabCache" nowrap style="width:55%;"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
{if $STDCOLUMNSCOUNT eq 0}
|
||||
{assign var=stddiv value="style=display:none"}
|
||||
{assign var=advdiv value="style=display:block"}
|
||||
{else}
|
||||
{assign var=stddiv value="style=display:block"}
|
||||
{assign var=advdiv value="style=display:none"}
|
||||
{/if}
|
||||
<div id="mnuTab" {$stddiv}>
|
||||
<table width="100%" cellspacing="0" cellpadding="5" class="dvtContentSpace">
|
||||
<tr><td><br>
|
||||
<table width="75%" border="0" cellpadding="5" cellspacing="0" align="center">
|
||||
<tr><td colspan="2" class="detailedViewHeader"><b>{$MOD.Simple_Time_Filter}</b></td></tr>
|
||||
<tr>
|
||||
<td width="75%" align="right" class="dvtCellLabel">{$MOD.LBL_Select_a_Column} :</td>
|
||||
<td width="25%" class="dvtCellInfo">
|
||||
<select name="stdDateFilterField" class="select small" onchange="standardFilterDisplay();">
|
||||
{foreach item=stdfilter from=$STDFILTERCOLUMNS}
|
||||
<option {$stdfilter.selected} value={$stdfilter.value}>{$stdfilter.text}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" class="dvtCellLabel">{$MOD.Select_Duration} :</td>
|
||||
<td class="dvtCellInfo">
|
||||
<select name="stdDateFilter" id="stdDateFilter" class="select small" onchange='showDateRange(this.options[this.selectedIndex].value )'>
|
||||
{foreach item=duration from=$STDFILTERCRITERIA}
|
||||
<option {$duration.selected} value={$duration.value}>{$duration.text}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" class="dvtCellLabel">{$MOD.Start_Date} :</td>
|
||||
<td width="25%" align=left class="dvtCellInfo">
|
||||
{if $STDFILTERCRITERIA.0.selected eq "selected" || $CUSTOMVIEWID eq ""}
|
||||
{assign var=img_style value="visibility:visible"}
|
||||
{assign var=msg_style value=""}
|
||||
{else}
|
||||
{assign var=img_style value="visibility:hidden"}
|
||||
{assign var=msg_style value="readonly"}
|
||||
{/if}
|
||||
<input name="startdate" id="jscal_field_date_start" type="text" size="10" class="textField small" value="{$STARTDATE}" {$msg_style}>
|
||||
<img src="{$IMAGE_PATH}btnL3Calendar.gif" id="jscal_trigger_date_start" style={$img_style}>
|
||||
<font size=1><em old="(yyyy-mm-dd)">({$DATEFORMAT})</em></font>
|
||||
<script type="text/javascript">
|
||||
Calendar.setup ({ldelim}
|
||||
inputField : "jscal_field_date_start", ifFormat : "{$JS_DATEFORMAT}", showsTime : false, button : "jscal_trigger_date_start", singleClick : true, step : 1
|
||||
{rdelim})
|
||||
</script></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" class="dvtCellLabel">{$MOD.End_Date} :</td>
|
||||
<td width="25%" align=left class="dvtCellInfo">
|
||||
<input name="enddate" {$msg_style} id="jscal_field_date_end" type="text" size="10" class="textField small" value="{$ENDDATE}">
|
||||
<img src="{$IMAGE_PATH}btnL3Calendar.gif" id="jscal_trigger_date_end" style={$img_style}>
|
||||
<font size=1><em old="(yyyy-mm-dd)">({$DATEFORMAT})</em></font>
|
||||
<script type="text/javascript">
|
||||
Calendar.setup ({ldelim}
|
||||
inputField : "jscal_field_date_end", ifFormat : "{$JS_DATEFORMAT}", showsTime : false, button : "jscal_trigger_date_end", singleClick : true, step : 1
|
||||
{rdelim})
|
||||
</script></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
<tr><td> </td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="mnuTab2" {$advdiv} >
|
||||
<table width="100%" cellspacing="0" cellpadding="5" class="dvtContentSpace">
|
||||
<tr><td> </td></tr>
|
||||
<tr><td class="dvtCellInfo">{$MOD.LBL_AF_HDR1}<br /><br />
|
||||
<li style="margin-left:30px;">{$MOD.LBL_AF_HDR2}</li>
|
||||
<li style="margin-left:30px;">{$MOD.LBL_AF_HDR3}</li>
|
||||
<br /><br />
|
||||
</td></tr>
|
||||
<tr><td>
|
||||
<table width="75%" border="0" cellpadding="5" cellspacing="0" align="center">
|
||||
<tr><td colspan="3" class="detailedViewHeader"><b>{$MOD.LBL_RULE}</b></td></tr>
|
||||
|
||||
<tr class="dvtCellLabel">
|
||||
<td><nobr><select name="fcol1" id="fcol1" onchange="updatefOptions(this, 'fop1');" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK1}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select> <select name="fop1" id="fop1" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION1}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select> <input name="fval1" id="fval1" type="text" size=30 maxlength=80 value="{$VALUE1}" class="small">
|
||||
<span id="andfcol1">{$AND_TEXT1}</span></nobr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvtCellInfo">
|
||||
<td><nobr><select name="fcol2" id="fcol2" onchange="updatefOptions(this, 'fop2');" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK2}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select> <select name="fop2" id="fop2" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION2}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select> <input name="fval2" id="fval2" type="text" size=30 maxlength=80 value="{$VALUE2}" class="small">
|
||||
<span id="andfcol2">{$AND_TEXT2}</span></nobr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvtCellLabel">
|
||||
<td><nobr><select name="fcol3" id="fcol3" onchange="updatefOptions(this, 'fop3');" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK3}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select> <select name="fop3" id="fop3" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION3}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select> <input name="fval3" id="fval3" type="text" size=30 maxlength=80 value="{$VALUE3}" class="small">
|
||||
<span id="andfcol3">{$AND_TEXT3}</span></nobr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvtCellInfo">
|
||||
<td><nobr><select name="fcol4" id="fcol4" onchange="updatefOptions(this, 'fop4');" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK4}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select> <select name="fop4" id="fop4" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION4}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select> <input name="fval4" id="fval4" type="text" size=30 maxlength=80 value="{$VALUE4}" class="small">
|
||||
<span id="andfcol4">{$AND_TEXT4}</span></nobr>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="dvtCellLabel">
|
||||
<td><nobr><select name="fcol5" id="fcol5" onchange="updatefOptions(this, 'fop5');" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK5}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select> <select name="fop5" id="fop5" class="small">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION5}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select> <input name="fval5" id="fval5" type="text" size=30 maxlength=80 value="{$VALUE5}" class="small">
|
||||
<span id="andfcol5">{$AND_TEXT5}</span></nobr>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{*section name=advancedFilter start=1 loop=6 step=1}
|
||||
<tr class="{cycle values="dvtCellInfo,dvtCellLabel"}">
|
||||
<td align="left" width="33%">
|
||||
<select name="fcol{$smarty.section.advancedFilter.index}" id="fcol{$smarty.section.advancedFilter.index}" onchange="updatefOptions(this, 'fop{$smarty.section.advancedFilter.index}'); class="detailedViewTextBox">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=filteroption key=label from=$BLOCK}
|
||||
<optgroup label="{$label}" class=\"select\" style=\"border:none\">
|
||||
{foreach item=text from=$filteroption}
|
||||
<option {$text.selected} value={$text.value}>{$text.text}</option>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
<td align="left" width="33%">
|
||||
<select name="fcol{$smarty.section.advancedFilter.index}" id="fcol{$smarty.section.advancedFilter.index}" class="detailedViewTextBox">
|
||||
<option value="">{$MOD.LBL_NONE}</option>
|
||||
{foreach item=criteria from=$FOPTION}
|
||||
<option {$criteria.selected} value={$criteria.value}>{$criteria.text}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
<td width="34%" nowrap><input name="txt" value="" class="detailedViewTextBox" type="text" onfocus="this.className='detailedViewTextBoxOn'" onblur="this.className='detailedViewTextBox'"/> And</td>
|
||||
</tr>
|
||||
{/section*}
|
||||
</table>
|
||||
</td></tr>
|
||||
<tr><td> </td></tr>
|
||||
</table>
|
||||
</div>
|
||||
</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
<tr><td colspan="4"> </td></tr>
|
||||
<tr><td colspan="4" style="padding: 5px;">
|
||||
<div align="center">
|
||||
<input title="{$APP.LBL_SAVE_BUTTON_LABEL} [Alt+S]" accesskey="S" class="crmbutton small save" name="button2" value="{$APP.LBL_SAVE_BUTTON_LABEL}" style="width: 70px;" type="submit" onClick="return checkDuplicate();"/>
|
||||
<input title="{$APP.LBL_CANCEL_BUTTON_LABEL} [Alt+X]" accesskey="X" class="crmbutton small cancel" name="button2" onclick='window.history.back()' value="{$APP.LBL_CANCEL_BUTTON_LABEL}" style="width: 70px;" type="button" />
|
||||
</div>
|
||||
</td></tr>
|
||||
<tr><td colspan="4"> </td></tr>
|
||||
</table>
|
||||
</table>
|
||||
</table>
|
||||
{$STDFILTER_JAVASCRIPT}
|
||||
{$JAVASCRIPT}
|
||||
<!-- to show the mandatory fields while creating new customview -->
|
||||
<script language="javascript" type="text/javascript">
|
||||
var k;
|
||||
var colOpts;
|
||||
var manCheck = new Array({$MANDATORYCHECK});
|
||||
{literal}
|
||||
if(document.CustomView.record.value == '')
|
||||
{
|
||||
for(k=0;k<manCheck.length;k++)
|
||||
{
|
||||
selname = "column"+(k+1);
|
||||
colOpts = document.getElementById(selname).options;
|
||||
for (l=0;l<colOpts.length;l++)
|
||||
{
|
||||
if(colOpts[l].value == manCheck[k])
|
||||
{
|
||||
colOpts[l].selected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function checkDuplicate()
|
||||
{
|
||||
if(getObj('viewName').value.toLowerCase() == 'all')
|
||||
{
|
||||
alert(alert_arr.ALL_FILTER_CREATION_DENIED);
|
||||
return false;
|
||||
}
|
||||
var cvselect_array = new Array('column1','column2','column3','column4','column5','column6','column7','column8','column9')
|
||||
for(var loop=0;loop < cvselect_array.length-1;loop++)
|
||||
{
|
||||
selected_cv_columnvalue = $(cvselect_array[loop]).options[$(cvselect_array[loop]).selectedIndex].value;
|
||||
if(selected_cv_columnvalue != '')
|
||||
{
|
||||
for(var iloop=0;iloop < cvselect_array.length;iloop++)
|
||||
{
|
||||
if(iloop == loop)
|
||||
iloop++;
|
||||
selected_cv_icolumnvalue = $(cvselect_array[iloop]).options[$(cvselect_array[iloop]).selectedIndex].value;
|
||||
if(selected_cv_columnvalue == selected_cv_icolumnvalue)
|
||||
{
|
||||
{/literal}
|
||||
alert('{$APP.COLUMNS_CANNOT_BE_DUPLICATED}');
|
||||
$(cvselect_array[iloop]).selectedIndex = 0;
|
||||
return false;
|
||||
{literal}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!checkval())
|
||||
return false;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
checkDuplicate();
|
||||
function stdfilterdateValidate()
|
||||
{
|
||||
if(!dateValidate("startdate",alert_arr.STDFILTER+" - "+alert_arr.STARTDATE,"OTH"))
|
||||
{
|
||||
getObj("startdate").focus()
|
||||
return false;
|
||||
}
|
||||
else if(!dateValidate("enddate",alert_arr.STDFILTER+" - "+alert_arr.ENDDATE,"OTH"))
|
||||
{
|
||||
getObj("enddate").focus()
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!dateComparison("enddate",alert_arr.STDFILTER+" - "+alert_arr.ENDDATE,"startdate",alert_arr.STDFILTER+" - "+alert_arr.STARTDATE,"GE")) {
|
||||
getObj("enddate").focus()
|
||||
return false
|
||||
} else return true;
|
||||
}
|
||||
}
|
||||
for(var i=1;i<=5;i++)
|
||||
{
|
||||
var obj=document.getElementById("fcol"+i);
|
||||
if(obj.selectedIndex != 0)
|
||||
updatefOptions(obj, 'fop'+i);
|
||||
}
|
||||
standardFilterDisplay();
|
||||
{/literal}
|
||||
</script>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user