From 98484f0def82493ff9d45405dadefd141a1b32ba Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Mon, 13 Jun 2016 21:42:00 -0400 Subject: Move Spanish context help translation from es to es-es and make es a symlink to es-es --- doc/context/es | 1 + doc/context/es-es | 1 - doc/context/es-es/admin/logs/help.html | 9 +++++++++ doc/context/es-es/admin/queue/help.html | 4 ++++ doc/context/es-es/admin/security/help.html | 4 ++++ doc/context/es-es/channel/help.html | 8 ++++++++ doc/context/es-es/chat/help.html | 8 ++++++++ doc/context/es-es/cloud/help.html | 7 +++++++ doc/context/es-es/connections/help.html | 15 +++++++++++++++ doc/context/es-es/connections/ifpending/help.html | 15 +++++++++++++++ doc/context/es-es/events/help.html | 8 ++++++++ doc/context/es-es/mail/help.html | 10 ++++++++++ doc/context/es-es/network/help.html | 12 ++++++++++++ doc/context/es-es/photos/help.html | 6 ++++++ doc/context/es-es/profile/help.html | 6 ++++++ doc/context/es/admin/logs/help.html | 9 --------- doc/context/es/admin/queue/help.html | 4 ---- doc/context/es/admin/security/help.html | 4 ---- doc/context/es/channel/help.html | 8 -------- doc/context/es/chat/help.html | 8 -------- doc/context/es/cloud/help.html | 7 ------- doc/context/es/connections/help.html | 15 --------------- doc/context/es/connections/ifpending/help.html | 15 --------------- doc/context/es/events/help.html | 8 -------- doc/context/es/mail/help.html | 10 ---------- doc/context/es/network/help.html | 12 ------------ doc/context/es/photos/help.html | 6 ------ doc/context/es/profile/help.html | 6 ------ 28 files changed, 113 insertions(+), 113 deletions(-) create mode 120000 doc/context/es delete mode 120000 doc/context/es-es create mode 100644 doc/context/es-es/admin/logs/help.html create mode 100644 doc/context/es-es/admin/queue/help.html create mode 100644 doc/context/es-es/admin/security/help.html create mode 100644 doc/context/es-es/channel/help.html create mode 100644 doc/context/es-es/chat/help.html create mode 100644 doc/context/es-es/cloud/help.html create mode 100644 doc/context/es-es/connections/help.html create mode 100644 doc/context/es-es/connections/ifpending/help.html create mode 100644 doc/context/es-es/events/help.html create mode 100644 doc/context/es-es/mail/help.html create mode 100644 doc/context/es-es/network/help.html create mode 100644 doc/context/es-es/photos/help.html create mode 100644 doc/context/es-es/profile/help.html delete mode 100644 doc/context/es/admin/logs/help.html delete mode 100644 doc/context/es/admin/queue/help.html delete mode 100644 doc/context/es/admin/security/help.html delete mode 100644 doc/context/es/channel/help.html delete mode 100644 doc/context/es/chat/help.html delete mode 100644 doc/context/es/cloud/help.html delete mode 100644 doc/context/es/connections/help.html delete mode 100644 doc/context/es/connections/ifpending/help.html delete mode 100644 doc/context/es/events/help.html delete mode 100644 doc/context/es/mail/help.html delete mode 100644 doc/context/es/network/help.html delete mode 100644 doc/context/es/photos/help.html delete mode 100644 doc/context/es/profile/help.html diff --git a/doc/context/es b/doc/context/es new file mode 120000 index 000000000..c8ba7666b --- /dev/null +++ b/doc/context/es @@ -0,0 +1 @@ +es-es \ No newline at end of file diff --git a/doc/context/es-es b/doc/context/es-es deleted file mode 120000 index 6c4381495..000000000 --- a/doc/context/es-es +++ /dev/null @@ -1 +0,0 @@ -es \ No newline at end of file diff --git a/doc/context/es-es/admin/logs/help.html b/doc/context/es-es/admin/logs/help.html new file mode 100644 index 000000000..3a2ec413d --- /dev/null +++ b/doc/context/es-es/admin/logs/help.html @@ -0,0 +1,9 @@ +
+
General
+
Esta página le permite ajustar los parámetros de los informes del sistema (logs) y para ver uno existente.
+
Ajustes de los informes (logs)
+
Cuando se habilita la opción de depuración, el sistema de información comenzará a añadir los informes (logs) en el archivo especificado en el cuadro "Fichero de informes" + (la ruta es relativa al directorio raíz del servidor, por ejemplo, /var /www). Tenga en cuenta que este archivo tiene que ser modificable por el servidor web.
+
Nivel de depuración
+
La opción de nivel de depuración le permite establecer la cantidad de información que se anexa al fichero de informes (logs). Advertencia: El aumento de este nivel puede aumentar rápidamente el tamaño de este fichero hasta en más de 100 MB, especialmente en los hubs con más que unos pocos miembros.
+
diff --git a/doc/context/es-es/admin/queue/help.html b/doc/context/es-es/admin/queue/help.html new file mode 100644 index 000000000..de9e6cdbb --- /dev/null +++ b/doc/context/es-es/admin/queue/help.html @@ -0,0 +1,4 @@ +
+
General
+
Las estadísticas de la cola muestran cuántos mensajes están en la cola para su entrega a otros hubs. La prioridad está relacionada con la cantidad de veces que la entrega se ha intentado, sin éxito.
+
diff --git a/doc/context/es-es/admin/security/help.html b/doc/context/es-es/admin/security/help.html new file mode 100644 index 000000000..229a91561 --- /dev/null +++ b/doc/context/es-es/admin/security/help.html @@ -0,0 +1,4 @@ +
+
General
+
Esta página contiene varios ajustes para el administrador relacionados con la seguridad. Para guardar los cambios que realice en estos ajustes, debe pulsar el botón "Enviar".
+
diff --git a/doc/context/es-es/channel/help.html b/doc/context/es-es/channel/help.html new file mode 100644 index 000000000..682125e27 --- /dev/null +++ b/doc/context/es-es/channel/help.html @@ -0,0 +1,8 @@ +
General
+
Esta es la página principal de un canal. Es similar al "muro" del perfil de una persona en un contexto de red social. Las entradas creadas por el canal se muestran de acuerdo con los permisos de visualización +del observador.
+
Crear una entrada
+
Si tiene permiso para crear entradas en la página del canal, a continuación, podrá ver el editor de entradas en la parte superior.
+
Pestañas de los contenidos del canal
+
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías +de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
\ No newline at end of file diff --git a/doc/context/es-es/chat/help.html b/doc/context/es-es/chat/help.html new file mode 100644 index 000000000..94df6a1d2 --- /dev/null +++ b/doc/context/es-es/chat/help.html @@ -0,0 +1,8 @@ +
+
General
+
Creación y uso de salas de chat para comunicarse en tiempo real, utilizando el sistema de permisos estándar de Hubzilla para el control de acceso a la sala de chat.
+
Crear una nueva sala de chat
+
Utilice el botón "Crear" para crear una nueva sala de chat. Introduzca un nombre y cuánto tiempo se deben conservar los mensajes.
+
Chatear
+
Introduzca su mensaje en el cuadro de mensaje y pulse "Enviar". Se puede establecer un estado seleccionando el botón de menú sala de chat junto al botón "Enviar". Si hay otras personas en la sala, serán visibles en el panel lateral, en "Miembros del chat".
+
diff --git a/doc/context/es-es/cloud/help.html b/doc/context/es-es/cloud/help.html new file mode 100644 index 000000000..824fa5a94 --- /dev/null +++ b/doc/context/es-es/cloud/help.html @@ -0,0 +1,7 @@ +
+
General
+
Esta página muestra los ficheros en la "nube" de un canal. Los archivos visibles para el observador dependen de los permisos de archivo individuales establecidas por + el propietario del canal. Si tiene permiso para crear o cargar ficheros, verá botones de control por encima de la lista de ficheros.
+
Pestañas de los contenidos del canal
+
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
+
diff --git a/doc/context/es-es/connections/help.html b/doc/context/es-es/connections/help.html new file mode 100644 index 000000000..a0aa9cf32 --- /dev/null +++ b/doc/context/es-es/connections/help.html @@ -0,0 +1,15 @@ +
+
General
+
Esta página muestra una lista de todas las conexiones de este canal. La lista se puede ordenar y filtrar usando el botón de menú al lado del botón de búsqueda.
+
Detalles de la conexión
+
Cada entrada de la lista muestra los detalles de una conexión específica. Una imagen de avatar translúcida indica una conexión archivada.
+
Estado de la conexión
+
Una conexión puede estar en diferentes estados: +
    +
  • Archivada
  • +
  • Ignorada
  • +
  • Bloqueada
  • +
  • Oculta
  • +
+
+
diff --git a/doc/context/es-es/connections/ifpending/help.html b/doc/context/es-es/connections/ifpending/help.html new file mode 100644 index 000000000..84e547851 --- /dev/null +++ b/doc/context/es-es/connections/ifpending/help.html @@ -0,0 +1,15 @@ +
+
General
+
Esta página muestra una lista de todas las conexiones de este canal. La lista se puede ordenar y filtrar usando el botón de menú al lado del botón de búsqueda.
+
Detalles de la conexión
+
Cada entrada de la lista muestra los detalles de una conexión específica. Una imagen de avatar translúcida indica una conexión archivada.
+
Estado de la conexión
+
Una conexión puede estar en diferentes estados: +
    +
  • Archivada
  • +
  • Ignorada
  • +
  • Bloqueada
  • +
  • Oculta
  • +
+
+
diff --git a/doc/context/es-es/events/help.html b/doc/context/es-es/events/help.html new file mode 100644 index 000000000..b0ac1f9ea --- /dev/null +++ b/doc/context/es-es/events/help.html @@ -0,0 +1,8 @@ +
+
General
+
Esta página muestra un calendario de eventos tanto de su propiedad como compartido con usted desde otros canales.
+
Vistas del calendario
+
El calendario se puede mostrar en modo mensual, semanal o diario usando las opciones del panel lateral.
+
Exportar/Importar
+
Exportar o importar eventos del calendario usando el formato estándar de los ficheros de iCalendar (.ics).
+
diff --git a/doc/context/es-es/mail/help.html b/doc/context/es-es/mail/help.html new file mode 100644 index 000000000..794af38a9 --- /dev/null +++ b/doc/context/es-es/mail/help.html @@ -0,0 +1,10 @@ +
+
General
+
Los mensajes que aparecen en el correo privado son visibles sólo para usted y un único destinatario.
+
Vista combinada
+
Las conversaciones completas se pueden ver en un hilo continuo seleccionando "Vista combinada". Las conversaciones disponibles se muestran debajo del menú en el panel lateral.
+
Bandeja de entrada/Bandeja de salida
+
Los mensajes individuales enviados son visibles seleccionando la Bandeja de salida y los mensajes recibidos se pueden ver usando el filtro de la Bandeja de entrada.
+
Mensaje nuevo
+
Los mensajes individuales tienen informes de entrega que se pueden ver usando el menú desplegable. Los mensajes también se pueden revocar desde el mismo menú, lo que puede evitar que el destinatario vea el mensaje, si aún no lo ha leído.
+
\ No newline at end of file diff --git a/doc/context/es-es/network/help.html b/doc/context/es-es/network/help.html new file mode 100644 index 000000000..082f52a49 --- /dev/null +++ b/doc/context/es-es/network/help.html @@ -0,0 +1,12 @@ +
+
General
+
La página de "Mi red" muestra un flujo de entradas y conversaciones, normalmente ordenadas según la actualización más reciente. Esta página es altamente personalizable.
+
Crear una entrada
+
En la parte superior de la página hay un cuadro de texto que dice "Compartir". Al hacer clic en esta casilla se abre un nuevo editor de entradas. El editor de entradas es personalizable, pero el editor básico proporciona campos para el cuerpo de la publicación y un título opcional. Los botones que hay debajo de la zona de texto, a la izquierda, proporcionan + accesos directos para el Formato de texto y para  insertar enlaces, imágenes y otros datos en la entrada. Los botones a la derecha proporcionan una vista previa del mensaje, los ajustes de permisos de la entrada, y un botón Enviar para publicarla.
+
Grupos de canales
+
Los grupos de canales que ha creado se muestran en el panel lateral. Seleccionándolos, se filtran las entradas creadas por los canales incluidos en el grupo elegido.
+
Permisos de una entrada
+
La lista de control de acceso (ACL) es lo que se utiliza para establecer quién puede ver su nueva entrada. Al pulsar el botón ACL, al lado del botón Enviar, se mostrará un cuadro de diálogo en el que puede seleccionar qué canales y / o grupos de canales pueden ver el mensaje. También puede seleccionar a quién se le niega el acceso explícitamente. Por ejemplo,di gamos que usted está planeando una + fiesta sorpresa para un amigo. Puede enviar un mensaje de invitación a todos los miembros de su grupo de Amigos, excepto el amigo al que quiere sorprender. En este caso, "se mostrará" al grupo de amigos, pero "no se mostrará" a esa única persona.
+
diff --git a/doc/context/es-es/photos/help.html b/doc/context/es-es/photos/help.html new file mode 100644 index 000000000..6623456eb --- /dev/null +++ b/doc/context/es-es/photos/help.html @@ -0,0 +1,6 @@ +
+
General
+
Esta página muestra los álbumes de fotos de un canal. Las imágenes visibles para el observador dependen de los permisos individuales de cada imagen.
+
Pestañas de los contenidos del canal
+
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
+
diff --git a/doc/context/es-es/profile/help.html b/doc/context/es-es/profile/help.html new file mode 100644 index 000000000..28ff22499 --- /dev/null +++ b/doc/context/es-es/profile/help.html @@ -0,0 +1,6 @@ +
+
General
+
Esta es la página de perfil de un canal. Por lo general muestra la información que describe el canal. Si el canal representa a una persona en una red social, por ejemplo, el perfil podría proporcionar información de contacto y otros datos personales. Los canales pueden tener varios perfiles, en cuyo caso el perfil que se muestra depende del observador.
+
Pestañas de los contenidos del canal
+
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" nlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
+
diff --git a/doc/context/es/admin/logs/help.html b/doc/context/es/admin/logs/help.html deleted file mode 100644 index 3a2ec413d..000000000 --- a/doc/context/es/admin/logs/help.html +++ /dev/null @@ -1,9 +0,0 @@ -
-
General
-
Esta página le permite ajustar los parámetros de los informes del sistema (logs) y para ver uno existente.
-
Ajustes de los informes (logs)
-
Cuando se habilita la opción de depuración, el sistema de información comenzará a añadir los informes (logs) en el archivo especificado en el cuadro "Fichero de informes" - (la ruta es relativa al directorio raíz del servidor, por ejemplo, /var /www). Tenga en cuenta que este archivo tiene que ser modificable por el servidor web.
-
Nivel de depuración
-
La opción de nivel de depuración le permite establecer la cantidad de información que se anexa al fichero de informes (logs). Advertencia: El aumento de este nivel puede aumentar rápidamente el tamaño de este fichero hasta en más de 100 MB, especialmente en los hubs con más que unos pocos miembros.
-
diff --git a/doc/context/es/admin/queue/help.html b/doc/context/es/admin/queue/help.html deleted file mode 100644 index de9e6cdbb..000000000 --- a/doc/context/es/admin/queue/help.html +++ /dev/null @@ -1,4 +0,0 @@ -
-
General
-
Las estadísticas de la cola muestran cuántos mensajes están en la cola para su entrega a otros hubs. La prioridad está relacionada con la cantidad de veces que la entrega se ha intentado, sin éxito.
-
diff --git a/doc/context/es/admin/security/help.html b/doc/context/es/admin/security/help.html deleted file mode 100644 index 229a91561..000000000 --- a/doc/context/es/admin/security/help.html +++ /dev/null @@ -1,4 +0,0 @@ -
-
General
-
Esta página contiene varios ajustes para el administrador relacionados con la seguridad. Para guardar los cambios que realice en estos ajustes, debe pulsar el botón "Enviar".
-
diff --git a/doc/context/es/channel/help.html b/doc/context/es/channel/help.html deleted file mode 100644 index 682125e27..000000000 --- a/doc/context/es/channel/help.html +++ /dev/null @@ -1,8 +0,0 @@ -
General
-
Esta es la página principal de un canal. Es similar al "muro" del perfil de una persona en un contexto de red social. Las entradas creadas por el canal se muestran de acuerdo con los permisos de visualización -del observador.
-
Crear una entrada
-
Si tiene permiso para crear entradas en la página del canal, a continuación, podrá ver el editor de entradas en la parte superior.
-
Pestañas de los contenidos del canal
-
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías -de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
\ No newline at end of file diff --git a/doc/context/es/chat/help.html b/doc/context/es/chat/help.html deleted file mode 100644 index 94df6a1d2..000000000 --- a/doc/context/es/chat/help.html +++ /dev/null @@ -1,8 +0,0 @@ -
-
General
-
Creación y uso de salas de chat para comunicarse en tiempo real, utilizando el sistema de permisos estándar de Hubzilla para el control de acceso a la sala de chat.
-
Crear una nueva sala de chat
-
Utilice el botón "Crear" para crear una nueva sala de chat. Introduzca un nombre y cuánto tiempo se deben conservar los mensajes.
-
Chatear
-
Introduzca su mensaje en el cuadro de mensaje y pulse "Enviar". Se puede establecer un estado seleccionando el botón de menú sala de chat junto al botón "Enviar". Si hay otras personas en la sala, serán visibles en el panel lateral, en "Miembros del chat".
-
diff --git a/doc/context/es/cloud/help.html b/doc/context/es/cloud/help.html deleted file mode 100644 index 824fa5a94..000000000 --- a/doc/context/es/cloud/help.html +++ /dev/null @@ -1,7 +0,0 @@ -
-
General
-
Esta página muestra los ficheros en la "nube" de un canal. Los archivos visibles para el observador dependen de los permisos de archivo individuales establecidas por - el propietario del canal. Si tiene permiso para crear o cargar ficheros, verá botones de control por encima de la lista de ficheros.
-
Pestañas de los contenidos del canal
-
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
-
diff --git a/doc/context/es/connections/help.html b/doc/context/es/connections/help.html deleted file mode 100644 index a0aa9cf32..000000000 --- a/doc/context/es/connections/help.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
General
-
Esta página muestra una lista de todas las conexiones de este canal. La lista se puede ordenar y filtrar usando el botón de menú al lado del botón de búsqueda.
-
Detalles de la conexión
-
Cada entrada de la lista muestra los detalles de una conexión específica. Una imagen de avatar translúcida indica una conexión archivada.
-
Estado de la conexión
-
Una conexión puede estar en diferentes estados: -
    -
  • Archivada
  • -
  • Ignorada
  • -
  • Bloqueada
  • -
  • Oculta
  • -
-
-
diff --git a/doc/context/es/connections/ifpending/help.html b/doc/context/es/connections/ifpending/help.html deleted file mode 100644 index 84e547851..000000000 --- a/doc/context/es/connections/ifpending/help.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
General
-
Esta página muestra una lista de todas las conexiones de este canal. La lista se puede ordenar y filtrar usando el botón de menú al lado del botón de búsqueda.
-
Detalles de la conexión
-
Cada entrada de la lista muestra los detalles de una conexión específica. Una imagen de avatar translúcida indica una conexión archivada.
-
Estado de la conexión
-
Una conexión puede estar en diferentes estados: -
    -
  • Archivada
  • -
  • Ignorada
  • -
  • Bloqueada
  • -
  • Oculta
  • -
-
-
diff --git a/doc/context/es/events/help.html b/doc/context/es/events/help.html deleted file mode 100644 index b0ac1f9ea..000000000 --- a/doc/context/es/events/help.html +++ /dev/null @@ -1,8 +0,0 @@ -
-
General
-
Esta página muestra un calendario de eventos tanto de su propiedad como compartido con usted desde otros canales.
-
Vistas del calendario
-
El calendario se puede mostrar en modo mensual, semanal o diario usando las opciones del panel lateral.
-
Exportar/Importar
-
Exportar o importar eventos del calendario usando el formato estándar de los ficheros de iCalendar (.ics).
-
diff --git a/doc/context/es/mail/help.html b/doc/context/es/mail/help.html deleted file mode 100644 index 794af38a9..000000000 --- a/doc/context/es/mail/help.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
General
-
Los mensajes que aparecen en el correo privado son visibles sólo para usted y un único destinatario.
-
Vista combinada
-
Las conversaciones completas se pueden ver en un hilo continuo seleccionando "Vista combinada". Las conversaciones disponibles se muestran debajo del menú en el panel lateral.
-
Bandeja de entrada/Bandeja de salida
-
Los mensajes individuales enviados son visibles seleccionando la Bandeja de salida y los mensajes recibidos se pueden ver usando el filtro de la Bandeja de entrada.
-
Mensaje nuevo
-
Los mensajes individuales tienen informes de entrega que se pueden ver usando el menú desplegable. Los mensajes también se pueden revocar desde el mismo menú, lo que puede evitar que el destinatario vea el mensaje, si aún no lo ha leído.
-
\ No newline at end of file diff --git a/doc/context/es/network/help.html b/doc/context/es/network/help.html deleted file mode 100644 index 082f52a49..000000000 --- a/doc/context/es/network/help.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
General
-
La página de "Mi red" muestra un flujo de entradas y conversaciones, normalmente ordenadas según la actualización más reciente. Esta página es altamente personalizable.
-
Crear una entrada
-
En la parte superior de la página hay un cuadro de texto que dice "Compartir". Al hacer clic en esta casilla se abre un nuevo editor de entradas. El editor de entradas es personalizable, pero el editor básico proporciona campos para el cuerpo de la publicación y un título opcional. Los botones que hay debajo de la zona de texto, a la izquierda, proporcionan - accesos directos para el Formato de texto y para  insertar enlaces, imágenes y otros datos en la entrada. Los botones a la derecha proporcionan una vista previa del mensaje, los ajustes de permisos de la entrada, y un botón Enviar para publicarla.
-
Grupos de canales
-
Los grupos de canales que ha creado se muestran en el panel lateral. Seleccionándolos, se filtran las entradas creadas por los canales incluidos en el grupo elegido.
-
Permisos de una entrada
-
La lista de control de acceso (ACL) es lo que se utiliza para establecer quién puede ver su nueva entrada. Al pulsar el botón ACL, al lado del botón Enviar, se mostrará un cuadro de diálogo en el que puede seleccionar qué canales y / o grupos de canales pueden ver el mensaje. También puede seleccionar a quién se le niega el acceso explícitamente. Por ejemplo,di gamos que usted está planeando una - fiesta sorpresa para un amigo. Puede enviar un mensaje de invitación a todos los miembros de su grupo de Amigos, excepto el amigo al que quiere sorprender. En este caso, "se mostrará" al grupo de amigos, pero "no se mostrará" a esa única persona.
-
diff --git a/doc/context/es/photos/help.html b/doc/context/es/photos/help.html deleted file mode 100644 index 6623456eb..000000000 --- a/doc/context/es/photos/help.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
General
-
Esta página muestra los álbumes de fotos de un canal. Las imágenes visibles para el observador dependen de los permisos individuales de cada imagen.
-
Pestañas de los contenidos del canal
-
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" enlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
-
diff --git a/doc/context/es/profile/help.html b/doc/context/es/profile/help.html deleted file mode 100644 index 28ff22499..000000000 --- a/doc/context/es/profile/help.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
General
-
Esta es la página de perfil de un canal. Por lo general muestra la información que describe el canal. Si el canal representa a una persona en una red social, por ejemplo, el perfil podría proporcionar información de contacto y otros datos personales. Los canales pueden tener varios perfiles, en cuyo caso el perfil que se muestra depende del observador.
-
Pestañas de los contenidos del canal
-
Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "Mi perfil" enlaza con el perfil del canal. La pestaña "Fotos" nlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los ficheros de cualquier tipo compartidos por el canal.
-
-- cgit v1.2.3 From 961539258be90f5b7c989299db0e8c551d0d6c72 Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Fri, 17 Jun 2016 06:33:39 -0400 Subject: Wiki page revision comparison tool with diff displayed in modal dialog. Leverages Diff class from http://code.stephenmorley.org/php/diff-implementation with license CC0 1.0 universal http://creativecommons.org/publicdomain/zero/1.0/legalcode --- Zotlabs/Module/Wiki.php | 42 ++++- include/wiki.php | 44 ++++- library/class.Diff.php | 386 +++++++++++++++++++++++++++++++++++++++++ view/tpl/wiki.tpl | 47 +++-- view/tpl/wiki_page_history.tpl | 46 ++++- 5 files changed, 548 insertions(+), 17 deletions(-) create mode 100644 library/class.Diff.php diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index 9e7d151b5..83fa0e337 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -136,6 +136,16 @@ class Wiki extends \Zotlabs\Web\Controller { // Render the Markdown-formatted page content in HTML require_once('library/markdown.php'); + $wikiModalID = random_string(3); + $wikiModal = replace_macros( + get_markup_template('generic_modal.tpl'), array( + '$id' => $wikiModalID, + '$title' => t('Revision Comparison'), + '$ok' => t('Revert'), + '$cancel' => t('Cancel') + ) + ); + $o .= replace_macros(get_markup_template('wiki.tpl'),array( '$wikiheaderName' => $wikiheaderName, '$wikiheaderPage' => $wikiheaderPage, @@ -157,7 +167,10 @@ class Wiki extends \Zotlabs\Web\Controller { '$pageName' => array('pageName', t('Enter the name of the new page:'), '', ''), '$pageRename' => array('pageRename', t('Enter the new name:'), '', ''), '$commitMsg' => array('commitMsg', '', '', '', '', 'placeholder="(optional) Enter a custom message when saving the page..."'), - '$pageHistory' => $pageHistory['history'] + '$pageHistory' => $pageHistory['history'], + '$wikiModal' => $wikiModal, + '$wikiModalID' => $wikiModalID, + '$commit' => 'HEAD' )); head_add_js('library/ace/ace.js'); // Ace Code Editor return $o; @@ -412,7 +425,7 @@ class Wiki extends \Zotlabs\Web\Controller { json_return_and_die(array('success' => false)); } } - $reverted = wiki_revert_page(array('commitHash' => $commitHash, 'observer' => \App::get_observer(), 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); + $reverted = wiki_revert_page(array('commitHash' => $commitHash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); if($reverted['success']) { json_return_and_die(array('content' => $reverted['content'], 'message' => '', 'success' => true)); } else { @@ -420,6 +433,31 @@ class Wiki extends \Zotlabs\Web\Controller { } } + // Compare page revisions + if ((argc() === 4) && (argv(2) === 'compare') && (argv(3) === 'page')) { + $resource_id = $_POST['resource_id']; + $pageUrlName = $_POST['name']; + $compareCommit = $_POST['compareCommit']; + $currentCommit = $_POST['currentCommit']; + // Determine if observer has permission to revert pages + $nick = argv(1); + $channel = get_channel_by_nick($nick); + if (local_channel() !== intval($channel['channel_id'])) { + $observer_hash = get_observer_hash(); + $perms = wiki_get_permissions($resource_id, intval($channel['channel_id']), $observer_hash); + if(!$perms['read']) { + logger('Wiki read permission denied.' . EOL); + json_return_and_die(array('success' => false)); + } + } + $compare = wiki_compare_page(array('currentCommit' => $currentCommit, 'compareCommit' => $compareCommit, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); + if($compare['success']) { + json_return_and_die(array('diff' => $compare['diff'], 'message' => '', 'success' => true)); + } else { + json_return_and_die(array('diff' => '', 'message' => 'Error comparing page', 'success' => false)); + } + } + // Rename a page if ((argc() === 4) && (argv(2) === 'rename') && (argv(3) === 'page')) { $resource_id = $_POST['resource_id']; diff --git a/include/wiki.php b/include/wiki.php index d60f4a3a7..a89db3358 100644 --- a/include/wiki.php +++ b/include/wiki.php @@ -347,7 +347,7 @@ function wiki_revert_page($arr) { $resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : ''); $commitHash = ((array_key_exists('commitHash',$arr)) ? $arr['commitHash'] : null); if (! $commitHash) { - return array('content' => $content, 'message' => 'No commit has provided', 'success' => false); + return array('content' => $content, 'message' => 'No commit was provided', 'success' => false); } $w = wiki_get_wiki($resource_id); if (!$w['path']) { @@ -378,6 +378,48 @@ function wiki_revert_page($arr) { } } +function wiki_compare_page($arr) { + $pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : ''); + $resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : ''); + $currentCommit = ((array_key_exists('currentCommit',$arr)) ? $arr['currentCommit'] : 'HEAD'); + $compareCommit = ((array_key_exists('compareCommit',$arr)) ? $arr['compareCommit'] : null); + if (! $compareCommit) { + return array('message' => 'No compare commit was provided', 'success' => false); + } + $w = wiki_get_wiki($resource_id); + if (!$w['path']) { + return array('message' => 'Error reading wiki', 'success' => false); + } + $page_path = $w['path'].'/'.$pageUrlName.'.md'; + if (is_readable($page_path) === true) { + $reponame = ((array_key_exists('title', $w['wiki'])) ? urlencode($w['wiki']['title']) : 'repo'); + if($reponame === '') { + $reponame = 'repo'; + } + $git = new GitRepo('', null, false, $w['wiki']['title'], $w['path']); + $compareContent = $currentContent = ''; + try { + foreach ($git->git->tree($currentCommit) as $object) { + if ($object['type'] == 'blob' && $object['file'] === $pageUrlName.'.md' ) { + $currentContent = $git->git->cat->blob($object['hash']); + } + } + foreach ($git->git->tree($compareCommit) as $object) { + if ($object['type'] == 'blob' && $object['file'] === $pageUrlName.'.md' ) { + $compareContent = $git->git->cat->blob($object['hash']); + } + } + require_once('library/class.Diff.php'); + $diff = Diff::toTable(Diff::compare($currentContent, $compareContent)); + } catch (\PHPGit\Exception\GitException $e) { + return array('message' => 'GitRepo error thrown', 'success' => false); + } + return array('diff' => $diff, 'message' => '', 'success' => true); + } else { + return array('message' => 'Page file not writable', 'success' => false); + } +} + function wiki_git_commit($arr) { $files = ((array_key_exists('files', $arr)) ? $arr['files'] : null); $all = ((array_key_exists('all', $arr)) ? $arr['all'] : false); diff --git a/library/class.Diff.php b/library/class.Diff.php new file mode 100644 index 000000000..689abe9e7 --- /dev/null +++ b/library/class.Diff.php @@ -0,0 +1,386 @@ += $start && $end2 >= $start + && $sequence1[$end1] == $sequence2[$end2]){ + $end1 --; + $end2 --; + } + + // compute the table of longest common subsequence lengths + $table = self::computeTable($sequence1, $sequence2, $start, $end1, $end2); + + // generate the partial diff + $partialDiff = + self::generatePartialDiff($table, $sequence1, $sequence2, $start); + + // generate the full diff + $diff = array(); + for ($index = 0; $index < $start; $index ++){ + $diff[] = array($sequence1[$index], self::UNMODIFIED); + } + while (count($partialDiff) > 0) $diff[] = array_pop($partialDiff); + for ($index = $end1 + 1; + $index < ($compareCharacters ? strlen($sequence1) : count($sequence1)); + $index ++){ + $diff[] = array($sequence1[$index], self::UNMODIFIED); + } + + // return the diff + return $diff; + + } + + /* Returns the diff for two files. The parameters are: + * + * $file1 - the path to the first file + * $file2 - the path to the second file + * $compareCharacters - true to compare characters, and false to compare + * lines; this optional parameter defaults to false + */ + public static function compareFiles( + $file1, $file2, $compareCharacters = false){ + + // return the diff of the files + return self::compare( + file_get_contents($file1), + file_get_contents($file2), + $compareCharacters); + + } + + /* Returns the table of longest common subsequence lengths for the specified + * sequences. The parameters are: + * + * $sequence1 - the first sequence + * $sequence2 - the second sequence + * $start - the starting index + * $end1 - the ending index for the first sequence + * $end2 - the ending index for the second sequence + */ + private static function computeTable( + $sequence1, $sequence2, $start, $end1, $end2){ + + // determine the lengths to be compared + $length1 = $end1 - $start + 1; + $length2 = $end2 - $start + 1; + + // initialise the table + $table = array(array_fill(0, $length2 + 1, 0)); + + // loop over the rows + for ($index1 = 1; $index1 <= $length1; $index1 ++){ + + // create the new row + $table[$index1] = array(0); + + // loop over the columns + for ($index2 = 1; $index2 <= $length2; $index2 ++){ + + // store the longest common subsequence length + if ($sequence1[$index1 + $start - 1] + == $sequence2[$index2 + $start - 1]){ + $table[$index1][$index2] = $table[$index1 - 1][$index2 - 1] + 1; + }else{ + $table[$index1][$index2] = + max($table[$index1 - 1][$index2], $table[$index1][$index2 - 1]); + } + + } + } + + // return the table + return $table; + + } + + /* Returns the partial diff for the specificed sequences, in reverse order. + * The parameters are: + * + * $table - the table returned by the computeTable function + * $sequence1 - the first sequence + * $sequence2 - the second sequence + * $start - the starting index + */ + private static function generatePartialDiff( + $table, $sequence1, $sequence2, $start){ + + // initialise the diff + $diff = array(); + + // initialise the indices + $index1 = count($table) - 1; + $index2 = count($table[0]) - 1; + + // loop until there are no items remaining in either sequence + while ($index1 > 0 || $index2 > 0){ + + // check what has happened to the items at these indices + if ($index1 > 0 && $index2 > 0 + && $sequence1[$index1 + $start - 1] + == $sequence2[$index2 + $start - 1]){ + + // update the diff and the indices + $diff[] = array($sequence1[$index1 + $start - 1], self::UNMODIFIED); + $index1 --; + $index2 --; + + }elseif ($index2 > 0 + && $table[$index1][$index2] == $table[$index1][$index2 - 1]){ + + // update the diff and the indices + $diff[] = array($sequence2[$index2 + $start - 1], self::INSERTED); + $index2 --; + + }else{ + + // update the diff and the indices + $diff[] = array($sequence1[$index1 + $start - 1], self::DELETED); + $index1 --; + + } + + } + + // return the diff + return $diff; + + } + + /* Returns a diff as a string, where unmodified lines are prefixed by ' ', + * deletions are prefixed by '- ', and insertions are prefixed by '+ '. The + * parameters are: + * + * $diff - the diff array + * $separator - the separator between lines; this optional parameter defaults + * to "\n" + */ + public static function toString($diff, $separator = "\n"){ + + // initialise the string + $string = ''; + + // loop over the lines in the diff + foreach ($diff as $line){ + + // extend the string with the line + switch ($line[1]){ + case self::UNMODIFIED : $string .= ' ' . $line[0];break; + case self::DELETED : $string .= '- ' . $line[0];break; + case self::INSERTED : $string .= '+ ' . $line[0];break; + } + + // extend the string with the separator + $string .= $separator; + + } + + // return the string + return $string; + + } + + /* Returns a diff as an HTML string, where unmodified lines are contained + * within 'span' elements, deletions are contained within 'del' elements, and + * insertions are contained within 'ins' elements. The parameters are: + * + * $diff - the diff array + * $separator - the separator between lines; this optional parameter defaults + * to '
' + */ + public static function toHTML($diff, $separator = '
'){ + + // initialise the HTML + $html = ''; + + // loop over the lines in the diff + foreach ($diff as $line){ + + // extend the HTML with the line + switch ($line[1]){ + case self::UNMODIFIED : $element = 'span'; break; + case self::DELETED : $element = 'del'; break; + case self::INSERTED : $element = 'ins'; break; + } + $html .= + '<' . $element . '>' + . htmlspecialchars($line[0]) + . ''; + + // extend the HTML with the separator + $html .= $separator; + + } + + // return the HTML + return $html; + + } + + /* Returns a diff as an HTML table. The parameters are: + * + * $diff - the diff array + * $indentation - indentation to add to every line of the generated HTML; this + * optional parameter defaults to '' + * $separator - the separator between lines; this optional parameter + * defaults to '
' + */ + public static function toTable($diff, $indentation = '', $separator = '
'){ + + // initialise the HTML + $html = $indentation . "\n"; + + // loop over the lines in the diff + $index = 0; + while ($index < count($diff)){ + + // determine the line type + switch ($diff[$index][1]){ + + // display the content on the left and right + case self::UNMODIFIED: + $leftCell = + self::getCellContent( + $diff, $indentation, $separator, $index, self::UNMODIFIED); + $rightCell = $leftCell; + break; + + // display the deleted on the left and inserted content on the right + case self::DELETED: + $leftCell = + self::getCellContent( + $diff, $indentation, $separator, $index, self::DELETED); + $rightCell = + self::getCellContent( + $diff, $indentation, $separator, $index, self::INSERTED); + break; + + // display the inserted content on the right + case self::INSERTED: + $leftCell = ''; + $rightCell = + self::getCellContent( + $diff, $indentation, $separator, $index, self::INSERTED); + break; + + } + + // extend the HTML with the new row + $html .= + $indentation + . " \n" + . $indentation + . ' \n" + . $indentation + . ' \n" + . $indentation + . " \n"; + + } + + // return the HTML + return $html . $indentation . "
' + . $leftCell + . "' + . $rightCell + . "
\n"; + + } + + /* Returns the content of the cell, for use in the toTable function. The + * parameters are: + * + * $diff - the diff array + * $indentation - indentation to add to every line of the generated HTML + * $separator - the separator between lines + * $index - the current index, passes by reference + * $type - the type of line + */ + private static function getCellContent( + $diff, $indentation, $separator, &$index, $type){ + + // initialise the HTML + $html = ''; + + // loop over the matching lines, adding them to the HTML + while ($index < count($diff) && $diff[$index][1] == $type){ + $html .= + '' + . htmlspecialchars($diff[$index][0]) + . '' + . $separator; + $index ++; + } + + // return the HTML + return $html; + + } + +} + +?> diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index dc78aad9f..990e6c883 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -96,17 +96,6 @@
- - {{foreach $pageHistory as $commit}} - - {{/foreach}} -
- - - - -
Date{{$commit.date}}
Name{{$commit.name}}
Message{{$commit.title}}
-
@@ -120,16 +109,22 @@ {{/if}} +{{$wikiModal}} + diff --git a/view/tpl/wiki_page_history.tpl b/view/tpl/wiki_page_history.tpl index 6ce3ce204..fef5d93a5 100644 --- a/view/tpl/wiki_page_history.tpl +++ b/view/tpl/wiki_page_history.tpl @@ -1,12 +1,52 @@ + {{foreach $pageHistory as $commit}} {{/foreach}} -
- + +
Date{{$commit.date}} -
Date{{$commit.date}} + +

+ +
Name{{$commit.name}} <{{$commit.email}}>
Message{{$commit.title}}
\ No newline at end of file + -- cgit v1.2.3 From 20b4fc919871433df6111cbb8b3508fd1693123b Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Mon, 20 Jun 2016 13:05:18 -0400 Subject: Do not change active page commit until user reverts the page --- view/tpl/wiki.tpl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index 990e6c883..aa0b88545 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -256,6 +256,7 @@ function wiki_delete_wiki(wikiHtmlName, resource_id) { window.console.log('Page saved successfully.'); window.wiki_page_content = currentContent; $('#id_commitMsg').val(''); // Clear the commit message box + $('#wiki-get-history').click(); } else { alert('Error saving page.'); // TODO: Replace alerts with auto-timeout popups window.console.log('Error saving page.'); @@ -301,6 +302,7 @@ function wiki_delete_wiki(wikiHtmlName, resource_id) { $('#revert-'+commitHash).removeClass('btn-danger'); $('#revert-'+commitHash).addClass('btn-success'); $('#revert-'+commitHash).html('Page reverted
but not saved'); + window.wiki_page_commit = commitHash; // put contents in editor editor.getSession().setValue(data.content); } else { @@ -323,7 +325,6 @@ function wiki_delete_wiki(wikiHtmlName, resource_id) { }, function (data) { if (data.success) { - window.wiki_page_commit = compareCommit; var modalBody = $('#generic-modal-body-{{$wikiModalID}}'); modalBody.html('
'+data.diff+'
'); $('.modal-dialog').width('80%'); -- cgit v1.2.3 From a3ec9f394068d7dccef44c8f27c085cb380e54d5 Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Mon, 20 Jun 2016 13:27:05 -0400 Subject: Add formatted heading for revision comparison viewer --- Zotlabs/Module/Wiki.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index 83fa0e337..bef831de8 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -452,7 +452,8 @@ class Wiki extends \Zotlabs\Web\Controller { } $compare = wiki_compare_page(array('currentCommit' => $currentCommit, 'compareCommit' => $compareCommit, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName)); if($compare['success']) { - json_return_and_die(array('diff' => $compare['diff'], 'message' => '', 'success' => true)); + $diffHTML = '
Current RevisionSelected Revision
' . $compare['diff']; + json_return_and_die(array('diff' => $diffHTML, 'message' => '', 'success' => true)); } else { json_return_and_die(array('diff' => '', 'message' => 'Error comparing page', 'success' => false)); } -- cgit v1.2.3 From 01bfadaeaa6440586aba74cf098b38a9a134a510 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Mon, 20 Jun 2016 13:42:04 -0700 Subject: fix siteinfo plugin list --- Zotlabs/Module/Siteinfo.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Zotlabs/Module/Siteinfo.php b/Zotlabs/Module/Siteinfo.php index 41f6e9f0b..f6b34d0c8 100644 --- a/Zotlabs/Module/Siteinfo.php +++ b/Zotlabs/Module/Siteinfo.php @@ -32,9 +32,8 @@ class Siteinfo extends \Zotlabs\Web\Controller { $r = q("select * from addon where hidden = 0"); if(count($r)) foreach($r as $rr) - $visible_plugins[] = $rr['name']; + $visible_plugins[] = $rr['aname']; } - $plugins_list = ''; if(count($visible_plugins)) { $plugins_text = t('Installed plugins/addons/apps:'); -- cgit v1.2.3 From 9c9d6363af22eeec7f38856302abb3251cb78a10 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Mon, 20 Jun 2016 19:39:12 -0700 Subject: update attach on import if exists --- include/attach.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/attach.php b/include/attach.php index 33545b12a..4961d7f91 100644 --- a/include/attach.php +++ b/include/attach.php @@ -618,7 +618,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) { ); if($r) { $overwrite = get_pconfig($channel_id,'system','overwrite_dup_files'); - if($overwrite) { + if(($overwrite) || ($options === 'import')) { $options = 'replace'; $existing_id = $x[0]['id']; $existing_size = intval($x[0]['filesize']); @@ -802,7 +802,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) { if($is_photo) { - $args = array( 'source' => $source, 'visible' => $visible, 'resource_id' => $hash, 'album' => basename($pathname), 'os_path' => $os_basepath . $os_relpath, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct); + $args = array( 'source' => $source, 'visible' => $visible, 'resource_id' => $hash, 'album' => basename($pathname), 'os_path' => $os_basepath . $os_relpath, 'filename' => $filename, 'getimagesize' => $gis, 'directory' => $direct, 'options' => $options ); if($arr['contact_allow']) $args['contact_allow'] = $arr['contact_allow']; if($arr['group_allow']) -- cgit v1.2.3 From ed166608670c5b5d237c43bd0d672502d5b624f5 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Mon, 20 Jun 2016 20:34:19 -0700 Subject: code optimisation --- Zotlabs/Module/Siteinfo.php | 26 +++++--------------------- include/network.php | 9 +-------- include/plugin.php | 6 ++++++ include/text.php | 2 +- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/Zotlabs/Module/Siteinfo.php b/Zotlabs/Module/Siteinfo.php index f6b34d0c8..a15e2896d 100644 --- a/Zotlabs/Module/Siteinfo.php +++ b/Zotlabs/Module/Siteinfo.php @@ -27,27 +27,11 @@ class Siteinfo extends \Zotlabs\Web\Controller { else { $version = $commit = ''; } - $visible_plugins = array(); - if(is_array(\App::$plugins) && count(\App::$plugins)) { - $r = q("select * from addon where hidden = 0"); - if(count($r)) - foreach($r as $rr) - $visible_plugins[] = $rr['aname']; - } - $plugins_list = ''; - if(count($visible_plugins)) { - $plugins_text = t('Installed plugins/addons/apps:'); - $sorted = $visible_plugins; - $s = ''; - sort($sorted); - foreach($sorted as $p) { - if(strlen($p)) { - if(strlen($s)) $s .= ', '; - $s .= $p; - } - } - $plugins_list .= $s; - } + + $plugins_list = implode(', ',visible_plugin_list()); + + if($plugins_list) + $plugins_text = t('Installed plugins/addons/apps:'); else $plugins_text = t('No installed plugins/addons/apps'); diff --git a/include/network.php b/include/network.php index 062f2c2bf..41d13a40e 100644 --- a/include/network.php +++ b/include/network.php @@ -1992,14 +1992,7 @@ function get_site_info() { else $service_class = false; - $visible_plugins = array(); - if(is_array(App::$plugins) && count(App::$plugins)) { - $r = q("select * from addon where hidden = 0"); - if(count($r)) - foreach($r as $rr) - $visible_plugins[] = $rr['aname']; - } - sort($visible_plugins); + $visible_plugins = visible_plugin_list(); if(@is_dir('.git') && function_exists('shell_exec')) $commit = trim(@shell_exec('git log -1 --format="%h"')); diff --git a/include/plugin.php b/include/plugin.php index 9b84039a6..c95f8cbf9 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -167,6 +167,12 @@ function reload_plugins() { } } +function visible_plugin_list() { + $r = q("select * from addon where hidden = 0 order by aname asc"); + return(($r) ? ids_to_array($r,'aname') : array()); +} + + /** * @brief registers a hook. diff --git a/include/text.php b/include/text.php index 22f4556a8..3754675d1 100644 --- a/include/text.php +++ b/include/text.php @@ -2050,7 +2050,7 @@ function ids_to_array($arr,$idx = 'id') { $t = array(); if($arr) { foreach($arr as $x) { - if(! in_array($x[$idx],$t)) { + if(strlen($x[$idx]) && (! in_array($x[$idx],$t))) { $t[] = $x[$idx]; } } -- cgit v1.2.3 From 63423c8ee1f750d855c75ed67205076d21eda4f1 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Mon, 20 Jun 2016 20:56:58 -0700 Subject: make sure the optimisations are reliable --- include/text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index 3754675d1..4f28c6dbc 100644 --- a/include/text.php +++ b/include/text.php @@ -2050,7 +2050,7 @@ function ids_to_array($arr,$idx = 'id') { $t = array(); if($arr) { foreach($arr as $x) { - if(strlen($x[$idx]) && (! in_array($x[$idx],$t))) { + if(array_key_exists($idx,$x) && strlen($x[$idx]) && (! in_array($x[$idx],$t))) { $t[] = $x[$idx]; } } -- cgit v1.2.3