diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php
index 6dad11ab8..e1eaa6e0e 100644
--- a/Zotlabs/Module/Admin.php
+++ b/Zotlabs/Module/Admin.php
@@ -580,8 +580,8 @@ class Admin extends \Zotlabs\Web\Controller {
$bc = $this->trim_array_elems(explode("\n",$_POST['blacklisted_channels']));
set_config('system','blacklisted_channels',$bc);
- $embed_coop = ((x($_POST,'embed_coop')) ? True : False);
- set_config('system','embed_coop',$embed_coop);
+ $embed_sslonly = ((x($_POST,'embed_sslonly')) ? True : False);
+ set_config('system','embed_sslonly',$embed_sslonly);
$we = $this->trim_array_elems(explode("\n",$_POST['embed_allow']));
set_config('system','embed_allow',$we);
@@ -589,6 +589,12 @@ class Admin extends \Zotlabs\Web\Controller {
$be = $this->trim_array_elems(explode("\n",$_POST['embed_deny']));
set_config('system','embed_deny',$be);
+ $ts = ((x($_POST,'transport_security')) ? True : False);
+ set_config('system','transport_security_header',$ts);
+
+ $cs = ((x($_POST,'content_security')) ? True : False);
+ set_config('system','content_security_policy',$cs);
+
goaway(z_root() . '/admin/security');
}
@@ -713,7 +719,7 @@ class Admin extends \Zotlabs\Web\Controller {
}
$embedhelp2 = t("The recommended setting is to only allow unfiltered HTML from the following sites:");
- $embedhelp3 = t("youtube.com
youtu.be
twitter.com
vimeo.com
soundcloud.com
wikipedia.com
");
+ $embedhelp3 = t("https://youtube.com/
https://www.youtube.com/
https://youtu.be/
https://vimeo.com/
https://soundcloud.com/
");
$embedhelp4 = t("All other embedded content will be filtered, unless embedded content from that site is explicitly blocked.");
$t = get_markup_template('admin_security.tpl');
@@ -722,18 +728,17 @@ class Admin extends \Zotlabs\Web\Controller {
'$page' => t('Security'),
'$form_security_token' => get_form_security_token('admin_security'),
'$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated.")),
+ '$transport_security' => array('transport_security', t('Set "Transport Security" HTTP header'),intval(get_config('system','transport_security_header')),''),
+ '$content_security' => array('content_security', t('Set "Content Security Policy" HTTP header'),intval(get_config('system','content_security_policy')),''),
'$whitelisted_sites' => array('whitelisted_sites', t('Allow communications only from these sites'), $whitesites_str, t('One site per line. Leave empty to allow communication from anywhere by default')),
'$blacklisted_sites' => array('blacklisted_sites', t('Block communications from these sites'), $blacksites_str, ''),
'$whitelisted_channels' => array('whitelisted_channels', t('Allow communications only from these channels'), $whitechannels_str, t('One channel (hash) per line. Leave empty to allow from any channel by default')),
'$blacklisted_channels' => array('blacklisted_channels', t('Block communications from these channels'), $blackchannels_str, ''),
- '$embed_allow' => array('embed_allow', t('Allow unfiltered embedded HTML content only from these domains'), $whiteembeds_str, t('One site per line. Leave empty to allow from any site by default')),
+ '$embed_sslonly' => array('embed_sslonly',t('Only allow embeds from secure (SSL) websites and links.'), intval(get_config('system','embed_sslonly')),''),
+ '$embed_allow' => array('embed_allow', t('Allow unfiltered embedded HTML content only from these domains'), $whiteembeds_str, t('One site per line. By default embedded content is filtered.')),
'$embed_deny' => array('embed_deny', t('Block embedded HTML from these domains'), $blackembeds_str, ''),
// '$embed_coop' => array('embed_coop', t('Cooperative embed security'), $embed_coop, t('Enable to share embed security with other compatible sites/hubs')),
- '$embedhelp1' => $embedhelp1,
- '$embedhelp2' => $embedhelp2,
- '$embedhelp3' => $embedhelp3,
- '$embedhelp4' => $embedhelp4,
'$submit' => t('Submit')
));
diff --git a/doc/context/es/admin/logs/help.html b/doc/context/es/admin/logs/help.html
new file mode 100644
index 000000000..2324492bf
--- /dev/null
+++ b/doc/context/es/admin/logs/help.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..a4085c5c6
--- /dev/null
+++ b/doc/context/es/admin/queue/help.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..8817636ed
--- /dev/null
+++ b/doc/context/es/admin/security/help.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..3d925241d
--- /dev/null
+++ b/doc/context/es/channel/help.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ - 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.
+
+
+
diff --git a/doc/context/es/chat/help.html b/doc/context/es/chat/help.html
new file mode 100644
index 000000000..805f7b87a
--- /dev/null
+++ b/doc/context/es/chat/help.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+ - General
+ - Creación y uso de
+ salas de chat para comunicarse en tiempo real,
+ utilizando el sistema de permisos
+ Hubzilla estándar para el control de
+ acceso a la sala de chat.
+ - Create 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
new file mode 100644
index 000000000..474918e81
--- /dev/null
+++ b/doc/context/es/cloud/help.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..0f95fde63
--- /dev/null
+++ b/doc/context/es/connections/help.html
@@ -0,0 +1,8 @@
+
+ - General
+ - This page displays a list of all this channel's connections. The list can be sorted and filtered using the menu button beside the search button.
+ - Connection Details
+ - Each list entry shows the details of a specific connection. A translucent avatar image indicates an archived connection.
+ - Connection Status
+ - A connection can be in different states:
- Archived
- Ignored
- Blocked
- Hidden
+
\ No newline at end of file
diff --git a/doc/context/es/connections/ifpending/help.html b/doc/context/es/connections/ifpending/help.html
new file mode 100644
index 000000000..5fb0f3a0a
--- /dev/null
+++ b/doc/context/es/connections/ifpending/help.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..681f72e89
--- /dev/null
+++ b/doc/context/es/events/help.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..e51f7225c
--- /dev/null
+++ b/doc/context/es/mail/help.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+ - 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.
+
+
+
diff --git a/doc/context/es/network/help.html b/doc/context/es/network/help.html
new file mode 100644
index 000000000..00b25428c
--- /dev/null
+++ b/doc/context/es/network/help.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ - 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,
+ digamos 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
new file mode 100644
index 000000000..44d0bed15
--- /dev/null
+++ b/doc/context/es/photos/help.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+ - 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
new file mode 100644
index 000000000..314552f9b
--- /dev/null
+++ b/doc/context/es/profile/help.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ - 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"
+ 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/hooklist.bb b/doc/hooklist.bb
index 994d0dbb2..9331873b4 100644
--- a/doc/hooklist.bb
+++ b/doc/hooklist.bb
@@ -356,6 +356,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
[zrl=[baseurl]/help/hook/obj_verbs]obj_verbs[/zrl]
Called when creating the list of verbs available for profile "things".
+[zrl=[baseurl]/help/hook/oembed_action]oembed_action[/zrl]
+ Called when deciding if an oembed url is to be filter, blocked, or approved
+
[zrl=[baseurl]/help/hook/oembed_probe]oembed_probe[/zrl]
Called when performing an oembed content lookup
diff --git a/include/bbcode.php b/include/bbcode.php
index 5bd5301cc..7a7ea8ce6 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -629,7 +629,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false)
}
if($tryoembed) {
if (strpos($Text,'[/url]') !== false) {
- $Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'tryoembed', $Text);
+ $Text = preg_replace_callback("/[^\^]\[url\]([$URLSearchString]*)\[\/url\]/ism", 'tryoembed', $Text);
}
}
if (strpos($Text,'[/url]') !== false) {
diff --git a/include/oembed.php b/include/oembed.php
index 356b9f961..1e5c51172 100755
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -1,14 +1,16 @@
' . $embedurl . '';
+ $result = oembed_action($embedurl);
+ if($result['action'] === 'block') {
+ return '' . $result['url'] . '';
}
- $j = oembed_fetch_url($embedurl);
+ $j = oembed_fetch_url($result['url']);
$s = oembed_format_object($j);
return $s;
}
@@ -17,22 +19,11 @@ function oembed_replacecb($matches){
function oembed_action($embedurl) {
$host = '';
+ $action = 'filter';
- $action = 'allow';
+ $embedurl = trim(str_replace('&','&', $embedurl));
- // The default action is 'allow'. This is insecure. We might want to
- // change this to 'filter' except it will be a support burden because
- // then youtube videos won't work out of the box and will need to be
- // explicitly enabled.
-
- $embedurl = str_replace('&','&', $embedurl);
-
- logger('oembed_action: ' . $embedurl);
-
- $p = parse_url($embedurl);
-
- if($p)
- $host = $p['host'];
+ logger('oembed_action: ' . $embedurl, LOGGER_DEBUG, LOG_INFO);
// These media files should now be caught in bbcode.php
// left here as a fallback in case this is called from another source
@@ -40,6 +31,11 @@ function oembed_action($embedurl) {
$noexts = array("mp3","mp4","ogg","ogv","oga","ogm","webm","opus");
$ext = pathinfo(strtolower($embedurl),PATHINFO_EXTENSION);
+ if(strpos($embedurl,'http://') === 0) {
+ if(intval(get_config('system','embed_sslonly'))) {
+ $action = 'block';
+ }
+ }
// site white/black list
@@ -49,11 +45,7 @@ function oembed_action($embedurl) {
if($x) {
foreach($x as $ll) {
$t = trim($ll);
-
- // don't allow somebody to provide a url like https://foobar.com/something/youtube
- // to bypass a block or allow of youtube
-
- if($t && (strpos($embedurl,$t) !== false || strpos($t,$host) !== false)) {
+ if(($t) && (strpos($embedurl,$t) !== false)) {
$action = 'block';
break;
}
@@ -69,11 +61,7 @@ function oembed_action($embedurl) {
if($x) {
foreach($x as $ll) {
$t = trim($ll);
-
- // don't allow somebody to provide a url like https://foobar.com/something/youtube
- // to bypass a block or allow of youtube
-
- if($t && (strpos($embedurl,$t) !== false || strpos($t,$host) !== false)) {
+ if(($t) && (strpos($embedurl,$t) !== false) && ($action !== 'block')) {
$found = true;
$action = 'allow';
break;
@@ -87,7 +75,7 @@ function oembed_action($embedurl) {
// allow individual members to block something that wasn't blocked already.
// They cannot over-ride the site to allow or change the filtering on an
- // embed that is not allowed by the site.
+ // embed that is not allowed by the site admin.
if(local_channel()) {
if(($x = get_pconfig(local_channel(),'system','embed_deny'))) {
@@ -96,11 +84,7 @@ function oembed_action($embedurl) {
if($x) {
foreach($x as $ll) {
$t = trim($ll);
-
- // don't allow somebody to provide a url like https://foobar.com/something/youtube
- // to bypass a block or allow of youtube
-
- if($t && (strpos($embedurl,$t) !== false || strpos($t,$host) !== false)) {
+ if(($t) && (strpos($embedurl,$t) !== false)) {
$action = 'block';
break;
}
@@ -109,9 +93,12 @@ function oembed_action($embedurl) {
}
}
- logger('action: ' . $action . ' url: ' . $embedurl, LOGGER_DEBUG,LOG_DEBUG);
+ $arr = array('url' => $embedurl, 'action' => $action);
+ call_hooks('oembed_action',$arr);
- return $action;
+ logger('action: ' . $arr['action'] . ' url: ' . $arr['url'], LOGGER_DEBUG,LOG_DEBUG);
+
+ return $arr;
}
@@ -135,9 +122,10 @@ function oembed_fetch_url($embedurl){
$noexts = array("mp3","mp4","ogg","ogv","oga","ogm","webm","opus");
$ext = pathinfo(strtolower($embedurl),PATHINFO_EXTENSION);
- $action = oembed_action($embedurl);
+ $result = oembed_action($embedurl);
- $embedurl = str_replace('&','&', $embedurl);
+ $embedurl = $result['url'];
+ $action = $result['action'];
$txt = null;
@@ -218,12 +206,14 @@ function oembed_fetch_url($embedurl){
$j = json_decode($txt);
- if($j->html && $action === 'filter') {
- $orig = $j->html;
- $allow_position = (($zrl) ? true : false);
- $j->html = purify_html($j->html,$allow_position);
- if($j->html != $orig) {
- logger('oembed html was purified. original: ' . $orig . ' purified: ' . $j->html, LOGGER_DEBUG, LOG_INFO);
+ if($action === 'filter') {
+ if($j->html) {
+ $orig = $j->html;
+ $allow_position = (($zrl) ? true : false);
+ $j->html = purify_html($j->html,$allow_position);
+ if($j->html != $orig) {
+ logger('oembed html was purified. original: ' . $orig . ' purified: ' . $j->html, LOGGER_DEBUG, LOG_INFO);
+ }
}
}
diff --git a/view/tpl/admin_security.tpl b/view/tpl/admin_security.tpl
index 39f389e54..721b5f38f 100755
--- a/view/tpl/admin_security.tpl
+++ b/view/tpl/admin_security.tpl
@@ -7,7 +7,9 @@
{{include file="field_checkbox.tpl" field=$block_public}}
-
+ {{include file="field_checkbox.tpl" field=$transport_security}}
+ {{include file="field_checkbox.tpl" field=$content_security}}
+ {{include file="field_checkbox.tpl" field=$embed_sslonly}}
{{include file="field_textarea.tpl" field=$whitelisted_sites}}
{{include file="field_textarea.tpl" field=$blacklisted_sites}}
@@ -15,18 +17,6 @@
{{include file="field_textarea.tpl" field=$whitelisted_channels}}
{{include file="field_textarea.tpl" field=$blacklisted_channels}}
- {{if $embedhelp1}}
- {{$embedhelp1}}
- {{/if}}
-
-
-
{{$embedhelp2}}
-
-
{{$embedhelp4}}
-
-
{{include file="field_textarea.tpl" field=$embed_allow}}
{{include file="field_textarea.tpl" field=$embed_deny}}