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
|
es6: true
|
||||||
},
|
},
|
||||||
globals: {
|
globals: {
|
||||||
'RL_COMMUNITY': true,
|
|
||||||
'RL_ES6': true
|
'RL_ES6': true
|
||||||
},
|
},
|
||||||
// http://eslint.org/docs/rules/
|
// 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 install --frozen-lockfile --check-files
|
||||||
- run: yarn build
|
- run: yarn build
|
||||||
- run: yarn build-pro
|
|
||||||
|
|
||||||
- name: Move all assets to release folder
|
- name: Move all assets to release folder
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -29,7 +29,3 @@
|
||||||
|
|
||||||
1. Edit data/\_data_/\_default_/configs/application.ini
|
1. Edit data/\_data_/\_default_/configs/application.ini
|
||||||
2. Set 'cache_system_data' to Off
|
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
|
MIT License
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
Copyright (c) 2022 RainLoopTeam
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this license document, but changing it is not allowed.
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
Preamble
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
furnished to do so, subject to the following conditions:
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the 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,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
share and change all versions of a program--to make sure it remains free
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
software for all its users.
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
When we speak of free software, we are referring to freedom, not
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
SOFTWARE.
|
||||||
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/>.
|
|
2
Makefile
2
Makefile
|
@ -61,8 +61,6 @@ rl-watch-js:
|
||||||
|
|
||||||
rl-build:
|
rl-build:
|
||||||
@docker compose run --no-deps --rm node gulp all
|
@docker compose run --no-deps --rm node gulp all
|
||||||
rl-build-pro:
|
|
||||||
@docker compose run --no-deps --rm node gulp all --pro
|
|
||||||
|
|
||||||
yarn-install:
|
yarn-install:
|
||||||
@docker compose run --no-deps --rm node 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
|
## License
|
||||||
|
|
||||||
**RainLoop Webmail (Community edition)** is released under
|
**RainLoop Webmail (Legacy edition)** is released under
|
||||||
**GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL)**.
|
**MIT License**.
|
||||||
http://www.gnu.org/licenses/agpl-3.0.html
|
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 progressJs from 'progressJs';
|
||||||
|
|
||||||
import { root } from 'Common/Links';
|
import { root } from 'Common/Links';
|
||||||
import { getNotification } from 'Common/Translator';
|
import { StorageResultType } from 'Common/Enums';
|
||||||
import { StorageResultType, Notification } from 'Common/Enums';
|
import { pInt, isArray, isUnd } from 'Common/Utils';
|
||||||
import { pInt, isNormal, isArray, inArray, isUnd } from 'Common/Utils';
|
|
||||||
|
|
||||||
import * as Settings from 'Storage/Settings';
|
import * as Settings from 'Storage/Settings';
|
||||||
|
|
||||||
|
@ -14,7 +13,6 @@ import AppStore from 'Stores/Admin/App';
|
||||||
import CapaStore from 'Stores/Admin/Capa';
|
import CapaStore from 'Stores/Admin/Capa';
|
||||||
import DomainStore from 'Stores/Admin/Domain';
|
import DomainStore from 'Stores/Admin/Domain';
|
||||||
import PluginStore from 'Stores/Admin/Plugin';
|
import PluginStore from 'Stores/Admin/Plugin';
|
||||||
import LicenseStore from 'Stores/Admin/License';
|
|
||||||
import PackageStore from 'Stores/Admin/Package';
|
import PackageStore from 'Stores/Admin/Package';
|
||||||
import CoreStore from 'Stores/Admin/Core';
|
import CoreStore from 'Stores/Admin/Core';
|
||||||
import Remote from 'Remote/Admin/Ajax';
|
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) {
|
bootend(bootendCallback = null) {
|
||||||
if (progressJs) {
|
if (progressJs) {
|
||||||
progressJs.end();
|
progressJs.end();
|
||||||
|
|
|
@ -26,11 +26,6 @@ $hcont
|
||||||
|
|
||||||
export const startMicrotime = new window.Date().getTime();
|
export const startMicrotime = new window.Date().getTime();
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {boolean}
|
|
||||||
*/
|
|
||||||
export const community = RL_COMMUNITY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {?}
|
* @type {?}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,6 +12,7 @@ import { SocialAdminSettings } from 'Settings/Admin/Social';
|
||||||
import { PluginsAdminSettings } from 'Settings/Admin/Plugins';
|
import { PluginsAdminSettings } from 'Settings/Admin/Plugins';
|
||||||
import { PackagesAdminSettings } from 'Settings/Admin/Packages';
|
import { PackagesAdminSettings } from 'Settings/Admin/Packages';
|
||||||
import { AboutAdminSettings } from 'Settings/Admin/About';
|
import { AboutAdminSettings } from 'Settings/Admin/About';
|
||||||
|
import { BrandingAdminSettings } from 'Settings/Admin/Branding';
|
||||||
|
|
||||||
import { getApp } from 'Helper/Apps/Admin';
|
import { getApp } from 'Helper/Apps/Admin';
|
||||||
|
|
||||||
|
@ -27,16 +28,6 @@ class SettingsAdminScreen extends AbstractSettingsScreen {
|
||||||
* @param {Function=} fCallback = null
|
* @param {Function=} fCallback = null
|
||||||
*/
|
*/
|
||||||
setupSettings(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(
|
addSettingsViewModel(
|
||||||
GeneralAdminSettings,
|
GeneralAdminSettings,
|
||||||
'AdminSettingsGeneral',
|
'AdminSettingsGeneral',
|
||||||
|
@ -49,9 +40,7 @@ class SettingsAdminScreen extends AbstractSettingsScreen {
|
||||||
|
|
||||||
addSettingsViewModel(LoginAdminSettings, 'AdminSettingsLogin', 'TABS_LABELS/LABEL_LOGIN_NAME', 'login');
|
addSettingsViewModel(LoginAdminSettings, 'AdminSettingsLogin', 'TABS_LABELS/LABEL_LOGIN_NAME', 'login');
|
||||||
|
|
||||||
if (branding) {
|
addSettingsViewModel(BrandingAdminSettings, 'AdminSettingsBranding', 'TABS_LABELS/LABEL_BRANDING_NAME', 'branding');
|
||||||
addSettingsViewModel(branding, 'AdminSettingsBranding', 'TABS_LABELS/LABEL_BRANDING_NAME', 'branding');
|
|
||||||
}
|
|
||||||
|
|
||||||
addSettingsViewModel(ContactsAdminSettings, 'AdminSettingsContacts', 'TABS_LABELS/LABEL_CONTACTS_NAME', 'contacts');
|
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');
|
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');
|
addSettingsViewModel(AboutAdminSettings, 'AdminSettingsAbout', 'TABS_LABELS/LABEL_ABOUT_NAME', 'about');
|
||||||
|
|
||||||
runSettingsViewModelHooks(true);
|
runSettingsViewModelHooks(true);
|
||||||
|
|
|
@ -3,7 +3,6 @@ import ko from 'ko';
|
||||||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||||
import { appSettingsGet, settingsGet } from 'Storage/Settings';
|
import { appSettingsGet, settingsGet } from 'Storage/Settings';
|
||||||
|
|
||||||
import AppStore from 'Stores/Admin/App';
|
|
||||||
import CoreStore from 'Stores/Admin/Core';
|
import CoreStore from 'Stores/Admin/Core';
|
||||||
|
|
||||||
import { getApp } from 'Helper/Apps/Admin';
|
import { getApp } from 'Helper/Apps/Admin';
|
||||||
|
@ -27,8 +26,6 @@ class AboutAdminSettings {
|
||||||
this.coreRemoteRelease = CoreStore.coreRemoteRelease;
|
this.coreRemoteRelease = CoreStore.coreRemoteRelease;
|
||||||
this.coreVersionCompare = CoreStore.coreVersionCompare;
|
this.coreVersionCompare = CoreStore.coreVersionCompare;
|
||||||
|
|
||||||
this.community = RL_COMMUNITY || AppStore.community();
|
|
||||||
|
|
||||||
this.coreRemoteVersionHtmlDesc = ko.computed(() => {
|
this.coreRemoteVersionHtmlDesc = ko.computed(() => {
|
||||||
translatorTrigger();
|
translatorTrigger();
|
||||||
return i18n('TAB_ABOUT/HTML_NEW_VERSION', { 'VERSION': this.coreRemoteVersion() });
|
return i18n('TAB_ABOUT/HTML_NEW_VERSION', { 'VERSION': this.coreRemoteVersion() });
|
||||||
|
@ -59,13 +56,13 @@ class AboutAdminSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
onBuild() {
|
onBuild() {
|
||||||
if (this.access() && !this.community) {
|
if (this.access()) {
|
||||||
getApp().reloadCoreData();
|
getApp().reloadCoreData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateCoreData() {
|
updateCoreData() {
|
||||||
if (!this.coreUpdating() && !this.community) {
|
if (!this.coreUpdating()) {
|
||||||
getApp().updateCoreData();
|
getApp().updateCoreData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,14 +6,11 @@ import { settingsSaveHelperSimpleFunction, trim } from 'Common/Utils';
|
||||||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||||
|
|
||||||
import Remote from 'Remote/Admin/Ajax';
|
import Remote from 'Remote/Admin/Ajax';
|
||||||
import AppStore from 'Stores/Admin/App';
|
|
||||||
|
|
||||||
import { settingsGet } from 'Storage/Settings';
|
import { settingsGet } from 'Storage/Settings';
|
||||||
|
|
||||||
class BrandingAdminSettings {
|
class BrandingAdminSettings {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.capa = AppStore.prem;
|
|
||||||
|
|
||||||
this.title = ko.observable(settingsGet('Title')).idleTrigger();
|
this.title = ko.observable(settingsGet('Title')).idleTrigger();
|
||||||
this.loadingDesc = ko.observable(settingsGet('LoadingDescription')).idleTrigger();
|
this.loadingDesc = ko.observable(settingsGet('LoadingDescription')).idleTrigger();
|
||||||
this.faviconUrl = ko.observable(settingsGet('FaviconUrl')).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') }
|
{ optValue: 'always', optText: i18n('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') }
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
this.community = RL_COMMUNITY || AppStore.community();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onBuild() {
|
onBuild() {
|
||||||
|
@ -64,6 +59,86 @@ class BrandingAdminSettings {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, Magics.Time50ms);
|
}, 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 { settingsGet } from 'Storage/Settings';
|
||||||
import { showScreenPopup } from 'Knoin/Knoin';
|
import { showScreenPopup } from 'Knoin/Knoin';
|
||||||
|
|
||||||
import AppStore from 'Stores/Admin/App';
|
|
||||||
import PluginStore from 'Stores/Admin/Plugin';
|
import PluginStore from 'Stores/Admin/Plugin';
|
||||||
|
|
||||||
import Remote from 'Remote/Admin/Ajax';
|
import Remote from 'Remote/Admin/Ajax';
|
||||||
|
@ -22,8 +21,6 @@ class PluginsAdminSettings {
|
||||||
this.plugins = PluginStore.plugins;
|
this.plugins = PluginStore.plugins;
|
||||||
this.pluginsError = PluginStore.plugins.error;
|
this.pluginsError = PluginStore.plugins.error;
|
||||||
|
|
||||||
this.community = RL_COMMUNITY || AppStore.community();
|
|
||||||
|
|
||||||
this.visibility = ko.computed(() => (PluginStore.plugins.loading() ? 'visible' : 'hidden'));
|
this.visibility = ko.computed(() => (PluginStore.plugins.loading() ? 'visible' : 'hidden'));
|
||||||
|
|
||||||
this.onPluginLoadRequest = _.bind(this.onPluginLoadRequest, this);
|
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.interfaceAnimation.valueHasMutated();
|
||||||
|
|
||||||
this.prem = ko.observable(false);
|
|
||||||
this.community = ko.observable(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
populate() {
|
populate() {
|
||||||
|
@ -27,9 +24,6 @@ class AbstractAppStore {
|
||||||
this.newMoveToFolder(!!Settings.settingsGet('NewMoveToFolder'));
|
this.newMoveToFolder(!!Settings.settingsGet('NewMoveToFolder'));
|
||||||
|
|
||||||
this.interfaceAnimation(!!Settings.settingsGet('InterfaceAnimation'));
|
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.adminDomain = ko.observable(Settings.settingsGet('AdminDomain'));
|
||||||
this.version = ko.observable(Settings.appSettingsGet('version'));
|
this.version = ko.observable(Settings.appSettingsGet('version'));
|
||||||
|
|
||||||
this.capa = !!Settings.settingsGet('PremType');
|
|
||||||
this.community = RL_COMMUNITY;
|
|
||||||
|
|
||||||
this.adminManLoading = ko.computed(
|
this.adminManLoading = ko.computed(
|
||||||
() =>
|
() =>
|
||||||
'000' !==
|
'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 gulp = require('gulp');
|
||||||
|
|
||||||
const { cleanStatic } = require('./tasks/common');
|
const { cleanStatic } = require('./tasks/common');
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
if (!defined('APP_VERSION'))
|
if (!defined('APP_VERSION'))
|
||||||
{
|
{
|
||||||
define('APP_VERSION', '0.0.0');
|
define('APP_VERSION', '0.0.0');
|
||||||
define('APP_VERSION_TYPE', 'source');
|
|
||||||
define('APP_INDEX_ROOT_FILE', __FILE__);
|
define('APP_INDEX_ROOT_FILE', __FILE__);
|
||||||
define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/'));
|
define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/'));
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ mkdir rainloop-deb-build;
|
||||||
cd rainloop-deb-build;
|
cd rainloop-deb-build;
|
||||||
|
|
||||||
#Prepare zip file
|
#Prepare zip file
|
||||||
unzip ../rainloop-community-latest.zip;
|
unzip ../rainloop-legacy-latest.zip;
|
||||||
find . -type d -exec chmod 755 {} \;
|
find . -type d -exec chmod 755 {} \;
|
||||||
find . -type f -exec chmod 644 {} \;
|
find . -type f -exec chmod 644 {} \;
|
||||||
|
|
||||||
|
|
15
package.json
15
package.json
|
@ -3,8 +3,8 @@
|
||||||
"title": "RainLoop Webmail",
|
"title": "RainLoop Webmail",
|
||||||
"description": "Simple, modern & fast web-based email client",
|
"description": "Simple, modern & fast web-based email client",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.16.0",
|
"version": "1.17.0",
|
||||||
"ownCloudVersion": "5.4.0",
|
"ownCloudVersion": "5.5.0",
|
||||||
"homepage": "https://www.rainloop.net",
|
"homepage": "https://www.rainloop.net",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "RainLoop Team",
|
"name": "RainLoop Team",
|
||||||
|
@ -18,18 +18,13 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch-css": "gulp watchCss",
|
"watch-css": "gulp watchCss",
|
||||||
"watch-js": "webpack --color --watch",
|
"watch-js": "webpack --color --watch",
|
||||||
"build": "gulp all",
|
"build": "gulp all"
|
||||||
"build-pro": "gulp all --pro"
|
|
||||||
},
|
},
|
||||||
"license": "SEE LICENSE IN LICENSE",
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
"licenses": [
|
"licenses": [
|
||||||
{
|
{
|
||||||
"type": "AGPL 3.0",
|
"type": "MIT",
|
||||||
"ulr": "http://www.gnu.org/licenses/agpl-3.0.html"
|
"ulr": "https://choosealicense.com/licenses/mit/"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "RainLoop Software License",
|
|
||||||
"ulr": "https://www.rainloop.net/licensing/"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
|
|
@ -239,7 +239,8 @@ class HtmlUtils
|
||||||
$oWrapHtml->setAttribute($sKey, $sValue);
|
$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');
|
$oWrapDom->setAttribute('data-x-div-type', 'body');
|
||||||
foreach ($aBodylAttrs as $sKey => $sValue)
|
foreach ($aBodylAttrs as $sKey => $sValue)
|
||||||
{
|
{
|
||||||
|
@ -250,7 +251,7 @@ class HtmlUtils
|
||||||
|
|
||||||
$sWrp = $oDom->saveHTML($oWrapHtml);
|
$sWrp = $oDom->saveHTML($oWrapHtml);
|
||||||
|
|
||||||
$sResult = \str_replace('___xxx___', $sResult, $sWrp);
|
$sResult = \str_replace($sRndId, $sResult, $sWrp);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sResult = \str_replace(\MailSo\Base\HtmlUtils::$KOS, ':', $sResult);
|
$sResult = \str_replace(\MailSo\Base\HtmlUtils::$KOS, ':', $sResult);
|
||||||
|
|
|
@ -112,9 +112,9 @@ class Actions
|
||||||
private $oTwoFactorAuthProvider;
|
private $oTwoFactorAuthProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \RainLoop\Providers\Prem
|
* @var \RainLoop\Providers\Version
|
||||||
*/
|
*/
|
||||||
private $oPremProvider;
|
private $oVersionProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \RainLoop\Config\Application
|
* @var \RainLoop\Config\Application
|
||||||
|
@ -157,7 +157,7 @@ class Actions
|
||||||
$this->oSuggestionsProvider = null;
|
$this->oSuggestionsProvider = null;
|
||||||
$this->oChangePasswordProvider = null;
|
$this->oChangePasswordProvider = null;
|
||||||
$this->oTwoFactorAuthProvider = null;
|
$this->oTwoFactorAuthProvider = null;
|
||||||
$this->oPremProvider = null;
|
$this->oVersionProvider = null;
|
||||||
|
|
||||||
$this->sSpecAuthToken = '';
|
$this->sSpecAuthToken = '';
|
||||||
$this->sUpdateAuthToken = '';
|
$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->oVersionProvider = new \RainLoop\Providers\Version(
|
||||||
{
|
$this->Config(), $this->Logger()
|
||||||
$this->oPremProvider = new \RainLoop\Providers\Prem(
|
);
|
||||||
$this->Config(), $this->Logger(), $this->Cacher(null, true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->oPremProvider = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->oPremProvider;
|
return $this->oVersionProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1428,14 +1421,6 @@ class Actions
|
||||||
return $this->GetAccountFromCustomToken($this->getLocalAuthToken(), $bThrowExceptionOnFalse, true, true);
|
return $this->GetAccountFromCustomToken($this->getLocalAuthToken(), $bThrowExceptionOnFalse, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function IsOpen()
|
|
||||||
{
|
|
||||||
return !$this->PremProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bool $bAdmin = false
|
* @param bool $bAdmin = false
|
||||||
* @param bool $bMobile = false
|
* @param bool $bMobile = false
|
||||||
|
@ -1482,7 +1467,7 @@ class Actions
|
||||||
'customLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
'customLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''),
|
||||||
'forgotPasswordLinkUrl' => \trim($oConfig->Get('login', 'forgot_password_link_url', '')),
|
'forgotPasswordLinkUrl' => \trim($oConfig->Get('login', 'forgot_password_link_url', '')),
|
||||||
'registrationLinkUrl' => \trim($oConfig->Get('login', 'registration_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()),
|
'jsHash' => \md5(\RainLoop\Utils::GetConnectionToken()),
|
||||||
'useImapThread' => (bool) $oConfig->Get('labs', 'use_imap_thread', false),
|
'useImapThread' => (bool) $oConfig->Get('labs', 'use_imap_thread', false),
|
||||||
'useImapSubscribe' => (bool) $oConfig->Get('labs', 'use_imap_list_subscribe', true),
|
'useImapSubscribe' => (bool) $oConfig->Get('labs', 'use_imap_list_subscribe', true),
|
||||||
|
@ -1496,7 +1481,6 @@ class Actions
|
||||||
'themes' => $this->GetThemes($bMobile, false),
|
'themes' => $this->GetThemes($bMobile, false),
|
||||||
'languages' => $this->GetLanguages(false),
|
'languages' => $this->GetLanguages(false),
|
||||||
'languagesAdmin' => $this->GetLanguages(true),
|
'languagesAdmin' => $this->GetLanguages(true),
|
||||||
'appVersionType' => APP_VERSION_TYPE,
|
|
||||||
'attachmentsActions' => $aAttachmentsActions
|
'attachmentsActions' => $aAttachmentsActions
|
||||||
), $bAdmin ? array(
|
), $bAdmin ? array(
|
||||||
'adminHostUse' => '' !== $oConfig->Get('security', 'admin_panel_host', ''),
|
'adminHostUse' => '' !== $oConfig->Get('security', 'admin_panel_host', ''),
|
||||||
|
@ -1561,8 +1545,6 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
'ContactsIsAllowed' => false,
|
'ContactsIsAllowed' => false,
|
||||||
'ChangePasswordIsAllowed' => false,
|
'ChangePasswordIsAllowed' => false,
|
||||||
'RequireTwoFactor' => false,
|
'RequireTwoFactor' => false,
|
||||||
'Community' => true,
|
|
||||||
'PremType' => false,
|
|
||||||
'Admin' => array(),
|
'Admin' => array(),
|
||||||
'Capa' => array(),
|
'Capa' => array(),
|
||||||
'Plugins' => array(),
|
'Plugins' => array(),
|
||||||
|
@ -1574,11 +1556,17 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
$aResult['AuthAccountHash'] = $sAuthAccountHash;
|
$aResult['AuthAccountHash'] = $sAuthAccountHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
$oPremProvider = $this->PremProvider();
|
$aResult['LoginLogo'] = $oConfig->Get('branding', 'login_logo', '');
|
||||||
if ($oPremProvider)
|
$aResult['LoginBackground'] = $oConfig->Get('branding', 'login_background', '');
|
||||||
{
|
$aResult['LoginCss'] = $oConfig->Get('branding', 'login_css', '');
|
||||||
$oPremProvider->PopulateAppData($aResult);
|
$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'])
|
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['AllowDropboxSocial'] = (bool) $oConfig->Get('social', 'dropbox_enable', false);
|
||||||
$aResult['DropboxApiKey'] = (string) $oConfig->Get('social', 'dropbox_api_key', '');
|
$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['WeakPassword'] = (bool) $oConfig->ValidatePassword('12345');
|
||||||
$aResult['CoreAccess'] = (bool) $this->rainLoopCoreAccess();
|
$aResult['CoreAccess'] = (bool) $this->rainLoopCoreAccess();
|
||||||
|
|
||||||
|
@ -3638,11 +3623,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
}
|
}
|
||||||
else if ($bVersionsCache)
|
else if ($bVersionsCache)
|
||||||
{
|
{
|
||||||
$oPremProvider = $this->PremProvider();
|
$this->VersionProvider()->ClearOldVersion();
|
||||||
if ($oPremProvider)
|
|
||||||
{
|
|
||||||
$oPremProvider->ClearOldVersion();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->Plugins()->RunHook('service.app-delay-start-end');
|
$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, 'DropboxEnable', 'social', 'dropbox_enable', 'bool');
|
||||||
$this->setConfigFromParams($oConfig, 'DropboxApiKey', 'social', 'dropbox_api_key', 'string');
|
$this->setConfigFromParams($oConfig, 'DropboxApiKey', 'social', 'dropbox_api_key', 'string');
|
||||||
|
|
||||||
$oPremProvider = $this->PremProvider();
|
$this->setConfigFromParams($oConfig, 'LoginLogo', 'branding', 'login_logo', 'string');
|
||||||
if ($oPremProvider)
|
$this->setConfigFromParams($oConfig, 'LoginBackground', 'branding', 'login_background', 'string');
|
||||||
{
|
$this->setConfigFromParams($oConfig, 'LoginDescription', 'branding', 'login_desc', 'string');
|
||||||
$oPremProvider->PremSection($this, $oConfig);
|
$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());
|
return $this->DefaultResponse(__FUNCTION__, $oConfig->Save());
|
||||||
}
|
}
|
||||||
|
@ -3971,48 +3960,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
public function DoAdminLicensing()
|
public function DoAdminLicensing()
|
||||||
{
|
{
|
||||||
$this->IsAdminLoggined();
|
$this->IsAdminLoggined();
|
||||||
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::LicensingServerIsUnavailable);
|
||||||
$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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4021,50 +3969,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
public function DoAdminLicensingActivate()
|
public function DoAdminLicensingActivate()
|
||||||
{
|
{
|
||||||
$this->IsAdminLoggined();
|
$this->IsAdminLoggined();
|
||||||
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::LicensingServerIsUnavailable);
|
||||||
$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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4670,7 +4575,6 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
|
|
||||||
$bRainLoopUpdatable = $this->rainLoopUpdatable();
|
$bRainLoopUpdatable = $this->rainLoopUpdatable();
|
||||||
$bRainLoopAccess = $this->rainLoopCoreAccess();
|
$bRainLoopAccess = $this->rainLoopCoreAccess();
|
||||||
$oPremProvider = $this->PremProvider();
|
|
||||||
|
|
||||||
$aData = array();
|
$aData = array();
|
||||||
if ($bRainLoopUpdatable && $bRainLoopAccess)
|
if ($bRainLoopUpdatable && $bRainLoopAccess)
|
||||||
|
@ -4679,9 +4583,9 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
}
|
}
|
||||||
|
|
||||||
$bResult = false;
|
$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);
|
return $this->DefaultResponse(__FUNCTION__, $bResult);
|
||||||
|
@ -9701,9 +9605,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc LangLink IncludeBackground Plugins
|
||||||
*/
|
*/
|
||||||
public function StaticPath($sPath)
|
public function StaticPath($sPath)
|
||||||
{
|
{
|
||||||
$sKey = defined('APP_VERSION_TYPE') && 0 < strlen(APP_VERSION_TYPE) ? APP_VERSION_TYPE :
|
$sKey = 'legacy';
|
||||||
($this->IsOpen() ? 'community' : 'standard');
|
|
||||||
|
|
||||||
$sResult = \RainLoop\Utils::WebStaticPath().$sPath;
|
$sResult = \RainLoop\Utils::WebStaticPath().$sPath;
|
||||||
return $sResult.(false === \strpos($sResult, '?') ? '?' : '&').$sKey;
|
return $sResult.(false === \strpos($sResult, '?') ? '?' : '&').$sKey;
|
||||||
}
|
}
|
||||||
|
|
|
@ -269,7 +269,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
|
|
||||||
'welcome_page' => array(false, ''),
|
'welcome_page' => array(false, ''),
|
||||||
|
|
||||||
'hide_submit_button' => array(true),
|
'hide_submit_button' => array(false),
|
||||||
|
|
||||||
'forgot_password_link_url' => array('', ''),
|
'forgot_password_link_url' => array('', ''),
|
||||||
'registration_link_url' => array('', ''),
|
'registration_link_url' => array('', ''),
|
||||||
|
|
|
@ -4,7 +4,6 @@ namespace RainLoop\Enumerations;
|
||||||
|
|
||||||
class Capa
|
class Capa
|
||||||
{
|
{
|
||||||
const PREM = 'PREM';
|
|
||||||
const TWO_FACTOR = 'TWO_FACTOR';
|
const TWO_FACTOR = 'TWO_FACTOR';
|
||||||
const TWO_FACTOR_FORCE = 'TWO_FACTOR_FORCE';
|
const TWO_FACTOR_FORCE = 'TWO_FACTOR_FORCE';
|
||||||
const OPEN_PGP = 'OPEN_PGP';
|
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 .= '<!--';
|
||||||
$sResult .= '[time:'.\substr(\microtime(true) - APP_START, 0, 6);
|
$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 .= '][cached:'.($bCached ? 'true' : 'false');
|
||||||
// $sResult .= '][hash:'.$aTemplateParameters['{{BaseHash}}'];
|
|
||||||
// $sResult .= '][session:'.\md5(\RainLoop\Utils::GetShortToken());
|
|
||||||
|
|
||||||
if ($bMobile)
|
if ($bMobile)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@ en:
|
||||||
LABEL_PASSWORD: "Password"
|
LABEL_PASSWORD: "Password"
|
||||||
BUTTON_LOGIN: "Log into the admin panel"
|
BUTTON_LOGIN: "Log into the admin panel"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "General"
|
LABEL_GENERAL_NAME: "General"
|
||||||
|
@ -71,7 +70,6 @@ en:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
||||||
HTML_ALERT_PREMIUM: "This functionality is available for <strong><a href=\"#/licensing\">Premium</a></strong> subscribers."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contacts"
|
LEGEND_CONTACTS: "Contacts"
|
||||||
LEGEND_STORAGE: "Storage (PDO)"
|
LEGEND_STORAGE: "Storage (PDO)"
|
||||||
|
@ -147,22 +145,6 @@ en:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Cannot access the repository at the moment."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "About"
|
LEGEND_ABOUT: "About"
|
||||||
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
||||||
|
|
|
@ -4,7 +4,6 @@ ca:
|
||||||
LABEL_PASSWORD: "Contrasenya"
|
LABEL_PASSWORD: "Contrasenya"
|
||||||
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Prèmium"
|
|
||||||
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "General"
|
LABEL_GENERAL_NAME: "General"
|
||||||
|
@ -71,7 +70,6 @@ ca:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contactes"
|
LEGEND_CONTACTS: "Contactes"
|
||||||
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ ca:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Ara no es pot accedir al repositori."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Quant a"
|
LEGEND_ABOUT: "Quant a"
|
||||||
LABEL_TAG_HINT: "Client de correu electrònic senzill, modern i ràpid basat en la web"
|
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"
|
LABEL_PASSWORD: "Contrasenya"
|
||||||
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
BUTTON_LOGIN: "Entreu al tauler d'administració"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Prèmium"
|
|
||||||
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
LABEL_ADMIN_PANEL: "Tauler d'administració"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "General"
|
LABEL_GENERAL_NAME: "General"
|
||||||
|
@ -71,7 +70,6 @@ ca_ES:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Cap"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Un cop"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contactes"
|
LEGEND_CONTACTS: "Contactes"
|
||||||
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
LEGEND_STORAGE: "Emmagatzeatge (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ ca_ES:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible per instal·lar"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
LEGEND_INSTALLED_PACKAGES: "Paquets instal·lats"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Ara no es pot accedir al repositori."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Quant a"
|
LEGEND_ABOUT: "Quant a"
|
||||||
LABEL_TAG_HINT: "Client de correu electrònic senzill, modern i ràpid basat en la web"
|
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"
|
LABEL_PASSWORD: "Heslo"
|
||||||
BUTTON_LOGIN: "Přihlásit do administrace"
|
BUTTON_LOGIN: "Přihlásit do administrace"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Prémium"
|
|
||||||
LABEL_ADMIN_PANEL: "Administrační panel"
|
LABEL_ADMIN_PANEL: "Administrační panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Základní"
|
LABEL_GENERAL_NAME: "Základní"
|
||||||
|
@ -70,7 +69,6 @@ cs_CZ:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nikdy"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nikdy"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Jednou"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Jednou"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Vždy"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakty"
|
LEGEND_CONTACTS: "Kontakty"
|
||||||
LEGEND_STORAGE: "Úložiště (PDO)"
|
LEGEND_STORAGE: "Úložiště (PDO)"
|
||||||
|
@ -146,23 +144,6 @@ cs_CZ:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné pro instalaci"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné pro instalaci"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Nainstalované balíčky"
|
LEGEND_INSTALLED_PACKAGES: "Nainstalované balíčky"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "V tento moment se nelze připojit k repozitáři."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Info"
|
LEGEND_ABOUT: "Info"
|
||||||
LABEL_TAG_HINT: "Jednoduchý, moderní a rychlý webový emailový klient"
|
LABEL_TAG_HINT: "Jednoduchý, moderní a rychlý webový emailový klient"
|
||||||
|
|
|
@ -4,7 +4,6 @@ da_DK:
|
||||||
LABEL_PASSWORD: "Adgangskode"
|
LABEL_PASSWORD: "Adgangskode"
|
||||||
BUTTON_LOGIN: "Log ind i administrationspanelet"
|
BUTTON_LOGIN: "Log ind i administrationspanelet"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Generelt"
|
LABEL_GENERAL_NAME: "Generelt"
|
||||||
|
@ -70,7 +69,6 @@ da_DK:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "én enkelt gang"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "én enkelt gang"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Altid"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakter"
|
LEGEND_CONTACTS: "Kontakter"
|
||||||
LEGEND_STORAGE: "Lagring (PDO)"
|
LEGEND_STORAGE: "Lagring (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ da_DK:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Installation tilgængelig"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Installation tilgængelig"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Installerede pakker"
|
LEGEND_INSTALLED_PACKAGES: "Installerede pakker"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Kan ikke tilgå depotet lige nu."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Om"
|
LEGEND_ABOUT: "Om"
|
||||||
LABEL_TAG_HINT: "Simpel, moderne & hurtig web-baseret e-mail klient"
|
LABEL_TAG_HINT: "Simpel, moderne & hurtig web-baseret e-mail klient"
|
||||||
|
|
|
@ -4,7 +4,6 @@ de_DE:
|
||||||
LABEL_PASSWORD: "Passwort"
|
LABEL_PASSWORD: "Passwort"
|
||||||
BUTTON_LOGIN: "Im Adminpanel anmelden"
|
BUTTON_LOGIN: "Im Adminpanel anmelden"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Adminpanel"
|
LABEL_ADMIN_PANEL: "Adminpanel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Allgemein"
|
LABEL_GENERAL_NAME: "Allgemein"
|
||||||
|
@ -70,7 +69,6 @@ de_DE:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nie"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nie"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Einmal"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Einmal"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Immer"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakte"
|
LEGEND_CONTACTS: "Kontakte"
|
||||||
LEGEND_STORAGE: "Speicher (PDO)"
|
LEGEND_STORAGE: "Speicher (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ de_DE:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Zur Installation verfügbar"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Zur Installation verfügbar"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Installierte Pakete"
|
LEGEND_INSTALLED_PACKAGES: "Installierte Pakete"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Auf das Plugin-Repository kann derzeit nicht zugegriffen werden."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Über"
|
LEGEND_ABOUT: "Über"
|
||||||
LABEL_TAG_HINT: "Einfacher, moderner und schneller webbasierter E-Mail-Client"
|
LABEL_TAG_HINT: "Einfacher, moderner und schneller webbasierter E-Mail-Client"
|
||||||
|
|
|
@ -4,7 +4,6 @@ en_US:
|
||||||
LABEL_PASSWORD: "Password"
|
LABEL_PASSWORD: "Password"
|
||||||
BUTTON_LOGIN: "Log into the admin panel"
|
BUTTON_LOGIN: "Log into the admin panel"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "General"
|
LABEL_GENERAL_NAME: "General"
|
||||||
|
@ -69,7 +68,6 @@ en_US:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "None"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Once"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Always"
|
||||||
HTML_ALERT_PREMIUM: "This functionality is available for <strong><a href=\"#/licensing\">Premium</a></strong> subscribers."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contacts"
|
LEGEND_CONTACTS: "Contacts"
|
||||||
LEGEND_STORAGE: "Storage (PDO)"
|
LEGEND_STORAGE: "Storage (PDO)"
|
||||||
|
@ -144,22 +142,6 @@ en_US:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Available for Installation"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
LEGEND_INSTALLED_PACKAGES: "Installed Packages"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Cannot access the repository at the moment."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "About"
|
LEGEND_ABOUT: "About"
|
||||||
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
LABEL_TAG_HINT: "Simple, modern & fast web-based email client"
|
||||||
|
|
|
@ -4,7 +4,6 @@ es_ES:
|
||||||
LABEL_PASSWORD: "Contraseña"
|
LABEL_PASSWORD: "Contraseña"
|
||||||
BUTTON_LOGIN: "Ingresar al panel de control"
|
BUTTON_LOGIN: "Ingresar al panel de control"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Panel de Control"
|
LABEL_ADMIN_PANEL: "Panel de Control"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "General"
|
LABEL_GENERAL_NAME: "General"
|
||||||
|
@ -70,7 +69,6 @@ es_ES:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ninguno"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ninguno"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Una vez"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Una vez"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Siempre"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contactos"
|
LEGEND_CONTACTS: "Contactos"
|
||||||
LEGEND_STORAGE: "Almacenamiento (PDO)"
|
LEGEND_STORAGE: "Almacenamiento (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ es_ES:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalación disponible"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalación disponible"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Paquetes instalados"
|
LEGEND_INSTALLED_PACKAGES: "Paquetes instalados"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "No se puede acceder al repositorio en estos momentos."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Acerca"
|
LEGEND_ABOUT: "Acerca"
|
||||||
LABEL_TAG_HINT: "Moderno, simple y rápido cliente web de correo electrónico"
|
LABEL_TAG_HINT: "Moderno, simple y rápido cliente web de correo electrónico"
|
||||||
|
|
|
@ -4,7 +4,6 @@ eu:
|
||||||
LABEL_PASSWORD: "Pasahitza"
|
LABEL_PASSWORD: "Pasahitza"
|
||||||
BUTTON_LOGIN: "Hasi saioa administrazio panelean"
|
BUTTON_LOGIN: "Hasi saioa administrazio panelean"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Administrazio panela"
|
LABEL_ADMIN_PANEL: "Administrazio panela"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Orokorra"
|
LABEL_GENERAL_NAME: "Orokorra"
|
||||||
|
@ -71,7 +70,6 @@ eu:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Bat ere ez"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Bat ere ez"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Behin"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Behin"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Beti"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Beti"
|
||||||
HTML_ALERT_PREMIUM: "Funtzionalitate hau <strong><a href=\"#/licensing\">Premium</a></strong> erabiltzaileentzat soilik dago eskuragarri."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontaktuak"
|
LEGEND_CONTACTS: "Kontaktuak"
|
||||||
LEGEND_STORAGE: "Biltegiratzea (PDO)"
|
LEGEND_STORAGE: "Biltegiratzea (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ eu:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalatzeko erabilgarri"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Instalatzeko erabilgarri"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Instalatutako paketeak"
|
LEGEND_INSTALLED_PACKAGES: "Instalatutako paketeak"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Une honetan ezin da sartu errepositorioan "
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Honi buruz"
|
LEGEND_ABOUT: "Honi buruz"
|
||||||
LABEL_TAG_HINT: "Web-posta bezero sinple, moderno eta azkarra"
|
LABEL_TAG_HINT: "Web-posta bezero sinple, moderno eta azkarra"
|
||||||
|
|
|
@ -4,7 +4,6 @@ fa_IR:
|
||||||
LABEL_PASSWORD: "گذرواژه"
|
LABEL_PASSWORD: "گذرواژه"
|
||||||
BUTTON_LOGIN: "ورود به صفحه مدیریت"
|
BUTTON_LOGIN: "ورود به صفحه مدیریت"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "پریمیوم"
|
|
||||||
LABEL_ADMIN_PANEL: "صفحه مدیریت"
|
LABEL_ADMIN_PANEL: "صفحه مدیریت"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "عمومی"
|
LABEL_GENERAL_NAME: "عمومی"
|
||||||
|
@ -72,7 +71,6 @@ fa_IR:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "هیچکدام"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "هیچکدام"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "یکبار"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "یکبار"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "همیشه"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "همیشه"
|
||||||
HTML_ALERT_PREMIUM: "این قابلیت برای نسخه <strong><a href=\"#/licensing\">Premium</a></strong> مشترکین در دسترس هست."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "تماسها"
|
LEGEND_CONTACTS: "تماسها"
|
||||||
LEGEND_STORAGE: "فضای ذخیرهسازی (pdo)"
|
LEGEND_STORAGE: "فضای ذخیرهسازی (pdo)"
|
||||||
|
@ -147,21 +145,6 @@ fa_IR:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "برای نصب در دسترس هست"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "برای نصب در دسترس هست"
|
||||||
LEGEND_INSTALLED_PACKAGES: "بستههای نصب شده"
|
LEGEND_INSTALLED_PACKAGES: "بستههای نصب شده"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "در این لحظه دسترسی به مخزن امکانپذیر نیست"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "درباره"
|
LEGEND_ABOUT: "درباره"
|
||||||
LABEL_TAG_HINT: "یک رابط کاربری پست الکترونیک ساده، پیشرفته و سریع"
|
LABEL_TAG_HINT: "یک رابط کاربری پست الکترونیک ساده، پیشرفته و سریع"
|
||||||
|
|
|
@ -4,7 +4,6 @@ fi_FI:
|
||||||
LABEL_PASSWORD: "Salasana"
|
LABEL_PASSWORD: "Salasana"
|
||||||
BUTTON_LOGIN: "Kirjaudu hallintapaneliin"
|
BUTTON_LOGIN: "Kirjaudu hallintapaneliin"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Halintapaneli"
|
LABEL_ADMIN_PANEL: "Halintapaneli"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Yleiset"
|
LABEL_GENERAL_NAME: "Yleiset"
|
||||||
|
@ -69,7 +68,6 @@ fi_FI:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ei mitään"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ei mitään"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kerran"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kerran"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Aina"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Yhteystiedot"
|
LEGEND_CONTACTS: "Yhteystiedot"
|
||||||
LEGEND_STORAGE: "Tallennus (PDO)"
|
LEGEND_STORAGE: "Tallennus (PDO)"
|
||||||
|
@ -144,22 +142,6 @@ fi_FI:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Voidaan asentaa"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Voidaan asentaa"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Aennetut pakkaukset"
|
LEGEND_INSTALLED_PACKAGES: "Aennetut pakkaukset"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Pääsy varastoon ei toimi tällä hetkellä."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Tietoja"
|
LEGEND_ABOUT: "Tietoja"
|
||||||
LABEL_TAG_HINT: "Helppo, moderni ja nopea web-pohjainen sähköpostiohjelma"
|
LABEL_TAG_HINT: "Helppo, moderni ja nopea web-pohjainen sähköpostiohjelma"
|
||||||
|
|
|
@ -4,7 +4,6 @@ fr_FR:
|
||||||
LABEL_PASSWORD: "Mot de passe"
|
LABEL_PASSWORD: "Mot de passe"
|
||||||
BUTTON_LOGIN: "Se connecter au panneau d'administration"
|
BUTTON_LOGIN: "Se connecter au panneau d'administration"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Panneau d'Administration"
|
LABEL_ADMIN_PANEL: "Panneau d'Administration"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Général"
|
LABEL_GENERAL_NAME: "Général"
|
||||||
|
@ -70,7 +69,6 @@ fr_FR:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Aucun"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Aucun"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Une seule fois"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Une seule fois"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Toujours"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contacts"
|
LEGEND_CONTACTS: "Contacts"
|
||||||
LEGEND_STORAGE: "Stockage (PDO)"
|
LEGEND_STORAGE: "Stockage (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ fr_FR:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible pour l'installation"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponible pour l'installation"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Paquets installés"
|
LEGEND_INSTALLED_PACKAGES: "Paquets installés"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Impossible d'accéder au dépôt pour l'instant."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "A propos"
|
LEGEND_ABOUT: "A propos"
|
||||||
LABEL_TAG_HINT: "Un client webmail simple, moderne et rapide "
|
LABEL_TAG_HINT: "Un client webmail simple, moderne et rapide "
|
||||||
|
|
|
@ -4,7 +4,6 @@ hu_HU:
|
||||||
LABEL_PASSWORD: "Jelszó"
|
LABEL_PASSWORD: "Jelszó"
|
||||||
BUTTON_LOGIN: "Bejelentkezés az admin felületre"
|
BUTTON_LOGIN: "Bejelentkezés az admin felületre"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Prémuim"
|
|
||||||
LABEL_ADMIN_PANEL: "Adminisztrációs felület"
|
LABEL_ADMIN_PANEL: "Adminisztrációs felület"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Általános"
|
LABEL_GENERAL_NAME: "Általános"
|
||||||
|
@ -71,7 +70,6 @@ hu_HU:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Semmi"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Semmi"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Egyszer"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Egyszer"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Mindig"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Névjegyek"
|
LEGEND_CONTACTS: "Névjegyek"
|
||||||
LEGEND_STORAGE: "Tárhely (PDO)"
|
LEGEND_STORAGE: "Tárhely (PDO)"
|
||||||
|
@ -146,21 +144,6 @@ hu_HU:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Telepíthető"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Telepíthető"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Telepített csomagok"
|
LEGEND_INSTALLED_PACKAGES: "Telepített csomagok"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Jelenleg nem lehet csatlakozni a tárolóhoz"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Névjegy"
|
LEGEND_ABOUT: "Névjegy"
|
||||||
LABEL_TAG_HINT: "Egyszerű, modern és gyors webes email kliens"
|
LABEL_TAG_HINT: "Egyszerű, modern és gyors webes email kliens"
|
||||||
|
|
|
@ -4,7 +4,6 @@ id_ID:
|
||||||
LABEL_PASSWORD: "Password"
|
LABEL_PASSWORD: "Password"
|
||||||
BUTTON_LOGIN: "Login ke panel admin"
|
BUTTON_LOGIN: "Login ke panel admin"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Panel Admin"
|
LABEL_ADMIN_PANEL: "Panel Admin"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Umum"
|
LABEL_GENERAL_NAME: "Umum"
|
||||||
|
@ -71,7 +70,6 @@ id_ID:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Tidak ada"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Tidak ada"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Sekali"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Sekali"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Selalu"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Selalu"
|
||||||
HTML_ALERT_PREMIUM: "Fungsi ini tersedia hanya untuk pengguna <strong><a href=\"#/licensing\">Premium</a></strong>."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontak"
|
LEGEND_CONTACTS: "Kontak"
|
||||||
LEGEND_STORAGE: "Media simpan (PDO)"
|
LEGEND_STORAGE: "Media simpan (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ id_ID:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tersedia untuk Instalasi"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tersedia untuk Instalasi"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Paket Terinstal"
|
LEGEND_INSTALLED_PACKAGES: "Paket Terinstal"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Tidak bisa menjangkau repositori saat ini"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Tentang"
|
LEGEND_ABOUT: "Tentang"
|
||||||
LABEL_TAG_HINT: "Klien web-based email yang simpel, modern & cepat"
|
LABEL_TAG_HINT: "Klien web-based email yang simpel, modern & cepat"
|
||||||
|
|
|
@ -4,7 +4,6 @@ it_IT:
|
||||||
LABEL_PASSWORD: "Password"
|
LABEL_PASSWORD: "Password"
|
||||||
BUTTON_LOGIN: "Accedi all'amministrazione"
|
BUTTON_LOGIN: "Accedi all'amministrazione"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Amministrazione"
|
LABEL_ADMIN_PANEL: "Amministrazione"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Generali"
|
LABEL_GENERAL_NAME: "Generali"
|
||||||
|
@ -70,7 +69,6 @@ it_IT:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Mai"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Mai"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Solo una volta"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Solo una volta"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contatti"
|
LEGEND_CONTACTS: "Contatti"
|
||||||
LEGEND_STORAGE: "Metodo di salvataggio (PDO)"
|
LEGEND_STORAGE: "Metodo di salvataggio (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ it_IT:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponibili per l'installazione"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponibili per l'installazione"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Pacchetti installati"
|
LEGEND_INSTALLED_PACKAGES: "Pacchetti installati"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Impossibile accedere al repository in questo momento."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Informazioni"
|
LEGEND_ABOUT: "Informazioni"
|
||||||
LABEL_TAG_HINT: "Semplice, moderno e veloce client email online"
|
LABEL_TAG_HINT: "Semplice, moderno e veloce client email online"
|
||||||
|
|
|
@ -4,7 +4,6 @@ ja_JP:
|
||||||
LABEL_PASSWORD: "パスワード"
|
LABEL_PASSWORD: "パスワード"
|
||||||
BUTTON_LOGIN: "管理画面へログイン"
|
BUTTON_LOGIN: "管理画面へログイン"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "プレミアム"
|
|
||||||
LABEL_ADMIN_PANEL: "管理画面"
|
LABEL_ADMIN_PANEL: "管理画面"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "全般"
|
LABEL_GENERAL_NAME: "全般"
|
||||||
|
@ -71,7 +70,6 @@ ja_JP:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "なし"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "なし"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "1回だけ"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "1回だけ"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "いつも"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "いつも"
|
||||||
HTML_ALERT_PREMIUM: "この機能には<strong><a href=\"#/licensing\">プレミアム</a></strong>が必要です"
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "連絡先"
|
LEGEND_CONTACTS: "連絡先"
|
||||||
LEGEND_STORAGE: "ストレージ (PDO)"
|
LEGEND_STORAGE: "ストレージ (PDO)"
|
||||||
|
@ -147,22 +145,6 @@ ja_JP:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "インストール可能なパッケージ"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "インストール可能なパッケージ"
|
||||||
LEGEND_INSTALLED_PACKAGES: "インストールされたパッケージ"
|
LEGEND_INSTALLED_PACKAGES: "インストールされたパッケージ"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "現時点でリポジトリにアクセスすることはできません。"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "RainLoop について"
|
LEGEND_ABOUT: "RainLoop について"
|
||||||
LABEL_TAG_HINT: "シンプル・モダン・高速なウェブベースのメールクライアント"
|
LABEL_TAG_HINT: "シンプル・モダン・高速なウェブベースのメールクライアント"
|
||||||
|
|
|
@ -4,7 +4,6 @@ lt_LT:
|
||||||
LABEL_PASSWORD: "Slaptažodis"
|
LABEL_PASSWORD: "Slaptažodis"
|
||||||
BUTTON_LOGIN: "Prisijungti prie valdymo skydo"
|
BUTTON_LOGIN: "Prisijungti prie valdymo skydo"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Administratoriaus valdymo skydas"
|
LABEL_ADMIN_PANEL: "Administratoriaus valdymo skydas"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Pagrindiniai"
|
LABEL_GENERAL_NAME: "Pagrindiniai"
|
||||||
|
@ -71,7 +70,6 @@ lt_LT:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nieko"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nieko"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kartą"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Kartą"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Visada"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Visada"
|
||||||
HTML_ALERT_PREMIUM: "Ši funkcija leidžiama tik <strong><a href=\"#/licensing\">Premium</a></strong> vartotojams."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontaktai"
|
LEGEND_CONTACTS: "Kontaktai"
|
||||||
LEGEND_STORAGE: "Saugykla (PDO)"
|
LEGEND_STORAGE: "Saugykla (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ lt_LT:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Galima diegti"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Galima diegti"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Įdiegti paketai"
|
LEGEND_INSTALLED_PACKAGES: "Įdiegti paketai"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Šiuo momentu negaliu prisijungti prie saugyklos."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Apie"
|
LEGEND_ABOUT: "Apie"
|
||||||
LABEL_TAG_HINT: "Paprastas, modernus ir greitas web pašto klientas"
|
LABEL_TAG_HINT: "Paprastas, modernus ir greitas web pašto klientas"
|
||||||
|
|
|
@ -4,7 +4,6 @@ nb_NO:
|
||||||
LABEL_PASSWORD: "Passord"
|
LABEL_PASSWORD: "Passord"
|
||||||
BUTTON_LOGIN: "Logg inn på admin-panel"
|
BUTTON_LOGIN: "Logg inn på admin-panel"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Admin-panel"
|
LABEL_ADMIN_PANEL: "Admin-panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Generelt"
|
LABEL_GENERAL_NAME: "Generelt"
|
||||||
|
@ -71,7 +70,6 @@ nb_NO:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Én gang"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Én gang"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Alltid"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakter"
|
LEGEND_CONTACTS: "Kontakter"
|
||||||
LEGEND_STORAGE: "Lagring (PDO)"
|
LEGEND_STORAGE: "Lagring (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ nb_NO:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tilgjengelig for installasjon"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tilgjengelig for installasjon"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Installerte pakker"
|
LEGEND_INSTALLED_PACKAGES: "Installerte pakker"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Fikk ikke tilgang til pakkelageret."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Om"
|
LEGEND_ABOUT: "Om"
|
||||||
LABEL_TAG_HINT: "Rask, enkel, moderne og web-basert e-postklient"
|
LABEL_TAG_HINT: "Rask, enkel, moderne og web-basert e-postklient"
|
||||||
|
|
|
@ -4,7 +4,6 @@ nl_NL:
|
||||||
LABEL_PASSWORD: "Wachtwoord"
|
LABEL_PASSWORD: "Wachtwoord"
|
||||||
BUTTON_LOGIN: "Aanmelden in het beheer paneel"
|
BUTTON_LOGIN: "Aanmelden in het beheer paneel"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Beheer paneel"
|
LABEL_ADMIN_PANEL: "Beheer paneel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Algemeen"
|
LABEL_GENERAL_NAME: "Algemeen"
|
||||||
|
@ -70,7 +69,6 @@ nl_NL:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nooit"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nooit"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Eenmalig"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Eenmalig"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Altijd"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contactpersonen"
|
LEGEND_CONTACTS: "Contactpersonen"
|
||||||
LEGEND_STORAGE: "Opslag (PDO)"
|
LEGEND_STORAGE: "Opslag (PDO)"
|
||||||
|
@ -145,21 +143,6 @@ nl_NL:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Gereed voor installatie"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Gereed voor installatie"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Geïnstalleerde pakketten"
|
LEGEND_INSTALLED_PACKAGES: "Geïnstalleerde pakketten"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "De installatie bron is op het moment niet beschikbaar."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Over"
|
LEGEND_ABOUT: "Over"
|
||||||
LABEL_TAG_HINT: "Simpel, modern en snelle web-based e-mail client"
|
LABEL_TAG_HINT: "Simpel, modern en snelle web-based e-mail client"
|
||||||
|
|
|
@ -4,7 +4,6 @@ pl_PL:
|
||||||
LABEL_PASSWORD: "Hasło"
|
LABEL_PASSWORD: "Hasło"
|
||||||
BUTTON_LOGIN: "Zaloguj do panelu administracjnego"
|
BUTTON_LOGIN: "Zaloguj do panelu administracjnego"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Panel administracyjny"
|
LABEL_ADMIN_PANEL: "Panel administracyjny"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Ogólne"
|
LABEL_GENERAL_NAME: "Ogólne"
|
||||||
|
@ -71,7 +70,6 @@ pl_PL:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nigdy"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nigdy"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Tylko raz"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Tylko raz"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Zawsze"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakty"
|
LEGEND_CONTACTS: "Kontakty"
|
||||||
LEGEND_STORAGE: "Baza danych (PDO)"
|
LEGEND_STORAGE: "Baza danych (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ pl_PL:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostępne do zainstalowania"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostępne do zainstalowania"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Zainstalowane pakiety"
|
LEGEND_INSTALLED_PACKAGES: "Zainstalowane pakiety"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Nie można uzyskać dostępu do repozytorium."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "O programie"
|
LEGEND_ABOUT: "O programie"
|
||||||
LABEL_TAG_HINT: "Prosty, nowoczesny i szybki klient pocztowy"
|
LABEL_TAG_HINT: "Prosty, nowoczesny i szybki klient pocztowy"
|
||||||
|
|
|
@ -4,7 +4,6 @@ pt_BR:
|
||||||
LABEL_PASSWORD: "Senha"
|
LABEL_PASSWORD: "Senha"
|
||||||
BUTTON_LOGIN: "Entrar no painel administrativo"
|
BUTTON_LOGIN: "Entrar no painel administrativo"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Painel Administrativo"
|
LABEL_ADMIN_PANEL: "Painel Administrativo"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Geral"
|
LABEL_GENERAL_NAME: "Geral"
|
||||||
|
@ -71,7 +70,6 @@ pt_BR:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nunca"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Nunca"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Única vez"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Única vez"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Sempre"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Contatos"
|
LEGEND_CONTACTS: "Contatos"
|
||||||
LEGEND_STORAGE: "Armazenamento (PDO)"
|
LEGEND_STORAGE: "Armazenamento (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ pt_BR:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponíveis para instalação"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Disponíveis para instalação"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Pacotes já instalados"
|
LEGEND_INSTALLED_PACKAGES: "Pacotes já instalados"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Não foi possível acessar o repositório no momento."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Sobre"
|
LEGEND_ABOUT: "Sobre"
|
||||||
LABEL_TAG_HINT: "Leitor de email web simples, moderno & rápido."
|
LABEL_TAG_HINT: "Leitor de email web simples, moderno & rápido."
|
||||||
|
|
|
@ -4,7 +4,6 @@ ru_RU:
|
||||||
LABEL_PASSWORD: "Пароль"
|
LABEL_PASSWORD: "Пароль"
|
||||||
BUTTON_LOGIN: "Войти в админ панель"
|
BUTTON_LOGIN: "Войти в админ панель"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Премиум"
|
|
||||||
LABEL_ADMIN_PANEL: "Админка"
|
LABEL_ADMIN_PANEL: "Админка"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Основные"
|
LABEL_GENERAL_NAME: "Основные"
|
||||||
|
@ -70,7 +69,6 @@ ru_RU:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Никогда"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Никогда"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Один раз"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Один раз"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Всегда"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Всегда"
|
||||||
HTML_ALERT_PREMIUM: "Эти функции доступны для <strong><a href=\"#/licensing\">премиум</a></strong> подписчиков."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Контакты"
|
LEGEND_CONTACTS: "Контакты"
|
||||||
LEGEND_STORAGE: "Хранилище (PDO)"
|
LEGEND_STORAGE: "Хранилище (PDO)"
|
||||||
|
@ -145,22 +143,6 @@ ru_RU:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Доступно для установки"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Доступно для установки"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Установленные пакеты"
|
LEGEND_INSTALLED_PACKAGES: "Установленные пакеты"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Не удается получить доступ к хранилищу пакетов в данный момент."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "О программе"
|
LEGEND_ABOUT: "О программе"
|
||||||
LABEL_TAG_HINT: "Простой, современный и быстрый веб-клиент электронной почты\n"
|
LABEL_TAG_HINT: "Простой, современный и быстрый веб-клиент электронной почты\n"
|
||||||
|
|
|
@ -4,7 +4,6 @@ sk_SK:
|
||||||
LABEL_PASSWORD: "Heslo"
|
LABEL_PASSWORD: "Heslo"
|
||||||
BUTTON_LOGIN: "Prihlásiť sa do admin panelu"
|
BUTTON_LOGIN: "Prihlásiť sa do admin panelu"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Admin Panel"
|
LABEL_ADMIN_PANEL: "Admin Panel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Všeobecné"
|
LABEL_GENERAL_NAME: "Všeobecné"
|
||||||
|
@ -117,15 +116,6 @@ sk_SK:
|
||||||
LEGEND_AVAILABLE_FOR_UPDATE: "Dostupné na aktualizáciu"
|
LEGEND_AVAILABLE_FOR_UPDATE: "Dostupné na aktualizáciu"
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné na inštaláciu"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Dostupné na inštaláciu"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Nainštalované balíčky"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "O programe"
|
LEGEND_ABOUT: "O programe"
|
||||||
LABEL_TAG_HINT: "Jednoduchý, moderný a rýchly webmail klient"
|
LABEL_TAG_HINT: "Jednoduchý, moderný a rýchly webmail klient"
|
||||||
|
|
|
@ -4,7 +4,6 @@ sl_SI:
|
||||||
LABEL_PASSWORD: "Geslo"
|
LABEL_PASSWORD: "Geslo"
|
||||||
BUTTON_LOGIN: "Prijava v administracijsko ploščo"
|
BUTTON_LOGIN: "Prijava v administracijsko ploščo"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Administracijska plošča"
|
LABEL_ADMIN_PANEL: "Administracijska plošča"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Splošno"
|
LABEL_GENERAL_NAME: "Splošno"
|
||||||
|
@ -71,7 +70,6 @@ sl_SI:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Brez"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Brez"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Enkrat"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "Enkrat"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Vedno"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Stiki"
|
LEGEND_CONTACTS: "Stiki"
|
||||||
LEGEND_STORAGE: "Shramba (PDO)"
|
LEGEND_STORAGE: "Shramba (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ sl_SI:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Na voljo za namestitev"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Na voljo za namestitev"
|
||||||
LEGEND_INSTALLED_PACKAGES: "Nameščeni paketi"
|
LEGEND_INSTALLED_PACKAGES: "Nameščeni paketi"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Trenutno ni možen dostop do repozitorija"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Več o"
|
LEGEND_ABOUT: "Več o"
|
||||||
LABEL_TAG_HINT: "Preprost, sodoben, in hiter spletni e-poštni odjemalec"
|
LABEL_TAG_HINT: "Preprost, sodoben, in hiter spletni e-poštni odjemalec"
|
||||||
|
|
|
@ -4,7 +4,6 @@ sv_SE:
|
||||||
LABEL_PASSWORD: "Lösenord"
|
LABEL_PASSWORD: "Lösenord"
|
||||||
BUTTON_LOGIN: "Logga in till admin-panelen"
|
BUTTON_LOGIN: "Logga in till admin-panelen"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "Premium"
|
|
||||||
LABEL_ADMIN_PANEL: "Adminpanel"
|
LABEL_ADMIN_PANEL: "Adminpanel"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "Allmän"
|
LABEL_GENERAL_NAME: "Allmän"
|
||||||
|
@ -71,7 +70,6 @@ sv_SE:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "Ingen"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "En gång"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "En gång"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "Alltid"
|
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:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "Kontakter"
|
LEGEND_CONTACTS: "Kontakter"
|
||||||
LEGEND_STORAGE: "Storage (PDO)"
|
LEGEND_STORAGE: "Storage (PDO)"
|
||||||
|
@ -146,22 +144,6 @@ sv_SE:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tillåt installation"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "Tillåt installation"
|
||||||
LEGEND_INSTALLED_PACKAGES: "installerade paket"
|
LEGEND_INSTALLED_PACKAGES: "installerade paket"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "Det går inte att komma åt arkivet för tillfället."
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "Om"
|
LEGEND_ABOUT: "Om"
|
||||||
LABEL_TAG_HINT: "Enkel, modern & snabb e-postklient"
|
LABEL_TAG_HINT: "Enkel, modern & snabb e-postklient"
|
||||||
|
|
|
@ -4,7 +4,6 @@ zh_CN:
|
||||||
LABEL_PASSWORD: "密码"
|
LABEL_PASSWORD: "密码"
|
||||||
BUTTON_LOGIN: "登录到控制面板"
|
BUTTON_LOGIN: "登录到控制面板"
|
||||||
TOP_PANEL:
|
TOP_PANEL:
|
||||||
LABEL_PREMIUM: "高级"
|
|
||||||
LABEL_ADMIN_PANEL: "控制面板"
|
LABEL_ADMIN_PANEL: "控制面板"
|
||||||
TABS_LABELS:
|
TABS_LABELS:
|
||||||
LABEL_GENERAL_NAME: "常规"
|
LABEL_GENERAL_NAME: "常规"
|
||||||
|
@ -71,7 +70,6 @@ zh_CN:
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_NONE: "无"
|
OPTION_WELCOME_PAGE_DISPLAY_NONE: "无"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "一次"
|
OPTION_WELCOME_PAGE_DISPLAY_ONCE: "一次"
|
||||||
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "永远"
|
OPTION_WELCOME_PAGE_DISPLAY_ALWAYS: "永远"
|
||||||
HTML_ALERT_PREMIUM: "此功能仅限于<strong><a href=\"#/licensing\">高级</a></strong> 订阅者."
|
|
||||||
TAB_CONTACTS:
|
TAB_CONTACTS:
|
||||||
LEGEND_CONTACTS: "联系人"
|
LEGEND_CONTACTS: "联系人"
|
||||||
LEGEND_STORAGE: "存储(PDO)"
|
LEGEND_STORAGE: "存储(PDO)"
|
||||||
|
@ -146,21 +144,6 @@ zh_CN:
|
||||||
LEGEND_AVAILABLE_FOR_INSTALLATION: "可用于安装"
|
LEGEND_AVAILABLE_FOR_INSTALLATION: "可用于安装"
|
||||||
LEGEND_INSTALLED_PACKAGES: "已安装的插件包"
|
LEGEND_INSTALLED_PACKAGES: "已安装的插件包"
|
||||||
ALERT_CANNOT_ACCESS_REPOSITORY: "目前无法使用仓库"
|
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:
|
TAB_ABOUT:
|
||||||
LEGEND_ABOUT: "关于"
|
LEGEND_ABOUT: "关于"
|
||||||
LABEL_TAG_HINT: "简洁,现代化&快捷的基于网络的邮件客户端"
|
LABEL_TAG_HINT: "简洁,现代化&快捷的基于网络的邮件客户端"
|
||||||
|
|
|
@ -5,11 +5,10 @@
|
||||||
<i class="icon-spinner animated" style="margin-top: 2px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
<i class="icon-spinner animated" style="margin-top: 2px" data-bind="style: {'visibility': adminManLoadingVisibility }"></i>
|
||||||
|
|
||||||
RainLoop
|
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-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>
|
</h4>
|
||||||
<div class="btn-group pull-right">
|
<div class="btn-group pull-right">
|
||||||
<a class="btn single btn-narrow" data-bind="click: logoutClick">
|
<a class="btn single btn-narrow" data-bind="click: logoutClick">
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
<div class="span4">
|
<div class="span4">
|
||||||
<div class="rl-logo"></div>
|
<div class="rl-logo"></div>
|
||||||
<div style="margin-left: 30px;">
|
<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 />
|
<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>
|
</div>
|
||||||
<div class="rl-desc" style="float: left">
|
<div class="rl-desc" style="float: left">
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
</span>
|
</span>
|
||||||
</h4>
|
</h4>
|
||||||
<h4 style="color: #aaa; font-weight: normal;" data-i18n="TAB_ABOUT/LABEL_TAG_HINT"></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()">
|
<div data-bind="visible: 'error' === statusType()">
|
||||||
<i class="icon-warning" style="color: red"></i>
|
<i class="icon-warning" style="color: red"></i>
|
||||||
|
|
||||||
|
@ -52,13 +52,13 @@
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
<span data-bind="visible: coreAccess()">
|
<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>
|
<i class="icon-download"></i>
|
||||||
|
|
||||||
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
|
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
|
||||||
</a>
|
</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>
|
<i class="icon-file-text"></i>
|
||||||
|
|
||||||
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
|
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<ul class="nav nav-tabs" data-bind="visible: !community">
|
<ul class="nav nav-tabs">
|
||||||
<li class="active">
|
<li class="active">
|
||||||
<a class="i18n" data-i18n="TAB_BRANDING/LEGEND_LOGIN"
|
<a class="i18n" data-i18n="TAB_BRANDING/LEGEND_LOGIN"
|
||||||
href="#branding-login-section-id" data-toggle="tab"></a>
|
href="#branding-login-section-id" data-toggle="tab"></a>
|
||||||
|
@ -57,12 +57,12 @@
|
||||||
href="#branding-welcome-page-section-id" data-toggle="tab"></a>
|
href="#branding-welcome-page-section-id" data-toggle="tab"></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br />
|
<br />
|
||||||
<div class="row" data-bind="visible: !community">
|
<div class="row">
|
||||||
<div class="tab-content span12">
|
<div class="tab-content span12">
|
||||||
<div class="tab-pane active" id="branding-login-section-id">
|
<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">
|
<div class="control-group">
|
||||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_LOGO"></label>
|
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_LOGIN_LOGO"></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
@ -72,8 +72,7 @@
|
||||||
value: loginLogo,
|
value: loginLogo,
|
||||||
trigger: loginLogo.trigger,
|
trigger: loginLogo.trigger,
|
||||||
placeholder: 'https://',
|
placeholder: 'https://',
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -86,8 +85,7 @@
|
||||||
params: {
|
params: {
|
||||||
value: loginDescription,
|
value: loginDescription,
|
||||||
trigger: loginDescription.trigger,
|
trigger: loginDescription.trigger,
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -101,8 +99,7 @@
|
||||||
value: loginBackground,
|
value: loginBackground,
|
||||||
trigger: loginBackground.trigger,
|
trigger: loginBackground.trigger,
|
||||||
placeholder: 'https://',
|
placeholder: 'https://',
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -116,7 +113,6 @@
|
||||||
value: loginCss,
|
value: loginCss,
|
||||||
trigger: loginCss.trigger,
|
trigger: loginCss.trigger,
|
||||||
width: 495,
|
width: 495,
|
||||||
enable: capa,
|
|
||||||
rows: 7
|
rows: 7
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
|
@ -127,7 +123,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane" id="branding-user-section-id">
|
<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">
|
<div class="control-group">
|
||||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_USER_LOGO"></label>
|
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_USER_LOGO"></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
@ -137,8 +133,7 @@
|
||||||
value: userLogo,
|
value: userLogo,
|
||||||
trigger: userLogo.trigger,
|
trigger: userLogo.trigger,
|
||||||
placeholder: 'https://',
|
placeholder: 'https://',
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -151,8 +146,7 @@
|
||||||
params: {
|
params: {
|
||||||
value: userLogoTitle,
|
value: userLogoTitle,
|
||||||
trigger: userLogoTitle.trigger,
|
trigger: userLogoTitle.trigger,
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -166,8 +160,7 @@
|
||||||
value: userLogoMessage,
|
value: userLogoMessage,
|
||||||
trigger: userLogoMessage.trigger,
|
trigger: userLogoMessage.trigger,
|
||||||
placeholder: 'https://',
|
placeholder: 'https://',
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -181,7 +174,6 @@
|
||||||
value: userCss,
|
value: userCss,
|
||||||
trigger: userCss.trigger,
|
trigger: userCss.trigger,
|
||||||
width: 495,
|
width: 495,
|
||||||
enable: capa,
|
|
||||||
rows: 7
|
rows: 7
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
|
@ -192,7 +184,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane" id="branding-welcome-page-section-id">
|
<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">
|
<div class="control-group">
|
||||||
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_WELCOME_PAGE_URL"></label>
|
<label class="control-label" data-i18n="TAB_BRANDING/LABEL_WELCOME_PAGE_URL"></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
@ -202,8 +194,7 @@
|
||||||
value: welcomePageUrl,
|
value: welcomePageUrl,
|
||||||
trigger: welcomePageUrl.trigger,
|
trigger: welcomePageUrl.trigger,
|
||||||
placeholder: 'https://',
|
placeholder: 'https://',
|
||||||
size: 5,
|
size: 5
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -219,8 +210,7 @@
|
||||||
trigger: welcomePageDisplay.trigger,
|
trigger: welcomePageDisplay.trigger,
|
||||||
optionsText: 'optText',
|
optionsText: 'optText',
|
||||||
optionsValue: 'optValue',
|
optionsValue: 'optValue',
|
||||||
size: 2,
|
size: 2
|
||||||
enable: capa
|
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -230,9 +220,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</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>
|
</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;">
|
<div class="alert alert-info span8" style="margin-top: 10px;">
|
||||||
<span data-i18n="TAB_INTEGRATIONS/TOP_ALERT"></span>
|
<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>
|
</div>
|
||||||
<div class="form-horizontal g-ui-user-select-none">
|
<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>
|
<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 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>
|
</div>
|
|
@ -40,9 +40,6 @@
|
||||||
define('APP_DUMMY', '********');
|
define('APP_DUMMY', '********');
|
||||||
define('APP_DEV_VERSION', '0.0.0');
|
define('APP_DEV_VERSION', '0.0.0');
|
||||||
define('APP_GOOGLE_ACCESS_TOKEN_PREFIX', ':GAT:');
|
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_REPOSITORY_PATH', 'http://repository.rainloop.net/v1/');
|
||||||
define('APP_REPO_CORE_FILE', 'http://repository.rainloop.net/v2/core.{{channel}}.json');
|
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 gulp = require('gulp');
|
||||||
const { config } = require('./config');
|
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 gulp = require('gulp');
|
||||||
const rimraf = require('gulp-rimraf');
|
const rimraf = require('gulp-rimraf');
|
||||||
const fs = require('node-fs');
|
const fs = require('node-fs');
|
||||||
|
@ -18,6 +18,6 @@ exports.zip = (srcDir, destDir, fileName) =>
|
||||||
.pipe(require('gulp-zip')(fileName))
|
.pipe(require('gulp-zip')(fileName))
|
||||||
.pipe(gulp.dest(destDir));
|
.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);
|
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 path = require('path');
|
||||||
const { argv } = require('yargs');
|
const { argv } = require('yargs');
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
head: {
|
head: {
|
||||||
rainloop: '/* RainLoop Webmail (c) RainLoop Team | Licensed under RainLoop Software License */',
|
mit: '/* RainLoop Webmail (c) RainLoop Team | Licensed under MIT */'
|
||||||
agpl: '/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL v3 */'
|
|
||||||
},
|
},
|
||||||
devVersion: '0.0.0',
|
devVersion: '0.0.0',
|
||||||
releasesPath: 'build/dist/releases',
|
releasesPath: 'build/dist/releases',
|
||||||
community: !argv.pro,
|
|
||||||
source: !!argv.source,
|
source: !!argv.source,
|
||||||
watch: false,
|
watch: false,
|
||||||
watchInterval: 1000,
|
watchInterval: 1000,
|
||||||
|
@ -20,7 +18,6 @@ const config = {
|
||||||
cleanPath: '',
|
cleanPath: '',
|
||||||
zipSrcPath: '',
|
zipSrcPath: '',
|
||||||
zipFile: '',
|
zipFile: '',
|
||||||
// zipFileShort: '',
|
|
||||||
|
|
||||||
paths: {}
|
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 gulp = require('gulp');
|
||||||
|
|
||||||
const concat = require('gulp-concat-util');
|
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 gulp = require('gulp');
|
||||||
|
|
||||||
const concat = require('gulp-concat-util'),
|
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 */
|
/* eslint-disable consistent-return */
|
||||||
|
|
||||||
const gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
|
@ -48,7 +48,7 @@ const owncloudSetup = (done) => {
|
||||||
.replace('<version>0.0</version>', '<version>' + versionFull + '</version>')
|
.replace('<version>0.0</version>', '<version>' + versionFull + '</version>')
|
||||||
.replace(
|
.replace(
|
||||||
'<licence></licence>',
|
'<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.destPath = config.releasesPath + '/owncloud/' + versionFull + '/';
|
||||||
config.cleanPath = dist;
|
config.cleanPath = dist;
|
||||||
config.zipSrcPath = dist;
|
config.zipSrcPath = dist;
|
||||||
config.zipFile = 'rainloop-owncloud-app-' + (config.community ? '' : 'standard-') + versionFull + '.zip';
|
config.zipFile = 'rainloop-owncloud-app-legacy-' + versionFull + '.zip';
|
||||||
// config.zipFileShort = 'rainloop' + (config.community ? '' : '-standard') + '.zip';
|
|
||||||
|
|
||||||
done();
|
done();
|
||||||
};
|
};
|
||||||
|
@ -80,10 +79,6 @@ const owncloudClean = (done) => {
|
||||||
done();
|
done();
|
||||||
};
|
};
|
||||||
|
|
||||||
// const owncloudShortname = (done) => {
|
|
||||||
// copy(config.destPath + config.zipFile, config.destPath + config.zipFileShort, done);
|
|
||||||
// };
|
|
||||||
|
|
||||||
exports.owncloud = gulp.series(
|
exports.owncloud = gulp.series(
|
||||||
owncloudCopy,
|
owncloudCopy,
|
||||||
rainloopBuild,
|
rainloopBuild,
|
||||||
|
@ -92,5 +87,4 @@ exports.owncloud = gulp.series(
|
||||||
owncloudSetup,
|
owncloudSetup,
|
||||||
owncloudZip,
|
owncloudZip,
|
||||||
owncloudClean
|
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 */
|
/* eslint-disable consistent-return */
|
||||||
const gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
const fs = require('node-fs');
|
const fs = require('node-fs');
|
||||||
|
@ -6,7 +6,7 @@ const chmod = require('gulp-chmod');
|
||||||
|
|
||||||
const pkg = require('../package.json');
|
const pkg = require('../package.json');
|
||||||
const { config } = require('./config');
|
const { config } = require('./config');
|
||||||
const { copy, zip, del } = require('./common');
|
const { zip, del } = require('./common');
|
||||||
|
|
||||||
const rainloopCopy = () => {
|
const rainloopCopy = () => {
|
||||||
const versionFull = pkg.version,
|
const versionFull = pkg.version,
|
||||||
|
@ -32,23 +32,14 @@ const rainloopSetup = (done) => {
|
||||||
fs
|
fs
|
||||||
.readFileSync('index.php', 'utf8')
|
.readFileSync('index.php', 'utf8')
|
||||||
.replace("'APP_VERSION', '0.0.0'", "'APP_VERSION', '" + versionFull + "'")
|
.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'));
|
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.destPath = config.releasesPath + '/webmail/' + versionFull + '/';
|
||||||
config.cleanPath = dist;
|
config.cleanPath = dist;
|
||||||
config.zipSrcPath = dist;
|
config.zipSrcPath = dist;
|
||||||
config.zipFile = 'rainloop-' + (config.community ? 'community-' : '') + versionFull + '.zip';
|
config.zipFile = 'rainloop-legacy-' + versionFull + '.zip';
|
||||||
// config.zipFileShort = 'rainloop-' + (config.community ? 'community-' : '') + 'latest.zip';
|
|
||||||
|
|
||||||
config.rainloopBuilded = true;
|
config.rainloopBuilded = true;
|
||||||
|
|
||||||
|
@ -71,8 +62,6 @@ const rainloopClean = (done) => {
|
||||||
done();
|
done();
|
||||||
};
|
};
|
||||||
|
|
||||||
// const rainloopShortName = (done) => copy(config.destPath + config.zipFile, config.destPath + config.zipFileShort, done);
|
|
||||||
|
|
||||||
exports.rainloopBuild = gulp.series(rainloopCopy, rainloopSetup);
|
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 gulp = require('gulp');
|
||||||
const header = require('gulp-header');
|
const header = require('gulp-header');
|
||||||
const stripbom = require('gulp-stripbom');
|
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 gulp = require('gulp');
|
||||||
|
|
||||||
const { config } = require('./config');
|
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 webpack = require('webpack');
|
||||||
const gutil = require('gulp-util');
|
const gutil = require('gulp-util');
|
||||||
|
|
||||||
|
@ -34,5 +34,5 @@ const webpackCallback = (done) => (err, stats) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.webpack = (done) => {
|
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;
|
process.noDeprecation = true;
|
||||||
module.exports = function(publicPath, pro, mode) {
|
module.exports = function(publicPath, mode) {
|
||||||
return {
|
return {
|
||||||
mode: mode || 'development',
|
mode: mode || 'development',
|
||||||
devtool: 'inline-source-map',
|
devtool: 'inline-source-map',
|
||||||
|
@ -80,7 +80,6 @@ module.exports = function(publicPath, pro, mode) {
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
'RL_COMMUNITY': !pro,
|
|
||||||
'process.env.NODE_ENV': JSON.stringify('production'),
|
'process.env.NODE_ENV': JSON.stringify('production'),
|
||||||
'process.env': {
|
'process.env': {
|
||||||
NODE_ENV: JSON.stringify('production')
|
NODE_ENV: JSON.stringify('production')
|
||||||
|
|
Loading…
Reference in a new issue