mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
Road to the MIT
This commit is contained in:
parent
13d05dc2ff
commit
aa5d3fc89d
0
.docker/nginx/ssl.sh
Normal file → Executable file
0
.docker/nginx/ssl.sh
Normal file → Executable file
|
@ -12,7 +12,6 @@ module.exports = {
|
|||
es6: true
|
||||
},
|
||||
globals: {
|
||||
'RL_COMMUNITY': true,
|
||||
'RL_ES6': true
|
||||
},
|
||||
// http://eslint.org/docs/rules/
|
||||
|
|
1
.github/workflows/builder.yml
vendored
1
.github/workflows/builder.yml
vendored
|
@ -26,7 +26,6 @@ jobs:
|
|||
|
||||
- run: yarn install --frozen-lockfile --check-files
|
||||
- run: yarn build
|
||||
- run: yarn build-pro
|
||||
|
||||
- name: Move all assets to release folder
|
||||
run: |
|
||||
|
|
|
@ -29,7 +29,3 @@
|
|||
|
||||
1. Edit data/\_data_/\_default_/configs/application.ini
|
||||
2. Set 'cache_system_data' to Off
|
||||
|
||||
---
|
||||
|
||||
If you have any questions, open an issue or email support@rainloop.net.
|
||||
|
|
682
LICENSE
682
LICENSE
|
@ -1,661 +1,21 @@
|
|||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 RainLoopTeam
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
2
Makefile
2
Makefile
|
@ -61,8 +61,6 @@ rl-watch-js:
|
|||
|
||||
rl-build:
|
||||
@docker compose run --no-deps --rm node gulp all
|
||||
rl-build-pro:
|
||||
@docker compose run --no-deps --rm node gulp all --pro
|
||||
|
||||
yarn-install:
|
||||
@docker compose run --no-deps --rm node yarn install
|
||||
|
|
|
@ -22,8 +22,8 @@ Information about installing the product, check the [documentation page](http://
|
|||
|
||||
## License
|
||||
|
||||
**RainLoop Webmail (Community edition)** is released under
|
||||
**GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL)**.
|
||||
http://www.gnu.org/licenses/agpl-3.0.html
|
||||
**RainLoop Webmail (Legacy edition)** is released under
|
||||
**MIT License**.
|
||||
https://choosealicense.com/licenses/mit/
|
||||
|
||||
Copyright (c) 2019 Rainloop Team
|
||||
Copyright (c) 2022 Rainloop Team
|
||||
|
|
|
@ -4,9 +4,8 @@ import ko from 'ko';
|
|||
import progressJs from 'progressJs';
|
||||
|
||||
import { root } from 'Common/Links';
|
||||
import { getNotification } from 'Common/Translator';
|
||||
import { StorageResultType, Notification } from 'Common/Enums';
|
||||
import { pInt, isNormal, isArray, inArray, isUnd } from 'Common/Utils';
|
||||
import { StorageResultType } from 'Common/Enums';
|
||||
import { pInt, isArray, isUnd } from 'Common/Utils';
|
||||
|
||||
import * as Settings from 'Storage/Settings';
|
||||
|
||||
|
@ -14,7 +13,6 @@ import AppStore from 'Stores/Admin/App';
|
|||
import CapaStore from 'Stores/Admin/Capa';
|
||||
import DomainStore from 'Stores/Admin/Domain';
|
||||
import PluginStore from 'Stores/Admin/Plugin';
|
||||
import LicenseStore from 'Stores/Admin/License';
|
||||
import PackageStore from 'Stores/Admin/Package';
|
||||
import CoreStore from 'Stores/Admin/Core';
|
||||
import Remote from 'Remote/Admin/Ajax';
|
||||
|
@ -150,40 +148,6 @@ class AdminApp extends AbstractApp {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {boolean=} force = false
|
||||
*/
|
||||
reloadLicensing(force = false) {
|
||||
LicenseStore.licensingProcess(true);
|
||||
LicenseStore.licenseError('');
|
||||
Remote.licensing((result, data) => {
|
||||
LicenseStore.licensingProcess(false);
|
||||
if (StorageResultType.Success === result && data && data.Result && isNormal(data.Result.Expired)) {
|
||||
LicenseStore.licenseValid(true);
|
||||
LicenseStore.licenseExpired(pInt(data.Result.Expired));
|
||||
LicenseStore.licenseError('');
|
||||
LicenseStore.licensing(true);
|
||||
AppStore.prem(true);
|
||||
} else {
|
||||
if (
|
||||
data &&
|
||||
data.ErrorCode &&
|
||||
-1 < inArray(pInt(data.ErrorCode), [Notification.LicensingServerIsUnavailable, Notification.LicensingExpired])
|
||||
) {
|
||||
LicenseStore.licenseError(getNotification(pInt(data.ErrorCode)));
|
||||
LicenseStore.licensing(true);
|
||||
} else {
|
||||
if (StorageResultType.Abort === result) {
|
||||
LicenseStore.licenseError(getNotification(Notification.LicensingServerIsUnavailable));
|
||||
LicenseStore.licensing(true);
|
||||
} else {
|
||||
LicenseStore.licensing(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, force);
|
||||
}
|
||||
|
||||
bootend(bootendCallback = null) {
|
||||
if (progressJs) {
|
||||
progressJs.end();
|
||||
|
|
|
@ -26,11 +26,6 @@ $hcont
|
|||
|
||||
export const startMicrotime = new window.Date().getTime();
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
export const community = RL_COMMUNITY;
|
||||
|
||||
/**
|
||||
* @type {?}
|
||||
*/
|
||||
|
|
|
@ -12,6 +12,7 @@ import { SocialAdminSettings } from 'Settings/Admin/Social';
|
|||
import { PluginsAdminSettings } from 'Settings/Admin/Plugins';
|
||||
import { PackagesAdminSettings } from 'Settings/Admin/Packages';
|
||||
import { AboutAdminSettings } from 'Settings/Admin/About';
|
||||
import { BrandingAdminSettings } from 'Settings/Admin/Branding';
|
||||
|
||||
import { getApp } from 'Helper/Apps/Admin';
|
||||
|
||||
|
@ -27,16 +28,6 @@ class SettingsAdminScreen extends AbstractSettingsScreen {
|
|||
* @param {Function=} fCallback = null
|
||||
*/
|
||||
setupSettings(fCallback = null) {
|
||||
let branding = null,
|
||||
licensing = null;
|
||||
|
||||
if (RL_COMMUNITY) {
|
||||
branding = require('Settings/Admin/Branding').default;
|
||||
} else {
|
||||
branding = require('Settings/Admin/Prem/Branding').default;
|
||||
licensing = require('Settings/Admin/Prem/Licensing').default;
|
||||
}
|
||||
|
||||
addSettingsViewModel(
|
||||
GeneralAdminSettings,
|
||||
'AdminSettingsGeneral',
|
||||
|
@ -49,9 +40,7 @@ class SettingsAdminScreen extends AbstractSettingsScreen {
|
|||
|
||||
addSettingsViewModel(LoginAdminSettings, 'AdminSettingsLogin', 'TABS_LABELS/LABEL_LOGIN_NAME', 'login');
|
||||
|
||||
if (branding) {
|
||||
addSettingsViewModel(branding, 'AdminSettingsBranding', 'TABS_LABELS/LABEL_BRANDING_NAME', 'branding');
|
||||
}
|
||||
addSettingsViewModel(BrandingAdminSettings, 'AdminSettingsBranding', 'TABS_LABELS/LABEL_BRANDING_NAME', 'branding');
|
||||
|
||||
addSettingsViewModel(ContactsAdminSettings, 'AdminSettingsContacts', 'TABS_LABELS/LABEL_CONTACTS_NAME', 'contacts');
|
||||
|
||||
|
@ -68,10 +57,6 @@ class SettingsAdminScreen extends AbstractSettingsScreen {
|
|||
|
||||
addSettingsViewModel(PackagesAdminSettings, 'AdminSettingsPackages', 'TABS_LABELS/LABEL_PACKAGES_NAME', 'packages');
|
||||
|
||||
if (licensing) {
|
||||
addSettingsViewModel(licensing, 'AdminSettingsLicensing', 'TABS_LABELS/LABEL_LICENSING_NAME', 'licensing');
|
||||
}
|
||||
|
||||
addSettingsViewModel(AboutAdminSettings, 'AdminSettingsAbout', 'TABS_LABELS/LABEL_ABOUT_NAME', 'about');
|
||||
|
||||
runSettingsViewModelHooks(true);
|
||||
|
|
|
@ -3,7 +3,6 @@ import ko from 'ko';
|
|||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||
import { appSettingsGet, settingsGet } from 'Storage/Settings';
|
||||
|
||||
import AppStore from 'Stores/Admin/App';
|
||||
import CoreStore from 'Stores/Admin/Core';
|
||||
|
||||
import { getApp } from 'Helper/Apps/Admin';
|
||||
|
@ -27,8 +26,6 @@ class AboutAdminSettings {
|
|||
this.coreRemoteRelease = CoreStore.coreRemoteRelease;
|
||||
this.coreVersionCompare = CoreStore.coreVersionCompare;
|
||||
|
||||
this.community = RL_COMMUNITY || AppStore.community();
|
||||
|
||||
this.coreRemoteVersionHtmlDesc = ko.computed(() => {
|
||||
translatorTrigger();
|
||||
return i18n('TAB_ABOUT/HTML_NEW_VERSION', { 'VERSION': this.coreRemoteVersion() });
|
||||
|
@ -59,13 +56,13 @@ class AboutAdminSettings {
|
|||
}
|
||||
|
||||
onBuild() {
|
||||
if (this.access() && !this.community) {
|
||||
if (this.access()) {
|
||||
getApp().reloadCoreData();
|
||||
}
|
||||
}
|
||||
|
||||
updateCoreData() {
|
||||
if (!this.coreUpdating() && !this.community) {
|
||||
if (!this.coreUpdating()) {
|
||||
getApp().updateCoreData();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,14 +6,11 @@ import { settingsSaveHelperSimpleFunction, trim } from 'Common/Utils';
|
|||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||
|
||||
import Remote from 'Remote/Admin/Ajax';
|
||||
import AppStore from 'Stores/Admin/App';
|
||||
|
||||
import { settingsGet } from 'Storage/Settings';
|
||||
|
||||
class BrandingAdminSettings {
|
||||
constructor() {
|
||||
this.capa = AppStore.prem;
|
||||
|
||||
this.title = ko.observable(settingsGet('Title')).idleTrigger();
|
||||
this.loadingDesc = ko.observable(settingsGet('LoadingDescription')).idleTrigger();
|
||||
this.faviconUrl = ko.observable(settingsGet('FaviconUrl')).idleTrigger();
|
||||
|
@ -36,8 +33,6 @@ class BrandingAdminSettings {
|
|||
{ optValue: 'always', optText: i18n('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') }
|
||||
];
|
||||
});
|
||||
|
||||
this.community = RL_COMMUNITY || AppStore.community();
|
||||
}
|
||||
|
||||
onBuild() {
|
||||
|
@ -64,6 +59,86 @@ class BrandingAdminSettings {
|
|||
});
|
||||
});
|
||||
}, Magics.Time50ms);
|
||||
|
||||
_.delay(() => {
|
||||
const f1 = settingsSaveHelperSimpleFunction(this.loginLogo.trigger, this),
|
||||
f2 = settingsSaveHelperSimpleFunction(this.loginDescription.trigger, this),
|
||||
f3 = settingsSaveHelperSimpleFunction(this.loginCss.trigger, this),
|
||||
f4 = settingsSaveHelperSimpleFunction(this.userLogo.trigger, this),
|
||||
f5 = settingsSaveHelperSimpleFunction(this.userLogoTitle.trigger, this),
|
||||
f6 = settingsSaveHelperSimpleFunction(this.loginBackground.trigger, this),
|
||||
f7 = settingsSaveHelperSimpleFunction(this.userCss.trigger, this),
|
||||
f8 = settingsSaveHelperSimpleFunction(this.welcomePageUrl.trigger, this),
|
||||
f9 = settingsSaveHelperSimpleFunction(this.welcomePageDisplay.trigger, this),
|
||||
f10 = settingsSaveHelperSimpleFunction(this.userLogoMessage.trigger, this),
|
||||
f11 = settingsSaveHelperSimpleFunction(this.userIframeMessage.trigger, this);
|
||||
|
||||
this.loginLogo.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f1, {
|
||||
'LoginLogo': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginDescription.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f2, {
|
||||
'LoginDescription': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginCss.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f3, {
|
||||
'LoginCss': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogo.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f4, {
|
||||
'UserLogo': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogoTitle.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f5, {
|
||||
'UserLogoTitle': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogoMessage.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f10, {
|
||||
'UserLogoMessage': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userIframeMessage.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f11, {
|
||||
'UserIframeMessage': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginBackground.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f6, {
|
||||
'LoginBackground': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userCss.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f7, {
|
||||
'UserCss': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.welcomePageUrl.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f8, {
|
||||
'WelcomePageUrl': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.welcomePageDisplay.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f9, {
|
||||
'WelcomePageDisplay': trim(value)
|
||||
});
|
||||
});
|
||||
}, Magics.Time50ms);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import { boolToAjax } from 'Common/Utils';
|
|||
import { settingsGet } from 'Storage/Settings';
|
||||
import { showScreenPopup } from 'Knoin/Knoin';
|
||||
|
||||
import AppStore from 'Stores/Admin/App';
|
||||
import PluginStore from 'Stores/Admin/Plugin';
|
||||
|
||||
import Remote from 'Remote/Admin/Ajax';
|
||||
|
@ -22,8 +21,6 @@ class PluginsAdminSettings {
|
|||
this.plugins = PluginStore.plugins;
|
||||
this.pluginsError = PluginStore.plugins.error;
|
||||
|
||||
this.community = RL_COMMUNITY || AppStore.community();
|
||||
|
||||
this.visibility = ko.computed(() => (PluginStore.plugins.loading() ? 'visible' : 'hidden'));
|
||||
|
||||
this.onPluginLoadRequest = _.bind(this.onPluginLoadRequest, this);
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
import _ from '_';
|
||||
import { settingsSaveHelperSimpleFunction, trim } from 'Common/Utils';
|
||||
import { Magics } from 'Common/Enums';
|
||||
|
||||
import Remote from 'Remote/Admin/Ajax';
|
||||
|
||||
import { BrandingAdminSettings } from 'Settings/Admin/Branding';
|
||||
|
||||
class BrandingPremAdminSettings extends BrandingAdminSettings {
|
||||
onBuild(dom) {
|
||||
super.onBuild(dom);
|
||||
|
||||
if (this.capa && this.capa() && !this.community) {
|
||||
_.delay(() => {
|
||||
const f1 = settingsSaveHelperSimpleFunction(this.loginLogo.trigger, this),
|
||||
f2 = settingsSaveHelperSimpleFunction(this.loginDescription.trigger, this),
|
||||
f3 = settingsSaveHelperSimpleFunction(this.loginCss.trigger, this),
|
||||
f4 = settingsSaveHelperSimpleFunction(this.userLogo.trigger, this),
|
||||
f5 = settingsSaveHelperSimpleFunction(this.userLogoTitle.trigger, this),
|
||||
f6 = settingsSaveHelperSimpleFunction(this.loginBackground.trigger, this),
|
||||
f7 = settingsSaveHelperSimpleFunction(this.userCss.trigger, this),
|
||||
f8 = settingsSaveHelperSimpleFunction(this.welcomePageUrl.trigger, this),
|
||||
f9 = settingsSaveHelperSimpleFunction(this.welcomePageDisplay.trigger, this),
|
||||
f10 = settingsSaveHelperSimpleFunction(this.userLogoMessage.trigger, this),
|
||||
f11 = settingsSaveHelperSimpleFunction(this.userIframeMessage.trigger, this);
|
||||
|
||||
this.loginLogo.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f1, {
|
||||
'LoginLogo': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginDescription.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f2, {
|
||||
'LoginDescription': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginCss.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f3, {
|
||||
'LoginCss': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogo.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f4, {
|
||||
'UserLogo': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogoTitle.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f5, {
|
||||
'UserLogoTitle': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userLogoMessage.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f10, {
|
||||
'UserLogoMessage': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userIframeMessage.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f11, {
|
||||
'UserIframeMessage': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.loginBackground.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f6, {
|
||||
'LoginBackground': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.userCss.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f7, {
|
||||
'UserCss': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.welcomePageUrl.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f8, {
|
||||
'WelcomePageUrl': trim(value)
|
||||
});
|
||||
});
|
||||
|
||||
this.welcomePageDisplay.subscribe((value) => {
|
||||
Remote.saveAdminConfig(f9, {
|
||||
'WelcomePageDisplay': trim(value)
|
||||
});
|
||||
});
|
||||
}, Magics.Time50ms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { BrandingPremAdminSettings, BrandingPremAdminSettings as default };
|
|
@ -1,66 +0,0 @@
|
|||
import ko from 'ko';
|
||||
import moment from 'moment';
|
||||
|
||||
import { settingsGet } from 'Storage/Settings';
|
||||
import { showScreenPopup } from 'Knoin/Knoin';
|
||||
|
||||
import LicenseStore from 'Stores/Admin/License';
|
||||
|
||||
import { getApp } from 'Helper/Apps/Admin';
|
||||
|
||||
class LicensingPremAdminSettings {
|
||||
constructor() {
|
||||
this.licensing = LicenseStore.licensing;
|
||||
this.licensingProcess = LicenseStore.licensingProcess;
|
||||
this.licenseValid = LicenseStore.licenseValid;
|
||||
this.licenseExpired = LicenseStore.licenseExpired;
|
||||
this.licenseError = LicenseStore.licenseError;
|
||||
this.licenseTrigger = LicenseStore.licenseTrigger;
|
||||
|
||||
this.adminDomain = ko.observable('');
|
||||
this.subscriptionEnabled = ko.observable(!!settingsGet('SubscriptionEnabled'));
|
||||
|
||||
this.licenseTrigger.subscribe(() => {
|
||||
if (this.subscriptionEnabled()) {
|
||||
getApp().reloadLicensing(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onBuild() {
|
||||
if (this.subscriptionEnabled()) {
|
||||
getApp().reloadLicensing(false);
|
||||
}
|
||||
}
|
||||
|
||||
onShow() {
|
||||
this.adminDomain(settingsGet('AdminDomain'));
|
||||
}
|
||||
|
||||
showActivationForm() {
|
||||
showScreenPopup(require('View/Popup/Activate'));
|
||||
}
|
||||
|
||||
showTrialForm() {
|
||||
showScreenPopup(require('View/Popup/Activate'), [true]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
licenseIsUnlim() {
|
||||
return 1898625600 === this.licenseExpired() || 1898625700 === this.licenseExpired(); // eslint-disable-line no-magic-numbers
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
licenseExpiredMomentValue() {
|
||||
const time = this.licenseExpired(),
|
||||
momentUnix = moment.unix(time);
|
||||
|
||||
return this.licenseIsUnlim() ? 'Never' : time && momentUnix.format('LL') + ' (' + momentUnix.from(moment()) + ')';
|
||||
}
|
||||
}
|
||||
|
||||
export { LicensingPremAdminSettings, LicensingPremAdminSettings as default };
|
|
@ -16,9 +16,6 @@ class AbstractAppStore {
|
|||
});
|
||||
|
||||
this.interfaceAnimation.valueHasMutated();
|
||||
|
||||
this.prem = ko.observable(false);
|
||||
this.community = ko.observable(true);
|
||||
}
|
||||
|
||||
populate() {
|
||||
|
@ -27,9 +24,6 @@ class AbstractAppStore {
|
|||
this.newMoveToFolder(!!Settings.settingsGet('NewMoveToFolder'));
|
||||
|
||||
this.interfaceAnimation(!!Settings.settingsGet('InterfaceAnimation'));
|
||||
|
||||
this.prem(!!Settings.settingsGet('PremType'));
|
||||
this.community(!!Settings.settingsGet('Community'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
import ko from 'ko';
|
||||
|
||||
class LicenseAdminStore {
|
||||
constructor() {
|
||||
this.licensing = ko.observable(false);
|
||||
this.licensingProcess = ko.observable(false);
|
||||
this.licenseValid = ko.observable(false);
|
||||
this.licenseExpired = ko.observable(0);
|
||||
this.licenseError = ko.observable('');
|
||||
|
||||
this.licenseTrigger = ko.observable(false);
|
||||
}
|
||||
}
|
||||
|
||||
export default new LicenseAdminStore();
|
|
@ -25,9 +25,6 @@ class PaneSettingsAdminView extends AbstractViewNext {
|
|||
this.adminDomain = ko.observable(Settings.settingsGet('AdminDomain'));
|
||||
this.version = ko.observable(Settings.appSettingsGet('version'));
|
||||
|
||||
this.capa = !!Settings.settingsGet('PremType');
|
||||
this.community = RL_COMMUNITY;
|
||||
|
||||
this.adminManLoading = ko.computed(
|
||||
() =>
|
||||
'000' !==
|
||||
|
|
|
@ -1,120 +0,0 @@
|
|||
import ko from 'ko';
|
||||
|
||||
import { StorageResultType, Notification } from 'Common/Enums';
|
||||
import { trim, isUnd } from 'Common/Utils';
|
||||
import { RAINLOOP_TRIAL_KEY } from 'Common/Consts';
|
||||
import { i18n, getNotification } from 'Common/Translator';
|
||||
|
||||
import * as Settings from 'Storage/Settings';
|
||||
|
||||
import Remote from 'Remote/Admin/Ajax';
|
||||
import LicenseStore from 'Stores/Admin/License';
|
||||
|
||||
import { popup, command } from 'Knoin/Knoin';
|
||||
import { AbstractViewNext } from 'Knoin/AbstractViewNext';
|
||||
|
||||
@popup({
|
||||
name: 'View/Popup/Activate',
|
||||
templateID: 'PopupsActivate'
|
||||
})
|
||||
class ActivatePopupView extends AbstractViewNext {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.domain = ko.observable('');
|
||||
this.key = ko.observable('');
|
||||
this.key.focus = ko.observable(false);
|
||||
this.activationSuccessed = ko.observable(false);
|
||||
|
||||
this.licenseTrigger = LicenseStore.licenseTrigger;
|
||||
|
||||
this.activateProcess = ko.observable(false);
|
||||
this.activateText = ko.observable('');
|
||||
this.activateText.isError = ko.observable(false);
|
||||
|
||||
this.htmlDescription = ko.computed(() => i18n('POPUPS_ACTIVATE/HTML_DESC', { 'DOMAIN': this.domain() }));
|
||||
|
||||
this.key.subscribe(() => {
|
||||
this.activateText('');
|
||||
this.activateText.isError(false);
|
||||
});
|
||||
|
||||
this.activationSuccessed.subscribe((value) => {
|
||||
if (value) {
|
||||
this.licenseTrigger(!this.licenseTrigger());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@command(
|
||||
(self) => !self.activateProcess() && '' !== self.domain() && '' !== self.key() && !self.activationSuccessed()
|
||||
)
|
||||
activateCommand() {
|
||||
this.activateProcess(true);
|
||||
if (this.validateSubscriptionKey()) {
|
||||
Remote.licensingActivate(
|
||||
(sResult, oData) => {
|
||||
this.activateProcess(false);
|
||||
if (StorageResultType.Success === sResult && oData.Result) {
|
||||
if (true === oData.Result) {
|
||||
this.activationSuccessed(true);
|
||||
this.activateText(i18n('POPUPS_ACTIVATE/SUBS_KEY_ACTIVATED'));
|
||||
this.activateText.isError(false);
|
||||
} else {
|
||||
this.activateText(oData.Result);
|
||||
this.activateText.isError(true);
|
||||
this.key.focus(true);
|
||||
}
|
||||
} else if (oData.ErrorCode) {
|
||||
this.activateText(getNotification(oData.ErrorCode));
|
||||
this.activateText.isError(true);
|
||||
this.key.focus(true);
|
||||
} else {
|
||||
this.activateText(getNotification(Notification.UnknownError));
|
||||
this.activateText.isError(true);
|
||||
this.key.focus(true);
|
||||
}
|
||||
},
|
||||
this.domain(),
|
||||
this.key().replace(/[^A-Z0-9-]/gi, '')
|
||||
);
|
||||
} else {
|
||||
this.activateProcess(false);
|
||||
this.activateText(i18n('POPUPS_ACTIVATE/ERROR_INVALID_SUBS_KEY'));
|
||||
this.activateText.isError(true);
|
||||
this.key.focus(true);
|
||||
}
|
||||
}
|
||||
|
||||
onShow(isTrial) {
|
||||
this.domain(Settings.settingsGet('AdminDomain'));
|
||||
if (!this.activateProcess()) {
|
||||
isTrial = isUnd(isTrial) ? false : !!isTrial;
|
||||
|
||||
this.key(isTrial ? RAINLOOP_TRIAL_KEY : '');
|
||||
this.activateText('');
|
||||
this.activateText.isError(false);
|
||||
this.activationSuccessed(false);
|
||||
}
|
||||
}
|
||||
|
||||
onShowWithDelay() {
|
||||
if (!this.activateProcess()) {
|
||||
this.key.focus(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
validateSubscriptionKey() {
|
||||
const value = this.key();
|
||||
return (
|
||||
'' === value ||
|
||||
RAINLOOP_TRIAL_KEY === value ||
|
||||
!!/^RL[\d]+-[A-Z0-9-]+Z$/.test(trim(value).replace(/[^A-Z0-9-]/gi, ''))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export { ActivatePopupView, ActivatePopupView as default };
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
|
||||
const { cleanStatic } = require('./tasks/common');
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
if (!defined('APP_VERSION'))
|
||||
{
|
||||
define('APP_VERSION', '0.0.0');
|
||||
define('APP_VERSION_TYPE', 'source');
|
||||
define('APP_INDEX_ROOT_FILE', __FILE__);
|
||||
define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/'));
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ mkdir rainloop-deb-build;
|
|||
cd rainloop-deb-build;
|
||||
|
||||
#Prepare zip file
|
||||
unzip ../rainloop-community-latest.zip;
|
||||
unzip ../rainloop-legacy-latest.zip;
|
||||
find . -type d -exec chmod 755 {} \;
|
||||
find . -type f -exec chmod 644 {} \;
|
||||
|
||||
|
|
15
package.json
15
package.json
|
@ -3,8 +3,8 @@
|
|||
"title": "RainLoop Webmail",
|
||||
"description": "Simple, modern & fast web-based email client",
|
||||
"private": true,
|
||||
"version": "1.16.0",
|
||||
"ownCloudVersion": "5.4.0",
|
||||
"version": "1.17.0",
|
||||
"ownCloudVersion": "5.5.0",
|
||||
"homepage": "https://www.rainloop.net",
|
||||
"author": {
|
||||
"name": "RainLoop Team",
|
||||
|
@ -18,18 +18,13 @@
|
|||
"scripts": {
|
||||
"watch-css": "gulp watchCss",
|
||||
"watch-js": "webpack --color --watch",
|
||||
"build": "gulp all",
|
||||
"build-pro": "gulp all --pro"
|
||||
"build": "gulp all"
|
||||
},
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"licenses": [
|
||||
{
|
||||
"type": "AGPL 3.0",
|
||||
"ulr": "http://www.gnu.org/licenses/agpl-3.0.html"
|
||||
},
|
||||
{
|
||||
"type": "RainLoop Software License",
|
||||
"ulr": "https://www.rainloop.net/licensing/"
|
||||
"type": "MIT",
|
||||
"ulr": "https://choosealicense.com/licenses/mit/"
|
||||
}
|
||||
],
|
||||
"bugs": {
|
||||
|
|
|
@ -239,7 +239,8 @@ class HtmlUtils
|
|||
$oWrapHtml->setAttribute($sKey, $sValue);
|
||||
}
|
||||
|
||||
$oWrapDom = $oDom->createElement('div', '___xxx___');
|
||||
$sRndId = '__wrp__'.md5(APP_START.rand(10000, 99999).APP_START).'__';
|
||||
$oWrapDom = $oDom->createElement('div', $sRndId);
|
||||
$oWrapDom->setAttribute('data-x-div-type', 'body');
|
||||
foreach ($aBodylAttrs as $sKey => $sValue)
|
||||
{
|
||||
|
@ -250,7 +251,7 @@ class HtmlUtils
|
|||
|
||||
$sWrp = $oDom->saveHTML($oWrapHtml);
|
||||
|
||||
$sResult = \str_replace('___xxx___', $sResult, $sWrp);
|
||||
$sResult = \str_replace($sRndId, $sResult, $sWrp);
|
||||
}
|
||||
|
||||
$sResult = \str_replace(\MailSo\Base\HtmlUtils::$KOS, ':', $sResult);
|
||||
|
|
|
@ -112,9 +112,9 @@ class Actions
|
|||
private $oTwoFactorAuthProvider;
|
||||
|
||||
/**
|
||||
* @var \RainLoop\Providers\Prem
|
||||
* @var \RainLoop\Providers\Version
|
||||
*/
|
||||
private $oPremProvider;
|
||||
private $oVersionProvider;
|
||||
|
||||
/**
|
||||
* @var \RainLoop\Config\Application
|
||||
|
@ -157,7 +157,7 @@ class Actions
|
|||
$this->oSuggestionsProvider = null;
|
||||
$this->oChangePasswordProvider = null;
|
||||
$this->oTwoFactorAuthProvider = null;
|
||||
$this->oPremProvider = null;
|
||||
$this->oVersionProvider = null;
|
||||
|
||||
$this->sSpecAuthToken = '';
|
||||
$this->sUpdateAuthToken = '';
|
||||
|
@ -841,25 +841,18 @@ class Actions
|
|||
}
|
||||
|
||||
/**
|
||||
* @return \RainLoop\Providers\Prem
|
||||
* @return \RainLoop\Providers\Version
|
||||
*/
|
||||
public function PremProvider()
|
||||
public function VersionProvider()
|
||||
{
|
||||
if (null === $this->oPremProvider)
|
||||
if (null === $this->oVersionProvider)
|
||||
{
|
||||
if (\file_exists(APP_VERSION_ROOT_PATH.'app/libraries/RainLoop/Providers/Prem.php'))
|
||||
{
|
||||
$this->oPremProvider = new \RainLoop\Providers\Prem(
|
||||
$this->Config(), $this->Logger(), $this->Cacher(null, true)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->oPremProvider = false;
|
||||
}
|
||||
$this->oVersionProvider = new \RainLoop\Providers\Version(
|
||||
$this->Config(), $this->Logger()
|
||||
);
|
||||
}
|
||||
|
||||
return $this->oPremProvider;
|
||||
return $this->oVersionProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1428,14 +1421,6 @@ class Actions
|
|||
return $this->GetAccountFromCustomToken($this->getLocalAuthToken(), $bThrowExceptionOnFalse, true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsOpen()
|
||||
{
|
||||
return !$this->PremProvider();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bAdmin = false
|
||||
* @param bool $bMobile = false
|
||||
|
@ -1482,7 +1467,7 @@ class Actions
|
|||
'customLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
||||
'forgotPasswordLinkUrl' => \trim($oConfig->Get('login', 'forgot_password_link_url', '')),
|
||||
'registrationLinkUrl' => \trim($oConfig->Get('login', 'registration_link_url', '')),
|
||||
'hideSubmitButton' => (bool) $oConfig->Get('login', 'hide_submit_button', true),
|
||||
'hideSubmitButton' => (bool) $oConfig->Get('login', 'hide_submit_button', false),
|
||||
'jsHash' => \md5(\RainLoop\Utils::GetConnectionToken()),
|
||||
'useImapThread' => (bool) $oConfig->Get('labs', 'use_imap_thread', false),
|
||||
'useImapSubscribe' => (bool) $oConfig->Get('labs', 'use_imap_list_subscribe', true),
|
||||
|
@ -1496,7 +1481,6 @@ class Actions
|
|||
'themes' => $this->GetThemes($bMobile, false),
|
||||
'languages' => $this->GetLanguages(false),
|
||||
'languagesAdmin' => $this->GetLanguages(true),
|
||||
'appVersionType' => APP_VERSION_TYPE,
|
||||
'attachmentsActions' => $aAttachmentsActions
|
||||
), $bAdmin ? array(
|
||||
'adminHostUse' => '' !== $oConfig->Get('security', 'admin_panel_host', ''),
|
||||
|
@ -1561,8 +1545,6 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
'ContactsIsAllowed' => false,
|
||||
'ChangePasswordIsAllowed' => false,
|
||||
'RequireTwoFactor' => false,
|
||||
'Community' => true,
|
||||
'PremType' => false,
|
||||
'Admin' => array(),
|
||||
'Capa' => array(),
|
||||
'Plugins' => array(),
|
||||
|
@ -1574,11 +1556,17 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
$aResult['AuthAccountHash'] = $sAuthAccountHash;
|
||||
}
|
||||
|
||||
$oPremProvider = $this->PremProvider();
|
||||
if ($oPremProvider)
|
||||
{
|
||||
$oPremProvider->PopulateAppData($aResult);
|
||||
}
|
||||
$aResult['LoginLogo'] = $oConfig->Get('branding', 'login_logo', '');
|
||||
$aResult['LoginBackground'] = $oConfig->Get('branding', 'login_background', '');
|
||||
$aResult['LoginCss'] = $oConfig->Get('branding', 'login_css', '');
|
||||
$aResult['LoginDescription'] = $oConfig->Get('branding', 'login_desc', '');
|
||||
$aResult['UserLogo'] = $oConfig->Get('branding', 'user_logo', '');
|
||||
$aResult['UserLogoTitle'] = $oConfig->Get('branding', 'user_logo_title', '');
|
||||
$aResult['UserLogoMessage'] = $oConfig->Get('branding', 'user_logo_message', '');
|
||||
$aResult['UserIframeMessage'] = $oConfig->Get('branding', 'user_iframe_message', '');
|
||||
$aResult['UserCss'] = $oConfig->Get('branding', 'user_css', '');
|
||||
$aResult['WelcomePageUrl'] = $oConfig->Get('branding', 'welcome_page_url', '');
|
||||
$aResult['WelcomePageDisplay'] = \strtolower($oConfig->Get('branding', 'welcome_page_display', 'none'));
|
||||
|
||||
if ('' !== $aResult['LoadingDescription'] && 'RainLoop' !== $aResult['LoadingDescription'])
|
||||
{
|
||||
|
@ -1811,9 +1799,6 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
$aResult['AllowDropboxSocial'] = (bool) $oConfig->Get('social', 'dropbox_enable', false);
|
||||
$aResult['DropboxApiKey'] = (string) $oConfig->Get('social', 'dropbox_api_key', '');
|
||||
|
||||
$aResult['SubscriptionEnabled'] = (bool) \MailSo\Base\Utils::ValidateDomain($aResult['AdminDomain'], true);
|
||||
// || \MailSo\Base\Utils::ValidateIP($aResult['AdminDomain']);
|
||||
|
||||
$aResult['WeakPassword'] = (bool) $oConfig->ValidatePassword('12345');
|
||||
$aResult['CoreAccess'] = (bool) $this->rainLoopCoreAccess();
|
||||
|
||||
|
@ -3638,11 +3623,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
}
|
||||
else if ($bVersionsCache)
|
||||
{
|
||||
$oPremProvider = $this->PremProvider();
|
||||
if ($oPremProvider)
|
||||
{
|
||||
$oPremProvider->ClearOldVersion();
|
||||
}
|
||||
$this->VersionProvider()->ClearOldVersion();
|
||||
}
|
||||
|
||||
$this->Plugins()->RunHook('service.app-delay-start-end');
|
||||
|
@ -3884,11 +3865,19 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
$this->setConfigFromParams($oConfig, 'DropboxEnable', 'social', 'dropbox_enable', 'bool');
|
||||
$this->setConfigFromParams($oConfig, 'DropboxApiKey', 'social', 'dropbox_api_key', 'string');
|
||||
|
||||
$oPremProvider = $this->PremProvider();
|
||||
if ($oPremProvider)
|
||||
{
|
||||
$oPremProvider->PremSection($this, $oConfig);
|
||||
}
|
||||
$this->setConfigFromParams($oConfig, 'LoginLogo', 'branding', 'login_logo', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'LoginBackground', 'branding', 'login_background', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'LoginDescription', 'branding', 'login_desc', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'LoginCss', 'branding', 'login_css', 'string');
|
||||
|
||||
$this->setConfigFromParams($oConfig, 'UserLogo', 'branding', 'user_logo', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'UserLogoTitle', 'branding', 'user_logo_title', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'UserLogoMessage', 'branding', 'user_logo_message', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'UserIframeMessage', 'branding', 'user_iframe_message', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'UserCss', 'branding', 'user_css', 'string');
|
||||
|
||||
$this->setConfigFromParams($oConfig, 'WelcomePageUrl', 'branding', 'welcome_page_url', 'string');
|
||||
$this->setConfigFromParams($oConfig, 'WelcomePageDisplay', 'branding', 'welcome_page_display', 'string');
|
||||
|
||||
return $this->DefaultResponse(__FUNCTION__, $oConfig->Save());
|
||||
}
|
||||
|
@ -3971,48 +3960,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
public function DoAdminLicensing()
|
||||
{
|
||||
$this->IsAdminLoggined();
|
||||
|
||||
$bForce = '1' === (string) $this->GetActionParam('Force', '0');
|
||||
|
||||
$mResult = false;
|
||||
$iErrorCode = -1;
|
||||
|
||||
$oPremProvider = $this->PremProvider();
|
||||
|
||||
if ($oPremProvider && 2 < \strlen(APP_SITE))
|
||||
{
|
||||
$sValue = $oPremProvider->Fetcher($bForce);
|
||||
|
||||
$this->requestSleep();
|
||||
|
||||
$iExpired = 0;
|
||||
if ($oPremProvider->Parser($sValue, $iExpired))
|
||||
{
|
||||
$mResult = array(
|
||||
'Banned' => false,
|
||||
'Expired' => $iExpired,
|
||||
);
|
||||
}
|
||||
else if ($sValue === 'NO' || \preg_match('/^EXPIRED:[\d]+$/', $sValue))
|
||||
{
|
||||
$iErrorCode = -1;
|
||||
}
|
||||
else if ($sValue === 'TOO_MANY_CONNECTIONS')
|
||||
{
|
||||
$iErrorCode = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$iErrorCode = \RainLoop\Notifications::LicensingServerIsUnavailable;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < $iErrorCode && !$mResult)
|
||||
{
|
||||
throw new \RainLoop\Exceptions\ClientException($iErrorCode);
|
||||
}
|
||||
|
||||
return $this->DefaultResponse(__FUNCTION__, $mResult);
|
||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::LicensingServerIsUnavailable);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4021,50 +3969,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
public function DoAdminLicensingActivate()
|
||||
{
|
||||
$this->IsAdminLoggined();
|
||||
|
||||
$sDomain = (string) $this->GetActionParam('Domain', '');
|
||||
$sKey = (string) $this->GetActionParam('Key', '');
|
||||
|
||||
$mResult = false;
|
||||
$iErrorCode = -1;
|
||||
|
||||
$oPrem = $this->PremProvider();
|
||||
|
||||
if ($oPrem && 2 < \strlen($sDomain) && 2 < \strlen($sKey) && $sDomain === APP_SITE)
|
||||
{
|
||||
$iCode = 0;
|
||||
$sValue = $oPrem->Activate($sDomain, $sKey, $iCode);
|
||||
|
||||
$this->requestSleep();
|
||||
|
||||
$aMatch = array();
|
||||
if ('OK' === $sValue)
|
||||
{
|
||||
$mResult = true;
|
||||
}
|
||||
else if ('TOO_MANY_CONNECTIONS' === $sValue)
|
||||
{
|
||||
$mResult = 'Too many connections. Please try again later.';
|
||||
}
|
||||
else if (\preg_match('/^ERROR:(.+)$/', $sValue, $aMatch) && !empty($aMatch[1]))
|
||||
{
|
||||
$mResult = trim($aMatch[1]);
|
||||
|
||||
$this->Logger()->Write('Activation error for: '.$sKey.' ('.$sDomain.')', \MailSo\Log\Enumerations\Type::ERROR);
|
||||
$this->Logger()->Write($mResult, \MailSo\Log\Enumerations\Type::ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
$iErrorCode = \RainLoop\Notifications::LicensingServerIsUnavailable;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < $iErrorCode && !$mResult)
|
||||
{
|
||||
throw new \RainLoop\Exceptions\ClientException($iErrorCode);
|
||||
}
|
||||
|
||||
return $this->DefaultResponse(__FUNCTION__, $mResult);
|
||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::LicensingServerIsUnavailable);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4670,7 +4575,6 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
|
||||
$bRainLoopUpdatable = $this->rainLoopUpdatable();
|
||||
$bRainLoopAccess = $this->rainLoopCoreAccess();
|
||||
$oPremProvider = $this->PremProvider();
|
||||
|
||||
$aData = array();
|
||||
if ($bRainLoopUpdatable && $bRainLoopAccess)
|
||||
|
@ -4679,9 +4583,9 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
}
|
||||
|
||||
$bResult = false;
|
||||
if ($bReal && $oPremProvider && !empty($aData['file']))
|
||||
if ($bReal && !empty($aData['file']))
|
||||
{
|
||||
$bResult = $oPremProvider->UpdateCore($this, $aData['file']);
|
||||
$bResult = $this->VersionProvider()->UpdateCore($this, $aData['file']);
|
||||
}
|
||||
|
||||
return $this->DefaultResponse(__FUNCTION__, $bResult);
|
||||
|
@ -9701,9 +9605,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
|||
*/
|
||||
public function StaticPath($sPath)
|
||||
{
|
||||
$sKey = defined('APP_VERSION_TYPE') && 0 < strlen(APP_VERSION_TYPE) ? APP_VERSION_TYPE :
|
||||
($this->IsOpen() ? 'community' : 'standard');
|
||||
|
||||
$sKey = 'legacy';
|
||||
$sResult = \RainLoop\Utils::WebStaticPath().$sPath;
|
||||
return $sResult.(false === \strpos($sResult, '?') ? '?' : '&').$sKey;
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
|||
|
||||
'welcome_page' => array(false, ''),
|
||||
|
||||
'hide_submit_button' => array(true),
|
||||
'hide_submit_button' => array(false),
|
||||
|
||||
'forgot_password_link_url' => array('', ''),
|
||||
'registration_link_url' => array('', ''),
|
||||
|
|
|
@ -4,7 +4,6 @@ namespace RainLoop\Enumerations;
|
|||
|
||||
class Capa
|
||||
{
|
||||
const PREM = 'PREM';
|
||||
const TWO_FACTOR = 'TWO_FACTOR';
|
||||
const TWO_FACTOR_FORCE = 'TWO_FACTOR_FORCE';
|
||||
const OPEN_PGP = 'OPEN_PGP';
|
||||
|
|
|
@ -1,390 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace RainLoop\Providers;
|
||||
|
||||
class Prem
|
||||
{
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($oConfig, $oLogger, $oCacher)
|
||||
{
|
||||
$this->oConfig = $oConfig;
|
||||
$this->oLogger = $oLogger;
|
||||
$this->oCacher = $oCacher;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function Type()
|
||||
{
|
||||
static $bResult = null;
|
||||
if (null === $bResult)
|
||||
{
|
||||
$bResult = $this->Parser($this->Fetcher(false, true));
|
||||
}
|
||||
|
||||
return $bResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsActive()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sInput
|
||||
* @param int $iExpired = 0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function Parser($sInput, &$iExpired = 0)
|
||||
{
|
||||
$aMatch = array();
|
||||
if (\preg_match('/^EXPIRED:([\d]+)$/', $sInput, $aMatch))
|
||||
{
|
||||
$iExpired = (int) $aMatch[1];
|
||||
return \time() < $iExpired;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $aAppData
|
||||
*/
|
||||
public function PopulateAppData(&$aAppData)
|
||||
{
|
||||
if (\is_array($aAppData))
|
||||
{
|
||||
$aAppData['Community'] = false;
|
||||
|
||||
$oConfig = $this->oConfig;
|
||||
if ($oConfig && $this->Type())
|
||||
{
|
||||
$aAppData['PremType'] = true;
|
||||
$aAppData['LoginLogo'] = $oConfig->Get('branding', 'login_logo', '');
|
||||
$aAppData['LoginBackground'] = $oConfig->Get('branding', 'login_background', '');
|
||||
$aAppData['LoginCss'] = $oConfig->Get('branding', 'login_css', '');
|
||||
$aAppData['LoginDescription'] = $oConfig->Get('branding', 'login_desc', '');
|
||||
$aAppData['UserLogo'] = $oConfig->Get('branding', 'user_logo', '');
|
||||
$aAppData['UserLogoTitle'] = $oConfig->Get('branding', 'user_logo_title', '');
|
||||
$aAppData['UserLogoMessage'] = $oConfig->Get('branding', 'user_logo_message', '');
|
||||
$aAppData['UserIframeMessage'] = $oConfig->Get('branding', 'user_iframe_message', '');
|
||||
$aAppData['UserCss'] = $oConfig->Get('branding', 'user_css', '');
|
||||
$aAppData['WelcomePageUrl'] = $oConfig->Get('branding', 'welcome_page_url', '');
|
||||
$aAppData['WelcomePageDisplay'] = \strtolower($oConfig->Get('branding', 'welcome_page_display', 'none'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function PremSection(&$oActions, &$oConfig)
|
||||
{
|
||||
if ($oActions && $oActions->HasOneOfActionParams(array(
|
||||
'LoginLogo', 'LoginBackground', 'LoginDescription', 'LoginCss',
|
||||
'UserLogo', 'UserLogoTitle', 'UserLogoMessage', 'UserIframeMessage', 'UserCss',
|
||||
'WelcomePageUrl', 'WelcomePageDisplay'
|
||||
)) && $this->Type())
|
||||
{
|
||||
$oActions->setConfigFromParams($oConfig, 'LoginLogo', 'branding', 'login_logo', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'LoginBackground', 'branding', 'login_background', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'LoginDescription', 'branding', 'login_desc', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'LoginCss', 'branding', 'login_css', 'string');
|
||||
|
||||
$oActions->setConfigFromParams($oConfig, 'UserLogo', 'branding', 'user_logo', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'UserLogoTitle', 'branding', 'user_logo_title', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'UserLogoMessage', 'branding', 'user_logo_message', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'UserIframeMessage', 'branding', 'user_iframe_message', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'UserCss', 'branding', 'user_css', 'string');
|
||||
|
||||
$oActions->setConfigFromParams($oConfig, 'WelcomePageUrl', 'branding', 'welcome_page_url', 'string');
|
||||
$oActions->setConfigFromParams($oConfig, 'WelcomePageDisplay', 'branding', 'welcome_page_display', 'string');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function Activate($sDomain, $sKey, &$iCode)
|
||||
{
|
||||
$iCode = 0;
|
||||
$sContentType = '';
|
||||
|
||||
$oHttp = \MailSo\Base\Http::SingletonInstance();
|
||||
|
||||
$sResult = $oHttp->GetUrlAsString(APP_API_PATH.'activate/'.\urlencode($sDomain).'/'.\urlencode($sKey),
|
||||
'RainLoop/'.APP_VERSION, $sContentType, $iCode, $this->oLogger, 10,
|
||||
$this->oConfig->Get('labs', 'curl_proxy', ''), $this->oConfig->Get('labs', 'curl_proxy_auth', ''),
|
||||
array(), false
|
||||
);
|
||||
|
||||
if (200 !== $iCode)
|
||||
{
|
||||
$sResult = '';
|
||||
}
|
||||
|
||||
return $sResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function Fetcher($sForce = false, $bLongCache = false, $iFastCacheTimeInMin = 10, $iLongCacheTimeInDays = 3)
|
||||
{
|
||||
$sDomain = \trim(APP_SITE);
|
||||
|
||||
$oConfig = $this->oConfig;
|
||||
$oLogger = $this->oLogger;
|
||||
$oCacher = $this->oCacher;
|
||||
|
||||
$oHttp = \MailSo\Base\Http::SingletonInstance();
|
||||
|
||||
if (0 === \strlen($sDomain) || $oHttp->CheckLocalhost($sDomain) || !$oCacher || !$oConfig || !$oCacher->Verify(true))
|
||||
{
|
||||
return 'NO';
|
||||
}
|
||||
|
||||
$sDomainKeyValue = \RainLoop\KeyPathHelper::LicensingDomainKeyValue($sDomain);
|
||||
$sDomainLongKeyValue = \RainLoop\KeyPathHelper::LicensingDomainKeyOtherValue($sDomain);
|
||||
|
||||
$sValue = '';
|
||||
if (!$sForce)
|
||||
{
|
||||
if ($bLongCache)
|
||||
{
|
||||
$bLock = $oCacher->GetLock($sDomainLongKeyValue);
|
||||
$iTime = $bLock ? 0 : $oCacher->GetTimer($sDomainLongKeyValue);
|
||||
|
||||
if ($bLock || (0 < $iTime && \time() < $iTime + (60 * 60 * 24) * $iLongCacheTimeInDays))
|
||||
{
|
||||
$sValue = $oCacher->Get($sDomainLongKeyValue);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$iTime = $oCacher->GetTimer($sDomainKeyValue);
|
||||
if (0 < $iTime && \time() < $iTime + 60 * $iFastCacheTimeInMin)
|
||||
{
|
||||
$sValue = $oCacher->Get($sDomainKeyValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (0 === \strlen($sValue))
|
||||
{
|
||||
if ($bLongCache)
|
||||
{
|
||||
if (!$oCacher->SetTimer($sDomainLongKeyValue))
|
||||
{
|
||||
return 'NO';
|
||||
}
|
||||
|
||||
$oCacher->SetLock($sDomainLongKeyValue);
|
||||
}
|
||||
|
||||
$iCode = 0;
|
||||
$sContentType = '';
|
||||
|
||||
$sValue = $oHttp->GetUrlAsString(APP_API_PATH.'status/'.\urlencode($sDomain),
|
||||
'RainLoop/'.APP_VERSION, $sContentType, $iCode, $oLogger, 5,
|
||||
$oConfig->Get('labs', 'curl_proxy', ''), $oConfig->Get('labs', 'curl_proxy_auth', ''),
|
||||
array(), false
|
||||
);
|
||||
|
||||
if ($oLogger)
|
||||
{
|
||||
$oLogger->Write($sValue);
|
||||
}
|
||||
|
||||
if (404 === $iCode)
|
||||
{
|
||||
$sValue = 'NO';
|
||||
}
|
||||
else if (200 !== $iCode)
|
||||
{
|
||||
$sValue = '';
|
||||
}
|
||||
|
||||
$oCacher->SetTimer($sDomainKeyValue);
|
||||
|
||||
$oCacher->Set($sDomainKeyValue, $sValue);
|
||||
$oCacher->Set($sDomainLongKeyValue, $sValue);
|
||||
|
||||
if ($bLongCache)
|
||||
{
|
||||
$oCacher->RemoveLock($sDomainLongKeyValue);
|
||||
}
|
||||
}
|
||||
|
||||
return $sValue;
|
||||
}
|
||||
|
||||
public function ClearOldVersion()
|
||||
{
|
||||
$sVPath = APP_INDEX_ROOT_PATH.'rainloop/v/';
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Begin');
|
||||
}
|
||||
|
||||
$aDirs = @\array_map('basename', @\array_filter(@\glob($sVPath.'*'), 'is_dir'));
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Count:'.(\is_array($aDirs) ? \count($aDirs) : 0));
|
||||
}
|
||||
|
||||
if (\is_array($aDirs) && 5 < \count($aDirs))
|
||||
{
|
||||
\uasort($aDirs, 'version_compare');
|
||||
|
||||
foreach ($aDirs as $sName)
|
||||
{
|
||||
if (APP_DEV_VERSION !== $sName && APP_VERSION !== $sName)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Begin to remove "'.$sVPath.$sName.'" version');
|
||||
}
|
||||
|
||||
if (@\unlink($sVPath.$sName.'/index.php'))
|
||||
{
|
||||
@\MailSo\Base\Utils::RecRmDir($sVPath.$sName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC (Error): index file cant be removed from"'.$sVPath.$sName.'"',
|
||||
\MailSo\Log\Enumerations\Type::ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: End to remove "'.$sVPath.$sName.'" version');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: End');
|
||||
}
|
||||
}
|
||||
|
||||
public function UpdateCore($oActions, $sFile)
|
||||
{
|
||||
$bResult = false;
|
||||
|
||||
$sNewVersion = '';
|
||||
$sTmp = $oActions->downloadRemotePackageByUrl($sFile);
|
||||
if (!empty($sTmp))
|
||||
{
|
||||
include_once APP_VERSION_ROOT_PATH.'app/libraries/pclzip/pclzip.lib.php';
|
||||
|
||||
$oArchive = new \PclZip($sTmp);
|
||||
$sTmpFolder = APP_PRIVATE_DATA.\md5($sTmp);
|
||||
|
||||
\mkdir($sTmpFolder);
|
||||
if (\is_dir($sTmpFolder))
|
||||
{
|
||||
$bResult = 0 !== $oArchive->extract(PCLZIP_OPT_PATH, $sTmpFolder);
|
||||
if (!$bResult)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot extract package files: '.$oArchive->errorInfo(), \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
if ($bResult && \file_exists($sTmpFolder.'/index.php') &&
|
||||
\is_writable(APP_INDEX_ROOT_PATH.'rainloop/') &&
|
||||
\is_writable(APP_INDEX_ROOT_PATH.'index.php') &&
|
||||
\is_dir($sTmpFolder.'/rainloop/'))
|
||||
{
|
||||
$aMatch = array();
|
||||
$sIndexFile = \file_get_contents($sTmpFolder.'/index.php');
|
||||
if (\preg_match('/\'APP_VERSION\', \'([^\']+)\'/', $sIndexFile, $aMatch) && !empty($aMatch[1]))
|
||||
{
|
||||
$sNewVersion = \trim($aMatch[1]);
|
||||
}
|
||||
|
||||
if (empty($sNewVersion))
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Unknown version', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
else if (!\is_dir(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion))
|
||||
{
|
||||
\MailSo\Base\Utils::CopyDir($sTmpFolder.'/rainloop/', APP_INDEX_ROOT_PATH.'rainloop/');
|
||||
|
||||
if (\is_dir(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion) &&
|
||||
\is_file(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion.'/index.php'))
|
||||
{
|
||||
$bResult = \copy($sTmpFolder.'/index.php', APP_INDEX_ROOT_PATH.'index.php');
|
||||
|
||||
if ($bResult)
|
||||
{
|
||||
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('opcache_invalidate'))
|
||||
{
|
||||
@\opcache_invalidate(APP_INDEX_ROOT_PATH.'index.php', true);
|
||||
}
|
||||
|
||||
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_delete_file'))
|
||||
{
|
||||
@\apc_delete_file(APP_INDEX_ROOT_PATH.'index.php');
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot copy new package files', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
$this->oLogger->Write($sTmpFolder.'/rainloop/ -> '.APP_INDEX_ROOT_PATH.'rainloop/', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!empty($sNewVersion))
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('"'.$sNewVersion.'" version already installed', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($bResult)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot validate package files', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
\MailSo\Base\Utils::RecRmDir($sTmpFolder);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot create tmp folder: '.$sTmpFolder, \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
@\unlink($sTmp);
|
||||
}
|
||||
|
||||
return $bResult;
|
||||
}
|
||||
}
|
188
rainloop/v/0.0.0/app/libraries/RainLoop/Providers/Version.php
Normal file
188
rainloop/v/0.0.0/app/libraries/RainLoop/Providers/Version.php
Normal file
|
@ -0,0 +1,188 @@
|
|||
<?php
|
||||
|
||||
namespace RainLoop\Providers;
|
||||
|
||||
class Version
|
||||
{
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($oConfig, $oLogger)
|
||||
{
|
||||
$this->oConfig = $oConfig;
|
||||
$this->oLogger = $oLogger;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function IsActive()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function ClearOldVersion()
|
||||
{
|
||||
$sVPath = APP_INDEX_ROOT_PATH.'rainloop/v/';
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Begin');
|
||||
}
|
||||
|
||||
$aDirs = @\array_map('basename', @\array_filter(@\glob($sVPath.'*'), 'is_dir'));
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Count:'.(\is_array($aDirs) ? \count($aDirs) : 0));
|
||||
}
|
||||
|
||||
if (\is_array($aDirs) && 5 < \count($aDirs))
|
||||
{
|
||||
\uasort($aDirs, 'version_compare');
|
||||
|
||||
foreach ($aDirs as $sName)
|
||||
{
|
||||
if (APP_DEV_VERSION !== $sName && APP_VERSION !== $sName)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: Begin to remove "'.$sVPath.$sName.'" version');
|
||||
}
|
||||
|
||||
if (@\unlink($sVPath.$sName.'/index.php'))
|
||||
{
|
||||
@\MailSo\Base\Utils::RecRmDir($sVPath.$sName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC (Error): index file cant be removed from"'.$sVPath.$sName.'"',
|
||||
\MailSo\Log\Enumerations\Type::ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: End to remove "'.$sVPath.$sName.'" version');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Versions GC: End');
|
||||
}
|
||||
}
|
||||
|
||||
public function UpdateCore($oActions, $sFile)
|
||||
{
|
||||
$bResult = false;
|
||||
|
||||
$sNewVersion = '';
|
||||
$sTmp = $oActions->downloadRemotePackageByUrl($sFile);
|
||||
if (!empty($sTmp))
|
||||
{
|
||||
include_once APP_VERSION_ROOT_PATH.'app/libraries/pclzip/pclzip.lib.php';
|
||||
|
||||
$oArchive = new \PclZip($sTmp);
|
||||
$sTmpFolder = APP_PRIVATE_DATA.\md5($sTmp);
|
||||
|
||||
\mkdir($sTmpFolder);
|
||||
if (\is_dir($sTmpFolder))
|
||||
{
|
||||
$bResult = 0 !== $oArchive->extract(PCLZIP_OPT_PATH, $sTmpFolder);
|
||||
if (!$bResult)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot extract package files: '.$oArchive->errorInfo(), \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
if ($bResult && \file_exists($sTmpFolder.'/index.php') &&
|
||||
\is_writable(APP_INDEX_ROOT_PATH.'rainloop/') &&
|
||||
\is_writable(APP_INDEX_ROOT_PATH.'index.php') &&
|
||||
\is_dir($sTmpFolder.'/rainloop/'))
|
||||
{
|
||||
$aMatch = array();
|
||||
$sIndexFile = \file_get_contents($sTmpFolder.'/index.php');
|
||||
if (\preg_match('/\'APP_VERSION\', \'([^\']+)\'/', $sIndexFile, $aMatch) && !empty($aMatch[1]))
|
||||
{
|
||||
$sNewVersion = \trim($aMatch[1]);
|
||||
}
|
||||
|
||||
if (empty($sNewVersion))
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Unknown version', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
else if (!\is_dir(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion))
|
||||
{
|
||||
\MailSo\Base\Utils::CopyDir($sTmpFolder.'/rainloop/', APP_INDEX_ROOT_PATH.'rainloop/');
|
||||
|
||||
if (\is_dir(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion) &&
|
||||
\is_file(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion.'/index.php'))
|
||||
{
|
||||
$bResult = \copy($sTmpFolder.'/index.php', APP_INDEX_ROOT_PATH.'index.php');
|
||||
|
||||
if ($bResult)
|
||||
{
|
||||
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('opcache_invalidate'))
|
||||
{
|
||||
@\opcache_invalidate(APP_INDEX_ROOT_PATH.'index.php', true);
|
||||
}
|
||||
|
||||
if (\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_delete_file'))
|
||||
{
|
||||
@\apc_delete_file(APP_INDEX_ROOT_PATH.'index.php');
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot copy new package files', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
$this->oLogger->Write($sTmpFolder.'/rainloop/ -> '.APP_INDEX_ROOT_PATH.'rainloop/', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!empty($sNewVersion))
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('"'.$sNewVersion.'" version already installed', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($bResult)
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot validate package files', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
\MailSo\Base\Utils::RecRmDir($sTmpFolder);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->oLogger)
|
||||
{
|
||||
$this->oLogger->Write('Cannot create tmp folder: '.$sTmpFolder, \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER');
|
||||
}
|
||||
}
|
||||
|
||||
@\unlink($sTmp);
|
||||
}
|
||||
|
||||
return $bResult;
|
||||
}
|
||||
}
|
|
@ -230,16 +230,7 @@ class Service
|
|||
|
||||
$sResult .= '<!--';
|
||||
$sResult .= '[time:'.\substr(\microtime(true) - APP_START, 0, 6);
|
||||
|
||||
// $sResult .= '][version:'.APP_VERSION;
|
||||
if ($this->oActions->IsOpen())
|
||||
{
|
||||
$sResult .= '][AGPLv3';
|
||||
}
|
||||
|
||||
$sResult .= '][cached:'.($bCached ? 'true' : 'false');
|
||||
// $sResult .= '][hash:'.$aTemplateParameters['{{BaseHash}}'];
|
||||
// $sResult .= '][session:'.\md5(\RainLoop\Utils::GetShortToken());
|
||||
|
||||
if ($bMobile)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@ en:
|
|||
LABEL_PASSWORD: "Password"
|
||||
BUTTON_LOGIN: "Log into the admin panel"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "General"
|
||||
|
@ -71,7 +70,6 @@ en:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
||||
HTML_ALERT_PREMIUM: "This functionality is available for <strong><a href=\"#/licensing\">Premium</a></strong> subscribers."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contacts"
|
||||
LEGEND_STORAGE: "Storage (PDO)"
|
||||
|
@ -147,22 +145,6 @@ en:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
||||
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Cannot access the repository at the moment."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Your domain"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Checking"
|
||||
TYPE_BASIC_HINT: "This domain isn't licensed for commercial use (with additional features)."
|
||||
TYPE_BASIC_HINT_2: "This domain can't be licensed."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail is licensed under"
|
||||
HTML_ALERT_TOP_2: "You are <b>free</b> to use it for your <b>personal</b> projects."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Commercial use (with additional features) of <b>RainLoop Webmail</b> requires getting a
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">subscription</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Lifetime"
|
||||
LABEL_SUB_EXPIRES: "Subscription expires"
|
||||
BUTTON_ACTIVATE: "Activate Subscription Key for this domain"
|
||||
BUTTON_PURCHASE: "Purchase"
|
||||
BUTTON_TRIAL: "Trial"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "About"
|
||||
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
||||
|
|
|
@ -4,7 +4,6 @@ ca:
|
|||
LABEL_PASSWORD: "Contrasenya"
|
||||
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Prèmium"
|
||||
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "General"
|
||||
|
@ -71,7 +70,6 @@ ca:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
||||
HTML_ALERT_PREMIUM: "Aquesta funcionalitat està disponible per als subscriptors de <strong><a href=\"#/licensing\">Prèmium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contactes"
|
||||
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
||||
|
@ -146,22 +144,6 @@ ca:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
||||
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Ara no es pot accedir al repositori."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Domini"
|
||||
LABEL_VERSION: "Versió"
|
||||
LABEL_CHECKING: "Es comprova"
|
||||
TYPE_BASIC_HINT: "Aquest domini no té llicència per a l'ús comercial (amb funcions addicionals)."
|
||||
TYPE_BASIC_HINT_2: "Aquest domini no pot tenir llicència."
|
||||
HTML_ALERT_TOP_1: "El RainLoop Webmail té llicència de"
|
||||
HTML_ALERT_TOP_2: "Teniu <b>llibertat</b> per usar-lo per als vostres projectes <b>personals</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
L'ús comercial (amb funcions addicionals) del <b>RainLoop Webmail</b> requereix obtenir una
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">subscripció</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Per sempre"
|
||||
LABEL_SUB_EXPIRES: "La subscripció caduca"
|
||||
BUTTON_ACTIVATE: "Activa la clau de subscripció per a aquest domini"
|
||||
BUTTON_PURCHASE: "Compreu-la"
|
||||
BUTTON_TRIAL: "Proveu-la"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Quant a"
|
||||
LABEL_TAG_HINT: "Client de correu electrònic senzill, modern i ràpid basat en la web"
|
||||
|
|
|
@ -4,7 +4,6 @@ ca_ES:
|
|||
LABEL_PASSWORD: "Contrasenya"
|
||||
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Prèmium"
|
||||
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "General"
|
||||
|
@ -71,7 +70,6 @@ ca_ES:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
||||
HTML_ALERT_PREMIUM: "Aquesta funcionalitat està disponible per als subscriptors de <strong><a href=\"#/licensing\">Prèmium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contactes"
|
||||
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
||||
|
@ -146,22 +144,6 @@ ca_ES:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
||||
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Ara no es pot accedir al repositori."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Domini"
|
||||
LABEL_VERSION: "Versió"
|
||||
LABEL_CHECKING: "Es comprova"
|
||||
TYPE_BASIC_HINT: "Aquest domini no té llicència per a l'ús comercial (amb funcions addicionals)."
|
||||
TYPE_BASIC_HINT_2: "Aquest domini no pot tenir llicència."
|
||||
HTML_ALERT_TOP_1: "El RainLoop Webmail té llicència de"
|
||||
HTML_ALERT_TOP_2: "Teniu <b>llibertat</b> per usar-lo per als vostres projectes <b>personals</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
L'ús comercial (amb funcions addicionals) del <b>RainLoop Webmail</b> requereix obtenir una
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">subscripció</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Per sempre"
|
||||
LABEL_SUB_EXPIRES: "La subscripció caduca"
|
||||
BUTTON_ACTIVATE: "Activa la clau de subscripció per a aquest domini"
|
||||
BUTTON_PURCHASE: "Compreu-la"
|
||||
BUTTON_TRIAL: "Proveu-la"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Quant a"
|
||||
LABEL_TAG_HINT: "Client de correu electrònic senzill, modern i ràpid basat en la web"
|
||||
|
|
|
@ -4,7 +4,6 @@ cs_CZ:
|
|||
LABEL_PASSWORD: "Heslo"
|
||||
BUTTON_LOGIN: "Přihlásit do administrace"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Prémium"
|
||||
LABEL_ADMIN_PANEL: "Administrační panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Základní"
|
||||
|
@ -70,7 +69,6 @@ cs_CZ:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nikdy"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Jednou"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Vždy"
|
||||
HTML_ALERT_PREMIUM: "Tato funkce je dostupná pouze pro <strong><a href=\"#/licensing\">Prémiovou</a></strong> verzi."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakty"
|
||||
LEGEND_STORAGE: "Úložiště (PDO)"
|
||||
|
@ -146,23 +144,6 @@ cs_CZ:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné pro instalaci"
|
||||
LEGEND_INSTALLED_PACKAGES: "Nainstalované balíčky"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "V tento moment se nelze připojit k repozitáři."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Vaše doména"
|
||||
LABEL_VERSION: "Verze"
|
||||
LABEL_CHECKING: "Kontrolování"
|
||||
TYPE_BASIC_HINT: "Tato doména není licencována pro komerční užití."
|
||||
TYPE_BASIC_HINT_2: "Tato doména nemůže být licencována."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail je licencován pod"
|
||||
HTML_ALERT_TOP_2: "Můžete tento nástroj <b>volně</b> používat pro vaše <b>osobní</b> projekty."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Komerční užívání (s přidanými doplňky) <b>RainLoop Webmail</b> vyžaduje získání
|
||||
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">licence</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Lifetime"
|
||||
LABEL_SUB_EXPIRES: "Licence vyprší"
|
||||
BUTTON_ACTIVATE: "Aktivační licenční klíč pro tuto doménu"
|
||||
BUTTON_PURCHASE: "Koupit"
|
||||
BUTTON_TRIAL: "Trial"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Info"
|
||||
LABEL_TAG_HINT: "Jednoduchý, moderní a rychlý webový emailový klient"
|
||||
|
|
|
@ -4,7 +4,6 @@ da_DK:
|
|||
LABEL_PASSWORD: "Adgangskode"
|
||||
BUTTON_LOGIN: "Log ind i administrationspanelet"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Generelt"
|
||||
|
@ -70,7 +69,6 @@ da_DK:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "én enkelt gang"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Altid"
|
||||
HTML_ALERT_PREMIUM: "Denne funktionalitet er tilgængelig for <strong><a href=\"#/licensing\">Premium</a></strong> abonnenter."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakter"
|
||||
LEGEND_STORAGE: "Lagring (PDO)"
|
||||
|
@ -145,22 +143,6 @@ da_DK:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Installation tilgængelig"
|
||||
LEGEND_INSTALLED_PACKAGES: "Installerede pakker"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Kan ikke tilgå depotet lige nu."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Dit domæne"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Tjekker"
|
||||
TYPE_BASIC_HINT: "Dette domæne er ikke licenseret til kommercielt brug (med ekstra funktioner)."
|
||||
TYPE_BASIC_HINT_2: "Dette domæne kan ikke licenseret."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail er licenseret under"
|
||||
HTML_ALERT_TOP_2: "Du er velkommen til at bruge det til personlige projekter."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Kommercielt brug (med ekstra funktioner) af <b>RainLoop Webmail</b> kræver et
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">abonnement</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Livstid"
|
||||
LABEL_SUB_EXPIRES: "Abonnement udløber"
|
||||
BUTTON_ACTIVATE: "Aktiver abonnements kode for dette domæne"
|
||||
BUTTON_PURCHASE: "Køb"
|
||||
BUTTON_TRIAL: "Prøv"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Om"
|
||||
LABEL_TAG_HINT: "Simpel, moderne & hurtig web-baseret e-mail klient"
|
||||
|
|
|
@ -4,7 +4,6 @@ de_DE:
|
|||
LABEL_PASSWORD: "Passwort"
|
||||
BUTTON_LOGIN: "Im Adminpanel anmelden"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Adminpanel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Allgemein"
|
||||
|
@ -70,7 +69,6 @@ de_DE:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nie"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Einmal"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Immer"
|
||||
HTML_ALERT_PREMIUM: "Diese Funktionalität ist für <strong><a href=\"#/licensing\">Premium</a></strong>-Abonnenten verfügbar."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakte"
|
||||
LEGEND_STORAGE: "Speicher (PDO)"
|
||||
|
@ -145,22 +143,6 @@ de_DE:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Zur Installation verfügbar"
|
||||
LEGEND_INSTALLED_PACKAGES: "Installierte Pakete"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Auf das Plugin-Repository kann derzeit nicht zugegriffen werden."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Ihre Domain"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Überprüfe"
|
||||
TYPE_BASIC_HINT: "Diese Domain ist nicht für die kommerzielle Nutzung (mit zusätzlichen Funktionen) lizenziert."
|
||||
TYPE_BASIC_HINT_2: "Diese Domain kann nicht lizenziert werden."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail steht unter folgender Lizenz:"
|
||||
HTML_ALERT_TOP_2: "Sie <b>dürfen</b> es für <b>persönliche</b> Projekte nutzen."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Kommerzielle Nutzung (mit zusätzlichen Funktionen) von <b>RainLoop Webmail</b> erfordert eine
|
||||
<a href=http://www.rainloop.net/purchase/ target=_blank>Subscription</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Lebenszeit"
|
||||
LABEL_SUB_EXPIRES: "Ablauf der Subscription"
|
||||
BUTTON_ACTIVATE: "Subscription-Schlüssel für diese Domain aktivieren"
|
||||
BUTTON_PURCHASE: "Erwerben"
|
||||
BUTTON_TRIAL: "Testversion"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Über"
|
||||
LABEL_TAG_HINT: "Einfacher, moderner und schneller webbasierter E-Mail-Client"
|
||||
|
|
|
@ -4,7 +4,6 @@ en_US:
|
|||
LABEL_PASSWORD: "Password"
|
||||
BUTTON_LOGIN: "Log into the admin panel"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "General"
|
||||
|
@ -69,7 +68,6 @@ en_US:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
||||
HTML_ALERT_PREMIUM: "This functionality is available for <strong><a href=\"#/licensing\">Premium</a></strong> subscribers."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contacts"
|
||||
LEGEND_STORAGE: "Storage (PDO)"
|
||||
|
@ -144,22 +142,6 @@ en_US:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
||||
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Cannot access the repository at the moment."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Your domain"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Checking"
|
||||
TYPE_BASIC_HINT: "This domain isn't licensed for commercial use (with additional features)."
|
||||
TYPE_BASIC_HINT_2: "This domain can't be licensed."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail is licensed under"
|
||||
HTML_ALERT_TOP_2: "You are <b>free</b> to use it for your <b>personal</b> projects."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Commercial use (with additional features) of <b>RainLoop Webmail</b> requires getting a
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">subscription</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Lifetime"
|
||||
LABEL_SUB_EXPIRES: "Subscription expires"
|
||||
BUTTON_ACTIVATE: "Activate Subscription Key for this domain"
|
||||
BUTTON_PURCHASE: "Purchase"
|
||||
BUTTON_TRIAL: "Trial"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "About"
|
||||
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
||||
|
|
|
@ -4,7 +4,6 @@ es_ES:
|
|||
LABEL_PASSWORD: "Contraseña"
|
||||
BUTTON_LOGIN: "Ingresar al panel de control"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Panel de Control"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "General"
|
||||
|
@ -70,7 +69,6 @@ es_ES:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ninguno"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Una vez"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Siempre"
|
||||
HTML_ALERT_PREMIUM: "Esta función se encuentra disponible para <strong><a href=\"#/licensing\">Usuarios Premium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contactos"
|
||||
LEGEND_STORAGE: "Almacenamiento (PDO)"
|
||||
|
@ -145,22 +143,6 @@ es_ES:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalación disponible"
|
||||
LEGEND_INSTALLED_PACKAGES: "Paquetes instalados"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "No se puede acceder al repositorio en estos momentos."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Tu dominio"
|
||||
LABEL_VERSION: "Versión"
|
||||
LABEL_CHECKING: "Verificando"
|
||||
TYPE_BASIC_HINT: "Este dominio no ha sido licenciado para uso comercial (algunas características no disponibles)."
|
||||
TYPE_BASIC_HINT_2: "Este dominio no puede ser licenciado."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail está licenciado bajo"
|
||||
HTML_ALERT_TOP_2: "Eres <b>libre</b> de usarlo para un uso <b>personal</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Para utilizar <b>RainLoop Webmail</b> de forma comercial (con características adicionales) debes adquirir una licencia
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">Premium</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "De por vida"
|
||||
LABEL_SUB_EXPIRES: "La suscripción finaliza"
|
||||
BUTTON_ACTIVATE: "Activar clave de suscripción para este dominio"
|
||||
BUTTON_PURCHASE: "Comprar"
|
||||
BUTTON_TRIAL: "Versión de Prueba"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Acerca"
|
||||
LABEL_TAG_HINT: "Moderno, simple y rápido cliente web de correo electrónico"
|
||||
|
|
|
@ -4,7 +4,6 @@ eu:
|
|||
LABEL_PASSWORD: "Pasahitza"
|
||||
BUTTON_LOGIN: "Hasi saioa administrazio panelean"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Administrazio panela"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Orokorra"
|
||||
|
@ -71,7 +70,6 @@ eu:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Bat ere ez"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Behin"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Beti"
|
||||
HTML_ALERT_PREMIUM: "Funtzionalitate hau <strong><a href=\"#/licensing\">Premium</a></strong> erabiltzaileentzat soilik dago eskuragarri."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontaktuak"
|
||||
LEGEND_STORAGE: "Biltegiratzea (PDO)"
|
||||
|
@ -146,22 +144,6 @@ eu:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalatzeko erabilgarri"
|
||||
LEGEND_INSTALLED_PACKAGES: "Instalatutako paketeak"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Une honetan ezin da sartu errepositorioan "
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Zure domeinua"
|
||||
LABEL_VERSION: "Bertsioa"
|
||||
LABEL_CHECKING: "Frogatzen"
|
||||
TYPE_BASIC_HINT: "Domeinu honek ez dauka lizentziarik erabilera komertzialerako (eginbide gehigarriekin)"
|
||||
TYPE_BASIC_HINT_2: "Domeinu hau ezin da lizentziatu"
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail-ek honako lizentzia dauka"
|
||||
HTML_ALERT_TOP_2: "<b>Erabili</b> dezakezu zure proiektu <b>pertsonaletarako</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
<b>RainLoop Webmail</b>-aren erabilera komertzialak
|
||||
(eginbide gehigarriekin) <a href="http://www.rainloop.net/purchase/" target="_blank">harpidetza</a> behar du.
|
||||
TYPE_PREMIUM_LIFETIME: "Iraupena"
|
||||
LABEL_SUB_EXPIRES: "Harpidetza iraungitzen da"
|
||||
BUTTON_ACTIVATE: "Aktibatu harpidetza domeinu honetarako"
|
||||
BUTTON_PURCHASE: "Erosketa"
|
||||
BUTTON_TRIAL: "Proba"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Honi buruz"
|
||||
LABEL_TAG_HINT: "Web-posta bezero sinple, moderno eta azkarra"
|
||||
|
|
|
@ -4,7 +4,6 @@ fa_IR:
|
|||
LABEL_PASSWORD: "گذرواژه"
|
||||
BUTTON_LOGIN: "ورود به صفحه مدیریت"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "پریمیوم"
|
||||
LABEL_ADMIN_PANEL: "صفحه مدیریت"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "عمومی"
|
||||
|
@ -72,7 +71,6 @@ fa_IR:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "هیچکدام"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "یکبار"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "همیشه"
|
||||
HTML_ALERT_PREMIUM: "این قابلیت برای نسخه <strong><a href=\"#/licensing\">Premium</a></strong> مشترکین در دسترس هست."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "تماسها"
|
||||
LEGEND_STORAGE: "فضای ذخیرهسازی (pdo)"
|
||||
|
@ -147,21 +145,6 @@ fa_IR:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "برای نصب در دسترس هست"
|
||||
LEGEND_INSTALLED_PACKAGES: "بستههای نصب شده"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "در این لحظه دسترسی به مخزن امکانپذیر نیست"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "دامنه شما"
|
||||
LABEL_VERSION: "نسخه"
|
||||
LABEL_CHECKING: "در حال چک کردن"
|
||||
TYPE_BASIC_HINT: "این دامنه مجوز استفاده تجاری را ندارد (با قابلیتهای بیشتر)"
|
||||
TYPE_BASIC_HINT_2: "به این دامنه مجوز داده نشده است."
|
||||
HTML_ALERT_TOP_1: "وبمیل RainLoop تحت مجوز"
|
||||
HTML_ALERT_TOP_2: " شما <b>برای استفاده از آن </b> آزاد <b>personal</b> projects. هستید"
|
||||
HTML_ALERT_TOP_3: |
|
||||
استفاده تجاری (با قابلیتهای بیشتر) از <b>RainLoop Webmail</b> نیاز به پرداخت <a href="http://www.rainloop.net/purchase/" target="_blank">حق اشتراک</a> دارد.
|
||||
TYPE_PREMIUM_LIFETIME: "مادام العمر"
|
||||
LABEL_SUB_EXPIRES: "انقضای حق اشتراک"
|
||||
BUTTON_ACTIVATE: "فعالکردن حق اشتراک این دامنه"
|
||||
BUTTON_PURCHASE: "خرید"
|
||||
BUTTON_TRIAL: "آزمایشی"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "درباره"
|
||||
LABEL_TAG_HINT: "یک رابط کاربری پست الکترونیک ساده، پیشرفته و سریع"
|
||||
|
|
|
@ -4,7 +4,6 @@ fi_FI:
|
|||
LABEL_PASSWORD: "Salasana"
|
||||
BUTTON_LOGIN: "Kirjaudu hallintapaneliin"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Halintapaneli"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Yleiset"
|
||||
|
@ -69,7 +68,6 @@ fi_FI:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ei mitään"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kerran"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Aina"
|
||||
HTML_ALERT_PREMIUM: "Tämä toiminto on saatavissa vain <strong><a href=\"#/licensing\">Premium</a></strong> tilaajille."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Yhteystiedot"
|
||||
LEGEND_STORAGE: "Tallennus (PDO)"
|
||||
|
@ -144,22 +142,6 @@ fi_FI:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Voidaan asentaa"
|
||||
LEGEND_INSTALLED_PACKAGES: "Aennetut pakkaukset"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Pääsy varastoon ei toimi tällä hetkellä."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Sinun domain"
|
||||
LABEL_VERSION: "Versio"
|
||||
LABEL_CHECKING: "Tarkastaa"
|
||||
TYPE_BASIC_HINT: "Tämä domain ei ole lisensoitu kaupalliseen käyttöön (lisäominaisuuksilla)."
|
||||
TYPE_BASIC_HINT_2: "Tätä verkkotunnusta ei voi lisensoida."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail on lisensoitu"
|
||||
HTML_ALERT_TOP_2: "Voit käyttää <b>ilmaiseksi omissa</b> projekteissasi. "
|
||||
HTML_ALERT_TOP_3: |
|
||||
<b>RainLoop Webmail</b>in kaupallinen käyttö (lisäominaisuuksilla) vaatii
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">tilauksen</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Kesto"
|
||||
LABEL_SUB_EXPIRES: "Tilaus päättyy"
|
||||
BUTTON_ACTIVATE: "Aktivoi Tilaus Avain tälle verkkotunnukselle"
|
||||
BUTTON_PURCHASE: "Osta"
|
||||
BUTTON_TRIAL: "Koeaika"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Tietoja"
|
||||
LABEL_TAG_HINT: "Helppo, moderni ja nopea web-pohjainen sähköpostiohjelma"
|
||||
|
|
|
@ -4,7 +4,6 @@ fr_FR:
|
|||
LABEL_PASSWORD: "Mot de passe"
|
||||
BUTTON_LOGIN: "Se connecter au panneau d'administration"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Panneau d'Administration"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Général"
|
||||
|
@ -70,7 +69,6 @@ fr_FR:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Aucun"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Une seule fois"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Toujours"
|
||||
HTML_ALERT_PREMIUM: "Cette fonctionnalité est réservé aux utilisateurs <strong><a href=\"#/licensing\">Premium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contacts"
|
||||
LEGEND_STORAGE: "Stockage (PDO)"
|
||||
|
@ -145,22 +143,6 @@ fr_FR:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible pour l'installation"
|
||||
LEGEND_INSTALLED_PACKAGES: "Paquets installés"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Impossible d'accéder au dépôt pour l'instant."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Votre domaine"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Vérification"
|
||||
TYPE_BASIC_HINT: "Ce domaine ne possède pas de licence pour un usage commercial (avec des fonctionnalités supplémentaires)."
|
||||
TYPE_BASIC_HINT_2: "Ce domaine ne peut pas obtenir de licence."
|
||||
HTML_ALERT_TOP_1: "La licence RainLoop Webmail appartient à"
|
||||
HTML_ALERT_TOP_2: "Vous êtes <b>libre</b> de l'utiliser pour vos projets <b>personnels</b>"
|
||||
HTML_ALERT_TOP_3: |
|
||||
L'usage commercial (avec des fonctionnalités supplémentaires) de <b>RainLoop Webmail</b> nécessite une
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">souscription</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "A vie"
|
||||
LABEL_SUB_EXPIRES: "La souscription expire"
|
||||
BUTTON_ACTIVATE: "Activer une clé de souscription pour ce domaine"
|
||||
BUTTON_PURCHASE: "Acheter"
|
||||
BUTTON_TRIAL: "Essai"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "A propos"
|
||||
LABEL_TAG_HINT: "Un client webmail simple, moderne et rapide "
|
||||
|
|
|
@ -4,7 +4,6 @@ hu_HU:
|
|||
LABEL_PASSWORD: "Jelszó"
|
||||
BUTTON_LOGIN: "Bejelentkezés az admin felületre"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Prémuim"
|
||||
LABEL_ADMIN_PANEL: "Adminisztrációs felület"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Általános"
|
||||
|
@ -71,7 +70,6 @@ hu_HU:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Semmi"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Egyszer"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Mindig"
|
||||
HTML_ALERT_PREMIUM: "Ez a funkció csak a <strong><a href=\"#/licensing\">Prémium</a></strong> előfizetők számára érhető el."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Névjegyek"
|
||||
LEGEND_STORAGE: "Tárhely (PDO)"
|
||||
|
@ -146,21 +144,6 @@ hu_HU:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Telepíthető"
|
||||
LEGEND_INSTALLED_PACKAGES: "Telepített csomagok"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Jelenleg nem lehet csatlakozni a tárolóhoz"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Domained"
|
||||
LABEL_VERSION: "Verzió"
|
||||
LABEL_CHECKING: "Ellenőrzés"
|
||||
TYPE_BASIC_HINT: "Ez a domain nem licencelt kereskedelmi használatra (hozzáadott funkciókkal)."
|
||||
TYPE_BASIC_HINT_2: "Ez a domain nem licencelhető."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail licence:"
|
||||
HTML_ALERT_TOP_2: "<strong>Szabadon</strong> felhasználható a <strong>személyes</strong> projektjeidhez."
|
||||
HTML_ALERT_TOP_3: |
|
||||
A <b>RainLoop Webmail</b> kereskedelmi használatához (további funkciókkal) <a href="http://www.rainloop.net/purchase/" target="_blank">előfizetés</a> szükséges.
|
||||
TYPE_PREMIUM_LIFETIME: "Örökös"
|
||||
LABEL_SUB_EXPIRES: "Előfizetés lejár"
|
||||
BUTTON_ACTIVATE: "Előfizetési kulcs aktiválása ehhez a domainhez"
|
||||
BUTTON_PURCHASE: "Vásárlás"
|
||||
BUTTON_TRIAL: "Próba"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Névjegy"
|
||||
LABEL_TAG_HINT: "Egyszerű, modern és gyors webes email kliens"
|
||||
|
|
|
@ -4,7 +4,6 @@ id_ID:
|
|||
LABEL_PASSWORD: "Password"
|
||||
BUTTON_LOGIN: "Login ke panel admin"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Panel Admin"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Umum"
|
||||
|
@ -71,7 +70,6 @@ id_ID:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Tidak ada"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Sekali"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Selalu"
|
||||
HTML_ALERT_PREMIUM: "Fungsi ini tersedia hanya untuk pengguna <strong><a href=\"#/licensing\">Premium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontak"
|
||||
LEGEND_STORAGE: "Media simpan (PDO)"
|
||||
|
@ -146,22 +144,6 @@ id_ID:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tersedia untuk Instalasi"
|
||||
LEGEND_INSTALLED_PACKAGES: "Paket Terinstal"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Tidak bisa menjangkau repositori saat ini"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Domain anda"
|
||||
LABEL_VERSION: "Versi"
|
||||
LABEL_CHECKING: "Memeriksa"
|
||||
TYPE_BASIC_HINT: "Domain ini belum dilisensikan untuk penggunaan komersil (dengan fitur tambahan)."
|
||||
TYPE_BASIC_HINT_2: "Domain ini tidak bisa dilinsensikan"
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail dilisensi di bawah"
|
||||
HTML_ALERT_TOP_2: "Anda <b>gratis </b> jika ditujukan <b>proyek </b> pribadi."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Tujuan penggunaan komersil (dengan fitur tambahan) <b>RainLoop Webmail</b> harus
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">langganan</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Seumur hidup"
|
||||
LABEL_SUB_EXPIRES: "Langganan berakhir"
|
||||
BUTTON_ACTIVATE: "Aktifkan Kunci Langganan untuk domain ini"
|
||||
BUTTON_PURCHASE: "Beli"
|
||||
BUTTON_TRIAL: "Percobaan"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Tentang"
|
||||
LABEL_TAG_HINT: "Klien web-based email yang simpel, modern & cepat"
|
||||
|
|
|
@ -4,7 +4,6 @@ it_IT:
|
|||
LABEL_PASSWORD: "Password"
|
||||
BUTTON_LOGIN: "Accedi all'amministrazione"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Amministrazione"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Generali"
|
||||
|
@ -70,7 +69,6 @@ it_IT:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Mai"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Solo una volta"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
||||
HTML_ALERT_PREMIUM: "Questa funzionalità è disponibile solo per coloro che hanno acquistato una licenza <strong><a href=\"#/licensing\">Premium</a></strong>.\n"
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contatti"
|
||||
LEGEND_STORAGE: "Metodo di salvataggio (PDO)"
|
||||
|
@ -145,22 +143,6 @@ it_IT:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponibili per l'installazione"
|
||||
LEGEND_INSTALLED_PACKAGES: "Pacchetti installati"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Impossibile accedere al repository in questo momento."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Il tuo dominio"
|
||||
LABEL_VERSION: "Licenza"
|
||||
LABEL_CHECKING: "Controllo in corso..."
|
||||
TYPE_BASIC_HINT: "Questo dominio non possiede una licenza commerciale (con funzionalità aggiuntive)."
|
||||
TYPE_BASIC_HINT_2: "Questo dominio non può possedere una licenza."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail è rilasciato sotto la licenza"
|
||||
HTML_ALERT_TOP_2: "Sei <b>libero</b> di usarla per i tuoi progetti <b>personali</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
L'uso commerciale (con funzionalità aggiuntive) di <b>RainLoop Webmail</b> richiede di ottenere una
|
||||
<a href=http://www.rainloop.net/purchase/ target=_blank>licenza</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "A vita"
|
||||
LABEL_SUB_EXPIRES: "La licenza scade il"
|
||||
BUTTON_ACTIVATE: "Attiva una chiave di licenza per questo dominio"
|
||||
BUTTON_PURCHASE: "Compra una licenza"
|
||||
BUTTON_TRIAL: "Versione di prova"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Informazioni"
|
||||
LABEL_TAG_HINT: "Semplice, moderno e veloce client email online"
|
||||
|
|
|
@ -4,7 +4,6 @@ ja_JP:
|
|||
LABEL_PASSWORD: "パスワード"
|
||||
BUTTON_LOGIN: "管理画面へログイン"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "プレミアム"
|
||||
LABEL_ADMIN_PANEL: "管理画面"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "全般"
|
||||
|
@ -71,7 +70,6 @@ ja_JP:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "なし"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "1回だけ"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "いつも"
|
||||
HTML_ALERT_PREMIUM: "この機能には<strong><a href=\"#/licensing\">プレミアム</a></strong>が必要です"
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "連絡先"
|
||||
LEGEND_STORAGE: "ストレージ (PDO)"
|
||||
|
@ -147,22 +145,6 @@ ja_JP:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "インストール可能なパッケージ"
|
||||
LEGEND_INSTALLED_PACKAGES: "インストールされたパッケージ"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "現時点でリポジトリにアクセスすることはできません。"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "ドメイン"
|
||||
LABEL_VERSION: "バージョン"
|
||||
LABEL_CHECKING: "チェック中"
|
||||
TYPE_BASIC_HINT: "このドメインは、 (追加の機能を備えた)商業的使用のためにライセンスされていません。"
|
||||
TYPE_BASIC_HINT_2: "このドメインはライセンスされていません"
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail is licensed under"
|
||||
HTML_ALERT_TOP_2: "You are <b>free</b> to use it for your <b>personal</b> projects."
|
||||
HTML_ALERT_TOP_3: |
|
||||
<b>RainLoop Webmail</b>の(付加的な機能を備えた)商業的使用は、
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">サブスクリプション</a>を取得する必要があります。
|
||||
TYPE_PREMIUM_LIFETIME: "ライフタイム"
|
||||
LABEL_SUB_EXPIRES: "サブスクリプションの有効期限切れ"
|
||||
BUTTON_ACTIVATE: "このドメインサブスクリプションキーをアクティベートする"
|
||||
BUTTON_PURCHASE: "購入"
|
||||
BUTTON_TRIAL: "試用"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "RainLoop について"
|
||||
LABEL_TAG_HINT: "シンプル・モダン・高速なウェブベースのメールクライアント"
|
||||
|
|
|
@ -4,7 +4,6 @@ lt_LT:
|
|||
LABEL_PASSWORD: "Slaptažodis"
|
||||
BUTTON_LOGIN: "Prisijungti prie valdymo skydo"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Administratoriaus valdymo skydas"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Pagrindiniai"
|
||||
|
@ -71,7 +70,6 @@ lt_LT:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nieko"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kartą"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Visada"
|
||||
HTML_ALERT_PREMIUM: "Ši funkcija leidžiama tik <strong><a href=\"#/licensing\">Premium</a></strong> vartotojams."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontaktai"
|
||||
LEGEND_STORAGE: "Saugykla (PDO)"
|
||||
|
@ -145,22 +143,6 @@ lt_LT:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Galima diegti"
|
||||
LEGEND_INSTALLED_PACKAGES: "Įdiegti paketai"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Šiuo momentu negaliu prisijungti prie saugyklos."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Jūsų domenas"
|
||||
LABEL_VERSION: "Versija"
|
||||
LABEL_CHECKING: "Tikrinu"
|
||||
TYPE_BASIC_HINT: "Šis domenas nelicencijuotas komerciniam naudojimui (su papildomomis galimybėmis)"
|
||||
TYPE_BASIC_HINT_2: "Šis domenas negali būti licencijuotas."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail licencijuotas"
|
||||
HTML_ALERT_TOP_2: "Jūs galite <b>nemokamai</b> naudoti savo <b>asmeniniams</b> projektams."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Komerciniam <b>RainLoop Webmail</b> naudojimui (su papildomomis galimybėmis) turite įsigyti
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">prenumeratą</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Visam laikui"
|
||||
LABEL_SUB_EXPIRES: "Prenumerata baigiasi"
|
||||
BUTTON_ACTIVATE: "Aktyvuoti prenumeratos raktą šiam domenui"
|
||||
BUTTON_PURCHASE: "Pirkti"
|
||||
BUTTON_TRIAL: "Bandomasis"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Apie"
|
||||
LABEL_TAG_HINT: "Paprastas, modernus ir greitas web pašto klientas"
|
||||
|
|
|
@ -4,7 +4,6 @@ nb_NO:
|
|||
LABEL_PASSWORD: "Passord"
|
||||
BUTTON_LOGIN: "Logg inn på admin-panel"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Admin-panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Generelt"
|
||||
|
@ -71,7 +70,6 @@ nb_NO:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Én gang"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Alltid"
|
||||
HTML_ALERT_PREMIUM: "Denne funksjonaliteten er bare tilgjengelig for <strong><a href=\"#/licensing\">Premium</a></strong>-brukere."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakter"
|
||||
LEGEND_STORAGE: "Lagring (PDO)"
|
||||
|
@ -146,22 +144,6 @@ nb_NO:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tilgjengelig for installasjon"
|
||||
LEGEND_INSTALLED_PACKAGES: "Installerte pakker"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Fikk ikke tilgang til pakkelageret."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Domenenavn"
|
||||
LABEL_VERSION: "Versjon"
|
||||
LABEL_CHECKING: "Sjekker"
|
||||
TYPE_BASIC_HINT: "Dette domenet har ikke lisens for kommersiell bruk (med ekstrafunksjoner)."
|
||||
TYPE_BASIC_HINT_2: "Dette domenet kan ikke brukes med lisens for ekstrafunksjoner."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail er utgitt på betingelsene i"
|
||||
HTML_ALERT_TOP_2: "Du står <b>fritt</b> til å bruke programmet til <b>personlige</b> formål."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Hvis du vil bruke <b>RainLoop Webmail</b> kommersielt (med ekstrafunksjoner), må du kjøpe et
|
||||
<a href=http://www.rainloop.net/purchase/ target=_blank>abonnement</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Livstid"
|
||||
LABEL_SUB_EXPIRES: "Abonnement utgår"
|
||||
BUTTON_ACTIVATE: "Ta i bruk abonnementsnøkkel for dette domenet"
|
||||
BUTTON_PURCHASE: "Kjøp"
|
||||
BUTTON_TRIAL: "Prøv"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Om"
|
||||
LABEL_TAG_HINT: "Rask, enkel, moderne og web-basert e-postklient"
|
||||
|
|
|
@ -4,7 +4,6 @@ nl_NL:
|
|||
LABEL_PASSWORD: "Wachtwoord"
|
||||
BUTTON_LOGIN: "Aanmelden in het beheer paneel"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Beheer paneel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Algemeen"
|
||||
|
@ -70,7 +69,6 @@ nl_NL:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nooit"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Eenmalig"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Altijd"
|
||||
HTML_ALERT_PREMIUM: "Deze functionaliteit is alleen beschikbaar voor <strong><a href=\"#/licensing\">Premium</a></strong> abonnees.\n"
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contactpersonen"
|
||||
LEGEND_STORAGE: "Opslag (PDO)"
|
||||
|
@ -145,21 +143,6 @@ nl_NL:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Gereed voor installatie"
|
||||
LEGEND_INSTALLED_PACKAGES: "Geïnstalleerde pakketten"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "De installatie bron is op het moment niet beschikbaar."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Uw domein"
|
||||
LABEL_VERSION: "Versie"
|
||||
LABEL_CHECKING: "Controleren"
|
||||
TYPE_BASIC_HINT: "Dit domein is niet gelicentieerd voor commercieel gebruik (met aditionele functies)."
|
||||
TYPE_BASIC_HINT_2: "Dit domein kan niet worden gelicentieerd."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail is gelicentieerd onder de"
|
||||
HTML_ALERT_TOP_2: "U staat u <b>vrij</b> om dit voor uw <b>persoonlijk</b> project te gebruiken."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Voor commercieel gebruik (met additionele functies) van <b>RainLoop Webmail</b> moet u een <a href=http://www.rainloop.net/purchase/ target=_blank>activatie code</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Levenslang"
|
||||
LABEL_SUB_EXPIRES: "Activatie verloopt"
|
||||
BUTTON_ACTIVATE: "Activeer de activatie code voor dit domein."
|
||||
BUTTON_PURCHASE: "Aanschaffen"
|
||||
BUTTON_TRIAL: "Proefperiode"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Over"
|
||||
LABEL_TAG_HINT: "Simpel, modern en snelle web-based e-mail client"
|
||||
|
|
|
@ -4,7 +4,6 @@ pl_PL:
|
|||
LABEL_PASSWORD: "Hasło"
|
||||
BUTTON_LOGIN: "Zaloguj do panelu administracjnego"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Panel administracyjny"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Ogólne"
|
||||
|
@ -71,7 +70,6 @@ pl_PL:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nigdy"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Tylko raz"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Zawsze"
|
||||
HTML_ALERT_PREMIUM: "Ta opcja dostępna jest tylko dla subskrybentów licencji <strong><a href=\"#/licensing\">Premium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakty"
|
||||
LEGEND_STORAGE: "Baza danych (PDO)"
|
||||
|
@ -146,22 +144,6 @@ pl_PL:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostępne do zainstalowania"
|
||||
LEGEND_INSTALLED_PACKAGES: "Zainstalowane pakiety"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Nie można uzyskać dostępu do repozytorium."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Twoja domena"
|
||||
LABEL_VERSION: "Wersja"
|
||||
LABEL_CHECKING: "Sprawdzanie..."
|
||||
TYPE_BASIC_HINT: "Ta domena nie jest licencjonowana do użytku komercyjnego."
|
||||
TYPE_BASIC_HINT_2: "Nie można dodać licencji dla tej domeny."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail korzysta z licencji"
|
||||
HTML_ALERT_TOP_2: "Możesz używać tego klienta <b>za darmo</b>, tylko do celów <b>prywatnych</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Do użytku komercyjnego (z dodatkowymi opcjami) <b>RainLoop Webmail</b>, wymagane jest posiadanie
|
||||
<a href=http://www.rainloop.net/purchase/ target=_blank>ważnej subskrypcji</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Dożywotnia"
|
||||
LABEL_SUB_EXPIRES: "Subskrypcja wygasa"
|
||||
BUTTON_ACTIVATE: "Aktywuj klucz dla tej domeny"
|
||||
BUTTON_PURCHASE: "Kup klucz"
|
||||
BUTTON_TRIAL: "Wersja testowa"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "O programie"
|
||||
LABEL_TAG_HINT: "Prosty, nowoczesny i szybki klient pocztowy"
|
||||
|
|
|
@ -4,7 +4,6 @@ pt_BR:
|
|||
LABEL_PASSWORD: "Senha"
|
||||
BUTTON_LOGIN: "Entrar no painel administrativo"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Painel Administrativo"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Geral"
|
||||
|
@ -71,7 +70,6 @@ pt_BR:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nunca"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Única vez"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
||||
HTML_ALERT_PREMIUM: "Essa funcionalidade está disponível apenas para usuários <strong><a href=\"#/licensing\">Premium</a></strong>."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Contatos"
|
||||
LEGEND_STORAGE: "Armazenamento (PDO)"
|
||||
|
@ -146,22 +144,6 @@ pt_BR:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponíveis para instalação"
|
||||
LEGEND_INSTALLED_PACKAGES: "Pacotes já instalados"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Não foi possível acessar o repositório no momento."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Seu domínio"
|
||||
LABEL_VERSION: "Versão"
|
||||
LABEL_CHECKING: "Checando"
|
||||
TYPE_BASIC_HINT: "Esse domínio não está licenciado para uso comercial (com recursos adicionais)."
|
||||
TYPE_BASIC_HINT_2: "Esse domínio não pode ser licenciado."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail é licenciado sob"
|
||||
HTML_ALERT_TOP_2: "Você é <b>livre</b> para usá-lo em seus projetos <b>pessoais</b>."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Uso comercial (com recursos adicionais) do <b>RainLoop Webmail</b>
|
||||
requer uma <a href="http://www.rainloop.net/purchase/" target="_blank">assinatura</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Lifetime"
|
||||
LABEL_SUB_EXPIRES: "A assinatura expira em"
|
||||
BUTTON_ACTIVATE: "Ative a chave de assinatura para este domínio"
|
||||
BUTTON_PURCHASE: "Comprar assinatura"
|
||||
BUTTON_TRIAL: "Trial"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Sobre"
|
||||
LABEL_TAG_HINT: "Leitor de email web simples, moderno & rápido."
|
||||
|
|
|
@ -4,7 +4,6 @@ ru_RU:
|
|||
LABEL_PASSWORD: "Пароль"
|
||||
BUTTON_LOGIN: "Войти в админ панель"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Премиум"
|
||||
LABEL_ADMIN_PANEL: "Админка"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Основные"
|
||||
|
@ -70,7 +69,6 @@ ru_RU:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Никогда"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Один раз"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Всегда"
|
||||
HTML_ALERT_PREMIUM: "Эти функции доступны для <strong><a href=\"#/licensing\">премиум</a></strong> подписчиков."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Контакты"
|
||||
LEGEND_STORAGE: "Хранилище (PDO)"
|
||||
|
@ -145,22 +143,6 @@ ru_RU:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Доступно для установки"
|
||||
LEGEND_INSTALLED_PACKAGES: "Установленные пакеты"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Не удается получить доступ к хранилищу пакетов в данный момент."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Ваш домен"
|
||||
LABEL_VERSION: "Версия"
|
||||
LABEL_CHECKING: "Проверка"
|
||||
TYPE_BASIC_HINT: "Этот домен не имеет лицензию для коммерческого использования (с дополнительными функциями)."
|
||||
TYPE_BASIC_HINT_2: "Этот домен не может быть лицензирован."
|
||||
HTML_ALERT_TOP_1: "Код RainLoop Webmail лицензирован под"
|
||||
HTML_ALERT_TOP_2: "Вы можете <b>свободно</b> использовать его в своих <b>личных</b> проектах."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Коммерческое использование (с дополнительными функциями) <b>RainLoop Webmail</b> требует получение
|
||||
<a href=http://www.rainloop.net/purchase/ target=_blank>лицензии</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "бесконечная"
|
||||
LABEL_SUB_EXPIRES: "Подписка истекает"
|
||||
BUTTON_ACTIVATE: "Активировать ключ для этого домена"
|
||||
BUTTON_PURCHASE: "Купить"
|
||||
BUTTON_TRIAL: "Пробная лицензия"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "О программе"
|
||||
LABEL_TAG_HINT: "Простой, современный и быстрый веб-клиент электронной почты\n"
|
||||
|
|
|
@ -4,7 +4,6 @@ sk_SK:
|
|||
LABEL_PASSWORD: "Heslo"
|
||||
BUTTON_LOGIN: "Prihlásiť sa do admin panelu"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Všeobecné"
|
||||
|
@ -117,15 +116,6 @@ sk_SK:
|
|||
LEGEND_AVAILABLE_FOR_UPDATE: "Dostupné na aktualizáciu"
|
||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné na inštaláciu"
|
||||
LEGEND_INSTALLED_PACKAGES: "Nainštalované balíčky"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Vaša doména"
|
||||
LABEL_VERSION: "Verzia"
|
||||
LABEL_CHECKING: "Kontrolujem"
|
||||
TYPE_BASIC_HINT_2: "Táto doména nemôže byť licencovaná"
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail je licencovaný pod"
|
||||
TYPE_PREMIUM_LIFETIME: "Doživotná"
|
||||
BUTTON_PURCHASE: "Kúpiť"
|
||||
BUTTON_TRIAL: "Skúšobná verzia"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "O programe"
|
||||
LABEL_TAG_HINT: "Jednoduchý, moderný a rýchly webmail klient"
|
||||
|
|
|
@ -4,7 +4,6 @@ sl_SI:
|
|||
LABEL_PASSWORD: "Geslo"
|
||||
BUTTON_LOGIN: "Prijava v administracijsko ploščo"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Administracijska plošča"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Splošno"
|
||||
|
@ -71,7 +70,6 @@ sl_SI:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Brez"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Enkrat"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Vedno"
|
||||
HTML_ALERT_PREMIUM: "Ta funkcija je na voljo samo za <strong><a href=\"#/licensing\">Premium</a></strong> uporabnike."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Stiki"
|
||||
LEGEND_STORAGE: "Shramba (PDO)"
|
||||
|
@ -146,22 +144,6 @@ sl_SI:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Na voljo za namestitev"
|
||||
LEGEND_INSTALLED_PACKAGES: "Nameščeni paketi"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Trenutno ni možen dostop do repozitorija"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Vaša domena"
|
||||
LABEL_VERSION: "Verzija"
|
||||
LABEL_CHECKING: "Preverjanje"
|
||||
TYPE_BASIC_HINT: "Ta domena nima licence za komercialno uporabo (z dodatnimi funkcijami)."
|
||||
TYPE_BASIC_HINT_2: "Ni mogoče pridobiti licence za to domeno."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail izdana pod licenco"
|
||||
HTML_ALERT_TOP_2: "Smete jo <b>prosto in zastonj</b> uporabljati za <b>osebne</b> projekte."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Za komercialno uporabo (z dodatnimi funkcijami) <b>RainLoop Webmail</b> je potrebno pridobiti
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank">naročnino</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Obdobje"
|
||||
LABEL_SUB_EXPIRES: "Naročnina poteče"
|
||||
BUTTON_ACTIVATE: "Aktiviraj naročniški ključ za to domeno"
|
||||
BUTTON_PURCHASE: "Kupi"
|
||||
BUTTON_TRIAL: "Preizkusi"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Več o"
|
||||
LABEL_TAG_HINT: "Preprost, sodoben, in hiter spletni e-poštni odjemalec"
|
||||
|
|
|
@ -4,7 +4,6 @@ sv_SE:
|
|||
LABEL_PASSWORD: "Lösenord"
|
||||
BUTTON_LOGIN: "Logga in till admin-panelen"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "Premium"
|
||||
LABEL_ADMIN_PANEL: "Adminpanel"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "Allmän"
|
||||
|
@ -71,7 +70,6 @@ sv_SE:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "En gång"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Alltid"
|
||||
HTML_ALERT_PREMIUM: "Denna funktion är tillgänglig för <strong> <a href=\"#/licensing\"> Premium </a> </ strong> abonnenter."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "Kontakter"
|
||||
LEGEND_STORAGE: "Storage (PDO)"
|
||||
|
@ -146,22 +144,6 @@ sv_SE:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tillåt installation"
|
||||
LEGEND_INSTALLED_PACKAGES: "installerade paket"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Det går inte att komma åt arkivet för tillfället."
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "Din domän"
|
||||
LABEL_VERSION: "Version"
|
||||
LABEL_CHECKING: "Kontroll"
|
||||
TYPE_BASIC_HINT: "Denna domän är inte godkänt för kommersiellt bruk (med ytterligare funktioner)."
|
||||
TYPE_BASIC_HINT_2: "Denna domän kan inte licensieras."
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail är licensierat under"
|
||||
HTML_ALERT_TOP_2: "Du är <b>gratis</ b> för att använda den för dina <b>personliga</ b> projekt."
|
||||
HTML_ALERT_TOP_3: |
|
||||
Kommersiellt bruk (med ytterligare funktioner) av <b>RainLoop Webmail</ b> kräver att få
|
||||
<a href="http://www.rainloop.net/purchase/" target="_blank"> prenumerations</a>.
|
||||
TYPE_PREMIUM_LIFETIME: "Livstid"
|
||||
LABEL_SUB_EXPIRES: "Abonnemang löper ut"
|
||||
BUTTON_ACTIVATE: "Aktivera prenumerationsnyckel för den här domänen"
|
||||
BUTTON_PURCHASE: "Inköp"
|
||||
BUTTON_TRIAL: "Rättegång"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "Om"
|
||||
LABEL_TAG_HINT: "Enkel, modern & snabb e-postklient"
|
||||
|
|
|
@ -4,7 +4,6 @@ zh_CN:
|
|||
LABEL_PASSWORD: "密码"
|
||||
BUTTON_LOGIN: "登录到控制面板"
|
||||
TOP_PANEL:
|
||||
LABEL_PREMIUM: "高级"
|
||||
LABEL_ADMIN_PANEL: "控制面板"
|
||||
TABS_LABELS:
|
||||
LABEL_GENERAL_NAME: "常规"
|
||||
|
@ -71,7 +70,6 @@ zh_CN:
|
|||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "无"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "一次"
|
||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "永远"
|
||||
HTML_ALERT_PREMIUM: "此功能仅限于<strong><a href=\"#/licensing\">高级</a></strong> 订阅者."
|
||||
TAB_CONTACTS:
|
||||
LEGEND_CONTACTS: "联系人"
|
||||
LEGEND_STORAGE: "存储(PDO)"
|
||||
|
@ -146,21 +144,6 @@ zh_CN:
|
|||
LEGEND_AVAILABLE_FOR_INSTALLATION: "可用于安装"
|
||||
LEGEND_INSTALLED_PACKAGES: "已安装的插件包"
|
||||
ALERT_CANNOT_ACCESS_REPOSITORY: "目前无法使用仓库"
|
||||
TAB_LICENSING:
|
||||
LABEL_YOUR_DOMAIN: "你的域名"
|
||||
LABEL_VERSION: "版本"
|
||||
LABEL_CHECKING: "检查中"
|
||||
TYPE_BASIC_HINT: "此域名不被许可用于商业用途(包括额外功能)."
|
||||
TYPE_BASIC_HINT_2: "此域名无法被许可"
|
||||
HTML_ALERT_TOP_1: "RainLoop Webmail位于的许可证下"
|
||||
HTML_ALERT_TOP_2: "你可以<b>自由地</b>将它用于你的 <b>私人</b> 项目."
|
||||
HTML_ALERT_TOP_3: |
|
||||
商业版的<b>RainLoop Webmail</b>自带更多功能,需要<a href="http://www.rainloop.net/purchase/" target="_blank">订阅</a>。
|
||||
TYPE_PREMIUM_LIFETIME: "永久"
|
||||
LABEL_SUB_EXPIRES: "订阅失效"
|
||||
BUTTON_ACTIVATE: "为此域名启用订阅密钥"
|
||||
BUTTON_PURCHASE: "订购"
|
||||
BUTTON_TRIAL: "试用"
|
||||
TAB_ABOUT:
|
||||
LEGEND_ABOUT: "关于"
|
||||
LABEL_TAG_HINT: "简洁,现代化&快捷的基于网络的邮件客户端"
|
||||
|
|
|
@ -5,11 +5,10 @@
|
|||
<i class="icon-spinner animated" style="margin-top: 2px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
||||
|
||||
RainLoop
|
||||
<span data-bind="visible: capa && !community">(<span data-i18n="TOP_PANEL/LABEL_PREMIUM"></span>)</span>
|
||||
—
|
||||
<span data-i18n="TOP_PANEL/LABEL_ADMIN_PANEL"></span>
|
||||
|
||||
<span data-bind="visible: !community">(<span data-bind="text: adminDomain"></span>)</span>
|
||||
<span>(<span data-bind="text: adminDomain"></span>)</span>
|
||||
</h4>
|
||||
<div class="btn-group pull-right">
|
||||
<a class="btn single btn-narrow" data-bind="click: logoutClick">
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
<div class="span4">
|
||||
<div class="rl-logo"></div>
|
||||
<div style="margin-left: 30px;">
|
||||
2019 © <span data-i18n="TAB_ABOUT/LABEL_ALL_RIGHTS_RESERVED"></span>
|
||||
2022 © <span data-i18n="TAB_ABOUT/LABEL_ALL_RIGHTS_RESERVED"></span>
|
||||
<br />
|
||||
<a class="g-ui-link" href="http://www.rainloop.net/" target="_blank" style="padding-left: 0">http://rainloop.net/</a>
|
||||
<a class="g-ui-link" href="https://www.rainloop.net/" target="_blank" style="padding-left: 0">https://www.rainloop.net/</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rl-desc" style="float: left">
|
||||
|
@ -19,7 +19,7 @@
|
|||
</span>
|
||||
</h4>
|
||||
<h4 style="color: #aaa; font-weight: normal;" data-i18n="TAB_ABOUT/LABEL_TAG_HINT"></h4>
|
||||
<h5 style="font-weight: normal; margin-top: 40px;" data-bind="visible: !community">
|
||||
<h5 style="font-weight: normal; margin-top: 40px;">
|
||||
<div data-bind="visible: 'error' === statusType()">
|
||||
<i class="icon-warning" style="color: red"></i>
|
||||
|
||||
|
@ -52,13 +52,13 @@
|
|||
|
||||
</span>
|
||||
<span data-bind="visible: coreAccess()">
|
||||
<a class="btn" href="http://www.rainloop.net/downloads/" target="_blank">
|
||||
<a class="btn" href="https://www.rainloop.net/downloads/" target="_blank">
|
||||
<i class="icon-download"></i>
|
||||
|
||||
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
|
||||
</a>
|
||||
|
||||
<a class="btn" href="http://www.rainloop.net/changelog/" target="_blank">
|
||||
<a class="btn" href="https://www.rainloop.net/changelog/" target="_blank">
|
||||
<i class="icon-file-text"></i>
|
||||
|
||||
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<ul class="nav nav-tabs" data-bind="visible: !community">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active">
|
||||
<a class="i18n" data-i18n="TAB_BRANDING/LEGEND_LOGIN"
|
||||
href="#branding-login-section-id" data-toggle="tab"></a>
|
||||
|
@ -57,12 +57,12 @@
|
|||
href="#branding-welcome-page-section-id" data-toggle="tab"></a>
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
<div class="row" data-bind="visible: !community">
|
||||
<br />
|
||||
<div class="row">
|
||||
<div class="tab-content span12">
|
||||
<div class="tab-pane active" id="branding-login-section-id">
|
||||
|
||||
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_LOGO"></label>
|
||||
<div class="controls">
|
||||
|
@ -72,8 +72,7 @@
|
|||
value: loginLogo,
|
||||
trigger: loginLogo.trigger,
|
||||
placeholder: 'https://',
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -86,8 +85,7 @@
|
|||
params: {
|
||||
value: loginDescription,
|
||||
trigger: loginDescription.trigger,
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -101,8 +99,7 @@
|
|||
value: loginBackground,
|
||||
trigger: loginBackground.trigger,
|
||||
placeholder: 'https://',
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -116,7 +113,6 @@
|
|||
value: loginCss,
|
||||
trigger: loginCss.trigger,
|
||||
width: 495,
|
||||
enable: capa,
|
||||
rows: 7
|
||||
}
|
||||
}"></div>
|
||||
|
@ -127,7 +123,7 @@
|
|||
</div>
|
||||
<div class="tab-pane" id="branding-user-section-id">
|
||||
|
||||
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_USER_LOGO"></label>
|
||||
<div class="controls">
|
||||
|
@ -137,8 +133,7 @@
|
|||
value: userLogo,
|
||||
trigger: userLogo.trigger,
|
||||
placeholder: 'https://',
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -151,8 +146,7 @@
|
|||
params: {
|
||||
value: userLogoTitle,
|
||||
trigger: userLogoTitle.trigger,
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -166,8 +160,7 @@
|
|||
value: userLogoMessage,
|
||||
trigger: userLogoMessage.trigger,
|
||||
placeholder: 'https://',
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -181,7 +174,6 @@
|
|||
value: userCss,
|
||||
trigger: userCss.trigger,
|
||||
width: 495,
|
||||
enable: capa,
|
||||
rows: 7
|
||||
}
|
||||
}"></div>
|
||||
|
@ -192,7 +184,7 @@
|
|||
</div>
|
||||
<div class="tab-pane" id="branding-welcome-page-section-id">
|
||||
|
||||
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_WELCOME_PAGE_URL"></label>
|
||||
<div class="controls">
|
||||
|
@ -202,8 +194,7 @@
|
|||
value: welcomePageUrl,
|
||||
trigger: welcomePageUrl.trigger,
|
||||
placeholder: 'https://',
|
||||
size: 5,
|
||||
enable: capa
|
||||
size: 5
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -219,8 +210,7 @@
|
|||
trigger: welcomePageDisplay.trigger,
|
||||
optionsText: 'optText',
|
||||
optionsValue: 'optValue',
|
||||
size: 2,
|
||||
enable: capa
|
||||
size: 2
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
|
@ -230,9 +220,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" data-bind="visible: !capa() && !community">
|
||||
<div class="alert span8" style="margin-top: 10px;" data-i18n="[html]TAB_BRANDING/HTML_ALERT_PREMIUM"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -1,87 +0,0 @@
|
|||
<div class="b-admin-licensing" >
|
||||
<div class="row">
|
||||
<div class="alert alert-info span8" style="margin-top: 10px;">
|
||||
<span data-i18n="[html]TAB_LICENSING/HTML_ALERT_TOP_1"></span>
|
||||
|
||||
<a href=http://www.rainloop.net/licensing/ target=_blank>RainLoop Software License</a>.
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="TAB_LICENSING/LABEL_YOUR_DOMAIN"></label>
|
||||
<div class="controls">
|
||||
<span class="help-inline" style="padding-top: 5px;">
|
||||
<strong data-bind="text: adminDomain"></strong>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: !subscriptionEnabled()">
|
||||
<label class="control-label" style="padding-top: 14px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
|
||||
<div class="controls">
|
||||
<div class="alert alert-block span6" style="margin-left: 0">
|
||||
<h4>Basic</h4>
|
||||
<br />
|
||||
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT_2"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: subscriptionEnabled">
|
||||
<label class="control-label" style="padding-top: 20px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
|
||||
<div class="controls">
|
||||
<div data-bind="visible: licensingProcess()" style="padding-top: 20px">
|
||||
<i class="icon-spinner animated"></i>
|
||||
|
||||
<span data-i18n="TAB_LICENSING/LABEL_CHECKING"></span>…
|
||||
</div>
|
||||
<div data-bind="visible: !licensingProcess()">
|
||||
<div class="alert alert-block span6" style="margin-left: 0; padding-top: 20px" data-bind="visible: !licensing()">
|
||||
<h4>Basic</h4>
|
||||
<br />
|
||||
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT"></p>
|
||||
</div>
|
||||
<div data-bind="visible: licensing()">
|
||||
<div class="alert alert-success span6" style="margin-left: 0; margin-top: 10px; padding-top: 20px" data-bind="visible: licenseValid() && '' === licenseError()">
|
||||
<h4>
|
||||
<snan>Premium</snan>
|
||||
<span data-bind="visible: licenseIsUnlim()">
|
||||
|
||||
(<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM_LIFETIME"></snan>)
|
||||
</span>
|
||||
</h4>
|
||||
<p data-bind="visible: 0 < licenseExpired()" style="padding-top: 10px">
|
||||
<b data-i18n="TAB_LICENSING/LABEL_SUB_EXPIRES"></b>:
|
||||
|
||||
<span data-bind="text: licenseExpiredMomentValue()"></span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert alert-error span6" style="margin-left: 0; margin-top: 10px;" data-bind="visible: !licenseValid() && '' !== licenseError(), text: licenseError"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: subscriptionEnabled() && !licensingProcess()">
|
||||
<div class="controls">
|
||||
<a class="btn" data-bind="click: showActivationForm">
|
||||
<i class="icon-happy-smiley"></i>
|
||||
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_ACTIVATE"></span>
|
||||
</a>
|
||||
|
||||
<a class="btn" href="http://www.rainloop.net/purchase/" target="_black">
|
||||
<i class="icon-purchase"></i>
|
||||
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_PURCHASE"></span>
|
||||
</a>
|
||||
<!--
|
||||
|
||||
<a class="btn" data-bind="click: showTrialForm, visible: !licensing()">
|
||||
<i class="icon-eye"></i>
|
||||
|
||||
<span data-i18n="TAB_LICENSING/BUTTON_TRIAL"></span>
|
||||
</a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -3,7 +3,7 @@
|
|||
<div class="alert alert-info span8" style="margin-top: 10px;">
|
||||
<span data-i18n="TAB_INTEGRATIONS/TOP_ALERT"></span>
|
||||
|
||||
<a href="http://rainloop.net/docs/social/" target="_blank">http://rainloop.net/docs/social/</a>
|
||||
<a href="https://www.rainloop.net/docs/social/" target="_blank">https://www.rainloop.net/docs/social/</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal g-ui-user-select-none">
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
<div class="popups">
|
||||
<div class="modal hide b-activate-content" data-bind="modal: modalVisibility">
|
||||
<div>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||
<h3>
|
||||
<span data-bind="visible: !activateProcess()" data-i18n="POPUPS_ACTIVATE/TITLE_ACTIVATE"></span>
|
||||
<span data-bind="visible: activateProcess" data-i18n="POPUPS_ACTIVATE/TITLE_ACTIVATION"></span>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label" data-i18n="POPUPS_ACTIVATE/LABEL_DOMAIN"></label>
|
||||
<div class="controls">
|
||||
<h4 class="help-inline" data-bind="text: domain" style="margin-top: 5px;"></h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': '' !== activateText() && activateText.isError(), 'success': '' !== activateText() && !activateText.isError() }">
|
||||
<label class="control-label" data-i18n="POPUPS_ACTIVATE/LABEL_SUB_KEY"></label>
|
||||
<div class="controls ">
|
||||
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
data-bind="visible: !activateProcess() && !activationSuccessed(), textInput: key, hasFocus: key.focus"></input>
|
||||
|
||||
<h4 class="help-inline" style="margin-top: 5px;" data-bind="text: key, visible: activateProcess() || activationSuccessed()"></h4>
|
||||
<div class="help-block" data-bind="text: activateText"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="alert">
|
||||
<p data-bind="html: htmlDescription" style="margin-bottom: 0"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a class="btn buttonActivate" data-bind="visible: !activationSuccessed(), command: activateCommand">
|
||||
<i class="icon-key" data-bind="css: {'icon-key': !activateProcess(), 'icon-spinner animated': activateProcess()}" ></i>
|
||||
|
||||
<span data-i18n="POPUPS_ACTIVATE/BUTTON_ACTIVATE"></span>
|
||||
</a>
|
||||
<span style="color: green" data-bind="visible: activationSuccessed">
|
||||
|
||||
<i class="icon-ok"></i>
|
||||
|
||||
<span data-i18n="POPUPS_ACTIVATE/LABEL_ACTIVATED"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -2,5 +2,5 @@
|
|||
<h1 style="display: inline; color: #fff; text-shadow: 1px 2px 0px rgba(0, 0, 0, 0.5);">RainLoop Webmail</h1>
|
||||
|
||||
<h3 style="display: inline; color: #fff; text-shadow: 1px 2px 0px rgba(0, 0, 0, 0.5);">(<span data-bind="text: version"></span>)</h3>
|
||||
<h3><a href="http://rainloop.net/" target="_blank">http://rainloop.net</a></h3>
|
||||
<h3><a href="https://www.rainloop.net/" target="_blank">https://www.rainloop.net</a></h3>
|
||||
</div>
|
|
@ -40,9 +40,6 @@
|
|||
define('APP_DUMMY', '********');
|
||||
define('APP_DEV_VERSION', '0.0.0');
|
||||
define('APP_GOOGLE_ACCESS_TOKEN_PREFIX', ':GAT:');
|
||||
define('APP_WEB_SITE', 'http://www.rainloop.net/');
|
||||
define('APP_API_PATH', 'http://api.rainloop.net/');
|
||||
define('APP_STATUS_PATH', 'http://status.rainloop.net/');
|
||||
define('APP_REPOSITORY_PATH', 'http://repository.rainloop.net/v1/');
|
||||
define('APP_REPO_CORE_FILE', 'http://repository.rainloop.net/v2/core.{{channel}}.json');
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
const { config } = require('./config');
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
const rimraf = require('gulp-rimraf');
|
||||
const fs = require('node-fs');
|
||||
|
@ -18,6 +18,6 @@ exports.zip = (srcDir, destDir, fileName) =>
|
|||
.pipe(require('gulp-zip')(fileName))
|
||||
.pipe(gulp.dest(destDir));
|
||||
|
||||
exports.getHead = () => (!config.community ? config.head.rainloop : config.head.agpl);
|
||||
exports.getHead = () => config.head.mit;
|
||||
|
||||
exports.cleanStatic = () => exports.del(config.paths.static);
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const path = require('path');
|
||||
const { argv } = require('yargs');
|
||||
|
||||
const config = {
|
||||
head: {
|
||||
rainloop: '/* RainLoop Webmail (c) RainLoop Team | Licensed under RainLoop Software License */',
|
||||
agpl: '/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL v3 */'
|
||||
mit: '/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */'
|
||||
},
|
||||
devVersion: '0.0.0',
|
||||
releasesPath: 'build/dist/releases',
|
||||
community: !argv.pro,
|
||||
source: !!argv.source,
|
||||
watch: false,
|
||||
watchInterval: 1000,
|
||||
|
@ -20,7 +18,6 @@ const config = {
|
|||
cleanPath: '',
|
||||
zipSrcPath: '',
|
||||
zipFile: '',
|
||||
// zipFileShort: '',
|
||||
|
||||
paths: {}
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
|
||||
const concat = require('gulp-concat-util');
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
|
||||
const concat = require('gulp-concat-util'),
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
/* eslint-disable consistent-return */
|
||||
|
||||
const gulp = require('gulp');
|
||||
|
@ -48,7 +48,7 @@ const owncloudSetup = (done) => {
|
|||
.replace('<version>0.0</version>', '<version>' + versionFull + '</version>')
|
||||
.replace(
|
||||
'<licence></licence>',
|
||||
'<licence>' + (config.community ? 'AGPLv3' : 'RainLoop Software License') + '</licence>'
|
||||
'<licence>MIT</licence>'
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -58,8 +58,7 @@ const owncloudSetup = (done) => {
|
|||
config.destPath = config.releasesPath + '/owncloud/' + versionFull + '/';
|
||||
config.cleanPath = dist;
|
||||
config.zipSrcPath = dist;
|
||||
config.zipFile = 'rainloop-owncloud-app-' + (config.community ? '' : 'standard-') + versionFull + '.zip';
|
||||
// config.zipFileShort = 'rainloop' + (config.community ? '' : '-standard') + '.zip';
|
||||
config.zipFile = 'rainloop-owncloud-app-legacy-' + versionFull + '.zip';
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -80,10 +79,6 @@ const owncloudClean = (done) => {
|
|||
done();
|
||||
};
|
||||
|
||||
// const owncloudShortname = (done) => {
|
||||
// copy(config.destPath + config.zipFile, config.destPath + config.zipFileShort, done);
|
||||
// };
|
||||
|
||||
exports.owncloud = gulp.series(
|
||||
owncloudCopy,
|
||||
rainloopBuild,
|
||||
|
@ -92,5 +87,4 @@ exports.owncloud = gulp.series(
|
|||
owncloudSetup,
|
||||
owncloudZip,
|
||||
owncloudClean
|
||||
// owncloudShortname
|
||||
);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
/* eslint-disable consistent-return */
|
||||
const gulp = require('gulp');
|
||||
const fs = require('node-fs');
|
||||
|
@ -6,7 +6,7 @@ const chmod = require('gulp-chmod');
|
|||
|
||||
const pkg = require('../package.json');
|
||||
const { config } = require('./config');
|
||||
const { copy, zip, del } = require('./common');
|
||||
const { zip, del } = require('./common');
|
||||
|
||||
const rainloopCopy = () => {
|
||||
const versionFull = pkg.version,
|
||||
|
@ -32,23 +32,14 @@ const rainloopSetup = (done) => {
|
|||
fs
|
||||
.readFileSync('index.php', 'utf8')
|
||||
.replace("'APP_VERSION', '0.0.0'", "'APP_VERSION', '" + versionFull + "'")
|
||||
.replace(
|
||||
"'APP_VERSION_TYPE', 'source'",
|
||||
"'APP_VERSION_TYPE', '" + (config.community ? 'community' : 'standard') + "'"
|
||||
)
|
||||
);
|
||||
|
||||
fs.writeFileSync(dist + 'rainloop/v/' + versionFull + '/index.php.root', fs.readFileSync(dist + 'index.php'));
|
||||
|
||||
if (config.community) {
|
||||
require('rimraf').sync(dist + 'rainloop/v/' + versionFull + '/app/libraries/RainLoop/Providers/Prem.php');
|
||||
}
|
||||
|
||||
config.destPath = config.releasesPath + '/webmail/' + versionFull + '/';
|
||||
config.cleanPath = dist;
|
||||
config.zipSrcPath = dist;
|
||||
config.zipFile = 'rainloop-' + (config.community ? 'community-' : '') + versionFull + '.zip';
|
||||
// config.zipFileShort = 'rainloop-' + (config.community ? 'community-' : '') + 'latest.zip';
|
||||
config.zipFile = 'rainloop-legacy-' + versionFull + '.zip';
|
||||
|
||||
config.rainloopBuilded = true;
|
||||
|
||||
|
@ -71,8 +62,6 @@ const rainloopClean = (done) => {
|
|||
done();
|
||||
};
|
||||
|
||||
// const rainloopShortName = (done) => copy(config.destPath + config.zipFile, config.destPath + config.zipFileShort, done);
|
||||
|
||||
exports.rainloopBuild = gulp.series(rainloopCopy, rainloopSetup);
|
||||
|
||||
exports.rainloop = gulp.series(exports.rainloopBuild, rainloopZip, rainloopClean /*, rainloopShortName*/);
|
||||
exports.rainloop = gulp.series(exports.rainloopBuild, rainloopZip, rainloopClean);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
const header = require('gulp-header');
|
||||
const stripbom = require('gulp-stripbom');
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const gulp = require('gulp');
|
||||
|
||||
const { config } = require('./config');
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL 3 */
|
||||
/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */
|
||||
const webpack = require('webpack');
|
||||
const gutil = require('gulp-util');
|
||||
|
||||
|
@ -34,5 +34,5 @@ const webpackCallback = (done) => (err, stats) => {
|
|||
};
|
||||
|
||||
exports.webpack = (done) => {
|
||||
webpack(webpackCfgBuilder(config.paths.staticJS, !config.community, 'production'), webpackCallback(done));
|
||||
webpack(webpackCfgBuilder(config.paths.staticJS, 'production'), webpackCallback(done));
|
||||
};
|
||||
|
|
|
@ -55,7 +55,7 @@ const babelLoaderOptions = function() {
|
|||
};
|
||||
|
||||
process.noDeprecation = true;
|
||||
module.exports = function(publicPath, pro, mode) {
|
||||
module.exports = function(publicPath, mode) {
|
||||
return {
|
||||
mode: mode || 'development',
|
||||
devtool: 'inline-source-map',
|
||||
|
@ -80,7 +80,6 @@ module.exports = function(publicPath, pro, mode) {
|
|||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'RL_COMMUNITY': !pro,
|
||||
'process.env.NODE_ENV': JSON.stringify('production'),
|
||||
'process.env': {
|
||||
NODE_ENV: JSON.stringify('production')
|
||||
|
|
Loading…
Reference in a new issue