Merge remote-tracking branch 'origin/master' into feature/improve_nm_performance

This commit is contained in:
nathangray 2020-01-14 09:51:47 -07:00
commit 4183cf50d3
74 changed files with 2010 additions and 439 deletions

View File

@ -5,9 +5,8 @@
* @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package admin
* @copyright (c) 2009-16 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2009-19 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
use EGroupware\Api;
@ -166,7 +165,7 @@ class admin_accesslog
'start' => 0, // IO position in list
'order' => 'li', // IO name of the column to sort after (optional for the sortheaders)
'sort' => 'DESC', // IO direction of the sort: 'ASC' or 'DESC'
//'default_cols' => // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns
'default_cols' => '!session_action', // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns
'csv_fields' => false, // I false=disable csv export, true or unset=enable it with auto-detected fieldnames,
//or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type)
'actions' => $this->get_actions($sessions_list),

View File

@ -176,7 +176,7 @@ app.classes.admin = AppJS.extend(
jQuery(this.ajax_target.node).empty();
}
this.egw.json(
framework.activeApp.getMenuaction('ajax_exec'),
framework.activeApp.getMenuaction('ajax_exec', _url),
// It's important that the context is null, or etemplate2
// won't load the template properly
[_url], this._ajax_load_callback,null, true, this
@ -731,7 +731,7 @@ app.classes.admin = AppJS.extend(
if(this.egw.user('apps').policy)
{
dialog_options['width'] = 550;
dialog_options['height'] = 350,
dialog_options['height'] = 450,
modifications.tabs = {
add_tabs: true,
tabs: [{

View File

@ -1,9 +1,12 @@
%1 %2 rights for %3 on %4 to %5 admin es-es %1 %2 derechos para %3 en %4 a %5
%1 - %2 of %3 user accounts admin es-es %1 - %2 de %3 cuentas de usuarios
%1 - %2 of %3 user groups admin es-es %1 - %2 de %3 grupos de usuarios
%1 access to other data admin es-es acceso de %1 a otros datos
%1 accounts being activated admin es-es %1 cuentas activadas
%1 acl entries deleted. admin es-es %1 entradas de ACL borradas.
%1 acl records of not (longer) existing accounts deleted. admin es-es Se han borrado %1 registros de cuentas inexistentes.
%1 categories of not (longer) existing accounts deleted. admin es-es Se han borrado %1 categorías de cuentas que ya no existen.
%1 category '%2' %3 admin es-es %1 categoría '%2' %3
%1 category(s) %2 admin es-es %1 categorías %2
%1 category(s) %2, %3 failed because of insufficent rights !!! admin es-es %1 categorías %2, %3 fallaron por permisos insuficiente
%1 class not instanciated admin es-es La clase %1 no está instanciada
@ -19,10 +22,17 @@
%1 user %2 admin es-es %1 usuario %2
(de)activate mail accounts admin es-es (des)activar cuentas de correo
(default no, leave it off if you dont use it) admin es-es (por defecto, No, desactivar si no se usa)
(imapclass must support this feature by querying the corresponding config value and pass it as defaultquota to the imapserver) admin es-es (imapclass debe admitir esta característica al consultar el valor de configuración correspondiente y pasarlo como cuota predeterminada al imapserver)
(no subject) admin es-es (Sin asunto)
(stored password will not be shown here) admin es-es (las claves guardadas no se mostrarán aquí)
(to install new applications use<br><a href="setup/" target="setup">setup</a> [manage applications] !!!) admin es-es (Para instalar nuevas aplicaciones, utilice <br><a href="setup/" target="setup">Instalación</a> [Administrar Aplicaciones])
- type admin es-es - tipo
1 year admin es-es 1 año
2 month admin es-es 2 meses
2 weeks admin es-es 2 semanas
2-factor-authentication for interactive login admin es-es Autenticación de 2 factores para inicio de sesión interactivo
3 month admin es-es 3 meses
6 month admin es-es 6 meses
access by admin es-es Acceso por
access control admin es-es Control de acceso
access to %1 data by others admin es-es Acceso a datos %1 por otros
@ -46,6 +56,7 @@ account preferences admin es-es Preferencias de la cuenta
account saved. admin es-es Cuenta grabada.
account-id's have to be integers! admin es-es ¡Los identificadores de cuenta tienen que ser enteros!
acl added. admin es-es Se ha añadido la ACL.
acl csv export admin es-es Exportación en CSV de ACL
acl deleted. admin es-es Se ha borrado la ACL.
acl entry deleted. admin es-es Se ha borrado la entrada ACL.
acl entry not found! admin es-es ¡No se ha encontrado la entrada de la ACL!
@ -57,6 +68,8 @@ action admin es-es Acción
actions admin es-es Acciones
activate admin es-es Activar
activate wysiwyg-editor admin es-es Activar editor WYSIWYG
activated admin es-es activado
active mail accounts admin es-es Cuentas de correo activas
active templates admin es-es Plantillas activas
add a category admin es-es añadir una categoría
add a group admin es-es añadir un grupo
@ -78,6 +91,7 @@ add profile admin es-es Añadir perfil
add sub-category admin es-es Añadir subcategoría
add user admin es-es Añadir usuario
add user or group admin es-es Añadir usuario o grupo
added admin es-es añadido
admin dn admin es-es dn del administrador
admin email admin es-es Correo electrónico del administrador
admin email addresses (comma-separated) to be notified about the blocking (empty for no notify) admin es-es Direcciones de correo de Administración (separadas por comas) para notificar los bloqueos (en blanco para no notificar)
@ -88,8 +102,11 @@ admin username admin es-es usuario del administrador
administration admin es-es Administración
admins admin es-es Administradores
advanced options admin es-es opciones avanzadas
after how many unsuccessful attempts to login, an account should be blocked (default 3) ? admin es-es Después de cuántos intentos fallidos de iniciar sesión en una cuenta se debe bloquear. Predeterminado = 3
after how many unsuccessful attempts to login, an ip should be blocked (default 15) ? admin es-es ¿Después de cuántos intentos fallidos de conexión debe bloquearse una IP? (por defecto, 3)
aliases admin es-es Alias
all accounts admin es-es Todas las cuentas
all acls admin es-es Todos los ACLs
all applications admin es-es Todas las aplicaciones
all categories admin es-es Todas las categorías
all groups admin es-es Todos los grupos
@ -97,14 +114,17 @@ all records and account information will be lost! admin es-es ¡Se perderán tod
all users admin es-es Todos los usuarios
allow anonymous access to this app admin es-es Permitir acceso anónimo a esta aplicación
allow remote administration from following install id's (comma separated) admin es-es Permitir la administración remota desde los siguientes ID de instalación (separados por comas)
allow user to set 'remember me' token admin es-es Permitir al usuario configurar el token 'Recordarme'
allow users to change forwards admin es-es Permitir a los usuarios cambiar reenvíos
allow users to create identities for aliases admin es-es Permitir a los usuarios crear identidades para alias
allowed just as second factor admin es-es permitido como segundo factor
alternate email address admin es-es Dirección de correo-e alterna
and logged in admin es-es y conectado
anonymous user admin es-es Usuario anónimo
anonymous user (not shown in list sessions) admin es-es Usuario anónimo (no se muestra en la lista de sesiones)
anonymous user does not exist! admin es-es ¡El usuario anónimo no existe!
anonymous user has no run-rights for the application! admin es-es ¡El usuario anónimo NO tiene derecho de ejecución para la aplicación!
anonymous user. not shown in list sessions. admin es-es Usuario anónimo. No se muestra en la lista de sesiones.
any application admin es-es Cualquier aplicación
any group admin es-es Cualquier grupo
any user admin es-es Calquier usuario
@ -118,8 +138,10 @@ applications available on mobile devices admin es-es Aplicaciones disponibles en
applications list admin es-es Lista de aplicaciones
applications run rights updated. admin es-es Se han actualizado los derechos de ejecución.
applies the changes admin es-es aplica los cambios
apply changes admin es-es Aplicar cambios
apply the changes admin es-es Aplicar los cambios
archive: zip or tar admin es-es Archivar: zip o tar
are you sure you want to %1 mail for selected accounts? admin es-es ¿Está seguro de que desea %1 correo para las cuentas seleccionadas?
are you sure you want to delete the application %1 ? admin es-es ¿Está seguro de que quiere borrar la aplicación %1 ?
are you sure you want to delete this account ? admin es-es ¿Está seguro de que quiere borrar esta cuenta?
are you sure you want to delete this application ? admin es-es ¿Está seguro de que quiere borrar esta aplicación?
@ -137,8 +159,10 @@ attribute mail explained admin es-es Esto maneja el atributo <b><i>-mail-</i></b
attribute mailalternateaddress explained admin es-es Esto maneja el atributo <b><i>-mailAlternateAddress-</i></b> del esquema de QMAIL y puede manejarse como mapas virtuales o alias.
attribute mailforwardingaddress explained admin es-es Esto maneja el atributo <b><i>-mailForwardingAddress-</i></b> del esquema de QMAIL y no debe estar vacío si está asignado.
attributes admin es-es Atributos Atributos
authentication admin es-es Autenticación
authentication / accounts admin es-es Identificación / Cuentas
auto create account records for authenticated users admin es-es Crear cuentas automáticamente para usuarios identificados
automatically transfer entries owned by the user: admin es-es Transfiere automáticamente las entradas propiedad del usuario:
available placeholders admin es-es Marcadores disponibles
back to admin/grouplist admin es-es Volver a Administración/Lista de grupos
back to admin/userlist admin es-es Volver a Administración/Lista de usuarios
@ -149,6 +173,7 @@ bad or malformed request. server responded: %s admin es-es Petición errónea o
bad request: %s admin es-es Petición errónea: %s
bi-dir passthrough admin es-es bidireccional passthrough
bi-directional admin es-es bidireccional
blocking after wrong password admin es-es Bloqueo después de una contraseña incorrecta
bottom admin es-es parte inferior
bulk password reset admin es-es Restablecimiento de contraseña en bruto
calculate next run admin es-es Calcular la siguiente ejecución
@ -158,23 +183,30 @@ can be used by group admin es-es puede usarse por el grupo
can be used by user admin es-es puede usarse por el usuario
can change password admin es-es Puede cambiar la contraseña
can not change users into groups, same sign required! admin es-es ¡NO se pueden cambiar los usuarios en grupos, se requiere el mismo signo!
cancel changes admin es-es Cancelar cambios
cancel testjob! admin es-es Cancelar trabajo de prueba
cancel this scheduled command admin es-es Cancelar este comando programado
categories list admin es-es Lista de categorías
category %1 has been saved ! admin es-es La categoría %1 ha sido guardada
category '%1' deleted admin es-es Categoría '%1' eliminada
category deleted. admin es-es Se ha borrado la categoría
category list admin es-es Lista de categorías
category saved. admin es-es Se ha guardado la categoria
certificate admin es-es Cartificado
certificate details admin es-es Certificate details
certificate validation in days admin es-es Validación del certificado en días.
change account_id admin es-es Cambiar el campo account_id
change acl rights admin es-es cambiar permisos de ACL
change config settings admin es-es Cambiar opciones de configuración
change domain of email address and aliases admin es-es cambiar el dominio de la dirección de correo y alias
change login screen message admin es-es Cambiar mensaje de la pantalla principal
change owner admin es-es Cambiar el propietario
change owner of found files to the new user, and move the home folder to /home/new-user/old-home-username. admin es-es Los archivos en /home tendrán el propietario cambiado al nuevo usuario. La carpeta de inicio se moverá a /home/ new-user/old-home-username.
change password for %1 admin es-es cambiar la contraseña para %1
change password hash to admin es-es Cambiar el hash de la contraseña a
changed password hash for %1 to %2. admin es-es Se ha cambiado el hash de la contraseña de %1 a %2.
changelog admin es-es Registro de cambios
changelog and versions admin es-es Registro de cambios y versiones
check acl for entries of not (longer) existing accounts admin es-es Comprobar las ACL para las entradas de cuentas que no existen
check categories for not (longer) existing accounts admin es-es Comprobar las categorías para las cuentas que ya no existen
check ip address of all sessions admin es-es Comprobar la IP de todas las sesiones
@ -183,15 +215,21 @@ children admin es-es Hijos
clear cache and register hooks admin es-es Limpiar la caché y registrar los hooks
click to select a color admin es-es Pulse para seleccionar un color
color admin es-es Color
comma-separated ip addresses white-listed from above blocking (:optional number of attempts) admin es-es Direcciones IP separadas por comas en la lista blanca del bloqueo anterior (:número opcional de intentos)
command scheduled to run at %1 admin es-es El comando se ha planificado para ejecutarse a %1
command was run %1 on %2 admin es-es El comando ejecutado %1 en %2
commercial: all sorts of companies admin es-es Comercial: todo tipo de empresas
config password or md5 hash from the header.inc.php admin es-es Configurar contraseña o hash md5 de header.inc.php
configuration admin es-es Configuración
configuration saved. admin es-es Configuración guardada.
connection dropped by imap server. admin es-es El servidor IMAP ha interrumpido la conexión
connection is not secure! everyone can read eg. your credentials. admin es-es ¡La conexión NO es segura! e.g. Todos pueden leer sus credenciales
continue admin es-es Continuar
cookie domain (default empty means use full domain name, for sitemgr eg. ".domain.com" allows to use the same cookie for egw.domain.com and www.domain.com) admin es-es Dominio de la cookie (vacío significa usar el nombre del dominio completo, para el Administrador de sitios web, p. ej. "dominio.com" permite usar la misma cookie para egw.dominio.com y www.dominio.com)
cookie path (allows multiple egw sessions with different directories, has problemes with sitemgr!) admin es-es Ruta de la cookie (permite múltiples sesiones de egw con distintos directorios, pero ¡tiene problemas con el Administrador de sitios web!)
could not append message: admin es-es No se pudo agregar el mensaje:
could not complete request. reason given: %s admin es-es No se pudo completar la solicitud. Motivo: %s
could not extract private key from given p12 file. either the p12 file is broken or password is wrong! admin es-es No se pudo extraer la clave privada del archivo p12 dado. ¡O el archivo p12 está roto o la contraseña es incorrecta!
could not open secure connection to the imap server. %s : %s. admin es-es No se pudo abrir una conexión segura con el servidor IMAP. %s: %s.
could not remote execute the command admin es-es No se pudo ejecutar el comando remoto
country admin es-es País
@ -206,9 +244,19 @@ creates / updates user accounts from csv file admin es-es Crea o actualiza las c
creates / updates user groups from csv file admin es-es Crea o actualiza los grupos de usuarios desde un archivo CSV
creates a new field admin es-es crea un campo nuevo
crontab only (recomended) admin es-es Sólo mediante crontab (recomendado)
current certificate admin es-es Current certificate
current hash admin es-es Hash actual
currently: admin es-es Actualmente:
custom 1 admin es-es Custom 1
custom 2 admin es-es Custom 2
custom 3 admin es-es Custom 3
custom fields admin es-es Campos personalizados
custom translation admin es-es Traducción personalizada
customfield '%1' added admin es-es Se agregó el campo personalizado '%1'
customfield '%1' deleted admin es-es Se suprimió el campo personalizado '%1'
customfield '%1' modified admin es-es Se modificó el campo personalizado '%1'
customfield deleted admin es-es Campo personalizado suprimido
customfield saved. admin es-es Campo personalizado grabado
cyrus imap server admin es-es Servidor IMAP Cyrus
cyrus imap server administration admin es-es Administración del servidor IMAP Cyrus
data admin es-es Datos
@ -217,15 +265,20 @@ day admin es-es Día
day of week<br>(0-6, 0=sun) admin es-es Día de la semana<br>(0-6, 0=Dom)
db backup and restore admin es-es Copia de seguridad y restauración de la base de datos
deactivate admin es-es Desactivar
deactivated admin es-es desactivado
debug admin es-es Depurar
default admin es-es predeterminada
default file system space per user admin es-es Espacio predetermiado en el sistema de archivos por usuario
default file system space per user/group ? admin es-es Espacio predetermiado en el sistema de archivos por usuario/grupo
default of currently admin es-es incumplimiento de actualmente
deinstall crontab admin es-es Desinstalar crontab
delete account admin es-es Suprimir cuenta
delete account %1 admin es-es Suprimir cuenta %1
delete account %s admin es-es Suprimir la cuenta %s
delete all records admin es-es Suprimir todos los registros
delete application admin es-es Suprimir aplicación
delete category admin es-es Suprimir categoría
delete certificate admin es-es Suprimir certificado
delete group admin es-es Suprimir grupo
delete identity admin es-es Suprimir identidad
delete including sub-entries admin es-es Suprimir incluyendo sub-entradas
@ -264,15 +317,21 @@ deny all users access to preferences ? admin es-es ¿Denegar a todos los usuario
description can not exceed 255 characters in length ! admin es-es ¡La descripción no puede exceder de 255 caracteres de longitud!
destination account #%1 does exist and is not renamed itself! can not merge accounts, it will violate unique contains. delete with transfer of data instead. admin es-es ¡La cuenta de destino nº %1 no existe y NO se renombra a sí misma! No se pueden mezclar cuentas, ya que violaría los contenidos únicos. Borre con transferencia de datos en lugar de esto.
determines the order the fields are displayed admin es-es determina el orden en que se muestran los campos
direct login without password or second factor admin es-es inicio de sesión directo sin contraseña o segundo factor
disable admin es-es Deshabilitar
disable "auto completion" of the login form admin es-es Deshabilitar completado automático en el formulario de inicio de sesión
disable all admin es-es Deshabilitar todo
disable minifying of javascript and css files admin es-es Deshabilitar la reducción de archivos javascript y CSS
disable pgp encryption (mailvelope) admin es-es Deshabilitar el cifrado PGP (Mailvelope)
disable wysiwyg-editor admin es-es Deshabilitar editor WYSIWYG
disabled (not recomended) admin es-es Deshabilitado (no se recomienda)
disabled, do not show on login page admin es-es deshabilitado, no se muestra en la página de inicio de sesión
display admin es-es Mostrar
displayed length of input field (set rows=1 to limit length) admin es-es longitud visualizada del campo de entrada (establecer filas=1 para limitar la longitud)
displaying html messages is disabled admin es-es Mostrar los mensajes en HTML está desactivado
displaying plain messages is disabled admin es-es mostrar mensajes simples está deshabilitado
do not delete the category and return back to the list admin es-es NO borrar la categoría y regresar a la lista
do not generate email addresses admin es-es No generar direcciones de correo-e
do not offer introduction video admin es-es No ofrecer video introductorio
do not validate certificate admin es-es No validar el certificado
do you also want to delete all global subcategories ? admin es-es ¿Desea eliminar también todas las subcategorías globales?
@ -284,6 +343,8 @@ document root (default) admin es-es Raíz de los documentos (Document root) (pre
domainname admin es-es Nombre del dominio
down admin es-es Abajo
download csv admin es-es Descargar CSV
each value is a line like id[=label], or use @path to read options from a file in egroupware directory admin es-es cada valor es una línea como id=[javascript], o use @path para leer las opciones de un archivo en el directorio EGroupware
each value is a line like label=[javascript] admin es-es cada valor es una línea como label=[javascript]
edit account admin es-es Editar cuenta
edit application admin es-es Editar aplicación
edit email settings admin es-es Editar configuración de correo-e
@ -298,6 +359,7 @@ edit this group admin es-es Editar este grupo
edit this user admin es-es Editar este usuario
edit user admin es-es Editar usuario
edit user account admin es-es Editar cuenta de usuario
edited admin es-es editado
educational: universities, schools, ... admin es-es Educación: Universiddes, Colegios, ...
egroupware directory admin es-es Directorio de EGroupware
egroupware tutorial admin es-es Tutorial de EGroupware
@ -323,6 +385,7 @@ encrypted connection admin es-es Conexión cifrada
encryption admin es-es Cifrado
encryption settings admin es-es Configuración del cifrado
enter a description for the category admin es-es introduzca una descripción para esta categoría
enter a passphrase if you would like to protect your private key by password. admin es-es Ingrese una frase de contraseña si desea proteger su clave privada con contraseña.
enter some random text for app_session <br>encryption (requires mcrypt) admin es-es Introduzca un texto aleatorio para el cifrado <br> de la sesión (requiere mcrypt)
enter the background color for the login page admin es-es Introduzca el color de fondo para la página de inicio de sesión
enter the background color for the site title admin es-es Introduzca el color de fondo para el título del sitio
@ -346,6 +409,8 @@ enter your http proxy server admin es-es Introduzca su servidor proxy HTTP
enter your http proxy server port admin es-es Introduzca el puerto de su servidor proxy HTTP
enter your smtp server hostname or ip address admin es-es Introduzca su servidor SMTP (nombre o IP)
enter your smtp server port admin es-es Introduzca el puerto del servidor SMTP
entries admin es-es Entries
entries owned by the user: admin es-es Entradas propiedad del usuario:
entry saved admin es-es La entrada ha sido guardada
error canceling timer, maybe there's none set !!! admin es-es Error al cancelar el temporizador ¡Puede que no haya ninguno!
error changing the password for %1 !!! admin es-es ¡Error al cambiar la contraseña para %1!
@ -360,41 +425,57 @@ error saving the entry!!! admin es-es Error guardando el elemento!!!
error saving to db: admin es-es Error al guardar a la base de datos:
error setting timer, wrong syntax or maybe there's one already running !!! admin es-es Error al configurar el temporizador. La sintaxis es incorrecta o puede que haya uno que ya se esté ejecutándo.
error! no appname found admin es-es ¡Error! No se encontró el nombre de la aplicación
error, no username! admin es-es Error, ¡no hay nombre de usuario!
error: %1 not found or other error !!! admin es-es Error: no se encontró %1 u otro error
event details follow admin es-es A continuación, los detalles del evento
exists admin es-es Existe
expired admin es-es Expirado
expires admin es-es Expira
explanation of ldapman admin es-es Este módulo ha sido probado en POSTFIX, LDAP, Courier-IMAP y necesita los esquemas CORE y QMAIL (OID7914). Más detalles sobre el uso y configuración de este sistema puede encontrarse en el fichero README.ldapman en el directorio doc de ADMIN.
exports groups into a csv file. admin es-es Exportar los grupos en un fichero CSV.
export certificate as p12 admin es-es exportar certificado como p12
exports groups into a csv file. admin es-es Exporta los grupos a un archivo CSV.
exports permission settings into a csv file. admin es-es Exporta la configuración de permisos a un archivo CSV.
exports users into a csv file. admin es-es Exporta los usuarios en un fichero CSV.
failed to change password for account "%1"! admin es-es ¡Fallo al cambiar la contraseña para la cuenta "%1"!
failed to change password. admin es-es Falló al cambiar la contraseña.
failed to delete account! admin es-es ¡Falló al eliminar la cuenta!
failed to mount backup directory! admin es-es Fallo el montar el directorio de backup
failed to save user! admin es-es Fallo al guardar el usuario
failed to upload %1 admin es-es Falló al cargar %1
fallback (after each pageview) admin es-es retardo (después de ver cada página)
false admin es-es falso
field '%1' already exists !!! admin es-es ¡El campo '%1' ya existe!
file rejected, no %2. is:%1 admin es-es Archivo rechazado, no %2. Es: %1
file space admin es-es Espacio del fichero
file space must be an integer admin es-es El espacio del fichero debe ser un entero
filtered by account admin es-es filtrado por cuenta
filtered by group admin es-es filtrado por grupo
folder acl admin es-es Carpeta ACL
for the times above admin es-es durante las horas indicadas arriba
for the times below (empty values count as '*', all empty = every minute) admin es-es para las horas indicadas debajo (los valores vacíos cuentan como '*', todos vacío = cada minuto)
forbid users to create identities admin es-es Prohibir a los usuarios crear identidades
force selectbox admin es-es Forzar cuadro de selección
force users to change their password regularily?(empty for no,number for after that number of days admin es-es ¿Forzar a que los usuarios cambien su contraseña regularmente (en blanco es no, o un número para ese número de días)?
forward also to admin es-es reenviar también a
forward email's to admin es-es reenviar correos a
forward emails to admin es-es reenviar correos a
forward only admin es-es sólo reenviar
forward also to admin es-es Reenviar también a
forward email's to admin es-es Reenviar correos-e a
forward emails to admin es-es Reenviar correos-e a
forward only admin es-es Solo reenviar
forward only disables imap mailbox / storing of mails and just forwards them to given address. admin es-es Reenviar solo deshabilita el buzón IMAP / almacenamiento de correos y solo los reenvía a la dirección dada.
full name admin es-es Nombre completo
general admin es-es General
generate certificate admin es-es Generar certificado
git clone admin es-es Clon de git
global categories common es-es Categorías globales
global options admin es-es opciones globales
go directly to admin menu, returning here the next time you click on administration. admin es-es Ir directamente al menú de administración, volviendo aquí la próxima vez que pulse en administración.
google recaptcha admin es-es Google recaptcha
google recaptcha secret key admin es-es Clave secreta de Google recaptcha
google recaptcha site key admin es-es Clave del sitio de Google recaptcha
governmental: incl. state or municipal authorities or services admin es-es Gubernamental: incluye estado o autoridades municipales o servicios
grant admin es-es Conceder acceso
group #%1 must have negative sign! admin es-es El grupo nº %1 debe tener un signo negativo
group %1 %2 admin es-es Groupo %1 %2
group '%1' deleted. admin es-es Groupo '%1' suprimido.
group ? admin es-es ¿Grupo?
group csv export admin es-es Exportar grupo a CSV
group csv import admin es-es Importar grupo CSV
@ -407,6 +488,7 @@ group manager admin es-es Administrador de grupos
group name admin es-es Nombre del grupo
hash admin es-es Hash
hide php information admin es-es Ocultar información de PHP
hide sidebox video tutorials admin es-es Ocultar los tutoriales en video de la caja lateral
home directory admin es-es Directorio personal
home screen message admin es-es Mensaje de la pantalla principal
host information admin es-es Información del servidor
@ -416,13 +498,22 @@ how many days should entries stay in the access log, before they get deleted (de
how many entries should non-admins be able to export (empty = no limit, no = no export) admin es-es ¿Cuántas entradas deben poder exportar los usuarios que no son administradores (vacío=sin límite, no=no exportan)?
how many minutes should an account or ip be blocked (default 1) ? admin es-es ¿Cuántos minutos debe permanecer bloqueada una cuenta o una IP? (por defecto, 30)
how should email addresses for new users be constructed? admin es-es ¿Cómo deben construirse las direcciones para los usuarios nuevos?
how username get constructed admin es-es Cómo se construye el nombre de usuario
html/plaintext admin es-es html/plaintext
icon admin es-es Icono
identity admin es-es Identidad
identity deleted admin es-es Identidad suprimida
identity saved. admin es-es Identidad grabada.
idle admin es-es inactivo
if different from email address admin es-es si es diferente de la dirección de correo-e
if disabled existing tokens immediatly stop working. admin es-es Si se deshabilita, los tokens existentes dejan de funcionar inmediatamente
if no acl records for user or any group the user is a member of admin es-es Si no se encuentran registros ACL del usuario y grupo, entonces el usuario es miembro de
if using ldap, do you want to manage homedirectory and loginshell attributes? admin es-es Si se usa LDAP, ¿desea manejar los atributos del directorio de inicio y la cuenta?
if using ssl or tls, you must have the php openssl extension loaded. admin es-es Si usa SSL o TLS, debe tener cargada la extensión openssl de PHP.
if you delete the user without selecting an account to move the data to, all entries get deleted! admin es-es Si elimina al usuario sin seleccionar una cuenta para mover los datos, ¡todas las entradas se eliminarán!
if you ignore that error as admin, you should check "%1"! admin es-es Si ignora ese error como administrador, ¡debería marcar "%1"!
if you specify port 5190 as sieve server port, you enforce ssl for sieve (server must support that) admin es-es si especifica el puerto 5190 como puerto del servidor de sieve, aplicará SSL para el sieve (el servidor debe admitirlo)
if you wish to have randomly selected images you may upload multiple images. admin es-es Si desea tener imágenes seleccionadas al azar, puede cargar varias imágenes.
imap admin password admin es-es contraseña del administrador IMAP
imap admin user admin es-es usuario administrador IMAP
imap c-client version < 2001 admin es-es Versión C-Cliente IMAP < 2001
@ -449,9 +540,12 @@ instance admin es-es Instancia
interface admin es-es Interfaz
international use admin es-es Uso internacional
invalid argument '%1' !!! admin es-es ¡El argumento '%1' no es válido!
invalid email admin es-es Correo-e no es válido
invalid formated date "%1"! admin es-es ¡La fecha %1 no tiene un formato válido!
invalid remote id or name "%1"! admin es-es ¡El nombre o id remoto %1 no es válido!
invalid type "%1"! admin es-es ¡Tipo no válido "%1"!
invalid value "%1" use yes or no! admin es-es El valor "%1" no es válido. Use "sí" o "no"
invalid value "%1", use only: admin es-es Valor no válido "%1", use solo:
ip admin es-es IP
jobs admin es-es Trabajos
kill admin es-es Matar
@ -462,8 +556,9 @@ languages admin es-es Idiomas
last %1 logins admin es-es Ultimos %1 inicios de sesión
last %1 logins for %2 admin es-es Ultimos %1 inicios de sesión de %2
last action admin es-es Última acción
last login admin es-es Ultimo inicio de sesión
last login from admin es-es Ultimo inicio de sesión desde
last ip admin es-es Último IP
last login admin es-es Último inicio de sesión
last login from admin es-es Último inicio de sesión desde
last password change admin es-es Último cambio de contraseña
last submission: admin es-es Último envío:
last time read admin es-es Ultima lectura
@ -490,18 +585,21 @@ leave without saveing the entry admin es-es salir sin guardar la entrada
leaves without saveing admin es-es sale sin guardar
length admin es-es Longitud
length<br>rows admin es-es Longitud<br>Filas
lifetime of 'remember me' token admin es-es Vida útil del token 'Recuérdame'
limit global category to members of a certain group admin es-es Limitar la categoría global a los miembros de cierto grupo
limit to members of admin es-es Limitar a los miembros de
list config settings admin es-es Lista de las opciones de configuración
list current sessions admin es-es Lista de las sesiones actuales
list of current users admin es-es Lista de usuarios actuales
log user-agent and action of changes in history-log of entries admin es-es Registrar el agente de usuario y acción de los cambios en el registro histórico de entradas
logged out admin es-es sesión finalizada
logged out admin es-es Sesión finalizada
login history admin es-es Historial de accesos
login id admin es-es Identificación de ingreso
login message admin es-es Mensaje de inicio de sesión
login screen admin es-es Pantalla de inicio de sesión
login shell admin es-es Shell de inicio de sesión
login time admin es-es Hora de inicio de sesión
login-id admin es-es Identificación de ingreso
login-status admin es-es Estado de la sesión
loginid admin es-es LoginID
logintime admin es-es Hora de inicio de sesión
@ -510,6 +608,7 @@ lowercase email addresses admin es-es Direcciones de correo-e en minúsculas
mail account admin es-es Cuenta de correo
mail settings admin es-es Configuración del correo.
main email-address admin es-es Dirección de correo principal
main screen message admin es-es Mensaje de la pantalla principal
manage mapping admin es-es Gestión de mapeos
manage stationery templates admin es-es Gestionar plantillas preimpresas
manager admin es-es Administrador
@ -529,14 +628,15 @@ more secure admin es-es más seguro
mount backup directory to %1 admin es-es Montar el directorio de la copia de seguridad en %1
must change password upon next login admin es-es Debe cambiar la contraseña la próxima vez que inicie la sesión
name must not be empty !!! admin es-es El nombre no debe estar vacío
name of account admin es-es Nombre de la cuenta
name of organisation admin es-es Nombre de la organización
name of the egroupware instance, eg. default admin es-es Nombre de la instancia de EGroupware, p. ej., default
new group name admin es-es Nuevo nombre de grupo
new name admin es-es nuevo nombre
new name admin es-es Nuevo nombre
new password admin es-es Contraseña nueva
new password [ leave blank for no change ] admin es-es Nueva contraseña [ Dejar en blanco para no cambiar ]
next run admin es-es Siguiente ejecución
no algorithms available admin es-es no hay algoritmos disponibles
no algorithms available admin es-es No hay algoritmos disponibles
no alternate email address admin es-es Sin dirección de correo alternativa
no default account found! admin es-es ¡No se encontró ninguna cuenta predeterminada!
no encryption admin es-es Sin cifrar
@ -545,12 +645,13 @@ no jobs in the database !!! admin es-es ¡No hay trabajos en la base de datos!
no login history exists for this user admin es-es No existen registros de acceso para este usuario
no matches found admin es-es No se encontraron resultados
no message returned. admin es-es No se devolvió ningún mensaje.
no modes available admin es-es no hay modos disponibles
no permission to add groups admin es-es no tiene permiso para añadir grupos
no permission to add users admin es-es no tiene permiso para añadir usuarios
no permission to create groups admin es-es no tiene permiso para crear grupos
no modes available admin es-es No hay modos disponibles
no permission to add groups admin es-es No tiene permiso para añadir grupos
no permission to add users admin es-es No tiene permiso para añadir usuarios
no permission to create groups admin es-es No tiene permiso para crear grupos
no plain text part found admin es-es No se encontró ninguna parte con texto sencillo
no profile defined for user %1 admin es-es No se ha definido un perfil para el usuario %1
no sieve support detected, either fix configuration manually or leave it switched off. admin es-es No se detectó soporte de sieve, arregle la configuración manualmente o déjelo apagado.
no supported imap authentication method could be found. admin es-es No se pudo encontrar ningún método soportado de identificación IMAP.
non profit: clubs, associations, ... admin es-es Sin ánimo de lucro: clubs, asociaciones...
note: ssl available only if php is compiled with curl support admin es-es Nota: SSL está disponible sólo si PHP está compilado con soporte curl
@ -573,14 +674,18 @@ only below displayed information is directly submitted to %s. admin es-es Sólo
operating system admin es-es Sistema operativo
order admin es-es orden
organisation admin es-es organización
other security configuration admin es-es Otra configuración de seguridad
outbound admin es-es De salida
own categories admin es-es Categorías propias
own install id admin es-es ID de instalación propio
own install id: admin es-es ID de instalación propio:
owner "%1" removed, please select group-owner admin es-es Se ha eliminado el propietario "%1", por favor, seleccione el propietario del grupo
passphrase admin es-es frase de contraseña
passthrough admin es-es pasage
password for smtp-authentication admin es-es Contraseña para identificación SMTP
password to unlock encrypted p12 admin es-es Contraseña para desbloquear p12 encriptado
password updated admin es-es Se ha actualizado la contraseña
passwords admin es-es Contraseñas
passwords and/or attributes of %1 accounts changed admin es-es Las contraseñas y atributos de %1 cuentas se han cambiado
passwords require a minimum number of characters admin es-es Las contraseñas requieren un número mínimo de caracteres
passwords requires this number of different character classes admin es-es Las contraseñas requieren este número de clases distintas de caracteres
@ -589,6 +694,7 @@ peer server list admin es-es Lista de servidores 'peer'
peer servers admin es-es Servidores 'peer'
percent of users that logged out admin es-es Porcentaje de usuarios que cerraron la sesión
percent this user has logged out admin es-es Porcentaje que este usuario ha cerrado la sesión
periodic admin es-es Periódico
permission denied admin es-es Permiso denegado
permission denied !!! admin es-es ¡Permiso denegado!
permission denied!!! admin es-es ¡Permiso denegado!
@ -599,10 +705,13 @@ php version admin es-es Versión de PHP
phpinfo admin es-es Información de PHP
phrase admin es-es Frase
phrase deleted admin es-es Se ha borrado la frase
please check email. it gets automatically deleted if email integration is used. admin es-es Por favor revise su correo-e. Se elimina automáticamente si se utiliza la integración de correo-e.
please enter a name admin es-es Por favor introduzca un nombre
please enter a name for that server ! admin es-es Por favor, introduzca un nombre para ese sevidor
please manually deal with entries owned by the user: admin es-es Maneje manualmente las entradas propiedad del usuario:
please run setup to become current admin es-es Por favor ejecute setup para estar al día
please select admin es-es Por favor, seleccione
please submit (or postpone) statistic first admin es-es Por favor envíe (o posponga) primero la estadística
plesk can't rename users --> request ignored admin es-es Plesk no puede renombrar usuarios --> Se ignora la solicitud
plesk imap server (courier) admin es-es Servidor IMAP Plesk (Courier)
plesk mail script '%1' not found !!! admin es-es ¡No se encontró el script de correo de Plesk '%1'!
@ -615,6 +724,7 @@ postfix with ldap admin es-es Postfix con LDAP
postpone for admin es-es Posponer durante
preferences admin es-es Preferencias
primary group admin es-es Grupo principal
processing of file %1 failed. failed to meet basic restrictions. admin es-es El procesamiento del archivo %1 falló. No se pudieron cumplir las restricciones básicas.
profile access rights admin es-es Derechos de acceso del perfil
profile is active admin es-es el perfil está activo
profile list admin es-es Lista de perfiles
@ -627,12 +737,14 @@ read this list of methods. admin es-es Leer esta lista de métodos
register application hooks admin es-es Registrar "hooks" de la aplicación
reject passwords containing part of username or full name (3 or more characters long) admin es-es Rechazar las contraseñas que contengan parte del nombre o el nombre completo (con 3 o más caracteres de longitud)
remote administration instances admin es-es Instancias de administración remota
remote administration need to be enabled in the remote instance under admin &gt; site configuration! admin es-es ¡La administración remota debe habilitarse en la instancia remota en Admin> Configuración del sitio!
remote administration need to be enabled in the remote instance under admin > site configuration! admin es-es ¡La administración remota necesita estar activada en la instancia remota en Administración > Configuración del sitio!
remote instance saved admin es-es Se ha guardado la instancia remota
remove admin es-es borrar
remove all users from this group admin es-es Borrar todos los usuarios de este grupo
remove all users from this group ? admin es-es ¿Borrar todos los usuarios de este grupo?
removing access for groups may cause problems for data in this category. are you sure? users in these groups may no longer have access: admin es-es Eliminar el acceso a grupos puede causar problemas para los datos en esta categoría. ¿Está seguro? Los usuarios de estos grupos puede que ya no tengan acceso:
renaming user 'anonymous' will break file sharing and collabora online office! admin es-es ¡Cambiar el nombre del usuario 'anónimo' interrumpirá el intercambio de archivos y la oficina en línea de Collabora!
requested admin es-es Requerido
reset filter admin es-es restablecer filtro
rights admin es-es Derechos
@ -641,10 +753,14 @@ rows admin es-es Filas
rpm or debian package admin es-es Paquete RPM o Debian
run admin es-es ejecutar
run asynchronous services admin es-es Ejecutar servicios asíncronos
save as default admin es-es guardar por defecto
save changes admin es-es Grabar cambios
save of message %1 failed. could not save message to folder %2 due to: %3 admin es-es Error al guardar el mensaje %1. No se pudo guardar el mensaje en la carpeta 2 debido a: %3
save the category admin es-es guardar la categoría
save the category and return back to the list admin es-es guardar la categoría y volver a la lista
saves the changes made and leaves admin es-es guarda los cambios y sale
saves this entry admin es-es Guarda esta entrada
saving of message %1 failed. destination folder %2 does not exist. admin es-es Error al guardar el mensaje %1. La carpeta de destino %2 no existe.
scheduled admin es-es Programada
search accounts admin es-es Buscar cuentas
search categories admin es-es Buscar categorías
@ -654,6 +770,9 @@ secure connection admin es-es Conexión segura
security admin es-es Seguridad
select accounts for which the custom field should be visible admin es-es Seleccionar las cuentas para las que el campo personalizado debe estar visible
select group managers admin es-es Seleccionar administradores de grupo
select language to define language based message. language 'english' is default page for all languages therefore for setting a general message across all languages you only need to set the 'english' page. admin es-es Seleccione el idioma para definir el mensaje basado en el idioma. El idioma 'inglés' es la página predeterminada para todos los idiomas, por lo tanto, para configurar un mensaje general en todos los idiomas solo necesita configurar la página 'inglés'.
select multiple admin es-es Seleccionar múltiples
select owner admin es-es Seleccionar propietario
select permissions this group will have admin es-es Seleccione los permisos que tendrá este grupo
select the parent category. if this is a main category select no category admin es-es Seleccione la categoría superior. Si ésta es una categoría principal seleccione SIN CATEGORIA
select type of imap server admin es-es Seleccione el tipo de servidor IMAP
@ -673,13 +792,17 @@ server settings admin es-es configuración del servidor
server type(mode) admin es-es Tipo (modo) del servidor
server url admin es-es URL del servidor
server username admin es-es Usuario del servidor
sessions admin es-es Sesiones
sessions last 30 days admin es-es Sesiones en los últimos 30 días
set a random password admin es-es Establecer una contraseña aleatoria.
set preference values. admin es-es Establecer valores para las preferencias
settings admin es-es Configuraciones
should exceptions contain a trace (including function arguments) admin es-es Las excepciones deben contener una traza (incluyendo argumentos de funciones)
should the login page include a language selectbox (useful for demo-sites) ? admin es-es ¿Debe incluir la página de inicio de sesión un cuadro de selección de idioma (útil para sitios de demostración)?
show 'powered by' logo on admin es-es Mostrar logo de 'Diseñado con' en
show access log admin es-es Mostrar registro de acceso
show as optional, but required once user has it setup admin es-es se muestra como opcional, pero se requiere una vez que el usuario lo tiene configurado
show as required, but only once user has it setup admin es-es mostrar según sea necesario, pero solo una vez que el usuario lo tiene configurado
show current action admin es-es Mostrar acción actual
show error log admin es-es Mostrar registro de errores
show members admin es-es Mostrar miembros
@ -689,6 +812,8 @@ sieve server hostname or ip address admin es-es Nombre del servidor Sieve o dire
sieve server port admin es-es Puerto del servidor Sieve
sieve settings admin es-es Configuración de Sieve
site admin es-es Sitio
skip imap admin es-es Omitir IMAP
skipping imap configuration! admin es-es ¡Omitiendo la configuración de IMAP!
smtp authentication admin es-es identificación SMTP
smtp options admin es-es opciones SMTP
smtp server admin es-es servidor SMTP
@ -709,7 +834,9 @@ standard pop3 server admin es-es Servidor POP3 estándar
standard smtp-server admin es-es Servidor SMTP estándar
start admin es-es Inicio
start testjob! admin es-es Iniciar el trabajo de prueba
starts with admin es-es Comienza con
stationery admin es-es material preimpreso
strictly required, user can not login without admin es-es estrictamente requerido, el usuario no puede iniciar sesión sin esto
submit changes admin es-es Enviar cambios
submit displayed information? admin es-es ¿Enviar la información mostrada?
submit statistic information admin es-es Enviar información estadística
@ -717,7 +844,10 @@ submit the search string admin es-es Enviar la cadena de búsqueda
submit to egroupware.org admin es-es Enviar a egroupware.org
subtype admin es-es Subtipo
subversion checkout admin es-es Checkout de subversion
success admin es-es correcto
success admin es-es Correcto
successful connected to %1 server%2. admin es-es Conectado correctamente al %1 servidor %2.
switch back to standard identity to save account. admin es-es Vuelva a la identidad estándar para guardar la cuenta.
switch back to standard identity to save other account data. admin es-es Vuelva a la identidad estándar para guardar otros datos de la cuenta.
switch it off, if users are randomly thrown out admin es-es Desactivarlo si a los usuarios se les cierra la sesión aleatoriamente
template selection admin es-es Selección de plantilla
templates admin es-es Plantillas
@ -754,6 +884,7 @@ times admin es-es Horas
to allow us to track the growth of your individual installation use this submit id, otherwise delete it: admin es-es Para permitirnos seguir el crecimiento de su instalación individual use este ID de envío. Si no, bórrelo:
to use a tls connection, you must be running a version of php 5.1.0 or higher. admin es-es Para usar una conexión TLS, debe ejecutar una versión de PHP 5.1.0 o superior.
top admin es-es Superior
total of %1 accounts deleted. admin es-es Total de %1 cuentas suprimidas.
total of %1 id's changed. admin es-es Se han cambiado en total %1 ids
total records admin es-es Total de registros
translation admin es-es Traducción
@ -766,6 +897,7 @@ two months admin es-es dos meses
two weeks admin es-es dos semanas
type '%1' already exists !!! admin es-es ¡El tipo '%1' ya existe!
type of customfield admin es-es Tipo de campo personalizado
type of field admin es-es Tipo de campo
under windows you need to install the asyncservice %1manually%2 or use the fallback mode. fallback means the jobs get only checked after each page-view !!! admin es-es En windows, se necesita instalar asyncservice %1manualmente%2 o usar el modo de fallos. El modo de fallos sólo comprueba los trabajos después de ver cada página. ¡Cuidado!
unexpected response from server to authenticate command. admin es-es Respuesta inesperada del servidor al comando AUTHENTICATE.
unexpected response from server to digest-md5 response. admin es-es Respuesta inesperada del servidor a la respuesta Digest-MD5.
@ -779,6 +911,10 @@ unwilling to save category with current settings. check for inconsistency: admin
up admin es-es Arriba
update current email address: admin es-es Actualizar la dirección de correo actual:
updated admin es-es actualizado
upload your background image or enter the url admin es-es Subir la imagen de fondo o ingresar el URL
upload your favicon or enter the url admin es-es Subir el favicon o ingresar la URL
upload your header logo or enter the url (leave it empty if it is the same as login logo) admin es-es Cargue el logotipo de su encabezado o ingrese el URL (déjelo en blanco si es el mismo que el logotipo de inicio de sesión)
upload your logo or enter the url admin es-es Subir el logo o ingresar el URL
uppercase, lowercase, number, special char admin es-es Mayúsculas, minúsculas, números, caracteres especiales
url of the egroupware installation, eg. http://domain.com/egroupware admin es-es La URL de la instalación de EGroupware, p. ej. http://dominio.com/egroupware
usage admin es-es Uso
@ -792,8 +928,10 @@ use smtp auth admin es-es Usar identificación SMTP
use theme admin es-es Usar tema
use tls authentication admin es-es Usar identificación TLS
use tls encryption admin es-es Usar cifrado TLS
use users email-address (as seen in useraccount) admin es-es Use la dirección de correo-e de los usuarios, como se establece en la cuenta de usuario
user accounts admin es-es Cuentas de usuario
user can edit forwarding address admin es-es El usuario puede editar la dirección de reenvío
user choice admin es-es Elección del usuario
user csv export admin es-es Exportación CSV de usuarios
user csv import admin es-es Importación CSV de usuarios
user data common es-es Datos del usuario

View File

@ -14,6 +14,7 @@
<column disabled="@no_total" width="80"/>
<column width="80"/>
<column width="40%"/>
<column width="30%"/>
</columns>
<rows>
<row class="th">
@ -26,6 +27,7 @@
<nextmatch-header label="Total" id="total"/>
<nextmatch-sortheader label="Idle" id="session_dla"/>
<nextmatch-sortheader label="User-Agent" id="user_agent"/>
<nextmatch-header label="Action" id="session_action"/>
</row>
<row class="row $row_cont[class]">
<hbox>
@ -42,6 +44,7 @@
<date-duration id="${row}[total]" readonly="true" options=",hm,24"/>
<date-since id="${row}[session_dla]" readonly="true"/>
<description statustext="$row_cont[user_agent]" id="${row}[os_browser]" class="admin_userAgent"/>
<description id="${row}[session_action]"/>
</row>
</rows>
</grid>

View File

@ -3,7 +3,7 @@
<!-- $Id$ -->
<overlay>
<template id="admin.acl.edit.acl" template="" lang="" group="0" version="1.9.001">
<grid>
<grid width="100%" resize_ratio="0">
<columns>
<column/>
<column/>
@ -54,7 +54,7 @@
<tabs>
<tab id="acl" label="Access" statustext="Access"/>
</tabs>
<tabpanels>
<tabpanels>
<template id="admin.acl.edit.acl"/>
</tabpanels>
</tabbox>

View File

@ -493,13 +493,10 @@ var et2_dataview = (function(){ "use strict"; return Class.extend({
*/
_buildGrid: function() {
// Create the collection of column ids
var colIds = new Array();
var colIds = new Array(this.columns.length);
for (var i = 0; i < this.columns.length; i++)
{
if(this.columns[i].visible)
{
colIds[i] = this.columns[i].id;
}
colIds[i] = this.columns[i].id;
}
// Create the row provider

View File

@ -100,14 +100,13 @@ var et2_dataview_rowProvider = (function(){ "use strict"; return Class.extend(
var tr = jQuery(document.createElement("tr"));
// Append a td for each column
for (var column of this._columnIds)
for (var i = 0; i < this._columnIds.length; i++)
{
if(!column) continue;
var td = jQuery(document.createElement("td"))
.addClass(this._outerId + "_td_" + column)
.addClass(this._outerId + "_td_" + this._columnIds[i])
.appendTo(tr);
var div = jQuery(document.createElement("div"))
.addClass(this._outerId + "_div_" + column)
.addClass(this._outerId + "_div_" + this._columnIds[i])
.addClass("innerContainer")
.appendTo(td);
}

View File

@ -806,7 +806,7 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
negated = this.options.settings.default_cols[0] == "!";
columnPreference = negated ? this.options.settings.default_cols.substring(1) : this.options.settings.default_cols;
}
if(this.options.settings.selectcols)
if(this.options.settings.selectcols && this.options.settings.selectcols.length)
{
columnPreference = this.options.settings.selectcols;
negated = false;
@ -953,7 +953,10 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
_colData[i].width = parseInt(size[colName])+'px';
}
}
_colData[i].order = typeof order[colName] === 'undefined' ? i : order[colName];
if(!negated)
{
_colData[i].order = typeof order[colName] === 'undefined' ? i : order[colName];
}
for(var j = 0; j < columnDisplay.length; j++)
{
if(columnDisplay[j] == colName)
@ -971,7 +974,14 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
return a.order - b.order;
});
_row.sort(function(a,b) {
return a.colData.order - b.colData.order;
if(typeof a.colData !== 'undefined' && typeof b.colData !== 'undefined')
{
return a.colData.order - b.colData.order;
}
else if (typeof a.order !== 'undefined' && typeof b.order !== 'undefined')
{
return a.order - b.order;
}
});
},
@ -1203,18 +1213,14 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
},
_parseDataRow: function(_row, _rowData, _colData) {
var columnWidgets = new Array();
var columnWidgets = new Array(this.columns.length);
_row.sort(function(a,b) {
return a.colData.order - b.colData.order;
});
for (var x = 0; x < this.columns.length; x++)
for (var x = 0; x < columnWidgets.length; x++)
{
if (!this.columns[x].visible)
{
continue;
}
if (typeof _row[x] != "undefined" && _row[x].widget)
{
columnWidgets[x] = _row[x].widget;
@ -1448,7 +1454,7 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
});
defaultCheck.set_value(this.options.settings.columns_forced ? 'force': '');
var okButton = et2_createWidget("buttononly", {}, this);
var okButton = et2_createWidget("buttononly", {"background_image":true, image:"check"}, this);
okButton.set_label(this.egw().lang("ok"));
okButton.onclick = function() {
// Update visibility
@ -1557,7 +1563,7 @@ var et2_nextmatch = (function(){ "use strict"; return et2_DOMWidget.extend([et2_
self.selectPopup = null;
};
var cancelButton = et2_createWidget("buttononly", {}, this);
var cancelButton = et2_createWidget("buttononly", {"background_image":true, image:"cancel"}, this);
cancelButton.set_label(this.egw().lang("cancel"));
cancelButton.onclick = function() {
self.selectPopup.toggle();

View File

@ -236,7 +236,7 @@ var et2_nextmatch_rowProvider = (function(){ "use strict"; return ClassWithAttri
_getVariableAttributeSet: function(_widget) {
var variableAttributes = [];
var process = function(_widget) {
_widget.iterateOver(function(_widget) {
// Create the attribtues
var hasAttr = false;
var widgetData = {
@ -578,8 +578,7 @@ var et2_nextmatch_rowWidget = (function(){ "use strict"; return et2_widget.exten
*/
createWidgets: function(_widgets) {
// Clone the given the widgets with this element as parent
this._widgets = new Array();
var row_id = 0;
this._widgets = new Array(_widgets.length);
for (var i = 0; i < _widgets.length; i++)
{
// Disabled columns might be missing widget - skip it
@ -590,9 +589,8 @@ var et2_nextmatch_rowWidget = (function(){ "use strict"; return et2_widget.exten
// Set column alignment from widget
if(this._widgets[i].align)
{
this._row.childNodes[row_id].align = this._widgets[i].align;
this._row.childNodes[i].align = this._widgets[i].align;
}
row_id++;
}
},
@ -603,16 +601,12 @@ var et2_nextmatch_rowWidget = (function(){ "use strict"; return et2_widget.exten
* @return {DOMElement}
*/
getDOMNode: function(_sender) {
var row_id = 0;
for (var i = 0; i < this._widgets.length; i++)
{
// Disabled columns might be missing widget - skip it
if(!this._widgets[i]) continue;
if (this._widgets[i] == _sender)
{
return this._row.childNodes[row_id].childNodes[0]; // Return the i-th td tag
return this._row.childNodes[i].childNodes[0]; // Return the i-th td tag
}
row_id++;
}
return null;

View File

@ -144,6 +144,9 @@ var et2_htmlarea = (function(){ "use strict"; return et2_editableWidget.extend([
mobile: {
theme: 'silver'
},
formats: {
customparagraph: { block: 'p', styles: {"margin-block-start": "0px", "margin-block-end": "0px"}}
},
min_height: 100,
convert_urls: false,
language: et2_htmlarea.LANGUAGE_CODE[egw.preference('lang', 'common')],
@ -167,7 +170,7 @@ var et2_htmlarea = (function(){ "use strict"; return et2_editableWidget.extend([
],
toolbar: et2_htmlarea.TOOLBAR_SIMPLE,
block_formats: "Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;"+
"Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre",
"Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre;Custom Paragraph=customparagraph",
font_formats: "Andale Mono=andale mono,times;Arial=arial,helvetica,"+
"sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book "+
"antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;"+
@ -334,6 +337,11 @@ var et2_htmlarea = (function(){ "use strict"; return et2_editableWidget.extend([
var rte_menubar = egw.preference('rte_menubar', 'common');
var rte_toolbar = egw.preference('rte_toolbar', 'common');
// we need to have rte_toolbar values as an array
if (rte_toolbar && typeof rte_toolbar == "object")
{
rte_toolbar = Object.values(rte_toolbar);
}
var settings = {
fontsize_formats: et2_htmlarea.FONT_SIZE_FORMATS[egw.preference('rte_font_unit', 'common')],
menubar: parseInt(rte_menubar) && this.menubar ? true : typeof rte_menubar != 'undefined' ? false : this.menubar

View File

@ -1236,55 +1236,85 @@ var et2_vfsSelect = (function(){ "use strict"; return et2_inputWidget.extend(
// define a mini app object for vfs select UI
app.vfsSelectUI = new app.classes.vfsSelectUI;
this.dialog = et2_createWidget("dialog",
// callback for dialog
this.submit_callback = function(submit_button_id, submit_value, savemode)
{
callback: function(_button_id, _value)
if ((submit_button_id == 'submit' || (extra_buttons_action && extra_buttons_action[submit_button_id])) && submit_value)
{
if ((_button_id == 'submit' || (extra_buttons_action && extra_buttons_action[_button_id])) && _value)
var files = [];
switch(_data.content.mode)
{
var files = [];
switch(_data.content.mode)
{
case 'open-multiple':
if (_value.dir && _value.dir.selected)
case 'open-multiple':
if (submit_value.dir && submit_value.dir.selected)
{
for(var key in Object.keys(submit_value.dir.selected))
{
for(var key in Object.keys(_value.dir.selected))
if (submit_value.dir.selected[key] != "")
{
if (_value.dir.selected[key] != "")
{
files.push(_value.path+'/'+_value.dir.selected[key]);
}
files.push(submit_value.path+'/'+submit_value.dir.selected[key]);
}
}
break;
case 'select-dir':
files = _value.path;
break;
default:
if (self.options.method === 'download') _value.path = _data.content.download_baseUrl;
files = _value.path+'/'+_value.name;
break;
}
self._setRecentPaths(_value.path);
self.value = files;
if (self.options.method && self.options.method !== 'download')
{
egw(window).json(
self.options.method,
[self.options.method_id, files, _button_id],
function(){
jQuery(self.node).change();
}
break;
case 'select-dir':
files = submit_value.path;
break;
default:
if (self.options.method === 'download') submit_value.path = _data.content.download_baseUrl;
files = submit_value.path+'/'+submit_value.name;
if (self.options.method !== 'download' && !savemode)
{
for(var p in _data.content.dir)
{
if (_data.content.dir[p]['name'] == submit_value.name)
{
var saveModeDialogButtons = [
{text: self.egw().lang("Yes"), id: "overwrite", class: "ui-priority-primary", "default": true, image: 'check'},
{text: self.egw().lang("Rename"), id:"rename", image: 'edit'},
{text: self.egw().lang("Cancel"), id:"cancel"}
];
return et2_dialog.show_prompt(function(_button_id, _value) {
switch (_button_id)
{
case "overwrite":
return self.submit_callback(submit_button_id, submit_value, 'overwrite');
case "rename":
submit_value.name = _value;
return self.submit_callback(submit_button_id, submit_value, 'rename');
}
},
self.egw().lang('Do you want to overwrite existing file %1 in directory %2?', submit_value.name, submit_value.path),
self.egw().lang('File %1 already exists', submit_value.name),
submit_value.name, saveModeDialogButtons);
}
}
).sendRequest(true);
}
else
{
jQuery(self.node).change();
}
delete app.vfsSelectUI;
return true;
}
break;
}
},
self._setRecentPaths(submit_value.path);
self.value = files;
if (self.options.method && self.options.method !== 'download')
{
egw(window).json(
self.options.method,
[self.options.method_id, files, submit_button_id, savemode],
function(){
jQuery(self.node).change();
}
).sendRequest(true);
}
else
{
jQuery(self.node).change();
}
delete app.vfsSelectUI;
return true;
}
};
this.dialog = et2_createWidget("dialog",
{
callback: this.submit_callback,
title: this.options.dialog_title,
buttons: buttons,
minWidth: 500,

View File

@ -1164,5 +1164,39 @@ var fw_base = (function(){ "use strict"; return Class.extend(
}
}
}
},
/**
* Set a notification message for topmenu info item
*
* @param {string} _id id of topmenu info item with its prefix
* @param {string} _message message that should be displayed
* @param {string} _tooltip hint text as tooltip
*/
topmenu_info_notify: function(_id, _switch, _message, _tooltip) {
var $items = jQuery('#egw_fw_topmenu_info_items').children();
var prefix = "topmenu_info_";
$items.each(function(i,item){
if (item.id == prefix+_id || item.id == _id)
{
var $notify = jQuery(item).find('.egw_fw_topmenu_info_notify');
if (_switch)
{
if ($notify.length == 0)
{
$notify = jQuery(document.createElement('div'))
.addClass('egw_fw_topmenu_info_notify')
.prop('title', _tooltip)
.appendTo(item);
}
$notify.prop('title', _tooltip).text(_message);
}
else
{
$notify.remove();
}
}
});
}
});}).call(this);

View File

@ -286,7 +286,7 @@ var fw_browser = (function(){ "use strict"; return Class.extend(
jQuery(this.contentDiv).empty();
var self_egw = egw(this.app.appName);
var req = self_egw.json(
this.app.getMenuaction('ajax_exec'),
this.app.getMenuaction('ajax_exec', targetUrl),
[targetUrl], this.browse_callback,this, true, this
);
req.sendRequest();

View File

@ -12,7 +12,7 @@
----------------------------*/
/**
* application class constructor
*
*
* @param {type} _parentFw
* @param {type} _appName
* @param {type} _displayName
@ -59,8 +59,9 @@ function egw_fw_class_application(_parentFw, _appName, _displayName, _icon,
* lie inside the default egw instance.
*
* @param {string} _fun is the function which shall be called on the server.
* @param {string} _ajax_exec_url contains menuaction for _fun === 'ajax_exec'
*/
egw_fw_class_application.prototype.getMenuaction = function(_fun)
egw_fw_class_application.prototype.getMenuaction = function(_fun, _ajax_exec_url)
{
var baseUrl = '';
var appName = 'home';
@ -79,8 +80,11 @@ egw_fw_class_application.prototype.getMenuaction = function(_fun)
baseUrl = baseUrl + 'json.php?menuaction=';
}
var menuaction = _ajax_exec_url ? _ajax_exec_url.match(/menuaction=([^&]+)/) : null;
// use template handler to call current framework, eg. pixelegg
return baseUrl + appName + '.jdots_framework.' + _fun + '.template';
return baseUrl + appName + '.jdots_framework.' + _fun + '.template'+
(menuaction ? '.'+menuaction[1] : '');
};
/**

View File

@ -59,3 +59,14 @@ egw_LAB.wait(function()
]);
});
});
// register service worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./service-worker.js', {scope:"/egroupware/"})
.then(function(registration) {
console.log('Registration successful, scope is:', registration.scope);
})
.catch(function(error) {
console.log('Service worker registration failed, error:', error);
});
}

View File

@ -3,6 +3,7 @@
%1 copied - the copy can now be edited common es-es %1 copiado - la copia ya puede ser editada
%1 directories %2 found! admin es-es ¡%1 directorios %2 encontrados!
%1 email addresses inserted common es-es Se han insertado %1 direcciones de correo
%1 email(s) added into %2 common es-es Se añadieron %1 correos-e a %2
%1 entries found, select one ... common es-es Se han encontrado %1 entradas. Seleccione una...
%1 etemplates deleted common es-es %1 plantillas borradas
%1 etemplates for application '%2' dumped to '%3' common es-es %1 plantillas para la aplicación '%2' volcadas a '%3'
@ -10,6 +11,7 @@
%1 file common es-es archivo %1
%1 is not executable by the webserver !!! common es-es %1 no tiene permiso de ejecución para el servidor web
%1 matches on search criteria common es-es %1 coincidencias para la búsqueda solicitada
%1 more %2 selected ... common es-es %1 más %2 seleccionados...
%1 more... common es-es %1 más...
%1 new etemplates imported for application '%2' common es-es %1 nuevas plantillas importadas para la aplicación '%2'
%1 not implemented for %2! common es-es %1 no está implementado para %2!
@ -42,9 +44,11 @@
1 week common es-es 1 semana
13 (ntp) admin es-es 13 (ntp)
15 minutes common es-es 15 minutos
2-factor-authentication common es-es Autenticación de 2 factores
30 minutes common es-es 30 minutos
30 seconds common es-es 30 segundos
5 minutes common es-es 5 minutos
5 seconds common es-es 5 segundos
80 (http) admin es-es 80 (http)
a pattern to be searched for common es-es un patrón de búsqueda
a request to the egroupware server returned with an error common es-es Una solicitud al servidor de EGroupware devolvió un error
@ -99,8 +103,12 @@ afghanistan common es-es AFGHANISTAN
albania common es-es ALBANIA
algeria common es-es ARGELIA
align common es-es Alinear
aligncenter common es-es Centrar
alignjustify common es-es Justificar
alignleft common es-es Alinear a la izquierda
alignment of label and input-field in table-cell common es-es posición de la etiqueta y campo de entrada en la celda de la tabla
alignment of the v/hbox containing table-cell common es-es Posición del recuadro horizontal o vertical que contiene la celda de la tabla
alignright common es-es Alinear a la derecha
all common es-es Todos
all addressbooks groupdav es-es Todas las libretas de direcciones
all categories common es-es Todas las categorías
@ -137,6 +145,7 @@ applies the changes made common es-es aplica los cambios realizados
applies the changes to the given version of the template common es-es aplica los cambios a la versión dada de la plantilla
apply common es-es Aplicar
apply the action on the whole query, not only the shown entries common es-es Aplicar la acción a toda la consulta, NO solo a las entradas mostradas
apps &amp; license common es-es Aplicaciones y licencia
april common es-es Abril
are you sure you want to delete these entries ? common es-es ¿Seguro que desea borrar estas entradas?
are you sure you want to delete this entry ? common es-es ¿Está seguro de querer borrar esta entrada?
@ -149,6 +158,7 @@ as default common es-es como predeterminado
attach common es-es Adjuntar
attach file common es-es Adjuntar archivo
attachment common es-es Adjunto
attention: action will be applied to all rows, not only visible ones! api es-es Atención: la acción se aplicará a todas las filas, ¡no solo a las visibles!
august common es-es Agosto
australia common es-es AUSTRALIA
austria common es-es AUSTRIA
@ -163,6 +173,7 @@ autosave default category common es-es Guardar auotmáticamente la categoria pre
azerbaijan common es-es AZERBAIJAN
back common es-es Atrás
back to user login common es-es Volver al inicio de sesión del usuario
backcolor common es-es Color de fondo
background color: common es-es Color de fondo:
backup key common es-es Clave de respaldo
backup/restore common es-es Respaldar/Restaurar
@ -275,6 +286,7 @@ click here to upload the file common es-es Subir el archivo
click or mouse over to show menus common es-es Mostrar los menús al pulsar sobre ellos o al mover el ratón por encima
click or mouse over to show menus? common es-es ¿Mostrar los menús al pulsar sobre ellos o al mover el ratón por encima?
click this image on the navbar: %1 common es-es Pulse esta imagen en la barra de navegación: %1
click to open colorpicker common es-es Haga clic para abrir el selector de color
click to order after that criteria common es-es pulse para ordenar después de ese criterio
clickable path common es-es ruta pulsable
clients not explicitly stating a limit get limited to these many days. a too high limit may cause problems with some clients. groupdav es-es Los clientes que no indiquen explícitamente un quedan limitados a esta cantidad de días. Un límite demasiado alto puede causar problemas con algunos clientes.
@ -282,6 +294,7 @@ close common es-es Cerrar
close sidebox common es-es Cerrar caja lateral
closes the window without saving the changes common es-es cierra la ventana sin guardar los cambios
cocos (keeling) islands common es-es COCOS (KEELING) ISLANDS
code common es-es Código
collection empty. common es-es La colección está vacía
collection listing common es-es Listado de colecciones
colombia common es-es COLOMBIA
@ -406,6 +419,7 @@ distribution lists as groups groupdav es-es Listas de distribución como grupos
djibouti common es-es DJIBOUTI
do not notify common es-es No notificar
do not notify of these changes common es-es No notificar estos cambios
do not use on public computers! common es-es ¡NO lo use en computadoras públicas!
do you also want to delete all subcategories ? common es-es ¿Desea eliminar también todas las subcategorías?
do you want to save the changes you made in table %s? common es-es ¿Desea guardar los cambios que ha realizado en la tabla %s?
do you want to send the message to all selected entries, without further editing? common es-es ¿Desea enviar el mensaje a todas las entradas seleccionadas, SIN seguir editando?
@ -425,6 +439,7 @@ done common es-es Hecho
dos international common es-es DOS internacional
download common es-es Descargar
download link common es-es Enlace de descarga
drag markers to pick a color common es-es Arrastra los marcadores para elegir un color
drop a table - this can not be undone common es-es Borrar una tabla - NO se puede deshacer
drop table common es-es Borrar tabla
dump4setup common es-es Volcar para instalación
@ -474,6 +489,7 @@ enter filename to upload and attach, use [browse...] to search for it common es-
enter the location of egroupware's url.<br>example: http://www.domain.com/egroupware &nbsp; or &nbsp; /egroupware<br><b>no trailing slash</b> admin es-es Introduzca la URL de EGroupware. <br>Ejemplo: http://www.dominio.com/egroupware o /egroupware<br><b>Sin barra al final</b>
enter the new version number here (> old_version), empty for no update-file common es-es Ingrese el número de versión nuevo, > old_version, vacío para ningún archivo de actualización
enter the new version number here (has to be > old_version) common es-es Introduzca el nuevo número de versión aquí (tiene que ser mayor que la versión anterior)
enter your file name common es-es Ingrese su nombre de archivo
entry has been deleted sucessfully common es-es La entrada ha sido eliminada correctamente
entry not found! common es-es ¡No se encontró la entrada!
entry saved common es-es La entrada ha sido guardada
@ -554,11 +570,15 @@ firstname common es-es Nombre de pila
fixme! common es-es ¡Corríjame!
floating point common es-es Coma flotante
folder already exists. common es-es La carpeta ya existe
fontselect common es-es Seleccionar tipografía
fontsizeselect common es-es Seleccionar tamaño de letra
for more than one contact in a document use the tag pagerepeat! preferences es-es ¡Use la etiqueta repetición de página para más de un contacto en un documento!
force common es-es forzar
force selectbox common es-es Forzar cuadro de selección
forecolor common es-es Color frontal
foreign key common es-es Clave ajena
forever common es-es Para siempre
formatselect common es-es Seleccionar formato
formatted text (html) common es-es Texto con formato (HTML)
found unconnected %1 %2! admin es-es ¡Se encontró desconexión %1 %2!
fr common es-es Fr
@ -569,6 +589,7 @@ french southern territories common es-es FRENCH SOUTHERN TERRITORIES
friday common es-es Viernes
ftp common es-es FTP
fullname common es-es Nombre completo
fullscreen common es-es Pantalla completa
fullscreen mode common es-es Modo de pantalla completa
gabon common es-es GABON
gambia common es-es GAMBIA
@ -623,12 +644,14 @@ height, disabled common es-es Altura, desactivada
help common es-es Ayuda
high common es-es Alta
highest common es-es La más alta
history common es-es Historia
history log common es-es Registro histórico
hold [%1] and [%2] key to drag %3 to your desktop common es-es Mantenga presionadas las teclas [%1] y [%2] para arrastrar %3 a su escritorio
hold [%1] key to select text eg. to copy it common es-es Mantenga presionada la tecla [%1] para seleccionar texto, e.g. para copiarlo
holy see (vatican city state) common es-es SANTA SEDE (ESTADO DE LA CIUDAD DEL VATICANO)
home common es-es Inicio
home email common es-es correo electrónico particular
home screen common es-es Pantalla principal
honduras common es-es HONDURAS
hong kong common es-es HONG KONG
horizontal rule common es-es Línea horizontal
@ -652,6 +675,7 @@ if the error persists, contact your administrator for help and ask to check the
if there are some images in the background folder you can choose the one you would like to see. common es-es Si hay algunas imágenes en la carpeta de fondo, puede elegir la que desea ver.
if you specify a directory (full vfs path) here, %1 displays an action for each document. that action allows to download the specified document with the data inserted. preferences es-es Si especifica un directorio, ruta completa vfs, %1 muestra una acción para cada documento. Esa acción permite descargar el documento especificado con los datos insertados.
if you specify a document (full vfs path) here, %1 displays an extra document icon for each entry. that icon allows to download the specified document with the data inserted. preferences es-es Si especifica un directorio aquí (la ruta vgs completa), %1 muestra un icono extra de documento para cada entrada. Ese icono permite descargar el documento especificado con los datos insertados.
if you use "2-factor-authentication", please enter the code here. common es-es Si usa "Autenticación de 2 factores", ingrese el código aquí.
image common es-es Imagen
image directory relative to document root (use / !), example: common es-es Directorio de imágenes relativo a la raíz de los documentos (use / !). Ejemplo:
image url common es-es URL de la imagen
@ -661,6 +685,7 @@ import table-definitions from existing db-table common es-es Importar definicion
import xml common es-es Importar XML
in order to copy to clipboard, you need to allow flash player by clicking on gray box.\nyou can permanently allow flash player for egroupware in your browser settings. common es-es Para copiar al portapapeles, debe permitir Flash Player haciendo clic en el cuadro gris.\nPuede permitir permanentemente Flash Player para EGroupware en la configuración de su navegador.
increment version to not overwrite the existing template common es-es Incrementar la versión para no sobreescribir la plantilla existente
indent common es-es Sangrar
index/name of returned content (name of the template, link / method for image) common es-es Nombre o índice del nombre del contenido devuelto (nombre de la plantilla, enlace o método para una imagen)
indexed common es-es Indexado
indexoptions common es-es Opciones de indexar
@ -686,9 +711,12 @@ insert new row after this one common es-es Insertar una nueva fila después de
insert new row in front of first line common es-es Insertar una nueva fila delante de la primera línea
insert row after common es-es Insertar una fila despues
insert row before common es-es Insertar una fila antes
insert timestamp into description field common es-es Insertar marca de tiempo en el campo de descripción
install common es-es Instalar
integer common es-es Entero
international common es-es Internacional
introduction common es-es Introducción
invalid email common es-es Correo-e no válido
invalid filename common es-es Nombre de archivo inválido.
invalid ip address common es-es Dirección IP inválida.
invalid password common es-es La contraseña inválida.
@ -726,6 +754,7 @@ kuwait common es-es KUWAIT
kyrgyzstan common es-es KYRGYZSTAN
label common es-es Etiqueta
label:[bold][italic] text:[len][,max] numbers:[min][,[max][,len]] t.area:[rows][,cols] radiob.:value h.rule:[width] templ.:[indexincontent] select:[multiselect] date:[values: eg. 'y-m-d'] common es-es Etiqueta:[bold][italic] Texto:[len][,max] Números:[min][,[max][,len]] Área de texto:[rows][,cols] BotónRadio:valor Línea hor.:[width] Plantilla:[IndexInContent] Selec.:[multiselect] Fecha:[valores: ej. 'A-m-d']
landscape common es-es Paisaje
lang common es-es Idioma
language common es-es Idioma
language-short (eg. 'en' for english) for language-dependent template ('' reads your pref. languages or the default, us 'default' to read the default template '') common es-es Abreviatura del idioma (ej. 'en' para inglés) para plantillas que dependen del idioma ('' lee las preferencias del idioma o el predeterminado. Use 'default' para la plantilla predeterminada.
@ -789,7 +818,6 @@ mail domain, eg. "%1" common es-es dominio de correo, p.ej. "%1"
mailvelope addon installation failed! please try again. common es-es Falló la instalación del complemento Mailvelope! Inténtalo de nuevo.
mailvelope addon installation succeded. now you may configure the options. common es-es La instalación del complemento Mailvelope se realizó correctamente. Ahora puedes configurar las opciones.
main category common es-es Categoria principal
home screen common es-es Pantalla principal
maintainer common es-es Mantenido por
malawi common es-es MALAWI
malaysia common es-es MALASIA
@ -924,6 +952,7 @@ now common es-es Ahora
number of colums the field/cell should span or 'all' for the remaining columns, css-class name (for the td tag) common es-es número de columnas por las que el campo o celda debe distribuirse, o 'todas' para el resto de columnas, nombre de la clase CSS (para la etiqueta TD)
number of rows/cols in a v/hbox, cellpadding, cellspacing common es-es número de filas o columnas en un recuadro vertical u horizontal, distancia del texto a la celda y espaciado entre celdas
numbers common es-es números
numlist common es-es Lista de números
october common es-es Octubre
of common es-es de
off common es-es apagado
@ -987,15 +1016,19 @@ permissions to the files/users directory common es-es permisos a los directorios
permisson denied! common es-es Permiso denegado
personal common es-es Personal
peru common es-es PERU
pg down common es-es Av Pág
pg up common es-es Re Pág
pgp encryption common es-es Cifrado PGP
pgp encryption installation common es-es instalación del cifrado PGP
philippines common es-es FILIPINAS
phone number common es-es Número de teléfono
pitcairn common es-es PITCAIRN
placeholders common es-es Marcador
play/pause common es-es Reproducir/Pausar
please %1 by hand common es-es Por favor %1 manualmente
please enter a name common es-es Por favor, introduzca un nombre
please enter table-name first !!! common es-es Por favor, introduzca el nombre de la tabla primero
please reload the egroupware desktop (f5 / cmd+r). common es-es Vuelva a cargar el escritorio EGroupware (F5 / Cmd+r).
please run setup to become current common es-es Por favor ejecute la instalación para actualizar
please select common es-es Por favor, seleccione
please set your global preferences common es-es Por favor, ponga sus preferencias globales
@ -1008,6 +1041,7 @@ pm common es-es pm
poland common es-es POLONIA
popup common es-es Ventama emergente
popup with search common es-es Ventana emergente con búsqueda
portrait common es-es Retrato
portugal common es-es PORTUGAL
postal common es-es Postal
powered by common es-es Proporcionado por
@ -1028,9 +1062,11 @@ private common es-es Privado
programs common es-es Programas
project common es-es Proyecto
properties common es-es Propiedades
protocol is required common es-es Se requiere protocolo
public common es-es público
puerto rico common es-es PUERTO RICO
qatar common es-es QATAR
quick add common es-es Añadir rápido
radiobutton common es-es Botón tipo radio
read common es-es Leer
read a list of entries. common es-es Leer una lista de entradas
@ -1039,23 +1075,42 @@ read etemplate from database (for the keys above) common es-es leer plantilla de
read this list of methods. common es-es Leer esta lista de métodos
reading common es-es leyendo
readonly common es-es sólo lectura
readonly filemanager directory common es-es Directorio del administrador de archivos de solo lectura
readonly share common es-es Compartir solo lectura
redo common es-es Rehacer
refresh common es-es Refrescar
register common es-es Registrar
regular common es-es Regular
reject common es-es Rechazar
remember me common es-es Recordarme
remember me for %1 common es-es Recuérdame para %1
remove api es-es Quitar
remove row (can not be undone!!!) common es-es Eliminar fila (¡NO se puede deshacer!)
remove selected accounts common es-es borrar las cuentas seleccionadas
remove shortcut common es-es Eliminar acceso directo
remove this link (not the entry itself) common es-es Borrar este enlace (no la entrada en sí)
removed (now) empty directory fs_id=%1 admin es-es Se eliminó (ahora) el directorio vacío fs_id = %1
removeformat common es-es Eliminar formato
rename common es-es Renombrar
replace common es-es Sustituir
replace with common es-es Sustituir por
requests and full responses to files directory common es-es Solicitudes y respuestas completas al directorio de archivos
required common es-es Requerido
required directory "%1" created. admin es-es Directorio requerido "%1" creado.
required directory "%1" has wrong mode %2 instead of %3! admin es-es ¡El directorio requerido "%1" tiene un modo incorrecto %2 en lugar de %3!
required directory "%1" not found! admin es-es ¡No se encontró el directorio requerido "%1"!
reset common es-es Restablecer
reset all to default common es-es Restablecer todo a predeterminado
reset all user's column preferences common es-es Restablecer todas las preferencias de columna del usuario
resource calendars groupdav es-es Calendarios de recursos
resource type common es-es Tipo de recurso
resources common es-es Recursos
restore all common es-es Restaura todo
restore all application templates, overwriting existing ones with identical version number common es-es Restaure todas las plantillas de aplicaciones, sobrescribiendo las existentes con un número de versión idéntico
restore failed common es-es Fallo al restaurar
restore key common es-es Restaurar clave
restore password common es-es Restaurar contraseña
retry common es-es Reintentar
returns a full list of accounts on the system. warning: this is return can be quite large common es-es Devuelve una lista completa de las cuentas del sistema. Aviso: puede ser bastante largo
returns an array of todo items common es-es Devuelve un array de elementos pendientes
returns savely, without deleting common es-es Vuelve de forma segura, SIN borrar
@ -1063,6 +1118,8 @@ returns struct of users application access common es-es Devuelve la estructura d
reunion common es-es REUNION
right common es-es Derecha
romania common es-es RUMANIA
rotate left common es-es Girar a la izquierda
rotate right common es-es Girar a la derecha
row... common es-es Fila...
russian common es-es Ruso
russian federation common es-es FEDERACION RUSA
@ -1081,6 +1138,7 @@ savant2 version differs from savant2 wrapper. <br/>this version: %1 <br/>savants
save common es-es Grabar
save all common es-es Guardar todo
save as common es-es Guardar como
save as zip common es-es Guardar como Zip
save selected columns as default preference for all users. common es-es Guardar las columnas seleccionadas como preferencia predeterminada para todos los usuarios.
save the changes made and close the window common es-es Guardar los cambios realizados y cerrar la ventana
save the etemplate under the above keys (name, ...), change them for a saveas common es-es Guardar la plantilla bajo las claves de arriba (nombre, etc). Cámbielas para Guardar como.
@ -1088,80 +1146,101 @@ saves changes to tables_current.inc.php common es-es Guarda los cambios en table
saves the template with given version number and closes the window common es-es Guarda la plantilla con el número de versión indicado y cierra la ventana
scale common es-es Escala
scale for float common es-es escala para flotante
scheduling inbox common es-es Bandeja de entrada de programación
scheduling outbox common es-es Bandeja de salida de programación
search common es-es Buscar
search %1 '%2' common es-es Buscar %1 '%2'
search accounts common es-es Buscar cuentas
search for '%1' common es-es Buscar '%1'
search letter common es-es Buscar carta
search or select accounts common es-es buscar o seleccionar cuentas
search... common es-es Buscar...
searchreplace common es-es Buscar y reemplazar
second common es-es segundo
section common es-es Sección
select common es-es Seleccionar
select "%1", if your client does not support multiple addressbooks. groupdav es-es Seleccione "%1", si su cliente no admite múltiples libretas de direcciones.
select "%1", if your client support groups, eg. os x or ios addressbook. groupdav es-es Seleccione "%1", si su cliente soporta grupos, e.g. Libreta de direcciones OS X o iOS.
select a category common es-es seleccionar una categoría
select a primary contact, to show in the list common es-es Seleccionar un contacto primario, para mostrar en la lista
select access common es-es Seleccionar acceso
select account common es-es Seleccionar cuenta
select action common es-es Seleccionar acción
select all common es-es Seleccionar todo
select all %1 %2 for %3 common es-es Seleccionar todos los %1 %2 para %3
select all entries common es-es Seleccionar todas las entradas
select access common es-es Seleccione acceso
select account common es-es Seleccione cuenta
select action common es-es Seleccione acción
select all common es-es Seleccione todo
select all %1 %2 for %3 common es-es Seleccione todos los %1 %2 para %3
select all entries common es-es Seleccione todas las entradas
select an app first !!! common es-es Seleccione una aplicación primero
select an app to search in common es-es Seleccionar una aplicación en la que buscar
select an application common es-es Seleccionar una aplicación
select an application, (*) = uninstalled common es-es Seleccionar una aplicación. (*) = sin instalar
select an entry to link with common es-es Seleccionar una entrada para enlazar
select an app to search in common es-es Seleccione una aplicación en la que buscar
select an application common es-es Seleccione una aplicación
select an application, (*) = uninstalled common es-es Seleccione una aplicación. (*) = sin instalar
select an entry to link with common es-es Seleccione una entrada para enlazar
select an opened dialog common es-es Seleccione un diálogo abierto
select an table of the application common es-es Seleccione una tabla de la aplicación
select application common es-es Seleccionar aplicación
select application to search common es-es Seleccionar aplicación para buscar
select category common es-es Seleccionar categoría
select color common es-es Seleccionar color
select columns common es-es Seleccionar columnas
select country common es-es Seleccionar país
select date common es-es Seleccionar fecha
select day common es-es Seleccionar día
select day of week common es-es Seleccionar día de la semana
select entry common es-es Seleccionar entrada
select file(s) from vfs common es-es Seleccionar archivo(s) desde VFS
select files from filemanager ... common es-es Seleccionar archivos desde el Administrador de archivos
select group common es-es Seleccionar grupo
select home email address common es-es Seleccionar dirección de correo inicial
select hour common es-es Seleccionar hora del día
select application common es-es Seleccione aplicación
select application to search common es-es Seleccione aplicación para buscar
select category common es-es Seleccione categoría
select color common es-es Seleccione color
select columns common es-es Seleccione columnas
select country common es-es Seleccione país
select date common es-es Seleccione fecha
select day common es-es Seleccione día
select day of week common es-es Seleccione día de la semana
select entry common es-es Seleccione entrada
select file(s) from vfs common es-es Seleccione archivo(s) desde VFS
select files from filemanager ... common es-es Seleccione archivos desde el Administrador de archivos
select group common es-es Seleccione grupo
select home email address common es-es Seleccione dirección de correo inicial
select hour common es-es Seleccione hora del día
select if content of field should not be translated (label gets always translated) common es-es Seleccione si el contenido del campo no debe traducirse (la etiqueta siempre se traduce)
select language common es-es Seleccionar idioma
select month common es-es Seleccionar mes
select multiple accounts common es-es seleccionar múltiples cuentas
select number common es-es Seleccionar número
select one common es-es Seleccionar uno
select one ... common es-es Seleccionar uno...
select percentage common es-es Seleccionar porcentaje
select priority common es-es Seleccionar prioridad
select some options common es-es Seleccionar algunas opciones
select state common es-es Seleccionar estado
select the columns to display in the list common es-es Seleccionar columnas a mostrar en la lista
select language common es-es Seleccione idioma
select month common es-es Seleccione mes
select multiple accounts common es-es Seleccione múltiples cuentas
select number common es-es Seleccione número
select one common es-es Seleccione uno
select one ... common es-es Seleccione...
select percentage common es-es Seleccione porcentaje
select priority common es-es Seleccione prioridad
select some options common es-es Seleccione algunas opciones
select state common es-es Seleccione estado
select the columns to display in the list common es-es Seleccione columnas a mostrar en la lista
select the default height for the application windows common es-es Seleccione la altura predeterminada para las ventanas de la aplicación
select the default width for the application windows common es-es Seleccione el ancho predeterminado para las ventanas de la aplicación
select the indexed columns in their desired order common es-es Seleccionar las columnas indexadas en su orden deseado
select this etemplate to delete it common es-es Seleccionar esta plantilla para borrarla
select user common es-es Seleccionar usuario
select which accounts to show common es-es seleccionar las cuentas a mostrar
select which values to show common es-es Seleccionar qué valores mostrar
select work email address common es-es Seleccionar dirección de correo del trabajo
select year common es-es Seleccionar año
select the indexed columns in their desired order common es-es Seleccione las columnas indexadas en su orden deseado
select this etemplate to delete it common es-es Seleccione esta plantilla para borrarla
select user common es-es Seleccione usuario
select user or group common es-es Seleccione usuario ogrupo
select which accounts to show common es-es Seleccione las cuentas a mostrar
select which values to show common es-es Seleccione qué valores mostrar
select work email address common es-es Seleccione dirección de correo del trabajo
select year common es-es Seleccione año
selectbox common es-es Cuadro de selección
selection common es-es Selección
send common es-es Enviar
send succeeded to %1 common es-es Enviado correctamente a %1
senegal common es-es SENEGAL
september common es-es Septiembre
serbia common es-es Serbia
server %1 has been added common es-es El servidor %1 ha sido añadido
server answered. processing response... common es-es El servidor ha respondido. Procesando la respuesta...
server contacted. waiting for response... common es-es Se ha conectado con el servidor. Esperando la respuesta...
server error common es-es Error del servidor
server is unwilling to perform. common es-es El servidor es incapaz de hacer.
server name common es-es Nombre del servidor
session has been killed common es-es La sesión ha sido eliminada
set as default common es-es Establecer como predeterminado
set these columns as the default common es-es Establecer estas columnas como predeterminadas
set user as only responsible user, but keeping groups groupdav es-es establecer al usuario como el único responsable, pero manteniendo grupos
set user as only responsible, removing all existing responsibles groupdav es-es establecer al usuario como el único responsable, eliminando todos los responsables existentes
sets today as date common es-es pone hoy como fecha
settings saved. common es-es Se guardó la configuración.
setup common es-es Instalación
setup main menu common es-es Menú principal de instalación
seychelles common es-es SEYCHELLES
share common es-es Compartir
share files common es-es Compartir archivos
share link common es-es Compartir enlace
shift common es-es May
shift ⇧ common es-es May ⇧
should the form be submitted or any custom javascript be executed common es-es Se debe enviar el formulario o ejecutar cualquier javascript personalizado
show common es-es Mostrar
show (no save) common es-es Mostrar (sin guardar)
@ -1174,6 +1253,8 @@ show home and logout button in main application bar? common es-es ¿Mostrar los
show in sidebox common es-es Mostrar en el menú lateral
show logo's on the desktop. common es-es Mostrar logo en el escritorio
show menu common es-es mostrar menú
show next login common es-es Mostrar registro del siguiente dispositivo
show now common es-es Mostrar ahora
show page generation time common es-es Mostrar el tiempo que tarda en generarse la página
show page generation time on the bottom of the page? common es-es ¿Mostrar el tiempo que tarda en generarse la página en la parte inferior de la página?
show page generation time? common es-es ¿Mostrar el tiempo que tarda en generarse la página?
@ -1186,6 +1267,7 @@ showing %1 - %2 of %3 common es-es mostrando %1 - %2 de %3
shows / allows you to enter values into the etemplate for testing common es-es muestra / permite introducir valores en la plantilla para probar
shows/displays etemplate for testing, does not save it before common es-es Muestra la plantilla para pruebas. NO la guarda antes
sierra leone common es-es SIERRA LEONA
sign up common es-es Registrarse
simple common es-es Simple
singapore common es-es SINGAPUR
site configuration common es-es Configuración del sitio
@ -1234,7 +1316,9 @@ sweden common es-es SUECIA
switch to a parent widget common es-es Cambiar a un control superior
switch to an other widgets of that container common es-es Cambiar a otros controles de ese contenedor
switzerland common es-es SUIZA
sync all selected into one groupdav es-es Sincronizar todos los seleccionados en uno
syrian arab republic common es-es SYRIAN ARAB REPUBLIC
tab common es-es Tab
tabindex common es-es Índice de tabulación
table %1 is excluded from backup and restore. data will not be restored. common es-es La tabla %1 se ha excluido del respaldo y la restauración. Los datos no se restaurarán.
table properties common es-es Propiedades de la tabla
@ -1252,13 +1336,16 @@ text color: common es-es Color del texto:
textarea common es-es Area de texto
thailand common es-es TAILANDIA
the backup key has been deleted. common es-es La clave de respaldo se ha suprimido.
the browser popup blocker is on. please click on ok button to see the pop-up.\n\nif you would like to not see this message for the next time, allow your browser pop-up blocker to open popups from %1 common es-es El bloqueador de ventanas emergentes del navegador está activado. Haga clic en el botón Aceptar para ver la ventana emergente.\n\nSi no desea ver este mensaje la próxima vez, permita que el bloqueador de ventanas emergentes de su navegador abra ventanas emergentes desde %1
the document can contain placeholder like {{%3}}, to be replaced with the data (%1full list of placeholder names%2). preferences es-es El documento puede contener un marcador como {{%3}}, para sustituirlo con los datos (%1lista completa de nombres de marcadores%2).
the following applications require upgrades common es-es Las siguientes aplicaciones requieren actualizaciones
the following document-types are supported: preferences es-es Los siguientes tipos de documentos están soportados:
the mail server returned common es-es El servidor de correo devolvió
there already is a system-user with this name. user's should not have the same name as a systemuser common es-es Ya hay un usuario de sistema con este nombre. Los usuarios no deben tener el mismo nombre que un usuario de sistema.
they will be sub-folders in users home (%1 attribute). common es-es Serán subcarpetas en la página de inicio de los usuarios (atributo %1).
this name has been used already common es-es ¡Este nombre ya ha sido usado!
this text gets displayed if the input-field is empty and has no focus (blur) common es-es este texto se muestra si el campo de entrada está vacío y no tiene foco (borroso)
this will reset toolbar preferences for all users and set them to configured default prefs. common es-es Esto restablecerá las preferencias de la barra de herramientas para todos los usuarios y los establecerá en las preferencias predeterminadas configuradas.
thursday common es-es Jueves
tiled common es-es mosaico
time common es-es Hora (completa)
@ -1282,6 +1369,7 @@ tonga common es-es TONGA
too many unsucessful attempts to login: %1 for the user '%2', %3 for the ip %4 common es-es Demasiados intentos fallidos de inicio de sesión: %1 para el usuario '%2', %3 para la IP %4
top common es-es Superior
total common es-es Total
total: %1 successful: %2 failed: %3 skipped: %4 common es-es Total: %1 Exitoso: %2 Falló: %3 Saltado: %4
transparant bg for the icons? common es-es ¿Fondo transparente para los iconos?
tree common es-es Arbol
trinidad and tobago common es-es TRINIDAD AND TOBAGO
@ -1296,9 +1384,12 @@ type of the column common es-es tipo de la columna
type of the field (select label if field should be empty) common es-es tipo del campo (seleccionar la etiqueta si el campo tiene que estar vacío)
uganda common es-es UGANDA
ukraine common es-es UCRANIA
un-delete common es-es Recuperar
uncheck all common es-es Desmarcar todo
undefined common es-es indefinido
underline common es-es Subrayado
undo common es-es Deshacer
unicode common es-es Unicode
unique common es-es Único
united arab emirates common es-es EMIRATOS ARABES UNIDOS
united kingdom common es-es REINO UNIDO
@ -1341,13 +1432,17 @@ version common es-es Versión
version-number, should be in the form: major.minor.revision.number (eg. 0.9.13.001 all numbers filled up with zeros) common es-es número de la versión, en formato mayor.menor.revisión.número (por ej. 0.9.13.001, con todos los números rellenos con ceros)
vertical alignment of row common es-es alineación vertical de la fila
vfs upload directory common es-es Directorio de subida de archivos VFS
video tutorials common es-es Tutoriales en video
viet nam common es-es VIETNAM
view common es-es Ver
view linked %1 entries common es-es Ver entradas vinculadas de %1
view this etemplate common es-es ver esta plantilla
view this linked entry in its application common es-es ver esta entrada enlazada en su aplicación
virgin islands, british common es-es VIRGIN ISLANDS, BRITISH
virgin islands, u.s. common es-es VIRGIN ISLANDS, U.S.
wallis and futuna common es-es WALLIS AND FUTUNA
was not able to delete the backup key because %1 common es-es No se pudo suprimir la clave de respaldo porque %1
we would like to introduce you to egroupware by showing a short introduction video. common es-es Nos gustaría presentarte EGroupware mostrando un breve video de introducción.
wednesday common es-es Miércoles
weekend common es-es fin de semana
welcome common es-es Página principal
@ -1359,6 +1454,7 @@ what style would you like the image to have? common es-es ¿Qué estilo desea qu
when you say yes the home and logout buttons are presented as applications in the main top applcation bar. common es-es Si dice que sí, los botones de Inicio y Salir se presentan como aplicaciones en la barra principal de aplicaciones.
where and how will the egroupware links like preferences, about and logout be displayed. common es-es Dónde y cómo mostrar los enlaces de egroupware com las preferencias, acerca de y salir.
which groups common es-es Qué grupos
which infolog types should be synced with the device, default only tasks. common es-es Cuales tipos de InfoLog deben sincronizarse con el dispositivo, solo tareas predeterminadas.
whole query common es-es la consulta completa
widget copied into clipboard common es-es control copiado en el portapapeles
width common es-es Ancho
@ -1369,7 +1465,11 @@ width, disabled common es-es Ancho, desactivado
wk common es-es Semana
work email common es-es correo del trabajo
working days common es-es días laborales
works reliable for total size up to 1-2 mb, might work for 5-10 mb, most likely to fail for >10mb common es-es Funciona de forma confiable para un tamaño total de hasta 1-2 MB, puede funcionar para 5-10 MB, lo más probable es que falle para >10 MB
would you like to display the page generation time at the bottom of every window? common es-es ¿Desea mostrar el tiempo que tarda en generarse la página en la parte inferior de cada ventana?
writable common es-es Writable
writable filemanager directory common es-es Directorio del administrador de archivos grabable
writable share common es-es Cuota de escritura
write <app>/setup/tables_current.inc.php common es-es Escribir <app>/setup/tables_current.inc.php
write langfile common es-es Escribir archivo de idioma
write tables common es-es Escribir tablas
@ -1383,9 +1483,11 @@ yemen common es-es YEMEN
yes common es-es Sí
yes - delete common es-es Sí - Eliminar
yes - delete including sub-entries common es-es Sí - Eliminar incluso las subentradas
yes and allow non-admin users to do that too (recommended) common es-es Sí y permitir que los usuarios que no sean administradores también lo hagan (recomendado)
you are not allowed to export more than %1 entries! common es-es ¡No se le permite exportar más de %1 entradas!
you are required to change your password during your first login common es-es Es necesario que cambie la contraseña durante su primer inicio de sesión.
you can customize how many icons and toolbars the editor shows. common es-es Puede personalizar el número de iconos y barras de herramientas que muestra el editor.
you can not choose more then %1 item(s)! common es-es ¡No puede elegir más de% 1 artículo (s)!
you can respond by visiting: common es-es Puede responder visitando:
you have been successfully logged out login es-es Usted ha salido correctamente
you have not entered a title common es-es No ha introducido un título
@ -1398,9 +1500,14 @@ you have successfully logged out common es-es Ha terminado la sesión correctame
you need to %1set your timezone preference%2. common es-es Necesita %1 establecer su preferencia de zona horaria%2.
you need to add the webserver user '%1' to the group '%2'. common es-es Necesita añadir el usuario del servidor web '%1' al grupo '%2'.
you need to be an egroupware administrator to access this functionality! common es-es ¡Necesita ser administrador de EGroupware para acceder a esta funcionalidad!
you need to install mailvelope plugin available for chrome and firefox from www.mailvelope.com or by clicking on install button. common es-es Debe instalar el complemento Mailvelope disponible para Chrome y Firefox desde www.mailvelope.com o haciendo clic en el botón de instalación.
you need to select a file first! common es-es ¡Seleccione un archivo primero!
you need to select some entries first! common es-es ¡Necesita seleccionar algunas entradas primero!
you need to set enable logging to "%1" to create/update a log. groupdav es-es Debe establecer habilitar el registro en "%1" para crear/actualizar un registro.
you tried to automatically size a flex column, which always takes the rest of the space common es-es Intentó dimensionar automáticamente una columna flexible, que siempre ocupa el resto del espacio.
you will not be able to send or receive encrypted mails before completing that step! common es-es ¡NO podrá enviar ni recibir correos cifrados antes de completar ese paso!
you've tried to open the egroupware application: %1, but you have no permission to access this application. common es-es Ha intentado abrir la aplicación de EGroupware %1, pero no tiene permiso para acceder a esta aplicación.
your browser is not up-to-date (javascript es6 compatible), you may experience some of the features not working. common es-es Su navegador no está actualizado (compatible con JavaScript ES6), es posible que algunas de las funciones no funcionen.
your code is incorrect !!! common es-es ¡Código es incorrecto!
your key has been restored successfully. common es-es Su clave ha sido restaurada con éxito.
your message could <b>not</b> be sent!<br> common es-es Su mensaje <b>no</b> se pudo enviar<br>

View File

@ -14,7 +14,7 @@ $setup_info['api']['title'] = 'EGroupware API';
$setup_info['api']['version'] = '19.1.003';
$setup_info['api']['versions']['current_header'] = '1.29';
// maintenance release in sync with changelog in doc/rpm-build/debian.changes
$setup_info['api']['versions']['maintenance_release'] = '19.1.20191119';
$setup_info['api']['versions']['maintenance_release'] = '19.1.20191220';
$setup_info['api']['enable'] = 3;
$setup_info['api']['app_order'] = 1;
$setup_info['api']['license'] = 'GPL';

View File

@ -194,11 +194,11 @@ class Egw extends Egw\Base
if ($GLOBALS['egw_info']['flags']['currentapp'] != 'login' && $GLOBALS['egw_info']['flags']['currentapp'] != 'logout')
{
$this->define_egw_constants();
$this->verify_session();
$this->applications->read_installed_apps(); // to get translated app-titles, has to be after verify_session
$this->define_egw_constants();
$this->check_app_rights();
$this->load_optional_classes();

View File

@ -1121,52 +1121,70 @@ abstract class Framework extends Framework\Extra
*/
function topmenu(array $vars,array $apps)
{
$this->_add_topmenu_info_item($this->_user_avatar_menu(), 'user_avatar');
// array of topmenu info items (orders of the items matter)
$topmenu_info_items = [
'user_avatar' => $this->_user_avatar_menu(),
'logout' => (Header\UserAgent::mobile() || $GLOBALS['egw_info']['user']['preferences']['common']['theme'] == 'fw_mobile') ? self::_logout_menu() : null,
'update' => ($update = Framework\Updates::notification()) ? $update : null,
'notifications' => ($GLOBALS['egw_info']['user']['apps']['notifications']) ? self::_get_notification_bell() : null,
'quick_add' => $vars['quick_add'],
'print_title' => $this->_print_menu()
];
// array of topmenu items (orders of the items matter)
$topmenu_items = [
0 => (is_array(($current_user = $this->_current_users()))) ? $current_user : null,
];
// Home should be at the top before preferences
if($GLOBALS['egw_info']['user']['apps']['home'] && isset($apps['home']))
{
$this->_add_topmenu_item($apps['home']);
}
// array of topmenu preferences items (orders of the items matter)
$topmenu_preferences = ['prefs', 'acl', 'cats', 'security'];
// set topmenu preferences items
if($GLOBALS['egw_info']['user']['apps']['preferences'])
{
$this->add_preferences_topmenu('prefs');
$this->add_preferences_topmenu('acl');
$this->add_preferences_topmenu('cats');
$this->add_preferences_topmenu('security');
foreach ($topmenu_preferences as $prefs)
{
$this->add_preferences_topmenu($prefs);
}
}
/* disable help until content is reworked
if($GLOBALS['egw_info']['user']['apps']['manual'] && isset($apps['manual']))
{
$this->_add_topmenu_item(array_merge($apps['manual'],array('title' => lang('Help'))));
}*/
// call topmenu info items hooks
Hooks::process('topmenu_info',array(),true);
if (($update = Framework\Updates::notification()))
{
$this->_add_topmenu_info_item($update, 'update');
}
if($GLOBALS['egw_info']['user']['apps']['notifications'])
{
$this->_add_topmenu_info_item(self::_get_notification_bell(), 'notifications');
}
if (is_array(($current_user = $this->_current_users()))) $this->_add_topmenu_item($current_user);
$this->_add_topmenu_info_item($vars['quick_add'], 'quick_add');
$this->_add_topmenu_info_item($this->_print_menu(), 'print_title');
// Add extra items added by hooks
foreach(self::$top_menu_extra as $extra_item) {
if ($extra_item['name'] == 'search')
{
$this->_add_topmenu_info_item('<a href="'.$extra_item['url'].'" title="'.$extra_item['title'].'"></a>', 'search');
$topmenu_info_items['search'] = '<a href="'.$extra_item['url'].'" title="'.$extra_item['title'].'"></a>';
}
else
{
$this->_add_topmenu_item($extra_item);
array_push($topmenu_items, $extra_item);
}
}
$this->_add_topmenu_item($apps['logout']);
// push logout as the last item in topmenu items list
array_push($topmenu_items, $apps['logout']);
// set topmenu info items
foreach ($topmenu_info_items as $id => $content)
{
if (!$content || (in_array($id, ['search', 'quick_add', 'update']) && (Header\UserAgent::mobile() || $GLOBALS['egw_info']['user']['preferences']['common']['theme'] == 'fw_mobile')))
{
continue;
}
$this->_add_topmenu_info_item($content, $id);
}
// set topmenu items
foreach ($topmenu_items as $item)
{
if ($item) $this->_add_topmenu_item($item);
}
}
/**

View File

@ -555,7 +555,9 @@ class Html
$html2ret[] = substr($html,0,$pos);
while ($pos!==false)
{
$endofpre = stripos($html,'</pre>',$pos);
// avoid infinit loop in case the endof pre can't be found, just give the
// end position to return the rest of content as return html
$endofpre = (stripos($html,'</pre>',$pos) === false ? strlen($html) : stripos($html,'</pre>',$pos));
$length = $endofpre-$pos+6;
$html2ret[] = substr($html,$pos,$length);
$searchFor = '<pre ';

View File

@ -282,12 +282,6 @@ class Session
*/
function __destruct()
{
// write dla update on destruct, allows to modify session action by calling Session::set_action()
if (!isset($GLOBALS['egw_info']['flags']['no_dla_update']) || !$GLOBALS['egw_info']['flags']['no_dla_update'])
{
$this->update_dla(true);
}
self::encrypt($this->kp3);
}
@ -806,7 +800,7 @@ class Session
}
else
{
throw new \Exception(implode(', $errors'), self::CD_SECOND_FACTOR_REQUIRED);
throw new \Exception(implode(', ', $errors), self::CD_SECOND_FACTOR_REQUIRED);
}
}
}
@ -1015,6 +1009,8 @@ class Session
'session_action' => $this->update_dla(false), // dont update egw_access_log
),false,__LINE__,__FILE__);
$_SESSION[self::EGW_SESSION_VAR]['session_logged_dla'] = $now;
$ret = $GLOBALS['egw']->db->get_last_insert_id(self::ACCESS_LOG_TABLE,'sessionid');
// if we can not store failed login attempts in database, store it in cache
@ -1299,7 +1295,7 @@ class Session
// allow xajax / notifications to not update the dla, so sessions can time out again
if (!isset($GLOBALS['egw_info']['flags']['no_dla_update']) || !$GLOBALS['egw_info']['flags']['no_dla_update'])
{
$this->update_dla();
$this->update_dla(true);
}
elseif ($GLOBALS['egw_info']['flags']['currentapp'] == 'notifications')
{
@ -1758,6 +1754,11 @@ class Session
$this->action = $action;
}
/**
* Ignore dla logging for a maximum of 900s = 15min
*/
const MAX_IGNORE_DLA_LOG = 900;
/**
* Update session_action and session_dla (session last used time)
*
@ -1767,39 +1768,38 @@ class Session
private function update_dla($update_access_log=false)
{
// This way XML-RPC users aren't always listed as xmlrpc.php
if (!$update_access_log)
if (isset($_GET['menuaction']))
{
if ($this->xmlrpc_method_called)
{
$action = $this->xmlrpc_method_called;
}
elseif (isset($_GET['menuaction']))
{
$action = $_GET['menuaction'];
}
else
{
$action = $_SERVER['PHP_SELF'];
// remove EGroupware path, if not installed in webroot
$egw_path = $GLOBALS['egw_info']['server']['webserver_url'];
if ($egw_path[0] != '/') $egw_path = parse_url($egw_path,PHP_URL_PATH);
if ($action == '/Microsoft-Server-ActiveSync')
{
$action .= '?Cmd='.$_GET['Cmd'].'&DeviceId='.$_GET['DeviceId'];
}
elseif ($egw_path)
{
list(,$action) = explode($egw_path,$action,2);
}
}
$this->set_action($action);
list(, $action) = explode('.ajax_exec.template.', $_GET['menuaction']);
if (empty($action)) $action = $_GET['menuaction'];
}
else
{
$action = $_SERVER['PHP_SELF'];
// remove EGroupware path, if not installed in webroot
$egw_path = $GLOBALS['egw_info']['server']['webserver_url'];
if ($egw_path[0] != '/') $egw_path = parse_url($egw_path,PHP_URL_PATH);
if ($action == '/Microsoft-Server-ActiveSync')
{
$action .= '?Cmd='.$_GET['Cmd'].'&DeviceId='.$_GET['DeviceId'];
}
elseif ($egw_path)
{
list(,$action) = explode($egw_path,$action,2);
}
}
$this->set_action($action);
// update dla in access-log table, if we have an access-log row (non-anonymous session)
if ($this->sessionid_access_log && $update_access_log &&
// ignore updates (session creation is written) of *dav, avatar and thumbnail, due to possible high volume of updates
!preg_match('#^(/webdav|/groupdav|/api/avatar|/api/thumbnail)\.php#', $this->action) &&
(!preg_match('#^(/webdav|/groupdav|/api/avatar|/api/thumbnail)\.php#', $this->action) ||
(time() - $_SESSION[self::EGW_SESSION_VAR]['session_logged_dla']) > self::MAX_IGNORE_DLA_LOG) &&
is_object($GLOBALS['egw']->db))
{
$_SESSION[self::EGW_SESSION_VAR]['session_logged_dla'] = time();
$GLOBALS['egw']->db->update(self::ACCESS_LOG_TABLE,array(
'session_dla' => time(),
'session_action' => $this->action,

View File

@ -486,12 +486,6 @@ class Storage extends Storage\Base
*/
protected function process_search(&$criteria, &$only_keys=True, &$order_by='', &$extra_cols='', &$wildcard='', &$op='AND', &$filter=null, &$join='')
{
// if no CFs are defined OR used and became unavailable (deleted or permissions changed)
if (!$this->customfields && strpos($order_by, self::CF_PREFIX) === false &&
strpos(implode(',', array_keys($filter ? $filter : [])), self::CF_PREFIX) === false)
{
return;
}
if ($only_keys === false)
{
$only_keys = $this->table_name.'.*';
@ -588,6 +582,15 @@ class Storage extends Storage\Base
{
$col = $this->table_name .'.'.array_search($col, $this->db_cols).' AS '.$col;
}
// Check to make sure our order by doesn't have aliases that won't work
else if (stripos($col, 'AS') !== false && $order_by)
{
list($value, $alias) = explode(' AS ', $col);
if(stripos($order_by, $alias) !== FALSE)
{
$order_by = str_replace($alias, $value, $order_by);
}
}
}
}
// check if we order by a custom field --> join cf table for given cf and order by it's value

View File

@ -0,0 +1,188 @@
<?php
/**
* EGroupware generalized SQL Storage Object: Iterator for get_rows
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
* @subpackage storage
* @link http://www.egroupware.org
* @author Ralf Becker <rb@egroupware.org>
* @copyright 2020 by Ralf Becker <rb@egroupware.org>
*/
namespace EGroupware\Api\Storage;
use EGroupware\Api;
/**
* Iterator using a get_rows method and querying it in chunks instead of all rows as once
*
* You should use a consisten sorting eg. by id, in case rows change while the iterator is instanciated!
*
* Instead of ($query['num_rows']=-1, $query['start']=0):
*
* $storage->get_rows($query, $rows, $readonlys);
*
* Use:
*
* $rows = new RowsIterator($storage, $query);
*/
class RowsIterator implements \Iterator
{
/**
* Reference of Storage\Base class or other object with a get_rows method
*
* @var Base
*/
protected $storage;
/**
* query parameter for get_rows
*
* @var array
*/
protected $query;
/**
* name of (unique) key in row or null to use $this->start + key returned by get_rows
*
* @var string
*/
protected $key;
/**
* current chunk
*
* @var array
*/
protected $rows;
/**
* Start value for callback
*
* @var int
*/
protected $start=0;
/**
* Number of rows queried from get_rows in one call
*/
const CHUNK_SIZE = 500;
/**
* Log calls via error_log()
*
* @var boolean
*/
public $debug = false;
/**
* Constructor
*
* @param Base $storage only requirement is class to have a get_rows method
* @param array $query query parameter for get_rows
* @param string $key =null name of (unique) key in row, default use $this->start + key from get_rows
*/
public function __construct($storage, array $query, $key=null)
{
if (!is_object($storage) || !method_exists($storage, 'get_rows'))
{
throw new Api\Exception\WrongParameter("\$storage parameter needs to be object with a get_rows method!");
}
$this->storage = $storage;
$this->query = $query;
$this->key = $key;
}
/**
* Return the current element
*
* @return array
*/
public function current()
{
if ($this->debug) error_log(__METHOD__."() returning ".array2string(current($this->rows)));
return current($this->rows);
}
/**
* Return the key of the current element
*
* @return int|string
*/
public function key()
{
$current = current($this->rows);
$key = !empty($this->key) ? $current[$this->key] : $this->start + key($this->rows);
if ($this->debug) error_log(__METHOD__."() returning ".array2string($key));
return $key;
}
/**
* Move forward to next element (called after each foreach loop)
*/
public function next()
{
if (next($this->rows) !== false)
{
if ($this->debug) error_log(__METHOD__."() returning TRUE");
return true;
}
// check if previous query gave less then CHUNK_SIZE entries --> we're done
if ($this->start && count($this->rows) < self::CHUNK_SIZE)
{
if ($this->debug) error_log(__METHOD__."() returning FALSE (no more entries)");
return false;
}
// try query further rows via get_rows method and store result in $this->rows
$readonlys = null;
$this->query['start'] = $this->start;
$this->query['num_rows'] = self::CHUNK_SIZE;
$this->storage->get_rows($this->query, $this->rows, $readonlys);
// remove non-rows returned (sel_options and the like, or leading false old eTemplate required)
foreach($this->rows as $key => $row)
{
if (!is_int($key) || !is_array($row))
{
unset($this->rows[$key]);
}
}
if (!is_array($this->rows) || !($entries = count($this->rows)))
{
if ($this->debug) error_log(__METHOD__."() returning FALSE (no more entries)");
return false; // no further entries
}
$this->start += self::CHUNK_SIZE;
reset($this->rows);
if ($this->debug) error_log(__METHOD__."() this->start=$this->start, entries=$entries, count(this->files)=".count($this->rows)." returning ".array2string(current($this->rows) !== false));
return current($this->rows) !== false;
}
/**
* Rewind the Iterator to the first element (called at beginning of foreach loop)
*/
public function rewind()
{
if ($this->debug) error_log(__METHOD__."()");
$this->start = 0;
$this->rows = [];
if (!$this->rows) $this->next(); // otherwise valid will return false and nothing get returned
reset($this->rows);
}
/**
* Checks if current position is valid
*
* @return boolean
*/
public function valid ()
{
if ($this->debug) error_log(__METHOD__."() returning ".array2string(current($this->rows) !== false));
return current($this->rows) !== false;
}
}

View File

@ -2838,8 +2838,8 @@ td.avatar {
border: 1px solid silver;
border-radius: 50%;
overflow: hidden;
width: 50px;
height: 50px;
width: 40px;
height: 40px;
background-image: url(images/photo.png);
background-size: 35px 35px;
background-repeat: no-repeat;
@ -2849,7 +2849,7 @@ td.avatar {
}
.avatar img{
padding-top:0 !important;
width:50px;
width:40px;
border:none;
box-shadow: none;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -803,7 +803,7 @@ class calendar_boupdate extends calendar_bo
* @param array $to_notify numerical user-ids as keys (!) (value is not used)
* @param array $old_event Event before the change
* @param array $new_event =null Event after the change
* @param int $user =0 User who started the notify, default current user
* @param int/string $user =0 User/participant who started the notify, default current user
* @return bool true/false
*/
function send_update($msg_type,$to_notify,$old_event,$new_event=null,$user=0)
@ -841,8 +841,23 @@ class calendar_boupdate extends calendar_bo
$lang = $GLOBALS['egw_info']['user']['preferences']['common']['lang'];
if ($GLOBALS['egw']->preferences->account_id != $user)
{
$GLOBALS['egw']->preferences->__construct($user);
// Get correct preferences
$GLOBALS['egw']->preferences->__construct(is_numeric($user) ? $user : $temp_user['account_id']);
$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository();
// If target user/participant is not an account, try to get good notification message
if(!is_numeric($user))
{
$res_info = $this->resource_info($user);
$title = $res_info['name'] ?: Link::title($res_info['app'], $res_info['res_id']) ?: $res_info['res_id'] ?: $user;
$GLOBALS['egw']->preferences->values['fullname'] = $GLOBALS['egw']->preferences->values['lastname'] = $title;
$GLOBALS['egw']->preferences->values['firstname'] = '';
$msg = $GLOBALS['egw']->preferences->user['calendar']['notifyResponse'] ?: $GLOBALS['egw']->preferences->default['calendar']['notifyResponse'] ?: $GLOBALS['egw']->preferences->forced['calendar']['notifyResponse'];
$GLOBALS['egw_info']['user']['preferences']['calendar']['notifyResponse'] = $GLOBALS['egw']->preferences->parse_notify(
$msg
);
}
}
$senderid = $this->user;
$event = $msg_type == MSG_ADDED || $msg_type == MSG_MODIFIED ? $new_event : $old_event;
@ -1660,7 +1675,7 @@ class calendar_boupdate extends calendar_bo
{
if (!is_array($event)) $event = $this->read($cal_id);
if (isset($recur_date)) $event = $this->read($event['id'],$recur_date); //re-read the actually edited recurring event
$user_id = is_numeric($uid) ? (int)$uid : 0;
$user_id = is_numeric($uid) ? (int)$uid : $uid;
$this->send_update($status2msg[$status],$event['participants'],$event, null, $user_id);
}

View File

@ -688,7 +688,9 @@ class calendar_groupdav extends Api\CalDAV\Handler
if (isset($expand['start'])) $expand['start'] = $this->vCalendar->_parseDateTime($expand['start']);
if (isset($expand['end'])) $expand['end'] = $this->vCalendar->_parseDateTime($expand['end']);
}
$events =& self::get_series($event['uid'], $this->bo, $expand, $user);
// pass in original event as master, as it has correct start-date even if first recurrence is an exception
$events =& self::get_series($event['uid'], $this->bo, $expand, $user, $event);
// as alarm is now only on next recurrence, set alarm from original event on master
if ($event['alarm']) $events[0]['alarm'] = $event['alarm'];
}
@ -708,9 +710,10 @@ class calendar_groupdav extends Api\CalDAV\Handler
* @param calendar_bo $bo =null calendar_bo object to reuse for search call
* @param boolean|array $expand =false true or array with values for 'start', 'end' to expand recurrences
* @param int $user =null account_id of calendar to display, to remove master, if current user does not participate in
* @param array $master =null use provided event as master to fix wrong start-date if first recurrence is an exception
* @return array
*/
private static function &get_series($uid,calendar_bo $bo=null, $expand=false, $user=null)
private static function &get_series($uid,calendar_bo $bo=null, $expand=false, $user=null, $master=null)
{
if (is_null($bo)) $bo = new calendar_bopdate();
@ -729,13 +732,12 @@ class calendar_groupdav extends Api\CalDAV\Handler
}
// find master, which is not always first event, eg. when first event is an exception
$master = null;
$exceptions = array();
foreach($events as $k => &$recurrence)
{
if ($recurrence['recur_type'])
{
$master = $recurrence;
if (!isset($master)) $master = $recurrence;
$exceptions =& $master['recur_exception'];
unset($events[$k]);
break;
@ -747,7 +749,7 @@ class calendar_groupdav extends Api\CalDAV\Handler
foreach($events as $k => &$recurrence)
{
//error_log(__FILE__.'['.__LINE__.'] '.__METHOD__."($uid)[$k]:" . array2string($recurrence));
if ($master && $recurrence['reference'] != $master['id'])
if ($master && $recurrence['reference'] && $recurrence['reference'] != $master['id'])
{
unset($events[$k]);
continue; // same uid, but references a different event or is own master

View File

@ -672,9 +672,10 @@ class calendar_ical extends calendar_boupdate
{
foreach ($event['recur_exception'] as $key => $timestamp)
{
// current Horde_Icalendar 2.1.4 exports EXDATE always in UTC, so we should not set a timezone here
// current Horde_Icalendar 2.1.4 exports EXDATE always postfixed with a Z :(
// so if we set a timezone here, we have to remove the Z, see the hack at the end of this method
// Apple calendar on OS X 10.11.4 uses a timezone, so does Horde eg. for Recurrence-ID
$event['recur_exception'][$key] = self::getDateTime($timestamp,$tzid);//,$parameters['EXDATE']);
$event['recur_exception'][$key] = self::getDateTime($timestamp, $tzid, $parameters['EXDATE']);
}
}
else
@ -1073,7 +1074,13 @@ class calendar_ical extends calendar_boupdate
error_log(__FILE__.'['.__LINE__.'] '.__METHOD__ .
"()\n".array2string($retval)."\n",3,$this->logfile);
}
return $retval;
// hack to fix iCalendar exporting EXDATE always postfixed with a Z
// EXDATE can have multiple values and therefore be folded into multiple lines
return preg_replace_callback("/\nEXDATE;TZID=[^:]+:[0-9TZ \n,]+/", function($matches)
{
return preg_replace('/([0-9 ])Z/', '$1', $matches[0]);
}, $retval);
}
/**

View File

@ -26,6 +26,7 @@ action that caused the notify: added, canceled, accepted, rejected, ... calendar
actions calendar es-es Acciones
actions... calendar es-es Acciones...
add alarm calendar es-es Añadir alarma
add appointments via shortened dialog or complete edit window calendar es-es Añada citas por medio de un diálogo reducido o complete la ventana de edición
add current view as favorite calendar es-es Añadir vista actual como favorita
add new alarm calendar es-es Añadir nueva alarma
add new participants or resource calendar es-es Añadir nuevos participantes o recursos
@ -54,12 +55,15 @@ allow booking requests from any user when creating events? calendar es-es ¿Perm
allow users to prevent change notifications ('do not notify') calendar es-es Permitir a los usuarios evitar notificaciones de cambios "No notificar"
allows to edit the event again calendar es-es Permite volver a editar el evento
always calendar es-es Siempre
always use full edit dialog calendar es-es Utilice siempre el cuadro de diálogo de edición completa
always use the full edit dialog, not this little dialog calendar es-es Utilice siempre el cuadro de diálogo de edición completo, no este pequeño cuadro de diálogo
apply the action on the whole query, not only the shown events calendar es-es Aplicar la acción en toda la consulta, NO sólo en los eventos mostrados
apply the changes calendar es-es Aplicar los cambios
appointment settings calendar es-es Ajustes de Citas
as an alternative you can %1download a mysql dump%2 and import it manually into egw_cal_timezones table. calendar es-es Como alternativa, puede %1descargar un volcado de MySQL%2 e importarlo manualmente en la tabla egw_cal_timezones.
at start of the event calendar es-es al inicio del evento
automatically purge old events after admin es-es Purgar automáticamente eventos antiguos después de
available for the first entry inside each day of week or daily table inside the selected range: calendar es-es Disponible para la primera entrada dentro de cada día de la semana o tabla diaria dentro del rango seleccionado:
back half a month calendar es-es Medio mes hacia atrás
back one month calendar es-es Un mes hacia atrás
back one year calendar es-es Un año atrás
@ -93,12 +97,14 @@ canceled calendar es-es Cancelado
category %1 removed because of missing rights calendar es-es Se ha eliminado la categoría %1 por falta de permisos
category acl common es-es ACL de la categoría
category acl only restrict adding a category to an event or changing status of a participant. it does not change the visibility of an event! calendar es-es La ACL de la categoría sólo restringe añadir una categoría a un evento o cambiar el estado de un participante. ¡Esto NO cambia la visibilidad de un evento!
category automatically added to new events calendar es-es Categoría agregada automáticamente a nuevos eventos
chair calendar es-es Silla
change history calendar es-es Cambiar historial
change your status calendar es-es Cambiar su estado
charset of file calendar es-es Juego de caracteres del fichero
check all calendar es-es Marcar todo
choose a category calendar es-es Elija una categoría
choose owner of imported data calendar es-es Elegir propietario de datos importados
close the window calendar es-es Cerrar la ventana
compose a mail to all participants after the event is saved calendar es-es redactar un correo para todos los participantes después de guardar el evento
configuration settings calendar es-es Ajustes de configuración
@ -128,6 +134,7 @@ custom_2 common es-es disponibilidad
daily calendar es-es Diario
daily tables calendar es-es Tablas diarias
data exchange settings calendar es-es Opciones para intercambio de datos
date for the day of the week calendar es-es Fecha para el día de la semana.
date for the day of the week, available for the first entry inside each day of week or daily table inside the selected range. calendar es-es Fecha para el día de la semana, disponible para la primera entrada dentro de cada día de la semana o tabla diaria dentro del rango seleccionado.
day calendar es-es Día
day of week tables calendar es-es Tablas de día de la semana
@ -168,6 +175,7 @@ do not include events of group members calendar es-es No incluir los eventos de
do you really want to change the start of this series? if you do, the original series will be terminated as of %1 and a new series for the future reflecting your changes will be created. calendar es-es ¿Realmente desea cambiar el principio de la serie? Si lo hace, la serie original terminará %1 y se creará otra serie nueva para el futuro reflejando los cambios.
do you want a weekview with or without weekend? calendar es-es ¿Desea una vista de la semana con o sin fin de semana?
do you want non-egroupware participants of events you created to be automatically notified about new or changed appointments? calendar es-es ¿Desea que los participantes que no son de EGroupware de los eventos que creó sean notificados automáticamente sobre citas nuevas o modificadas?
do you want responses from events you created, but are not participating in? calendar es-es ¿Desea respuestas de los eventos que creó, pero no participa?
do you want to be notified about changes of appointments you modified? calendar es-es ¿Desea recibir notificaciones de los cambios en las citas que ha modificado?
do you want to be notified about new or changed appointments? you are not notified about changes you made yourself.<br>you can limit the notifications to certain changes only. each item includes all notifications listed above. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get participant responses like acceptions or rejections too. calendar es-es ¿Desea que se le notifiquen citas nuevas o modificadas? Se le notificará de los cambios que haga usted mismo.<br>Puede limitar las notificaciones para sólo ciertos cambios. Cada elemento incluye toda la notificación listada encima. Todas las modificaciones incluyen cambios de título, participantes, pero no las respuestas de los participantes. Si el dueño de un evento solicitó alguna notificación, siempre obtendrá las respuestas de aceptación o rechazo del participante.
do you want to be notified about new or changed appointments? you be notified about changes you make yourself.<br>you can limit the notifications to certain changes only. each item includes all the notification listed above it. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get the participant responses like acceptions and rejections too. calendar es-es ¿Desea recibir notificaciones sobre las citas nuevas o modificadas? Recibirá notificaciones cuando usted mismo haga cambios.<br>Puede limitar las modificaciones sólo a ciertos cambios. Cada elemento incluye todas las notificaciones de la lista que tenga encima de ella. Todas las modificaciones incluyen los cambios de título, descripción, participantes, pero no las respuestas de los participantes. Si el propietario de un evento solicitó alguna notificación, siempre recibirá las respuestas del participante, como aceptacines y también rechazos.
@ -207,6 +215,7 @@ error: you can't shift a series from the past! calendar es-es Error: No se puede
event common es-es Evento
event deleted calendar es-es Evento borrado
event details follow calendar es-es A continuación, los detalles del evento
event has been deleted by organizer! calendar es-es ¡El evento ha sido eliminado por el organizador!
event saved calendar es-es Evento guardado
event will occupy the whole day calendar es-es El evento ocupará todo el día
events common es-es eventos
@ -249,6 +258,7 @@ freetime calendar es-es Tiempo libre
freetime search calendar es-es Buscar en el tiempo libre
fri calendar es-es Vie
full description calendar es-es Descripción completa
full edit dialog calendar es-es Diálogo de edición completa
fullname of person to notify calendar es-es Nombre completo de la persona a la que notificar
general fields: calendar es-es Campos generales:
general settings calendar es-es Opciones generales
@ -310,7 +320,7 @@ interval calendar es-es Intervalo
invalid email-address "%1" for user %2 calendar es-es La dirección de correo "%1" no es válida para el usuario %2
invalid owner id: %1. might be a bad field translation. used %2 instead. calendar es-es El ID del propietario no es válido: %1. Puede ser una mala traducción del campo. Se ha usado %2 en su lugar.
invitations calendar es-es Invitaciones
invite calendar es-es invitar
invite common es-es invitar
it can not read timezones from sqlite database %1! calendar es-es ¡NO puede leer las zonas horarias de la base de datos sqlite %1!
just me calendar es-es Solo yo
keep exceptions calendar es-es Mantener excepciones
@ -357,9 +367,11 @@ monthly (by day) calendar es-es Mensual (por día)
monthview calendar es-es Vista mensual
multiple week view calendar es-es Vista de múltiples semanas
name of current user, all other contact fields are valid too calendar es-es Nombre del usuario actual. Todos los demás campos del contacto también son válidos.
name of the day of the week (ex: monday) calendar es-es Nombre del día de la semana (e.g. lunes)
name of the week (ex: monday), available for the first entry inside each day of week or daily table inside the selected range. calendar es-es Nombre de la semana, por ejemplo: lunes, disponible para la primera entrada dentro de cada día de la semana o tabla diaria dentro del rango seleccionado.
needs action calendar es-es Necesita acción
new calendar es-es Nueva
new event category calendar es-es Nueva categoría de evento
new event participants calendar es-es Nuevos participantes del evento
new search with the above parameters calendar es-es nueva búsqueda con los parámetros de arriba
no automatic purging admin es-es Sin purgado automático
@ -402,14 +414,19 @@ one month calendar es-es Un mes
one week calendar es-es Una semana
one year calendar es-es Un año
only group-events calendar es-es Sólo eventos grupales
only recurrences until %1 (excluding) have been checked! calendar es-es ¡Solo las repeticiones hasta que %1 (excluyendo) hayan sido verificadas!
only supported by a few fully conformant clients (eg. from apple). if you have to enter a url, it will most likly not be suppored! calendar es-es Solo es compatible con unos pocos clientes totalmente conformes (por ejemplo, de Apple). Si tiene que ingresar una URL, lo más probable es que no sea compatible.
only the initial date of that recurring event is checked! calendar es-es ¡Sólo está marcada la fecha inicial del evento recurrente!
only used for first viewing of calendar, afterwards last selected view is used. calendar es-es Solo se usa para la primera vista del calendario, luego se usa la última vista seleccionada.
open todo's: calendar es-es Abrir tareas pendientes
optional calendar es-es Opcional
organizer calendar es-es Organizador
overlap holiday calendar es-es solapar festivo
owner too calendar es-es El propietario también
participant names by type calendar es-es Nombres de participantes por tipo
participant table calendar es-es Tabla de participantes
participants calendar es-es Participantes
participants automatically added to new events calendar es-es Los participantes se añaden automáticamente a nuevos eventos
participants uninvited from an event calendar es-es Participantes que dejan de ser invitados de un evento
participants, resources, ... calendar es-es Participantes, recursos
password for not loged in users to your freebusy information? calendar es-es ¿Contraseña para los usuarios sin sesión para la información de disponibilidad?
@ -417,6 +434,8 @@ people holiday calendar es-es Festivo para la gente
permission denied calendar es-es Permiso denegado
planner by category calendar es-es Planificador por categorías
planner by user calendar es-es Planificador por usuario
please first select participants on the left and then use plus button to add them calendar es-es Primero seleccione los participantes a la izquierda y luego use el botón más para agregarlos
please note: conflict check is never done in the past and always limited by above recurrence horizont. calendar es-es Tenga en cuenta: la verificación de conflictos nunca se realiza en el pasado y siempre está limitada por el horizonte de repetición anterior.
please note: you can configure the field assignments after you uploaded the file. calendar es-es Por favor, tenga en cuenta: puede configurar el campo asignaciones DESPUES de subir el fichero.
preselected group for entering the planner calendar es-es Grupo preseleccionado para entrar en el planificador
prevent deleting of entries admin es-es Prevenir el borrado de entradas
@ -425,6 +444,8 @@ private and global public calendar es-es Privado y público global
private and group public calendar es-es Privado y público global
private only calendar es-es Privado solamente
quantity calendar es-es Cantidad
quick add calendar es-es Añadir rápido
range fields calendar es-es Campos de rango
re-edit event calendar es-es Volver a editar evento
receive email updates calendar es-es Recibir actualizaciones de correo
receive notifications about events you created/modified/deleted calendar es-es Recibir notificaciones de eventos que usted haya creado, modificado o borrado
@ -433,7 +454,9 @@ recover calendar es-es Recuperar
recovered calendar es-es Recuperado.
recurrence calendar es-es Repeticiones
recurrence enddate calendar es-es Fecha de finalización de las repeticiones
recurrences and conflict check calendar es-es Verificación de repeticiones y de conflictos
recurring event calendar es-es evento recurrente
regular edit calendar es-es Edición regular
reject calendar es-es Rechazar
rejected calendar es-es Rechazado
repeat days calendar es-es Días de repetición
@ -443,8 +466,11 @@ repeating event information calendar es-es Información repetitiva de eventos
repeating interval, eg. 2 to repeat every second week calendar es-es intervalo de repetición, p. ej., 2 para repetir cada segunda semana
repetition calendar es-es Repetición
repetitiondetails (or empty) calendar es-es Detalles de la repetición (o vacío)
replacements for inserting events into documents calendar es-es Reemplazos para insertar eventos en documentos
reply to meeting request calendar es-es Responder a solicitud de reunión
requested calendar es-es Requerido
requested date %1 outside allowed range of %2 days: recurring events obmitted! calendar es-es Fecha solicitada %1 fuera del rango permitido de %2 días: ¡eventos recurrentes omitidos!
requested meeting is in the past! calendar es-es ¡La reunión solicitada está en el pasado!
require an acl grant to invite other users and groups admin es-es Requerir el permiso de una ACL para invitar a otros grupos
reset calendar es-es Restablecer
reset participant stati on event shifts calendar es-es Restablecer el estado del participante en cambios de evento

View File

@ -1,18 +1,23 @@
################################################################################
##
## EGroupware FPM container using Ubuntu 18.04 and PHP 7.3 from ondrej/php PPA
## EGroupware FPM container using Ubuntu 18.04 and PHP from ondrej/php PPA
##
################################################################################
FROM ubuntu:18.04
MAINTAINER rb@egroupware.org
ARG VERSION=dev-master
ARG PHP_VERSION=7.3
# keeping build-arg in environment for entrypoint.sh
ENV VERSION=$VERSION
ENV PHP_VERSION=$PHP_VERSION
RUN apt-get update \
&& apt-get install -y software-properties-common \
&& LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php \
&& apt-get update \
&& bash -c "apt-get install -y php7.3-{cli,mysql,json,gd,xsl,bz2,opcache,apcu,tidy,zip,bcmath,mbstring,smbclient,ldap,curl,fpm,pgsql,gmp}" \
&& bash -c "apt-get install -y php$PHP_VERSION-{cli,mysql,json,gd,xsl,bz2,opcache,apcu,tidy,zip,bcmath,mbstring,smbclient,ldap,curl,fpm,pgsql,gmp}" \
# fpm and php.ini settings
&& sed -e 's/^;\?listen \?=.*/listen = 9000/g' \
-e '/allowed_clients/d' \
@ -22,7 +27,7 @@ RUN apt-get update \
-e 's/^;\?pm.max_requests =.*/pm.max_requests = 30/' \
-e 's/^;\?php_admin_value\[memory_limit\].*/php_admin_value[memory_limit] = 172M/' \
-e 's/^;\?request_terminate_timeout.*/request_terminate_timeout = 70m/' \
-i /etc/php/7.3/fpm/pool.d/www.conf \
-i /etc/php/$PHP_VERSION/fpm/pool.d/www.conf \
&& sed -e 's/^;\?session.gc_maxlifetime.*/session.gc_maxlifetime = 14400/g' \
-e 's|^;\?date.timezone.*|date.timezone = UTC|g' \
-e 's|^;\?sys_temp_dir.*|sys_temp_dir = /tmp|g' \
@ -33,14 +38,14 @@ RUN apt-get update \
-e 's|^;\?max_input_vars \?=.*|max_input_vars = 2000|g' \
-e 's|^;\?zlib.output_compression \?=.*|zlib.output_compression = On|g' \
-e 's|^;\?opcache.validate_timestamps \?=.*|opcache.validate_timestamps=0|g' \
-i /etc/php/7.3/fpm/php.ini \
-i /etc/php/$PHP_VERSION/fpm/php.ini \
&& sed -e 's|^;\?date.timezone.*|date.timezone = UTC|g' \
-e 's|^;\?sys_temp_dir.*|sys_temp_dir = /tmp|g' \
-i /etc/php/7.3/cli/php.ini \
-i /etc/php/$PHP_VERSION/cli/php.ini \
# create directory for pid file
&& mkdir -p /run/php \
# send logs to stderr to be viewed by docker logs
&& ln -s /dev/stderr /var/log/php7.3-fpm.log \
&& ln -s /dev/stderr /var/log/php$PHP_VERSION-fpm.log \
# install tools to build EGroupware
&& apt-get install -y rsync npm zip curl sudo cron patch \
&& npm install -g grunt-cli \
@ -62,21 +67,23 @@ exit $RESULT' \
&& echo "TLS_REQCERT never" >> /etc/ldap/ldap.conf
# install diverse developper tools, not installed above / in stock container
RUN apt-get install -y php7.3-xdebug git vim yarn \
&& echo "xdebug.remote_enable=1" >> /etc/php/7.3/fpm/conf.d/20-xdebug.ini \
&& echo "xdebug.remote_port=9001" >> /etc/php/7.3/fpm/conf.d/20-xdebug.ini \
&& echo "xdebug.remote_host=172.17.0.1" >> /etc/php/7.3/fpm/conf.d/20-xdebug.ini \
RUN apt-get install -y php$PHP_VERSION-cli php-xdebug inetutils-ping iproute2 git vim yarn \
&& echo "xdebug.remote_enable=1" >> /etc/php/$PHP_VERSION/fpm/conf.d/20-xdebug.ini \
&& echo "xdebug.remote_port=9001" >> /etc/php/$PHP_VERSION/fpm/conf.d/20-xdebug.ini \
&& echo "xdebug.remote_host=172.17.0.1" >> /etc/php/$PHP_VERSION/fpm/conf.d/20-xdebug.ini \
&& ln -s /usr/local/bin/composer.phar /usr/local/bin/composer \
&& sed -e 's|^;\?opcache.validate_timestamps \?=.*|opcache.validate_timestamps=1|g' \
-i /etc/php/7.3/fpm/php.ini \
&& apt-get clean
-i /etc/php/$PHP_VERSION/fpm/php.ini \
&& apt-get clean \
&& update-alternatives --install /usr/sbin/php-fpm php-fpm /usr/sbin/php-fpm$PHP_VERSION 5
VOLUME /var/www
VOLUME /var/lib/egroupware
VOLUME /var/lib/php/sessions
EXPOSE 9000
ADD entrypoint.sh /
CMD ["php-fpm7.3", "--nodaemonize"]
CMD ["php-fpm", "--nodaemonize"]
ENTRYPOINT ["/entrypoint.sh"]

View File

@ -1,23 +1,47 @@
#!/bin/bash -x
REPO=egroupware
IMAGE=development
BASE=ubuntu:18.04
RECOMMENDED_PHP_VERSION=7.3
PHP_VERSION=${1:-7.3}
TAG=$(docker run --rm -i --entrypoint bash $REPO/$IMAGE -c "apt update && apt search php$PHP_VERSION-fpm" 2>/dev/null|grep php$PHP_VERSION-fpm|sed "s|^php$PHP_VERSION-fpm/bionic.*\(7\.[0-9]*\.[0-9]*\).*|\1|g")
test -z "$TAG" && {
echo "Can't get new tag of $REPO/$IMAGE container --> existing"
exit 1
}
DEFAULT=$(git branch|grep ^*|cut -c3-)
TAG=${1:-$DEFAULT}
VERSION=$TAG
VERSION=${2:-$DEFAULT}
BRANCH=$(echo $VERSION|sed 's/\.[0-9]\{8\}$//')
[ $VERSION = $BRANCH ] && VERSION="$BRANCH.x-dev"
[ $BRANCH != "master" ] && {
TAG=$BRANCH-$TAG
}
[ $BRANCH = "master" ] && {
TAG=master
VERSION=dev-master
}
echo -e "\nbuilding $REPO/$IMAGE:$TAG\n"
cd $(dirname $0)
docker pull ubuntu:18.04
docker build --build-arg "VERSION=$VERSION" -t egroupware/development:$TAG . && {
docker push egroupware/development:$TAG
# tag only stable releases as latest
[ $TAG != "master" ] && {
docker tag egroupware/development:$TAG egroupware/development:latest
docker push egroupware/development:latest
}
[ "$BRANCH" != $VERSION -a "${BRANCH}.x-dev" != $VERSION ] && {
docker tag egroupware/development:$VERSION egroupware/development:$BRANCH
docker push egroupware/development:$BRANCH
docker pull $BASE
docker build --build-arg "VERSION=$VERSION" --build-arg="PHP_VERSION=$PHP_VERSION" -t $REPO/$IMAGE:$TAG . && {
docker push $REPO/$IMAGE:$TAG
# tag by major PHP version eg. 7.3
docker tag $REPO/$IMAGE:$TAG $REPO/$IMAGE:$PHP_VERSION
docker push $REPO/$IMAGE:$PHP_VERSION
# tag only recommended PHP version as latest and $BRANCH (eg. master)
[ $BRANCH = "master" -a $PHP_VERSION = $RECOMMENDED_PHP_VERSION ] && {
docker tag $REPO/$IMAGE:$TAG $REPO/$IMAGE:latest
docker push $REPO/$IMAGE:latest
docker tag $REPO/$IMAGE:$TAG $REPO/$IMAGE:$BRANCH
docker push $REPO/$IMAGE:$BRANCH
}
}

View File

@ -25,6 +25,16 @@ volumes:
type: none
o: bind
device: $PWD/sources/egroupware/swoolepush
# collabora-config
collabora-config:
driver_opts:
type: none
o: bind
# to upgrade an existing non-docker installation most easy is to use the existing
# data directory /var/lib/egroupware AND the host database see below
#device: /var/lib/egroupware/default/loolwsd
# otherwise data is stored in data subdirectory of the current directory
device: $PWD/data/default/loolwsd
# for Mac and Windows, do NOT use a directory for the DB, as the Docker host is in a VM!
db:
sessions:
@ -32,6 +42,7 @@ volumes:
cache:
services:
egroupware:
# you can also use tags like: 7.3, 7.3.12 or 7.4
image: egroupware/development:master
# setting a default language for a new installation
#environment:
@ -110,6 +121,7 @@ services:
- "4443:443"
depends_on:
- egroupware
- collabora-key
container_name: egroupware-nginx
# run an own MariaDB:10.4 (you can use EGroupware's database backup and restore to add your existing database)
@ -121,6 +133,9 @@ services:
volumes:
- db:/var/lib/mysql
container_name: egroupware-db
# make mysql also available on the host
#ports:
#- "3306:3306"
# push server using phpswoole
push:
@ -153,3 +168,20 @@ services:
command: --schedule "0 0 4 * * *"
container_name: egroupware-watchtower
restart: always
# Collabora Online Office
collabora-key:
image: "quay.io/egroupware/collabora-key:stable"
#image: collabora/code:latest
# needs to be initialised via: docker run --rm -v dev_collabora-config:/mnt --entrypoint '/bin/cp -r /etc/loolwsd /mnt' quay.io/egroupware/collabora-key:stable
volumes:
- collabora-config:/etc/loolwsd
# dont try to regenerate the (not used certificate) as volumn is readonly
environment:
- DONT_GEN_SSL_CERT=1
restart: always
container_name: collabora-key
# set the ip-address of your docker host AND your official DNS name so Collabora
# can access EGroupware without the need to go over your firewall
#extra_hosts:
#- "my.host.name:ip-address"

View File

@ -2,16 +2,17 @@
set -ex
VERSION=${VERSION:-dev-master}
PHP_VERSION=${PHP_VERSION:-7.3}
# if EGW_SESSION_TIMEOUT is set in environment, propagate value to php.ini
test -n "$EGW_SESSION_TIMEOUT" && test "$EGW_SESSION_TIMEOUT" -ge 1440 &&
sed -e "s/^;\?session.gc_maxlifetime.*/session.gc_maxlifetime=$EGW_SESSION_TIMEOUT/g" \
-i /etc/php/7.3/fpm/php.ini
-i /etc/php/$PHP_VERSION/fpm/php.ini
# if XDEBUG_REMOTE_HOST is set, patch it into xdebug config
test -n "$XDEBUG_REMOTE_HOST" && \
sed -e "s/^xdebug.remote_host.*/xdebug.remote_host=$XDEBUG_REMOTE_HOST/g" \
-i /etc/php/7.3/fpm/conf.d/*xdebug.ini
-i /etc/php/$PHP_VERSION/fpm/conf.d/*xdebug.ini
# downgrade composer to 1.8.6, as 1.9.x does not work with "dev-master" version :(
composer selfupdate 1.8.6
@ -79,7 +80,7 @@ chmod 600 $LOG
max_retries=10
export try=0
# EGW_SKIP_INSTALL=true skips initial installation (no header.inc.php yet)
until [ -n "$EGW_SKIP_INSTALL" -a ! -f /var/www/egroupware/header.inc.php ] || \
until [ "$EGW_SKIP_INSTALL" = "allways" -o -n "$EGW_SKIP_INSTALL" -a ! -f /var/www/egroupware/header.inc.php ] || \
php /var/www/egroupware/doc/rpm-build/post_install.php \
--start_webserver "" --autostart_webserver "" \
--start_db "" --autostart_db "" \
@ -113,4 +114,4 @@ done 2>&1 | tee -a $LOG
# to run async jobs
service cron start
exec "$@"
exec php-fpm$PHP_VERSION --nodaemonize

View File

@ -27,9 +27,6 @@ server {
index index.php index.html index.htm;
# other settings
client_max_body_size 65M;
# EGroupware installed in /var/www/egroupware
location ^~ /egroupware {
alias /var/www/egroupware/;
@ -114,4 +111,25 @@ server {
location = / {
return 301 $scheme://$http_host/egroupware/index.php;
}
# Collabora sniplet meant to be included in server block of EGroupware vhost
# static files
location ^~ /loleaflet {
proxy_pass http://collabora-key:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass http://collabora-key:9980;
proxy_set_header Host $http_host;
}
# websockets, download, presentation and image upload
location ^~ /lool {
proxy_pass http://collabora-key:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}

View File

@ -8,6 +8,12 @@ upstream fpm {
server egroupware:9000;
}
# redirects needs to use X-Forwarded-Proto too
map $http_x_forwarded_proto $redirectscheme {
default $scheme;
https https;
}
server {
access_log off;
@ -105,15 +111,15 @@ server {
}
# CalDAV & CardDAV autoconfig
location ~ ^/.well-known/(caldav|carddav)$ {
return 301 $scheme://$host/egroupware/groupdav.php/;
return 301 $redirectscheme://$host/egroupware/groupdav.php/;
}
location ~ ^(/principals/users/.*)$ {
return 301 $scheme://$host/egroupware/groupdav.php$1;
return 301 $redirectscheme://$host/egroupware/groupdav.php$1;
}
# Nginx does NOT use index for OPTIONS requests breakng WebDAV
# for Windows, which sends OPTIONS / and stalls on Nginx 405 response!
# This also redirects all requests to root to EGroupware.
location = / {
return 301 $scheme://$host/egroupware/index.php;
return 301 $redirectscheme://$host/egroupware/index.php;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,22 @@
egroupware-docker (19.1.20191220) hardy; urgency=low
* All apps: make list columns being sortable via column-selector dialog
* Admin: optional session-action column in access-log and sessions
* Admin: Add filemanager (home directory) as an option to move to new user when deleting an account
* Admin: Fix some hooks got missed when deleting a user
* File selector: implement Overwrite and Rename possibilities for saving an existing email message or attachment
* Mobile theme: fix mobile theme sidebar not showing notifications
* Html Editor: Add a custom paragraph into block formating in order to get paragraph lines with no line-height
* Mail: keep number & bullet lists when converting to plain text
* Notifications: implement new indicator in dashboard in order to notify user about unread notifications
* Calendar: New preference for notifications about events you created, but are not a participant in
* Addressbook: Fix files and entries linked to a new contact were not saved
* Rocket.Chat: fix Message action on status app's contextmenu is always active even when Rochet.Chat is not yet logged in and active
* Tracker: Fix HTML tickets showed their HTML tags in async notifications
* Packages/WebDAV: remove upload / PUT limit of 65MB (now 1GB), you need to accept/merge changes in apache/nginx.conf files!
-- Ralf Becker <rb@egroupware.org> Fri, 20 Dec 2019 08:40:34 +0100
egroupware-docker (19.1.20191119) hardy; urgency=low
* CalDAV/Calendar: Lightning 68 no longer allowed to accept/reject invitations

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<?xml-stylesheet type="text/css" href="../less/svg.css" ?>
<svg version="1.1" id="pixelegg_home" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<g>
<path fill="#696969" d="M30.62,16.719L17.894,3.991c-0.514-0.514-1.232-0.655-1.889-0.494
c-0.658-0.162-1.375-0.02-1.889,0.494L1.388,16.719c-0.781,0.781-0.181,1,0.601,1.781c0,0,3.069,0.088,3,0v11h8v-9h6v9h8v-11h3
C30.771,17.719,31.401,17.5,30.62,16.719z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 832 B

View File

@ -104,7 +104,7 @@ try {
'no_exception_handler' => true, // we already installed our own
// only log ajax requests which represent former GET requests or submits
// cuts down updates to egw_access_log table
'no_dla_update' => !preg_match('/(Etemplate::ajax_process_content|\.jdots_framework\.ajax_exec\.template)$/', $_GET['menuaction']),
'no_dla_update' => !preg_match('/(Etemplate::ajax_process_content|\.jdots_framework\.ajax_exec\.template)/', $_GET['menuaction']),
)
);
include_once('./header.inc.php');

View File

@ -2813,18 +2813,22 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
* action => string
* )
* @param string $path path to save the emails
* @param string $submit_button_id dialog button id of triggered submit
* @param string $savemode save mode: 'overwrite' or 'rename'
*/
function ajax_vfsSave ($params,$path)
function ajax_vfsSave ($params, $path, $submit_button_id='', $savemode='rename')
{
unset($submit_button_id); // not used here
$response = Api\Json\Response::get();
switch ($params['action'])
{
case 'message':
$result = $this->vfsSaveMessages($params['ids'], $path);
$result = $this->vfsSaveMessages($params['ids'], $path, $savemode);
break;
case 'attachment':
$result = $this->vfsSaveAttachments($params['ids'], $path);
$result = $this->vfsSaveAttachments($params['ids'], $path, $savemode);
break;
}
$response->call('app.mail.vfsSaveCallback', $result);
@ -2835,6 +2839,7 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
*
* @param string|array $ids use splitRowID, to separate values
* @param string $path path in vfs (no Vfs::PREFIX!), only directory for multiple id's ($ids is an array)
* @param string $savemode save mode: 'overwrite' or 'rename'
*
* @return array returns an array including message and success result
* array (
@ -2842,7 +2847,7 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
* 'success' => BOOLEAN
* )
*/
function vfsSaveMessages($ids,$path)
function vfsSaveMessages($ids,$path, $savemode='rename')
{
// add mail translation
Api\Translation::add_app('mail');
@ -2884,17 +2889,20 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
$file = $dir . '/' . mail_bo::clean_subject_for_filename(str_replace($dir.'/', '', $path));
}
// Check if file already exists, then try to assign a none existance filename
$counter = 1;
$tmp_file = $file;
while (Vfs::file_exists($tmp_file))
if ($savemode != 'overwrite')
{
// Check if file already exists, then try to assign a none existance filename
$counter = 1;
$tmp_file = $file;
$pathinfo = pathinfo(Vfs::basename($tmp_file));
$tmp_file = $dir . '/' . $pathinfo['filename'] . '(' . $counter . ')' . '.' . $pathinfo['extension'];
$counter++;
while (Vfs::file_exists($tmp_file))
{
$tmp_file = $file;
$pathinfo = pathinfo(Vfs::basename($tmp_file));
$tmp_file = $dir . '/' . $pathinfo['filename'] . '(' . $counter . ')' . '.' . $pathinfo['extension'];
$counter++;
}
$file = $tmp_file;
}
$file = $tmp_file;
if (!($fp = Vfs::fopen($file,'wb')) || !fwrite($fp,$message))
{
@ -2927,6 +2935,7 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
*
* @param string|array $ids '::' delimited mailbox::uid::part-id::is_winmail::name (::name for multiple id's)
* @param string $path path in vfs (no Vfs::PREFIX!), only directory for multiple id's ($ids is an array)
* @param string $savemode save mode: 'overwrite' or 'rename'
*
* @return array returns an array including message and success result
* array (
@ -2934,7 +2943,7 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
* 'success' => BOOLEAN
* )
*/
function vfsSaveAttachments($ids,$path)
function vfsSaveAttachments($ids,$path, $savemode='rename')
{
$res = array (
'msg' => lang('Attachment has been saved successfully.'),
@ -3032,16 +3041,19 @@ $filter['before']= date("d-M-Y", $cutoffdate2);
$file = $dir. '/' . ($filename ? $filename : mail_bo::clean_subject_for_filename($attachment['filename']));
$counter = 1;
$tmp_file = $file;
while (Vfs::file_exists($tmp_file))
if ($savemode != 'overwrite')
{
$counter = 1;
$tmp_file = $file;
$pathinfo = pathinfo(Vfs::basename($tmp_file));
$tmp_file = $dir . '/' . $pathinfo['filename'] . '(' . $counter . ')' . '.' . $pathinfo['extension'];
$counter++;
while (Vfs::file_exists($tmp_file))
{
$tmp_file = $file;
$pathinfo = pathinfo(Vfs::basename($tmp_file));
$tmp_file = $dir . '/' . $pathinfo['filename'] . '(' . $counter . ')' . '.' . $pathinfo['extension'];
$counter++;
}
$file = $tmp_file;
}
$file = $tmp_file;
if (!($fp = Vfs::fopen($file,'wb')) ||
!fwrite($fp,$attachment['attachment']))

View File

@ -3047,7 +3047,7 @@ app.classes.mail = AppJS.extend(
subject = this.et2.getArrayMgr('content').getEntry('mail_displaysubject');
}
// Replace these now, they really cause problems later
var filename = subject ? subject.replace(/[\f\n\t\v\/\\\?]/g,"_") : 'unknown';
var filename = subject ? subject.replace(/[\f\n\t\v\x0b\:*#?<>%"\/\\\?]/g,"_") : 'unknown';
ids.push(_id);
names.push(filename+'.eml');
}

View File

@ -3,6 +3,8 @@
(select mails by clicking on the line, like a checkbox) mail ru (выберите письма нажатием на строчку, как место выбора)
(with checkbox enforced) mail ru (с отмеченным флажком)
activating by date requires a start- and end-date! mail ru Активация по дате требует наличия начальной и конечной даты!
add as new mail ru Новая запись
add folder mail ru Добавить папку
add to addressbook mail ru добавить в адресную книгу
all available info admin ru Вся доступная информация
all of mail ru Все из
@ -12,6 +14,7 @@ allways a new window mail ru Всегда новое окно
always show html emails mail ru Всегда показывать письма формата HTML
any of mail ru Любой из
any status mail ru Любое состояние
append mail ru Дополнить
attach users vcard at compose to every new mail mail ru Вкладывать визитку пользователя в каждое новое письмо
attach vcard mail ru Вложить vCard (визитку)
attachments mail ru Вложения
@ -215,6 +218,7 @@ save: mail ru Сохранить
saving of message %1 failed. destination folder %2 does not exist. mail ru Сохранение сообщения %1 не удалось. Папка назначения %2 не существует.
saving of message %1 succeeded. check folder %2. mail ru Сохранение сообщения %1 прошло успешно. Проверьте папку %2.
select all mail ru Выбрать все
select an existing entry in order to append mail content to it mail ru Выберите существующую запись для добавления в неё содержимого письма
selected mail ru Выбранный
send message and move to send folder (if configured) mail ru Отправить сообщение и переместить в папку Отправленные
sender mail ru Отправитель

View File

@ -1016,6 +1016,7 @@ body {
border-right: 0;
border-top: 0;
border-bottom: 0;
margin-left: 4px;
}
#mail-index div.splitter-bar-horizontal {
border-top: 1px solid #B4B4B4;
@ -1036,7 +1037,6 @@ body {
margin: 3px 5px 0 0;
}
#mail-index div#mail-index_mailPreview div#mail-index_mailPreviewHeadersSubject {
width: 58%;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;

View File

@ -1004,6 +1004,7 @@ body {
border-right: 0;
border-top: 0;
border-bottom: 0;
margin-left: 4px;
}
#mail-index div.splitter-bar-horizontal {
border-top: 1px solid #B4B4B4;

View File

@ -90,6 +90,7 @@ body {
border-right: 0;
border-top: 0;
border-bottom: 0;
margin-left: 4px;
}
div.splitter-bar-horizontal {
border-top:1px solid #B4B4B4;

27
manifest.json Normal file
View File

@ -0,0 +1,27 @@
{
"short_name": "EGroupware",
"name": "EGroupware",
"category": ["business", "education"],
"description": "EGroupware is an online open-source enterprise software for business use and provides the services by using cutting edge collaboration technologies which allow organisations to collaborate in a secure and function rich environment, supporting integrated project teams across and within organisation boundaries.",
"orientation": "landscape-primary",
"icons": [
{
"src": "api/templates/default/images/logo_192x192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "api/templates/default/images/logo_512x512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": "index.php",
"background_color": "#fafafa",
"display": "standalone",
"scope": "/egroupware",
"theme_color": "#0073ae",
"serviceworker": {
"src": "/service-worker.js"
}
}

View File

@ -765,7 +765,7 @@
if (!$egwpopup.is(":visible"))
{
$body.on('click', function(e){
if (!$counter.is(e.target) && e.originalEvent.target.className !== 'popup_note' &&
if (!$counter.is(e.target) && $counter.find(e.target).length == 0 &&
!$egwpopup.is(e.target) && $egwpopup.has(e.target).length == 0)
{
jQuery(this).off(e);
@ -781,8 +781,6 @@
if (_stat) return;
$body.off('click');
}
// Remove popup_note as soon as message list is toggled
jQuery('.popup_note', '#topmenu_info_notifications').remove();
if ($egwpopup.length>0) $egwpopup.toggle('slide');
};
@ -793,7 +791,6 @@
notifications.prototype.counterUpdate = function ()
{
var $topmenu_info_notifications = jQuery('#topmenu_info_notifications');
var $popup_note = jQuery(document.createElement('div')).addClass('popup_note');
var counter = 0;
for (var id in notifymessages)
{
@ -802,13 +799,11 @@
if (counter > 0)
{
$topmenu_info_notifications.addClass('egwpopup_notify');
if (jQuery('#egw_fw_topmenu:visible').length == 0) $topmenu_info_notifications.append($popup_note);
$popup_note.text(egw.lang('You have %1 unread notifications', counter));
setTimeout(function (){$popup_note.remove();}, 4000);
framework.topmenu_info_notify('notifications', true, counter,egw.lang('You have %1 unread notifications', counter));
}
else
{
$topmenu_info_notifications.removeClass('egwpopup_notify');
framework.topmenu_info_notify('notifications', false);
}
};

View File

@ -1242,7 +1242,7 @@ option:checked {
.ui-icon-close {
/*visibility: hidden;*/
/*background-image: url(../images/search.png);*/
background-image: url("../images/cancel.png");
background-image: url("../images/cancel.svg");
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: 12px 12px;
@ -1272,7 +1272,7 @@ span.ui-icon-close {
}
/*Schliessen x*/
.ui-icon-closethick {
background-image: url(../images/close.png) !important;
background-image: url(../images/close.svg) !important;
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: contain;
@ -1321,7 +1321,7 @@ span.ui-multiselect-header {
color: #FFFFFF;
}
span.ui-icon-search {
background-image: url(../images/search.png) !important;
background-image: url(../images/search.svg) !important;
background-position: 0px;
background-size: 10px 10px;
}
@ -5078,6 +5078,21 @@ td.message span.message {
background-image: url(../images/notification_message.svg);
border-left: 1px solid #636262;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .egw_fw_topmenu_info_notify {
position: absolute;
background-color: #c14343;
bottom: 0px;
height: 17px;
white-space: nowrap;
line-height: 16px;
width: 17px;
border-top-right-radius: 50%;
margin-left: -3px;
color: #fff9fb;
border: 2px solid #ffffff;
text-align: center;
border-radius: 50%;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .popup_note {
position: absolute;
width: 280px;
@ -6482,7 +6497,7 @@ span.egw_tutorial_title {
body #egw_fw_basecontainer div#egw_fw_topmenu_items {
width: 100%;
display: block;
padding-top: 10px;
padding-top: 50px;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul {
display: inline-block;
@ -6522,7 +6537,7 @@ span.egw_tutorial_title {
display: none;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul a#topmenu_home {
background-image: url(../images/topmenu_items/mobile/home.png);
background-image: url(../images/topmenu_items/mobile/home.svg);
display: none;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul a#topmenu_prefs {
@ -6694,10 +6709,6 @@ span.egw_tutorial_title {
body #egw_fw_sidebar.avatarSubmenu {
top: 280px;
}
body #egw_fw_sidebar {
top: 55px;
bottom: 5px;
}
body #egw_fw_sidebar #egw_fw_sidemenu {
position: absolute;
top: 0px;
@ -6707,13 +6718,12 @@ span.egw_tutorial_title {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
z-index: 0;
padding-top: 0.6em;
font-size: 0.9em;
background-color: white;
}
body #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_apps .egw_fw_ui_sidemenu_entry_header {
margin: 0px 5px 0px 2px;
padding: 4px 10px 0 16px;
padding: 4px 10px 0 0px;
overflow: visible;
height: 38px;
border: none;
@ -6967,17 +6977,13 @@ span.egw_tutorial_title {
body .sidebar-toggle #egw_fw_top_toolbar div#egw_fw_menu {
background-image: url(../images/topmenu_items/mobile/menu.png);
}
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_topmenu_info_items,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_topmenu,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_userinfo,
body .sidebar-toggle #egw_fw_top_toolbar .egw_fw_logout,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_appsToggle {
display: none !important;
}
body .sidebar-toggle #egw_fw_sidebar {
top: 70px;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu {
width: 82px !important;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_content {
display: none !important;
}
@ -6989,8 +6995,8 @@ span.egw_tutorial_title {
padding: 0;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_header {
margin: 0px 5px 0px 2px;
padding: 4px 10px 0 16px;
margin: 0px 0px 0px 2px;
padding: 4px 0px 0 0px;
overflow: visible;
height: 38px;
width: 50px;

View File

@ -228,7 +228,7 @@
div#egw_fw_topmenu_items{
width: 100%;
display: block;
padding-top:10px;
padding-top:50px;
ul{
display:inline-block;
@ -264,7 +264,7 @@
}
a#topmenu_home, a#topmenu_logout {display: none;}
a#topmenu_home {
background-image: url(../images/topmenu_items/mobile/home.png);
background-image: url(../images/topmenu_items/mobile/home.svg);
display: none;
}
a#topmenu_prefs {
@ -442,8 +442,6 @@
//###################
#egw_fw_sidebar.avatarSubmenu {top:280px;}
#egw_fw_sidebar{
top: 55px;
bottom: 5px;
//SIDE AREA
#egw_fw_sidemenu {
position: absolute;
@ -454,14 +452,13 @@
overflow-y: auto;
-webkit-overflow-scrolling:touch;
z-index: 0;
padding-top: 0.6em;
font-size: 0.9em;
background-color:white;
.egw_fw_ui_sidemenu_entry_apps {
.egw_fw_ui_sidemenu_entry_header
{
margin:0px 5px 0px 2px;
padding: 4px 10px 0 16px;
padding: 4px 10px 0 0px;
overflow: visible;
height:38px;
border:none;
@ -680,12 +677,10 @@
.sidebar-toggle{
#egw_fw_top_toolbar {
div#egw_fw_menu {background-image: url(../images/topmenu_items/mobile/menu.png);}
#egw_fw_userinfo, .egw_fw_logout, #egw_fw_appsToggle {display: none !important;}
#egw_fw_topmenu_info_items, #egw_fw_topmenu, #egw_fw_userinfo, .egw_fw_logout, #egw_fw_appsToggle {display: none !important;}
}
#egw_fw_sidebar{
top: 70px;
#egw_fw_sidemenu{
width:82px !important;
.egw_fw_ui_sidemenu_entry_content{
display:none !important;
}
@ -699,8 +694,8 @@
}
}
.egw_fw_ui_sidemenu_entry_header{
margin:0px 5px 0px 2px;
padding: 4px 10px 0 16px;
margin:0px 0px 0px 2px;
padding: 4px 0px 0 0px;
overflow: visible;
height:38px;
width:50px;

View File

@ -1231,7 +1231,7 @@ option:checked {
.ui-icon-close {
/*visibility: hidden;*/
/*background-image: url(../images/search.png);*/
background-image: url("../images/cancel.png");
background-image: url("../images/cancel.svg");
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: 12px 12px;
@ -1261,7 +1261,7 @@ span.ui-icon-close {
}
/*Schliessen x*/
.ui-icon-closethick {
background-image: url(../images/close.png) !important;
background-image: url(../images/close.svg) !important;
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: contain;
@ -1310,7 +1310,7 @@ span.ui-multiselect-header {
color: #FFFFFF;
}
span.ui-icon-search {
background-image: url(../images/search.png) !important;
background-image: url(../images/search.svg) !important;
background-position: 0px;
background-size: 10px 10px;
}
@ -5067,6 +5067,21 @@ td.message span.message {
background-image: url(../images/notification_message.svg);
border-left: 1px solid #636262;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .egw_fw_topmenu_info_notify {
position: absolute;
background-color: #c14343;
bottom: 0px;
height: 17px;
white-space: nowrap;
line-height: 16px;
width: 17px;
border-top-right-radius: 50%;
margin-left: -3px;
color: #fff9fb;
border: 2px solid #ffffff;
text-align: center;
border-radius: 50%;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .popup_note {
position: absolute;
width: 280px;

View File

@ -1242,7 +1242,7 @@ option:checked {
.ui-icon-close {
/*visibility: hidden;*/
/*background-image: url(../images/search.png);*/
background-image: url("../images/cancel.png");
background-image: url("../images/cancel.svg");
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: 12px 12px;
@ -1272,7 +1272,7 @@ span.ui-icon-close {
}
/*Schliessen x*/
.ui-icon-closethick {
background-image: url(../images/close.png) !important;
background-image: url(../images/close.svg) !important;
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: contain;
@ -1321,7 +1321,7 @@ span.ui-multiselect-header {
color: #FFFFFF;
}
span.ui-icon-search {
background-image: url(../images/search.png) !important;
background-image: url(../images/search.svg) !important;
background-position: 0px;
background-size: 10px 10px;
}
@ -5078,6 +5078,21 @@ td.message span.message {
background-image: url(../images/notification_message.svg);
border-left: 1px solid #636262;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .egw_fw_topmenu_info_notify {
position: absolute;
background-color: #c14343;
bottom: 0px;
height: 17px;
white-space: nowrap;
line-height: 16px;
width: 17px;
border-top-right-radius: 50%;
margin-left: -3px;
color: #fff9fb;
border: 2px solid #ffffff;
text-align: center;
border-radius: 50%;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .popup_note {
position: absolute;
width: 280px;

View File

@ -11,6 +11,7 @@
<meta name="author" content="EGroupware GmbH http://www.egroupware.org" />
{pngfix}
{meta_robots}
<link rel="manifest" href="{webserver_url}/manifest.json"/>
<link rel="icon" href="{img_icon}" type="image/x-ico" />
<link rel="shortcut icon" href="{img_shortcut}" />
<link rel="stylesheet" href="{webserver_url}/api/js/offline/themes/offline-theme-slide.css">

File diff suppressed because one or more lines are too long

BIN
pixelegg/images/dhtmlxtree/thunderbird.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<?xml-stylesheet type="text/css" href="../less/svg.css" ?>
<svg version="1.1" id="pixelegg_home" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<g>
<path fill="#696969" d="M30.62,16.719L17.894,3.991c-0.514-0.514-1.232-0.655-1.889-0.494
c-0.658-0.162-1.375-0.02-1.889,0.494L1.388,16.719c-0.781,0.781-0.181,1,0.601,1.781c0,0,3.069,0.088,3,0v11h8v-9h6v9h8v-11h3
C30.771,17.719,31.401,17.5,30.62,16.719z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 832 B

View File

@ -1,24 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<?xml-stylesheet type="text/css" href="../less/svg.css" ?>
<svg version="1.1" id="pixelegg_search" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<g>
<g>
<path fill="#696969" d="M20.201,21.894l-0.182-0.182c-0.332-0.331-0.332-0.868,0-1.2
l0.601-0.602c0.332-0.332,0.87-0.332,1.202,0l0.182,0.182c1.473-1.861,2.357-4.209,2.357-6.768
c0-6.036-4.893-10.929-10.927-10.929c-6.036,0-10.929,4.893-10.929,10.929s4.893,10.929,10.929,10.929
c2.558,0,4.905-0.886,6.767-2.357l1.717,1.718l1.803-1.803l-1.719-1.719C21.473,20.762,20.87,21.364,20.201,21.894z
M13.433,21.674c-4.612,0-8.35-3.738-8.35-8.35s3.738-8.35,8.35-8.35c4.611,0,8.349,3.738,8.349,8.35
S18.044,21.674,13.433,21.674z"/>
<path fill="#696969" d="M29.217,25.742l-4.041-4.04c-0.371-0.372-0.975-0.372-1.347,0
l-0.108,0.108l1.104,1.104c0.332,0.332,0.332,0.87,0,1.202l-0.602,0.602c-0.332,0.331-0.869,0.331-1.201,0l-1.104-1.105
l-0.108,0.109c-0.373,0.371-0.373,0.975,0,1.348l4.041,4.041c0.371,0.371,0.975,0.371,1.346,0l2.021-2.021
C29.589,26.717,29.589,26.113,29.217,25.742z"/>
</g>
</g>
</g>
</svg>
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
<g>
<title>background</title>
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
</g>
<g>
<title>Layer 1</title>
<path id="svg_2" d="m30.695,26.655l-4.929,-4.613c-0.037,-0.034 -0.081,-0.05 -0.121,-0.078l-1.991,-1.861c1.366,-2.06 2.132,-4.547 2.044,-7.207c-0.225,-6.808 -5.926,-12.144 -12.732,-11.919c-6.808,0.226 -12.144,5.926 -11.919,12.735c0.225,6.807 5.926,12.143 12.734,11.918c2.117,-0.071 4.084,-0.678 5.792,-1.678l2.349,2.199c0.002,0 0.002,0.001 0.002,0.001l4.929,4.616c0.453,0.421 1.166,0.397 1.592,-0.053l2.305,-2.468c0.423,-0.454 0.4,-1.167 -0.055,-1.592zm-17.081,-3.829c-5.258,0.175 -9.661,-3.946 -9.836,-9.205c-0.173,-5.258 3.948,-9.662 9.207,-9.835c5.257,-0.174 9.662,3.947 9.836,9.206c0.173,5.258 -3.948,9.66 -9.207,9.834z" fill="#62686A"/>
<line id="svg_3" y2="54.75" x2="14.958" y1="29.125" x1="14.958" fill="none"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 953 B

View File

@ -1,24 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
<?xml-stylesheet type="text/css" href="../less/svg.css" ?>
<svg version="1.1" id="pixelegg_search" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<g>
<g>
<path fill="#696969" d="M20.201,21.894l-0.182-0.182c-0.332-0.331-0.332-0.868,0-1.2
l0.601-0.602c0.332-0.332,0.87-0.332,1.202,0l0.182,0.182c1.473-1.861,2.357-4.209,2.357-6.768
c0-6.036-4.893-10.929-10.927-10.929c-6.036,0-10.929,4.893-10.929,10.929s4.893,10.929,10.929,10.929
c2.558,0,4.905-0.886,6.767-2.357l1.717,1.718l1.803-1.803l-1.719-1.719C21.473,20.762,20.87,21.364,20.201,21.894z
M13.433,21.674c-4.612,0-8.35-3.738-8.35-8.35s3.738-8.35,8.35-8.35c4.611,0,8.349,3.738,8.349,8.35
S18.044,21.674,13.433,21.674z"/>
<path fill="#696969" d="M29.217,25.742l-4.041-4.04c-0.371-0.372-0.975-0.372-1.347,0
l-0.108,0.108l1.104,1.104c0.332,0.332,0.332,0.87,0,1.202l-0.602,0.602c-0.332,0.331-0.869,0.331-1.201,0l-1.104-1.105
l-0.108,0.109c-0.373,0.371-0.373,0.975,0,1.348l4.041,4.041c0.371,0.371,0.975,0.371,1.346,0l2.021-2.021
C29.589,26.717,29.589,26.113,29.217,25.742z"/>
</g>
</g>
</g>
</svg>
<g>
<title>background</title>
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
</g>
<g>
<title>Layer 1</title>
<path id="svg_2" d="m30.695,26.655l-4.929,-4.613c-0.037,-0.034 -0.081,-0.05 -0.121,-0.078l-1.991,-1.861c1.366,-2.06 2.132,-4.547 2.044,-7.207c-0.225,-6.808 -5.926,-12.144 -12.732,-11.919c-6.808,0.226 -12.144,5.926 -11.919,12.735c0.225,6.807 5.926,12.143 12.734,11.918c2.117,-0.071 4.084,-0.678 5.792,-1.678l2.349,2.199c0.002,0 0.002,0.001 0.002,0.001l4.929,4.616c0.453,0.421 1.166,0.397 1.592,-0.053l2.305,-2.468c0.423,-0.454 0.4,-1.167 -0.055,-1.592zm-17.081,-3.829c-5.258,0.175 -9.661,-3.946 -9.836,-9.205c-0.173,-5.258 3.948,-9.662 9.207,-9.835c5.257,-0.174 9.662,3.947 9.836,9.206c0.173,5.258 -3.948,9.66 -9.207,9.834z" fill="#62686A"/>
<line id="svg_3" y2="54.75" x2="14.958" y1="29.125" x1="14.958" fill="none"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 964 B

12
pixelegg/images/view.svg Normal file
View File

@ -0,0 +1,12 @@
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
<g>
<title>background</title>
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
</g>
<g>
<title>Layer 1</title>
<path id="svg_2" d="m30.695,26.655l-4.929,-4.613c-0.037,-0.034 -0.081,-0.05 -0.121,-0.078l-1.991,-1.861c1.366,-2.06 2.132,-4.547 2.044,-7.207c-0.225,-6.808 -5.926,-12.144 -12.732,-11.919c-6.808,0.226 -12.144,5.926 -11.919,12.735c0.225,6.807 5.926,12.143 12.734,11.918c2.117,-0.071 4.084,-0.678 5.792,-1.678l2.349,2.199c0.002,0 0.002,0.001 0.002,0.001l4.929,4.616c0.453,0.421 1.166,0.397 1.592,-0.053l2.305,-2.468c0.423,-0.454 0.4,-1.167 -0.055,-1.592zm-17.081,-3.829c-5.258,0.175 -9.661,-3.946 -9.836,-9.205c-0.173,-5.258 3.948,-9.662 9.207,-9.835c5.257,-0.174 9.662,3.947 9.836,9.206c0.173,5.258 -3.948,9.66 -9.207,9.834z" fill="#62686A"/>
<line id="svg_3" y2="54.75" x2="14.958" y1="29.125" x1="14.958" fill="none"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 964 B

View File

@ -396,12 +396,7 @@
{
this._super.apply(this,arguments);
this.setSidebarState(this.activeApp.preferences.toggleMenu);
var self = this;
var $user = jQuery('#egw_fw_userinfo .user');
var $avatar = jQuery('#egw_fw_userinfo .avatar img');
$avatar.attr('src', egw.webserverUrl + '/api/avatar.php?account_id=' + egw.user('account_id'));
var $avatar = jQuery('#topmenu_info_user_avatar');
var $sidebar = jQuery('#egw_fw_sidebar');
$sidebar.removeClass('avatarSubmenu');
this.updateAppsToggle();
@ -409,8 +404,6 @@
$avatar.off().on('click',function(){
$sidebar.toggleClass('avatarSubmenu',!$sidebar.hasClass('avatarSubmenu'));
});
},
/**
@ -462,13 +455,13 @@
if (state === 'on')
{
jQuery('.egw_fw_sidebar_dropMask').remove();
$toggleMenu.addClass('sidebar-toggle');
$toggleMenu.addClass('sidebar-toggle egw_fw_sidebar_toggleOn');
this.toggleMenuResizeHandler(collapseSize);
this.setToggleMenuState('off');
}
else
{
$toggleMenu.removeClass('sidebar-toggle');
$toggleMenu.removeClass('sidebar-toggle egw_fw_sidebar_toggleOn');
this.toggleMenuResizeHandler(expandSize);
this.setToggleMenuState('on');
if (screen.width<700)
@ -1058,11 +1051,13 @@
jQuery(document).ready(function() {
window.framework = new fw_mobile("egw_fw_sidemenu", "egw_fw_tabs",
window.egw_webserverUrl, egw_setSideboxSize, 300, 'egw_fw_basecontainer', 'egw_fw_menu');
window.egw_webserverUrl, egw_setSideboxSize, 300, 'egw_fw_basecontainer', 'egw_fw_toggler');
window.callManual = window.framework.callManual;
jQuery('#egw_fw_print').click(function(){window.framework.print();});
jQuery('#topmenu_logout').click(function(){ window.framework.redirect(this.getAttribute('href')); return false;});
jQuery('form[name^="tz_selection"]').children().on('change', function(){framework.tzSelection(this.value); return false;});
jQuery('form[name^="tz_selection"]').children()
.on('change', function() { framework.tzSelection(this.value); return false; })
.on('click', function(e) { e.stopPropagation(); });
window.egw.link_quick_add('quick_add');
history.pushState({type:'main'}, 'main', '#main');
jQuery(window).on('popstate', function(e){

View File

@ -71,6 +71,40 @@
et2_loadingFinished: function() {
this._super.apply(this, arguments);
setTimeout(function(){jQuery('#egw_fw_firstload').remove();}, 1000);
},
/**
* Set a notification message for topmenu info item
*
* @param {string} _id id of topmenu info item with its prefix
* @param {string} _message message that should be displayed
* @param {string} _tooltip hint text as tooltip
*/
topmenu_info_notify: function(_id, _switch, _message, _tooltip) {
var $items = jQuery('#egw_fw_topmenu_info_items').children();
var prefix = "topmenu_info_";
$items.each(function(i,item){
if (item.id == prefix+_id || item.id == _id)
{
var $notify = jQuery(item).find('.egw_fw_topmenu_info_notify');
if (_switch)
{
if ($notify.length == 0)
{
$notify = jQuery(document.createElement('div'))
.addClass('egw_fw_topmenu_info_notify')
.prop('title', _tooltip)
.appendTo(item);
}
$notify.prop('title', _tooltip).text(_message);
}
else
{
$notify.remove();
}
}
});
}
});
@ -93,7 +127,9 @@
jQuery('#topmenu_info_user_avatar').click(function(){window.framework.toggle_avatar_menu();});
jQuery('#topmenu_info_print_title').click(function(){window.framework.print();});
jQuery('#topmenu_info_logout').click(function(){ window.framework.redirect(this.getAttribute('data-logout-url')); });
jQuery('form[name^="tz_selection"]').children().on('change', function(){framework.tzSelection(this.value); return false;});
jQuery('form[name^="tz_selection"]').children()
.on('change', function() { framework.tzSelection(this.value); return false; })
.on('click', function(e) { e.stopPropagation(); });
window.egw.link_quick_add('topmenu_info_quick_add');
// allowing javascript urls in topmenu and sidebox only under CSP by binding click handlers to them

View File

@ -185,7 +185,7 @@ option:checked {background-color: @color_hover_row;}
.ui-icon-close{
/*visibility: hidden;*/
/*background-image: url(../images/search.png);*/
background-image: url("../images/cancel.png");
background-image: url("../images/cancel.svg");
background-repeat: no-repeat;
background-color: @gray_0;
background-size: 12px 12px;
@ -206,7 +206,7 @@ span.ui-icon-close {margin-top: 0px; top: 5px;}
/*Schliessen x*/
.ui-icon-closethick {
background-image: url(../images/close.png) !important;
background-image: url(../images/close.svg) !important;
background-repeat: no-repeat;
background-color: @gray_0;
background-size: contain;
@ -245,7 +245,7 @@ span.ui-icon-close {margin-top: 0px; top: 5px;}
span.ui-multiselect-header {color: @gray_0;}
span.ui-icon-search {
background-image: url(../images/search.png) !important;
background-image: url(../images/search.svg) !important;
background-position: 0px;
background-size: 10px 10px;

View File

@ -119,6 +119,21 @@
opacity: 0.4;
background-image: url(../images/notification_message.svg);
border-left: 1px solid #636262;
.egw_fw_topmenu_info_notify {
position: absolute;
background-color: #c14343;
bottom: 0px;
height: 17px;
white-space: nowrap;
line-height: 16px;
width: 17px;
border-top-right-radius: 50%;
margin-left: -3px;
color: #fff9fb;
border: 2px solid #ffffff;
text-align: center;
border-radius: 50%;
}
.popup_note {
position: absolute;
width: 280px;

View File

@ -1253,7 +1253,7 @@ option:checked {
.ui-icon-close {
/*visibility: hidden;*/
/*background-image: url(../images/search.png);*/
background-image: url("../images/cancel.png");
background-image: url("../images/cancel.svg");
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: 12px 12px;
@ -1283,7 +1283,7 @@ span.ui-icon-close {
}
/*Schliessen x*/
.ui-icon-closethick {
background-image: url(../images/close.png) !important;
background-image: url(../images/close.svg) !important;
background-repeat: no-repeat;
background-color: #FFFFFF;
background-size: contain;
@ -1332,7 +1332,7 @@ span.ui-multiselect-header {
color: #FFFFFF;
}
span.ui-icon-search {
background-image: url(../images/search.png) !important;
background-image: url(../images/search.svg) !important;
background-position: 0px;
background-size: 10px 10px;
}
@ -5089,6 +5089,21 @@ td.message span.message {
background-image: url(../images/notification_message.svg);
border-left: 1px solid #636262;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .egw_fw_topmenu_info_notify {
position: absolute;
background-color: #c14343;
bottom: 0px;
height: 17px;
white-space: nowrap;
line-height: 16px;
width: 17px;
border-top-right-radius: 50%;
margin-left: -3px;
color: #fff9fb;
border: 2px solid #ffffff;
text-align: center;
border-radius: 50%;
}
#egw_fw_topmenu_info_items #topmenu_info_notifications .popup_note {
position: absolute;
width: 280px;
@ -6493,7 +6508,7 @@ span.egw_tutorial_title {
body #egw_fw_basecontainer div#egw_fw_topmenu_items {
width: 100%;
display: block;
padding-top: 10px;
padding-top: 50px;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul {
display: inline-block;
@ -6533,7 +6548,7 @@ span.egw_tutorial_title {
display: none;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul a#topmenu_home {
background-image: url(../images/topmenu_items/mobile/home.png);
background-image: url(../images/topmenu_items/mobile/home.svg);
display: none;
}
body #egw_fw_basecontainer div#egw_fw_topmenu_items ul a#topmenu_prefs {
@ -6705,10 +6720,6 @@ span.egw_tutorial_title {
body #egw_fw_sidebar.avatarSubmenu {
top: 280px;
}
body #egw_fw_sidebar {
top: 55px;
bottom: 5px;
}
body #egw_fw_sidebar #egw_fw_sidemenu {
position: absolute;
top: 0px;
@ -6718,13 +6729,12 @@ span.egw_tutorial_title {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
z-index: 0;
padding-top: 0.6em;
font-size: 0.9em;
background-color: white;
}
body #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_apps .egw_fw_ui_sidemenu_entry_header {
margin: 0px 5px 0px 2px;
padding: 4px 10px 0 16px;
padding: 4px 10px 0 0px;
overflow: visible;
height: 38px;
border: none;
@ -6978,17 +6988,13 @@ span.egw_tutorial_title {
body .sidebar-toggle #egw_fw_top_toolbar div#egw_fw_menu {
background-image: url(../images/topmenu_items/mobile/menu.png);
}
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_topmenu_info_items,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_topmenu,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_userinfo,
body .sidebar-toggle #egw_fw_top_toolbar .egw_fw_logout,
body .sidebar-toggle #egw_fw_top_toolbar #egw_fw_appsToggle {
display: none !important;
}
body .sidebar-toggle #egw_fw_sidebar {
top: 70px;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu {
width: 82px !important;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_content {
display: none !important;
}
@ -7000,8 +7006,8 @@ span.egw_tutorial_title {
padding: 0;
}
body .sidebar-toggle #egw_fw_sidebar #egw_fw_sidemenu .egw_fw_ui_sidemenu_entry_header {
margin: 0px 5px 0px 2px;
padding: 4px 10px 0 16px;
margin: 0px 0px 0px 2px;
padding: 4px 0px 0 0px;
overflow: visible;
height: 38px;
width: 50px;
@ -7331,6 +7337,7 @@ form[id^="ranking-"] .dialogHeadbar {
margin: 0 auto;
}
div#loginMainDiv div#centerBox {
position: relative;
padding: 0;
-webkit-border-top-right-radius: 0;
-webkit-border-bottom-right-radius: 0;
@ -7390,6 +7397,9 @@ form[id^="ranking-"] .dialogHeadbar {
}
}
@media only screen and (max-device-width : 1024px) and (orientation : portrait) {
body div#loginMainDiv div#centerBox {
position: relative;
}
body div#loginMainDiv div#centerBox form table.divLoginbox {
width: 100%;
}
@ -7424,6 +7434,9 @@ form[id^="ranking-"] .dialogHeadbar {
-o-filter: none;
filter: none;
}
body #egw_fw_sidebar {
top: 50px;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar {
z-index: 998;
width: 300px;
@ -7605,7 +7618,8 @@ form[id^="ranking-"] .dialogHeadbar {
left: 10px;
float: none;
}
body #egw_fw_basecontainer.sidebar-toggle #egw_fw_top_toolbar #egwpopup_fw_notifications {
body #egw_fw_basecontainer.sidebar-toggle #egw_fw_top_toolbar #egwpopup_fw_notifications,
body #egw_fw_basecontainer.sidebar-toggle #egw_fw_top_toolbar #egw_fw_topmenu_info_items {
display: none !important;
}
body #egw_fw_basecontainer.sidebar-toggle #egw_fw_top_toolbar div#egw_fw_menu {
@ -7667,6 +7681,20 @@ form[id^="ranking-"] .dialogHeadbar {
body #egw_fw_basecontainer #egw_fw_top_toolbar #egwpopup_fw_notifications .popup_note {
display: none;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar #egw_fw_topmenu_info_items {
height: 50px;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar #egw_fw_topmenu_info_items .topmenu_info_item {
border: 0;
height: 50px;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar #egw_fw_topmenu_info_items #topmenu_info_print_title span {
height: 50px;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar #egw_fw_topmenu_info_items #topmenu_info_user_avatar span {
margin-top: 4px;
margin-left: 0px;
}
body #egw_fw_basecontainer #egw_fw_top_toolbar div#egw_fw_topmenu_items ul {
border-left: 6px solid silver;
}
@ -7724,6 +7752,29 @@ form[id^="ranking-"] .dialogHeadbar {
body #egw_fw_basecontainer .egw_fw_ui_sidemenu_entry_apps > div {
margin-bottom: 5px;
}
body #egw_fw_basecontainer #egw_fw_toggler {
height: 50px;
}
body #egw_fw_basecontainer #egw_fw_toggler span {
top: 15px;
}
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler {
height: 50px;
background-color: transparent;
}
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler span {
top: 15px;
}
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler span,
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler:hover span {
background-color: white;
}
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler span:before,
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler:hover span:before,
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler span:after,
body #egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler:hover span:after {
background-color: white !important;
}
body div.dhtmlxMenu_egw_SubLevelArea_Polygon {
font-size: medium;
top: 50px !important;

View File

@ -112,6 +112,7 @@
}
}
div#centerBox{
position: relative;
padding: 0;
-webkit-border-top-right-radius: 0;
-webkit-border-bottom-right-radius:0;
@ -173,6 +174,7 @@
body{
div#loginMainDiv{
div#centerBox{
position: relative;
form {
table.divLoginbox {
width:100%;
@ -217,6 +219,9 @@
}
}
#egw_fw_sidebar {
top:50px;
}
#egw_fw_basecontainer {
#egw_fw_top_toolbar {
@ -385,7 +390,7 @@
}
#egw_fw_basecontainer.sidebar-toggle {
#egw_fw_top_toolbar {
#egwpopup_fw_notifications {display: none !important;}
#egwpopup_fw_notifications, #egw_fw_topmenu_info_items {display: none !important;}
div#egw_fw_menu {
background-image: url(../images/topmenu_items/mobile/menu.svg);
width: 50px;
@ -443,6 +448,24 @@
margin-left: 15px;
.popup_note {display: none;}
}
#egw_fw_topmenu_info_items {
height: 50px;
.topmenu_info_item {
border: 0;
height: 50px;
}
#topmenu_info_print_title {
span {
height: 50px;
}
}
#topmenu_info_user_avatar {
span {
margin-top: 4px;
margin-left: 0px;
}
}
}
div#egw_fw_topmenu_items {
ul {
border-left: 6px solid silver;
@ -510,6 +533,27 @@
.egw_fw_ui_sidemenu_entry_apps> div{
margin-bottom: 5px;
}
#egw_fw_toggler {
height: 50px;
span {
top: 15px;
}
}
}
#egw_fw_basecontainer.egw_fw_sidebar_toggleOn {
#egw_fw_toggler {
height: 50px;
background-color: transparent;
span {
top: 15px;
}
}
}
#egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler span,
#egw_fw_basecontainer.egw_fw_sidebar_toggleOn #egw_fw_toggler:hover span{
background-color: white;
&:before, &:after {background-color: white !important}
}

View File

@ -429,9 +429,10 @@ class preferences_hooks
'h4' => lang("Heading %1", '4'),
'h5' => lang("Heading %1", '5'),
'h6' => lang("Heading %1", '6'),
'pre' => lang("Preformatted")
'pre' => lang("Preformatted"),
'customparagraph' => lang("Custom Paragraph")
),
'help' => 'Automatically start with this format block',
'help' => 'Automatically start with this format block.<br/><b>Custom Paragraph</b> adds less line space between new lines.',
'xmlrpc' => True,
'admin' => false,
'default' => 'p'

View File

@ -15,7 +15,7 @@ audio effect preferences de Audio-Effekt
audio effect enables|disables sound effects used in the theme preferences de Audio Effekte (Sound) für das Thema aktivieren|deaktivieren.
automatically start with this font preferences de Startet automatisch mit dieser Schrift
automatically start with this font size preferences de Startet automatisch mit dieser Schriftgröße
automatically start with this format block preferences de Startet automatisch mit dieser Formatierung
automatically start with this format block.<br/><b>Custom Paragraph</b> adds less line space between new lines. preferences de Startet automatisch mit dieser Formatierung.<br/> <b>Absatz schmal</b> erzeugt einen geringeren Zeilenabstand.
br preferences de br
change a user password by passing the old and new passwords. returns true on success, false on failure. preferences de Ändern Sie Ihr Passwort, indem Sie Ihr altes und neues Passwort angeben. Es wird TRUE zurückgegeben für eine erfolgreiche Änderung und FALSE wenn es nicht erfolgreich war.
change password preferences de Passwort ändern
@ -31,6 +31,7 @@ color preferences de Farbe
country preferences de Land
current password preferences de Aktuelles Passwort
custom login box color, defaults to above color darkened preferences de Benutzerdefinierte Farbe der Anmeldemaske, Vorgabe obige Farbe abgedunkelt
custom paragraph preferences de Absatz schmal
custom sidebar menu active color, defaults to above color darkened preferences de Benutzerdefinierte Farbe des Seitenmenü, Vorgabe obige Farbe abgedunkelt
dark moono theme preferences de Dunkles Moono Schema
data exchange settings preferences de Einstellungen für den Datenaustausch

View File

@ -15,7 +15,7 @@ audio effect preferences en Audio effect
audio effect enables|disables sound effects used in the theme preferences en Audio effect enables|disables sound effects used in the theme
automatically start with this font preferences en Automatically start with this font
automatically start with this font size preferences en Automatically start with this font size
automatically start with this format block preferences en Automatically start with this format block
automatically start with this format block.<br/><b>Custom Paragraph</b> adds less line space between new lines. preferences en Automatically start with this format block.<br/><b>Custom Paragraph</b> adds less line space between new lines.
br preferences en br
change a user password by passing the old and new passwords. returns true on success, false on failure. preferences en Change a user password by passing the old and new passwords. Returns TRUE on success, FALSE on failure.
change password preferences en Change password
@ -31,6 +31,7 @@ color preferences en Color
country preferences en Country
current password preferences en Current password
custom login box color, defaults to above color darkened preferences en Custom login box color, defaults to above color darkened
custom paragraph preferences en Custom Paragraph
custom sidebar menu active color, defaults to above color darkened preferences en Custom sidebar menu active color, defaults to above color darkened
dark moono theme preferences en Dark Moono Theme
data exchange settings preferences en Data exchange settings

View File

@ -6,13 +6,16 @@
24 hour preferences es-es 24 horas
a template defines the layout of egroupware and it contains icons for each application. preferences es-es Una plantilla define el formato de EGroupware y contiene iconos para cada aplicación.
a theme defines the colors and fonts used by the template. preferences es-es Un tema define los colores y los tipos de letra usados en la plantilla
access token revoked. preferences es-es Token de acceso revocado.
acl grants have been updated preferences es-es Los permisos de la LCA se han actualizado
any listing in egw will show you this number of entries or lines per page.<br>to many slow down the page display, to less will cost you the overview. preferences es-es Cualquier listado en eGW le mostrará este número de entradas o líneas por página.<br>Demasiadas ralentizan la página, demasiado pocas pueden ser malo.
applications list scroll area preferences es-es Área de desplazamiento de la lista de aplicaciones
are you sure you want to delete this category ? preferences es-es ¿Seguro que desea borrar esta categoría?
audio effect preferences es-es Efecto de audio
audio effect enables|disables sound effects used in the theme preferences es-es El efecto de audio habilita|deshabilita los efectos de sonido usados en el tema
automatically start with this font preferences es-es Comenzar automáticamente con esta tipografía
automatically start with this font size preferences es-es Comenzar automáticamente con este tamaño de tipografía
automatically start with this format block preferences es-es Comience automáticamente con este bloque de formato
br preferences es-es br
change a user password by passing the old and new passwords. returns true on success, false on failure. preferences es-es Cambia la contraseña de un usuario pasando la contraseña anterior y la nueva. Si es correcto, devuelve TRUE, y si no, FALSE.
change password preferences es-es Cambiar contraseña
@ -21,9 +24,12 @@ change your profile preferences es-es Cambiar perfil
change your settings preferences es-es Cambiar su configuración
charset for the csv export addressbook es-es Juego de caracteres para exportar a CSV
charset for the csv export/import preferences es-es Juego de caracteres
click to install preferences es-es haga clic para instalar
click to select a color preferences es-es Pulse para seleccionar un color
code is invalid preferences es-es El código es no válido
color preferences es-es Color
country preferences es-es País
current password preferences es-es Contraseña actual
custom login box color, defaults to above color darkened preferences es-es Color del cuadro de inicio de sesión personalizado, por defecto el color anterior se oscureció
custom sidebar menu active color, defaults to above color darkened preferences es-es Color de menú de barra lateral personalizado activo, por defecto el color anterior se oscureció
dark moono theme preferences es-es Tema Moono oscuro
@ -33,6 +39,7 @@ default preferences es-es Predeterminado
default application preferences es-es Aplicación predeterminada
default font preferences es-es Tipografía predeterminada
default font size preferences es-es Tamaño predeterminado de tipografía
default format block preferences es-es Bloque de formato predeterminado
default preferences preferences es-es Preferencias predeterminadas
delete categories preferences es-es Borrar categorías
deny following groups access to acl (grant access) admin es-es Denegar el acceso a la lista de control de acceso a los grupos siguientes

View File

@ -56,6 +56,9 @@ tr.prefRow:hover .prefHelp {
.prefDefault {
float: right;
width:48%;
overflow-x: hidden;
text-overflow: ellipsis;
max-width: 300px;
}
.prefValue textarea, textarea.prefValue {
width: 99%;

View File

@ -73,6 +73,9 @@ tr.prefRow:hover .prefHelp {
.prefDefault {
float: right;
width: 48%;
overflow-x: hidden;
text-overflow: ellipsis;
max-width: 300px;
}
.prefValue textarea,
textarea.prefValue {

12
service-worker.js Normal file
View File

@ -0,0 +1,12 @@
/**
* EGroupware service worker
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @author Hadi Nategh <hn-At-egroupware.org>
* @copyright (c) 2019 by Hadi Nategh <hn-At-egroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
this.addEventListener('fetch', function (event) {
// temporary just to ommit error app not installable
});

View File

@ -239,6 +239,7 @@ class timesheet_ui extends timesheet_bo
if ($this->data['old_pm_id'])
{
Link::unlink2(0,TIMESHEET_APP,$content['link_to']['to_id'],0,'projectmanager',$this->data['old_pm_id']);
unset($content['link_to']['to_id']['projectmanager:'.$this->data['old_pm_id']]);
unset($this->data['old_pm_id']);
}
}