Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
zottel 2016-05-17 07:56:39 +02:00
commit dc78ab1c77
48 changed files with 12955 additions and 12780 deletions

View File

@ -1,3 +1,52 @@
Hubzilla 1.6
Cleanup and standardise the interfaces to the "jot" editor
Router re-written to support calling class object methods as controllers
All existing modules (160+) re-written as object classes
Plugin hook interface adapted to call static class methods
Context help improved dramatically with content for the most accessed pages.
Reverted a compatibility change to support GNU-social events. We copied their feed format and their feed format is wrong (XML namespace collisions).
Provide a querystring attribute to CSS/JS resources to avoid caching issues when our code changes (which is often).
Fix javascript detection and allow either positive or negative detection.
Refactor the plugin hook registration procedure, provide 'unregister all' ability.
Fix RSD (Real Simple Discovery) which has been broken for some time.
Update smarty library to 3.1.29
Update jquery.textcomplete to 1.3.4
Update font-awesome to 4.6.1
Update SabreDAV to 3.0 (PHP version requirements prevent us from pushing it further at this time)
Help text added to cmdline utilities config and pconfig
Reworking of the database logging facility to avoid the rare but troublesome recursion when the log facility needed to query the DB internally to obtain config parameters.
Implement singleton delivery (emulate nomadic identity to singleton networks and services)
Fix empty album name in photo activities when photo is stored in top level folder.
Allow engineering units to be used in service class data size restrictions (400M, 1G, etc.)
Lots of work on bbcode auto-completion
Admin interface provided to manage external resource repositories
Oembed security reworked. Now all sources are filtered by default unless blocked.
Remove the date-string version and use only STD_VERSION
Add categories and categorisation filtering and the ability to edit all apps (including system apps) for a given channel
Ensure the ability to translate names of all system apps (except those provided in addons)
Provide ability to add categories to content from channel sources
Lots of work on the presentation of the ACL widget to enhance usability and intuitiveness
Allow somebody to follow a channel from a pasted redress containing a Unicode lookalike of the @ sign.
Add conditional syntax to Comanche (if/then/else)
Convert Comanche to an object class
Removed IE6 compatibility code
Explicitly close DB on shutdown/exit instead of allowing it to close naturally
Allowed delayed publish of webpages
Show current repository versions of master and dev on admin page and warn if your installation has fallen behind master
Provide some extra security checks to import data and files to prevent mischief
Block CalDAV/CardDAV namespace reserved words from being used as a channel nickname/redress since Sabre is somewhat inflexible in this regard
Plugins:
Diaspora
markdown translator work needed to eradicate the Diaspora Comment Virus.
upgrade all inbound paths with the most recent protocol changes (several of these)
convert 'diaspora_meta' (Diaspora Comment Virus) to iconfig and eradicate from sites with Diaspora disabled
implement social relay and allow following tags
upgrade statistics.json to NodeInfo. Currently hubzilla sites are tagged as 'redmatrix' because the NodeInfo schema lacks extensibility and project names are used to designate protocol compatibility rather than protocol names.
Std-embeds
New addon to allow a handful of corporate providers to run unfiltered embed code (youtube, vimeo, soundcloud)
Various:
upgrade font-awesome icons and adapt a few addons to Objects and the new hook interface and new controller interface
Hubzilla 1.4 Hubzilla 1.4
[This list may appear brief, but encompasses a huge amount of re-writing and re-factoring [This list may appear brief, but encompasses a huge amount of re-writing and re-factoring
of the internal code structure to gain long-term performance and stability and provide a standard of the internal code structure to gain long-term performance and stability and provide a standard

View File

@ -1733,6 +1733,19 @@ class Admin extends \Zotlabs\Web\Controller {
} else { } else {
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false)); json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
} }
$extendDir = __DIR__ . '/../../store/git/sys/extend';
$addonDir = $extendDir . '/addon';
if (!file_exists($extendDir)) {
if (!mkdir($extendDir, 0770, true)) {
logger('Error creating extend folder: ' . $extendDir);
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
} else {
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
}
}
$repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName; $repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName;
if (!is_dir($repoDir)) { if (!is_dir($repoDir)) {
logger('Repo directory does not exist: ' . $repoDir); logger('Repo directory does not exist: ' . $repoDir);
@ -1758,6 +1771,19 @@ class Admin extends \Zotlabs\Web\Controller {
} else { } else {
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false)); json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
} }
$extendDir = __DIR__ . '/../../store/git/sys/extend';
$addonDir = $extendDir . '/addon';
if (!file_exists($extendDir)) {
if (!mkdir($extendDir, 0770, true)) {
logger('Error creating extend folder: ' . $extendDir);
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
} else {
if (!symlink(__DIR__ . '/../../extend/addon', $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
}
}
$repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName; $repoDir = __DIR__ . '/../../store/git/sys/extend/addon/' . $repoName;
if (!is_dir($repoDir)) { if (!is_dir($repoDir)) {
logger('Repo directory does not exist: ' . $repoDir); logger('Repo directory does not exist: ' . $repoDir);

View File

@ -8,7 +8,6 @@ require_once('include/widgets.php');
class Comanche { class Comanche {
@ -95,7 +94,7 @@ class Comanche {
$cnt = preg_match_all("/\[region=(.*?)\](.*?)\[\/region\]/ism", $s, $matches, PREG_SET_ORDER); $cnt = preg_match_all("/\[region=(.*?)\](.*?)\[\/region\]/ism", $s, $matches, PREG_SET_ORDER);
if($cnt) { if($cnt) {
foreach($matches as $mtch) { foreach($matches as $mtch) {
\App::$layout['region_' . $mtch[1]] = $this->region($mtch[2]); \App::$layout['region_' . $mtch[1]] = $this->region($mtch[2],$mtch[1]);
} }
} }
} }
@ -320,7 +319,9 @@ class Comanche {
} }
function region($s) { function region($s,$region_name) {
$s = str_replace('$region',$region_name,$s);
$matches = array(); $matches = array();

View File

@ -73,6 +73,9 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
protected $timezone = ''; protected $timezone = '';
public $module_disabled = false;
/** /**
* @brief Validates a username and password. * @brief Validates a username and password.
* *
@ -92,7 +95,7 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
intval($record['account_id']), intval($record['account_id']),
intval($record['account_default_channel']) intval($record['account_default_channel'])
); );
if ($r) { if($r && $this->check_module_access($r[0]['channel_id'])) {
return $this->setAuthenticated($r[0]); return $this->setAuthenticated($r[0]);
} }
} }
@ -109,13 +112,17 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
if ((($record['account_flags'] == ACCOUNT_OK) || ($record['account_flags'] == ACCOUNT_UNVERIFIED)) if ((($record['account_flags'] == ACCOUNT_OK) || ($record['account_flags'] == ACCOUNT_UNVERIFIED))
&& (hash('whirlpool', $record['account_salt'] . $password) === $record['account_password'])) { && (hash('whirlpool', $record['account_salt'] . $password) === $record['account_password'])) {
logger('password verified for ' . $username); logger('password verified for ' . $username);
return $this->setAuthenticated($r[0]); if($this->check_module_access($r[0]['channel_id']))
return $this->setAuthenticated($r[0]);
} }
} }
} }
} }
$error = 'password failed for ' . $username; if($this->module_disabled)
$error = 'module not enabled for ' . $username;
else
$error = 'password failed for ' . $username;
logger($error); logger($error);
log_failed_login($error); log_failed_login($error);
@ -139,6 +146,17 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
return true; return true;
} }
protected function check_module_access($channel_id) {
if($channel_id && \App::$module === 'cdav') {
$x = get_pconfig($channel_id,'cdav','enabled');
if(! $x) {
$this->module_disabled = true;
return false;
}
}
return true;
}
/** /**
* Sets the channel_name from the currently logged-in channel. * Sets the channel_name from the currently logged-in channel.
* *

View File

@ -13,10 +13,10 @@ namespace Zotlabs\Web;
class Session { class Session {
private static $handler = null; private $handler = null;
private static $session_started = false; private $session_started = false;
function init() { public function init() {
$gc_probability = 50; $gc_probability = 50;
@ -29,7 +29,8 @@ class Session {
*/ */
$handler = new \Zotlabs\Web\SessionHandler(); $handler = new \Zotlabs\Web\SessionHandler();
self::$handler = $handler;
$this->handler = $handler;
$x = session_set_save_handler($handler,false); $x = session_set_save_handler($handler,false);
if(! $x) if(! $x)
@ -38,11 +39,12 @@ class Session {
// Force cookies to be secure (https only) if this site is SSL enabled. // Force cookies to be secure (https only) if this site is SSL enabled.
// Must be done before session_start(). // Must be done before session_start().
$arr = session_get_cookie_params(); $arr = session_get_cookie_params();
session_set_cookie_params( session_set_cookie_params(
((isset($arr['lifetime'])) ? $arr['lifetime'] : 0), ((isset($arr['lifetime'])) ? $arr['lifetime'] : 0),
((isset($arr['path'])) ? $arr['path'] : '/'), ((isset($arr['path'])) ? $arr['path'] : '/'),
((isset($arr['domain'])) ? $arr['domain'] : App::get_hostname()), (($arr['domain']) ? $arr['domain'] : \App::get_hostname()),
((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false), ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),
((isset($arr['httponly'])) ? $arr['httponly'] : true) ((isset($arr['httponly'])) ? $arr['httponly'] : true)
); );
@ -51,9 +53,9 @@ class Session {
} }
function start() { public function start() {
session_start(); session_start();
self::$session_started = true; $this->session_started = true;
} }
/** /**
@ -62,8 +64,8 @@ class Session {
* @return void * @return void
*/ */
function nuke() { public function nuke() {
self::new_cookie(0); // 0 means delete on browser exit $this->new_cookie(0); // 0 means delete on browser exit
if($_SESSION && count($_SESSION)) { if($_SESSION && count($_SESSION)) {
foreach($_SESSION as $k => $v) { foreach($_SESSION as $k => $v) {
unset($_SESSION[$k]); unset($_SESSION[$k]);
@ -71,48 +73,52 @@ class Session {
} }
} }
function new_cookie($xtime) { public function new_cookie($xtime) {
$newxtime = (($xtime> 0) ? (time() + $xtime) : 0); $newxtime = (($xtime> 0) ? (time() + $xtime) : 0);
$old_sid = session_id(); $old_sid = session_id();
if(self::$handler && self::$session_started) { $arr = session_get_cookie_params();
if($this->handler && $this->session_started) {
session_regenerate_id(true); session_regenerate_id(true);
// force SessionHandler record creation with the new session_id // force SessionHandler record creation with the new session_id
// which occurs as a side effect of read() // which occurs as a side effect of read()
self::$handler->read(session_id()); $this->handler->read(session_id());
} }
else else
logger('no session handler'); logger('no session handler');
if (x($_COOKIE, 'jsdisabled')) { if (x($_COOKIE, 'jsdisabled')) {
setcookie('jsdisabled', $_COOKIE['jsdisabled'], $newxtime); setcookie('jsdisabled', $_COOKIE['jsdisabled'], $newxtime, '/', \App::get_hostname(),((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),((isset($arr['httponly'])) ? $arr['httponly'] : true));
} }
setcookie(session_name(),session_id(),$newxtime); setcookie(session_name(),session_id(),$newxtime, '/', \App::get_hostname(),((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),((isset($arr['httponly'])) ? $arr['httponly'] : true));
$arr = array('expire' => $xtime); $arr = array('expire' => $xtime);
call_hooks('new_cookie', $arr); call_hooks('new_cookie', $arr);
} }
function extend_cookie() { public function extend_cookie() {
$arr = session_get_cookie_params();
// if there's a long-term cookie, extend it // if there's a long-term cookie, extend it
$xtime = (($_SESSION['remember_me']) ? (60 * 60 * 24 * 365) : 0 ); $xtime = (($_SESSION['remember_me']) ? (60 * 60 * 24 * 365) : 0 );
if($xtime) if($xtime)
setcookie(session_name(),session_id(),(time() + $xtime)); setcookie(session_name(),session_id(),(time() + $xtime), '/', \App::get_hostname(),((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),((isset($arr['httponly'])) ? $arr['httponly'] : true));
$arr = array('expire' => $xtime); $arr = array('expire' => $xtime);
call_hooks('extend_cookie', $arr); call_hooks('extend_cookie', $arr);
} }
function return_check() { public function return_check() {
// check a returning visitor against IP changes. // check a returning visitor against IP changes.
// If the change results in being blocked from re-entry with the current cookie // If the change results in being blocked from re-entry with the current cookie
@ -152,7 +158,7 @@ class Session {
// check any difference at all // check any difference at all
logger('Session address changed. Paranoid setting in effect, blocking session. ' logger('Session address changed. Paranoid setting in effect, blocking session. '
. $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']); . $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']);
self::nuke(); $this->nuke();
goaway(z_root()); goaway(z_root());
break; break;
} }

View File

@ -632,6 +632,19 @@ class ZotlabsAutoloader {
return TRUE; return TRUE;
} }
} }
$arr = explode('\\',$className);
if($arr && count($arr) > 1) {
if(! $arr[0])
$arr = array_shift($arr);
$filename = 'addon/' . lcfirst($arr[0]) . '/' . $arr[1] . ((count($arr) === 2) ? '.php' : '/' . $arr[2] . ".php");
if (file_exists($filename)) {
include($filename);
if (class_exists($className)) {
return TRUE;
}
}
}
return FALSE; return FALSE;
} }
} }
@ -687,6 +700,7 @@ class App {
private static $perms = null; // observer permissions private static $perms = null; // observer permissions
private static $widgets = array(); // widgets for this page private static $widgets = array(); // widgets for this page
public static $session = null;
public static $groups; public static $groups;
public static $language; public static $language;
public static $langsave; public static $langsave;
@ -1656,7 +1670,8 @@ function goaway($s) {
function shutdown() { function shutdown() {
global $db; global $db;
$db->close(); if(is_object($db) && $db->connected)
$db->close();
} }
/** /**

View File

@ -2,10 +2,12 @@
[list=1] [list=1]
[*] abcjsplugin - Create musical scores in your posts [*] abcjsplugin - Create musical scores in your posts
[*] adultphotoflag - prevents nsfw photos from being displayed in public albums [*] adultphotoflag - prevents nsfw photos from being displayed in public albums
[*] b2tbtn - provide button to go directly to top of page if you are scrolled a long way down
[*] bbmath - use complex math expressions in your posts [*] bbmath - use complex math expressions in your posts
[*] bookmarker - replace #^ with bookmark link in posts [*] bookmarker - replace #^ with bookmark link in posts
[*] buglink - provide a bug reporting icon in the lower-left corner of every page [*] buglink - provide a bug reporting icon in the lower-left corner of every page
[*] calc - a scientific calculator [*] calc - a scientific calculator
[*] cdav - CalDAV/CardDAV server
[*] chess - cross domain identity aware interactive chess games [*] chess - cross domain identity aware interactive chess games
[*] chords - generate fingering charts and alternatives for every known guitar chord [*] chords - generate fingering charts and alternatives for every known guitar chord
[*] custom_home - set a custom page as the hub start page [*] custom_home - set a custom page as the hub start page
@ -13,18 +15,24 @@
[*] diaspora - Diaspora protocol emulator [*] diaspora - Diaspora protocol emulator
[*] diaspost - crosspost to a Diaspora account (different from the Diaspora protocol emulator) [*] diaspost - crosspost to a Diaspora account (different from the Diaspora protocol emulator)
[*] dirstats - show some interesting statistics generated by the driectory server [*] dirstats - show some interesting statistics generated by the driectory server
[*] docs - alternate documentation pages
[*] donate - provides a project donation page [*] donate - provides a project donation page
[*] dwpost - crosspost to Dreamwidth [*] dwpost - crosspost to Dreamwidth
[*] embedphotos - tool to embed photos from your albums in a post
[*] extcron - use an external cron service to run your hub's scheduled tasks [*] extcron - use an external cron service to run your hub's scheduled tasks
[*] flattrwidget - provides a "Flattr Us" button [*] flattrwidget - provides a "Flattr Us" button
[*] flip - create upside down text [*] flip - create upside down text
[*] fortunate - displays random quote (fortune cookie). Requires setting up a fortune server. [*] fortunate - displays random quote (fortune cookie). Requires setting up a fortune server.
[*] friendica - Friendica (DFRN) protocol. Under development.
[*] frphotos - import photo albums from Friendica [*] frphotos - import photo albums from Friendica
[*] gnusoc - GNU-Social (OStatus) protocol. Under development.
[*] hexit - headecimal conversion tool [*] hexit - headecimal conversion tool
[*] hubwall - send an admin email to all hub accounts
[*] ijpost - crosspost to Insanejournal [*] ijpost - crosspost to Insanejournal
[*] irc - connect to IRC chatrooms [*] irc - connect to IRC chatrooms
[*] jappixmini - XMPP chat [*] jappixmini - XMPP chat
[*] jsupload - (recommended) upload multiple photos to photo albums at once. [*] jsupload - upload multiple photos to photo albums at once.
[*] keepout - prevents nearly all use of site when not logged in, more restrictive than 'block public' setting
[*] ldapauth - login via account on LDAP or Windows Active Directory domain [*] ldapauth - login via account on LDAP or Windows Active Directory domain
[*] libertree - crosspost to Libertree [*] libertree - crosspost to Libertree
[*] likebanner - create a "like us on red#matrix" banner image [*] likebanner - create a "like us on red#matrix" banner image
@ -32,6 +40,7 @@
[*] logrot - logfile rotation utility [*] logrot - logfile rotation utility
[*] mahjongg - Chinese puzzle game [*] mahjongg - Chinese puzzle game
[*] mailhost - when using multiple channel clones, select one to receive email notifications [*] mailhost - when using multiple channel clones, select one to receive email notifications
[*] metatag - provide SEO friendly pages
[*] mayan_places - set location field to a random city in the Mayan world [*] mayan_places - set location field to a random city in the Mayan world
[*] morechoice - additional gender/sexual-preference choices for profiles (not safe for work) [*] morechoice - additional gender/sexual-preference choices for profiles (not safe for work)
[*] moremoods - Additional mood options [*] moremoods - Additional mood options
@ -60,6 +69,7 @@
[*] startpage - set a personal preferred page to redirect after logging in. [*] startpage - set a personal preferred page to redirect after logging in.
[*] statistics_json - Diaspora statistics generator [*] statistics_json - Diaspora statistics generator
[*] statusnet - GNU-social and StatusNet crosspost [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl] [*] statusnet - GNU-social and StatusNet crosspost [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]
[*] std_embeds - allow unfiltered embeds for popular providers like youtube, vimeo and soundcloud
[*] superblock - Highly recommended - completely block an offensive channel from your stream [*] superblock - Highly recommended - completely block an offensive channel from your stream
[*] testdrive - Turns your hub into a test drive site with accounts that expire after a trail period. [*] testdrive - Turns your hub into a test drive site with accounts that expire after a trail period.
[*] tictac - 3D tic-tac-toe [*] tictac - 3D tic-tac-toe

1
doc/context/es-es Symbolic link
View File

@ -0,0 +1 @@
es

View File

@ -1,36 +1,9 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>le <dd>Esta página le permite ajustar los parámetros de los informes del sistema (logs) y para ver uno existente.</dd>
permite ajustar</span> <span>los parámetros de los informes del
sistema (logs)</span> <span>y para</span> <span>ver uno</span> <span>existente</span><span
class="">.</span></span></dd>
<dt>Ajustes de los informes (logs)</dt> <dt>Ajustes de los informes (logs)</dt>
<dd><span id="result_box" class="" lang="es"><span>Cuando se habilita la</span> <dd>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"
<span>opción de depuración</span><span>,</span> el <span>sistema de</span> (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.</dd>
<span>información</span> <span class="">comenzará</span> a <span>añadir <dt>Nivel de depuración</dt>
</span>los informes (logs) <span>en el archivo especificado</span> <span>en <dd>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.</dd>
el cuadro</span> <span>"</span><span>Fichero de informes</span><span>"</span>
<span>(la </span><span class="">ruta es relativa</span> <span class="">al
directorio raíz del servidor</span><span>,</span> <span>por
ejemplo,</span> <span>/</span><span>var</span> <span>/</span><span>www</span><span
class="">)</span><span>.</span> <span>Tenga en cuenta que</span> <span
class="">este archivo</span> <span class="">tiene que</span> <span
class="">ser modificable por el</span> <span>servidor web</span><span>.</span></span></dd>
<dt>Nivel de depuración</dt>
<dd><span id="result_box" class="" lang="es"><span>La opción de</span> <span>nivel
de depuración</span> <span>le permite establecer</span> <span>la
cantidad de información</span> <span>que se</span> <span>anexa al
fichero de informes (logs)</span><span>.</span> <span>Advertencia</span><span>:</span>
<span>El aumento de</span> <span>este nivel</span> <span>puede
aumentar</span> <span>rápidamente el tamaño</span> <span>de este
fichero hasta en más de</span><span></span> <span>100 MB</span><span>,
especialmente</span> <span>en</span> <span>los hubs</span> <span>con</span>
<span>más que unos pocos</span> <span>miembros</span><span class="">.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,17 +1,4 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Las estadísticas</span> <dd>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.</dd>
<span>de la cola muestran</span> <span>cuántos</span> <span>mensajes</span>
<span>están en</span> <span>la cola</span> <span>para su entrega a</span>
<span>otros hubs</span><span>.</span> <span class="">La prioridad</span>
<span>está relacionada con</span> <span>la cantidad de veces</span>
que <span>la entrega</span> <span>se ha intentado</span><span>, sin
éxito</span><span>.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,17 +1,4 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>contiene</span> <dd>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".</dd>
<span class="">varios ajustes</span> </span><span id="result_box" class=""
lang="es"><span>para el administrador</span> </span><span id="result_box"
class="" lang="es"><span class="">relacionados con la seguridad</span>.
<span>Para</span> <span class="">guardar los cambios que</span> <span
class="">realice en</span> <span>estos ajustes</span><span>, debe
pulsar</span> <span class="">el botón Enviar.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,35 +1,8 @@
<html> <dt>General</dt>
<head> <dd>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
<meta content="text/html; charset=windows-1252" http-equiv="content-type"> del observador.</dd>
</head> <dt>Crear una entrada</dt>
<body> <dd>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.</dd>
<dl class="dl-horizontal"> <dt><a href="#" onclick="contextualHelpFocus(&quot;#tabs-collapse-1&quot;, 0); return false;">Pestañas de los contenidos del canal</a></dt>
<dt>General</dt> <dd>Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "<b>Mi perfil</b>" enlaza con el perfil del canal. La pestaña "<b>Fotos</b>" enlaza con las galerías
<dd><span id="result_box" class="" lang="es"><span>Esta</span> <span>es de fotos. La pestaña "<b>Ficheros</b>" enlaza con los ficheros de cualquier tipo compartidos por el canal.</dd>
la</span> <span>página principal de un</span> <span>canal.</span>
<span>Es similar</span> <span>al "muro" del perfil </span><span></span><span></span><span></span>
<span>de una persona</span> <span>en un contexto</span> de <span>red
social</span><span>.</span> <span>Las entradas</span> <span>creadas
por</span> <span>el canal</span> <span>se</span> <span>muestran
de acuerdo con</span> <span>los permisos de visualización</span> <span
class="">del observador</span><span>.</span></span></dd>
<dt>Crear una entrada</dt>
<dd><span id="result_box" class="" lang="es"><span>Si tiene permiso</span>
<span>para crear</span> <span>entradas en</span> <span>la página del
canal</span><span>,</span> <span>a continuación,</span> <span>podrá
ver el</span> <span>editor de entradas</span> <span>en la parte
superior</span><span class="">.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;'
title="Pulsar sobre el elemento resaltado...">Pestañas de los
contenidos del canal</a></dt>
<dd><span id="result_box" class="" lang="es"><span>Las</span> <span>pestañas</span>
<span>de los contenidos</span> <span>del canal</span> <span>son</span>
<span>enlaces a otros contenidos</span> <span>publicados por el</span>
<span>canal.</span> La pestaña "<span style="font-weight: bold;">Mi
perfil</span>" enlaza con el perfil del canal. La pestaña "<span style="font-weight: bold;">Fotos</span>"
enlaza con las galerías de fotos. La pestaña "<span style="font-weight: bold;">Ficheros</span>"
enlaza con los ficheros de cualquier tipo compartidos por el canal.<span
class=""></span></span></dd>
</dl>
</body>
</html>

View File

@ -1,30 +1,8 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Creación y uso de</span> <dd>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.</dd>
<span>salas de chat para</span> <span>comunicarse en tiempo</span> <span>real, <dt>Crear una nueva sala de chat</dt>
utilizando</span> <span class="">el sistema de</span> <span>permisos</span> <dd>Utilice el botón "Crear" para crear una nueva sala de chat. Introduzca un nombre y cuánto tiempo se deben conservar los mensajes.</dd>
<span>Hubzilla</span> <span>estándar para el</span> <span>control de
acceso a</span> <span class="">la sala de chat</span><span>.</span></span></dd>
<dt>Create una nueva sala de chat</dt>
<dd><span id="result_box" class="" lang="es"><span>Utilice</span> <span>el
botón</span> <span>"</span><span class="">Crear" para</span> <span>crear
una nueva</span> <span class="">sala de chat</span><span>.</span> <span
class="">Introduzca un nombre y</span> <span class="">cuánto tiempo
se deben conservar los mensajes.</span><span class=""></span></span></dd>
<dt>Chatear</dt> <dt>Chatear</dt>
<dd><span id="result_box" class="" lang="es"><span>Introduzca su mensaje <dd>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".</dd>
en</span> <span>el cuadro de mensaje</span> <span>y pulse</span> <span>"Enviar".</span>
<span>Se puede establecer un</span> <span>estado</span> <span>seleccionando
el</span> <span>botón de menú</span> <span>sala de chat</span> <span>junto
al botón</span> <span>Enviar.</span> <span>Si hay otras personas</span>
<span>"en la sala</span><span>",</span> <span>serán visibles en</span>
<span>el panel lateral</span>, <span>en</span><span></span> <span>"</span><span
class="">Miembros del chat</span><span>"</span><span class="">.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,30 +1,7 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>muestra <dd>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
los ficheros en la</span> <span>"nube"</span> <span>de un canal</span><span>.</span> el propietario del canal. Si tiene permiso para crear o cargar ficheros, verá botones de control por encima de la lista de ficheros.</dd>
<span>Los</span> <span>archivos visibles</span> <span>para el <dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;' title="Pulsar en el elemento resaltado...">Pestañas de los contenidos del canal</a></dt>
observador</span> <span>dependen de</span> <span>los permisos de <dd>Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "<b>Mi perfil</b>" enlaza con el perfil del canal. La pestaña "<b>Fotos</b>" enlaza con las galerías de fotos. La pestaña "<b>Ficheros</b>" enlaza con los ficheros de cualquier tipo compartidos por el canal.</dd>
archivo</span> <span>individuales</span> <span>establecidas por</span>
<span>el propietario del canal</span><span>.</span> <span>Si tiene
permiso</span> <span>para crear</span> <span>o</span> <span>cargar
ficheros,</span> <span>verá</span> <span>botones de control</span>
<span>por encima de la</span> <span class="">lista de ficheros.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;'
title="Pulsar en el elemento resaltado...">Pestañas de los contenidos
del canal<br>
</a></dt>
<dd><span id="result_box" class="" lang="es"><span>Las</span> <span>pestañas</span>
<span>de los contenidos</span> <span>del canal</span> <span>son</span>
<span>enlaces a otros contenidos</span> <span>publicados por el</span>
<span>canal.</span> La pestaña "<span style="font-weight: bold;">Mi
perfil</span>" enlaza con el perfil del canal. La pestaña "<span style="font-weight: bold;">Fotos</span>"
enlaza con las galerías de fotos. La pestaña "Ficheros" enlaza con los
ficheros de cualquier tipo compartidos por el canal.</span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,8 +1,15 @@
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd>This page displays a list of all this channel's connections. The list can be <a href='#' onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Click to highlight element...">sorted and filtered using the menu button beside the search button</a>. </dd> <dd>Esta página muestra una lista de todas las conexiones de este canal. La lista se puede <a href="#" onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Pulsar sobre el elemento resaltado...">ordenar y filtrar usando el botón de menú al lado del botón de búsqueda</a>.</dd>
<dt>Connection Details</dt> <dt>Detalles de la conexión</dt>
<dd>Each list entry shows the details of a specific connection. A translucent avatar image indicates an archived connection.</dd> <dd>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.</dd>
<dt>Connection Status</dt> <dt>Estado de la conexión</dt>
<dd>A connection can be in different states: <ul><li>Archived</li><li>Ignored</li><li>Blocked</li><li>Hidden</li></ul></dd> <dd>Una conexión puede estar en diferentes estados:
</dl> <ul>
<li>Archivada</li>
<li>Ignorada</li>
<li>Bloqueada</li>
<li>Oculta</li>
</ul>
</dd>
</dl>

View File

@ -1,24 +1,10 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>muestra <dd>Esta página muestra una lista de todas las conexiones de este canal. La lista se puede&nbsp;<a href="#" onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' title="Pulsar sobre el elemento resaltado...">ordenar y filtrar usando el botón de menú al lado del botón de búsqueda</a>. </dd>
una lista de</span> <span>todas</span> <span>las conexiones</span> <dt>Detalles de la conexión</dt>
<span class="">de este canal</span><span class="">.</span> <span class="">La</span> <dd>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.</dd>
<span class="">lista se puede&nbsp;</span></span><a href="#" onclick='contextualHelpFocus(".section-title-wrapper", 0); return false;' <dt>Estado de la conexión</dt>
title="Pulsar sobre el elemento resaltado...">ordenar y filtrar usando <dd>Una conexión puede estar en diferentes estados:
el botón de menú al lado del botón de búsqueda</a>. </dd>
<dt>Detalles de la conexión</dt>
<dd><span id="result_box" class="" lang="es"><span>Cada</span> <span>entrada
de la lista</span> <span>muestra los</span> <span>detalles de una
conexión</span> <span>específica</span><span>.</span> <span>Una</span>
<span>imagen de avatar</span> <span>translúcida</span> <span>indica
una conexión</span> <span class="">archivada.</span></span></dd>
<dt>Estado de la conexión</dt>
<dd>Una conexión puede estar en diferentes estados:
<ul> <ul>
<li>Archivada</li> <li>Archivada</li>
<li>Ignorada</li> <li>Ignorada</li>
@ -27,5 +13,3 @@
</ul> </ul>
</dd> </dd>
</dl> </dl>
</body>
</html>

View File

@ -1,23 +1,8 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>muestra <dd>Esta página muestra un calendario de eventos tanto de su propiedad como compartido con usted desde otros canales.</dd>
un calendario</span> <span>de eventos tanto</span> <span>de su <dt><a href="#" onclick='contextualHelpFocus("#title", 0); return false;' title="Pulsar en el elemento resaltado...">Vistas del calendario</a></dt>
propiedad como</span> <span class="">compartido con usted</span> <span <dd>El calendario se puede mostrar en modo mensual, semanal o diario usando las opciones del panel lateral.</dd>
class="">desde otros canales.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#title", 0); return false;'
title="Pulsar en el elemento resaltado...">Vistas del calendario</a></dt>
<dd><span id="result_box" class="" lang="es"><span>El calendario</span> <span>se
puede mostrar en</span> <span>modo mensual</span><span>, semanal o</span>
diario<span> usando</span> <span>las opciones del</span> <span class="">panel
lateral</span><span class="">.</span></span></dd>
<dt>Exportar/Importar</dt> <dt>Exportar/Importar</dt>
<dd>Exportar o importar eventos del calendario usando el formato estándar <dd>Exportar o importar eventos del calendario usando el formato estándar de los ficheros de iCalendar (.ics).</dd>
de los ficheros de iCalendar (.ics).</dd>
</dl> </dl>
</body>
</html>

View File

@ -1,38 +1,10 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Los mensajes que <dd>Los mensajes que aparecen en el correo privado son visibles sólo para usted y un único destinatario.</dd>
aparecen</span> <span>en</span> <span>el correo privado</span> <span>son</span>
<span>visibles sólo para</span> <span>usted y un</span> <span class="">único
destinatario.</span></span></dd>
<dt>Vista combinada</dt> <dt>Vista combinada</dt>
<dd><span id="result_box" class="" lang="es"><span>Las conversaciones</span> <dd>Las conversaciones completas se pueden ver en un hilo continuo seleccionando "<b>Vista combinada</b>". Las conversaciones disponibles se muestran debajo del menú en el panel lateral.</dd>
<span>completas</span> <span>se pueden ver en</span> <span>un hilo
continuo</span> <span>seleccionando</span><span></span> "<span><span
style="font-weight: bold;">Vista combinada</span>"</span><span>.</span>
<span>Las conversaciones</span> <span>disponibles se muestran</span>
<span>debajo del menú</span> <span>en el</span> <span class="">panel
lateral</span><span class="">.</span></span></dd>
<dt>Bandeja de entrada/Bandeja de salida</dt> <dt>Bandeja de entrada/Bandeja de salida</dt>
<dd>Los mensajes individuales enviados son visibles seleccionando la <span <dd>Los mensajes individuales enviados son visibles seleccionando la <b>Bandeja de salida</b> y los mensajes recibidos se pueden ver usando el filtro de la <b>Bandeja de entrada.</b></dd>
style="font-weight: bold;">Bandeja de salida</span> y los mensajes
recibidos se pueden ver usando el filtro de la <span style="font-weight: bold;">Bandeja
de entrada</span>.<br>
</dd>
<dt>Mensaje nuevo</dt> <dt>Mensaje nuevo</dt>
<dd><span id="result_box" class="" lang="es"><span>Los mensajes <dd>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, <i>si aún no lo ha leído</i>.</dd>
individuales</span> <span>tienen</span> <span>informes de entrega</span>
<span>que se pueden ver</span> <span>usando</span> <span>el menú</span>
<span>desplegable.</span> <span>Los mensajes también</span> <span>se
pueden revocar</span> <span>desde el mismo menú</span><span>, lo
que puede</span> <span>evitar que el destinatario</span> <span>vea
el mensaje</span><span>, <span style="font-style: italic;">si</span></span><span
style="font-style: italic;"> <span>aún no lo ha</span> </span><span
class=""><span style="font-style: italic;">leído</span>.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,71 +1,12 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>La</span> <span>página <dd>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.</dd>
de</span> <span>Mi red muestra</span> <span>un flujo</span> <span>de</span> <dt><a href="#" onclick='contextualHelpFocus("#profile-jot-wrapper", 0); return false;' title="Pulsar sobre el elemento resaltado...">Crear una entrada</a></dt>
<span>entradas</span> <span>y conversaciones</span><span>,</span> <span>normalmente</span> <dd>En la parte superior de la página hay un cuadro de texto que dice "<b>Compartir</b>". 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
<span>ordenadas según la</span> <span>actualización más reciente</span><span>.</span> accesos directos para el <b>Formato</b> de texto y para&nbsp; 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 <b>Enviar</b> para publicarla.</dd>
<span>Esta página</span> <span>es</span> <span>altamente <dt><a href="#" onclick='contextualHelpFocus("#group-sidebar", 1); return false;' title="Pulsar sobre el elemento resaltado...">Grupos de canales</a></dt>
personalizable</span><span class="">.</span></span></dd> <dd>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.</dd>
<dt><a href="#" onclick='contextualHelpFocus("#profile-jot-wrapper", 0); return false;' <dt><a href="#" onclick='$("#dbtn-acl").click(); return false;' title="Pulsar sobre el elemento resaltado...">Permisos de una entrada</a></dt>
title="Pulsar sobre el elemento resaltado...">Crear una entrada<br> <dd>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
</a></dt> fiesta sorpresa para un amigo. Puede enviar un mensaje de invitación a todos los miembros de su grupo de <b>Amigos</b>, excepto el amigo al que quiere sorprender. En este caso, "se mostrará" al grupo de amigos, pero "no se mostrará" a esa única persona.</dd>
<dd><span id="result_box" class="" lang="es"><span>En la parte superior</span>
<span>de la</span> <span>página hay un</span> <span>cuadro de texto
que</span> <span>dice</span> <span>"</span><span style="font-weight: bold;">Compartir</span><span>"</span><span>.</span>
<span>Al hacer clic en</span> <span>esta casilla</span> <span>se
abre</span> <span>un nuevo</span> <span>editor de entradas</span><span>.</span>
<span>El</span> <span>editor de entradas</span> <span>es
personalizable</span><span>,</span> <span>pero el</span> <span>editor
básico</span> <span>proporciona</span> <span>campos para</span> <span>el
cuerpo de la publicación y un</span><span></span> <span>título</span>
<span>opcional.</span> <span>Los botones que hay debajo de la</span>
<span>zona de</span> <span>texto, a la izquierda,</span> <span>proporcionan</span>
<span>accesos directos para el</span> <span><span style="font-weight: bold;">Formato</span>
de texto</span> <span>y para&nbsp; insertar</span> <span>enlaces</span><span>,
imágenes y</span> <span>otros</span> <span>datos en</span> <span>la
entrada</span><span>.</span> <span>Los</span> <span>botones a la
derecha</span> <span>proporcionan una</span> <span class="">vista
previa del</span> <span class="">mensaje</span><span class="">,</span>
<span>los ajustes</span><span> de permisos</span> <span>de la entrada</span><span>,</span>
<span>y</span> <span>un botón <span style="font-weight: bold;">Enviar</span></span>
<span>para publicarla</span><span></span><span>.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#group-sidebar", 1); return false;'
title="Pulsar sobre el elemento resaltado...">Grupos de canales<br>
</a></dt>
<dd><span id="result_box" class="" lang="es"><span>Los</span> <span>grupos
de canales</span> <span>que ha creado</span> <span>se muestran en
el</span> <span>panel lateral</span><span>.</span> <span class="">Seleccionándolos,
se</span><span class=""> filtran</span> <span class="">las entradas</span>
<span></span><span>creadas por</span> <span>los canales incluidos en
el</span> <span>grupo elegido</span><span class="">.</span></span></dd>
<dt><a href="#" onclick='$("#dbtn-acl").click(); return false;' title="Pulsar sobre el elemento resaltado...">Permisos
de una entrada<br>
</a></dt>
<dd><span id="result_box" class="" lang="es"><span>La lista</span> <span>de
control de acceso</span> <span>(</span><span>ACL) es</span> <span>lo
que se utiliza</span> <span>para establecer</span> <span>quién
puede ver su</span> <span>nueva entrada</span><span>.</span> <span>Al
pulsar el</span> <span>botón ACL</span>, <span>al lado del</span>
<span>botón Enviar,</span> <span>se mostrará</span> <span>un cuadro
de diálogo</span> <span>en</span> <span>el que puede seleccionar</span>
<span>qué canales</span> <span>y /</span> <span>o</span> <span>grupos
de canales</span> <span>pueden ver el</span> <span>mensaje</span><span>.</span>
<span>También puede seleccionar</span> <span>a quién se le niega</span>
<span>el acceso explícitamente</span><span>.</span> <span>Por ejemplo</span><span>,
digamos que usted</span> <span>está planeando</span> <span>una
fiesta sorpresa para</span> <span>un amigo</span><span>.</span> <span>Puede
enviar un</span> <span>mensaje</span> <span>de invitación</span> <span>a</span>
<span>todos los miembros de</span> <span>su grupo de</span> <span style="font-weight: bold;">Amigos</span><span>,
excepto el</span> <span>amigo al que quiere sorprender</span><span
class="">.</span> <span class="">En este caso,</span> <span>"se
mostrará"&nbsp;</span> <span>al grupo de</span> <span>amigos, pero</span>
<span>"</span><span>no se mostrará</span><span>"</span> <span>a esa
única</span><span class=""> persona.</span></span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,27 +1,6 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta página</span> <span>muestra</span> <dd>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.</dd>
<span class="">los álbumes de fotos</span> <span class="">de un canal</span><span>.</span> <dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;' title="Pulsar sobre el elemento resaltado...">Pestañas de los contenidos del canal</a></dt>
<span>Las</span> <span>imágenes visibles</span> <span class="">para <dd>Las pestañas de los contenidos del canal son enlaces a otros contenidos publicados por el canal. La pestaña "<b>Mi perfil</b>" enlaza con el perfil del canal. La pestaña "<b>Fotos</b>" enlaza con las galerías de fotos. La pestaña "<b>Ficheros</b>" enlaza con los ficheros de cualquier tipo compartidos por el canal.</dd>
el observador</span> <span class="">dependen de</span> <span class="">los
permisos</span> <span class="">individuales de cada imagen</span><span
class="">.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;'
title="Pulsar sobre el elemento resaltado...">Pestañas de los
contenidos del canal<br>
</a></dt>
<dd><span id="result_box" class="" lang="es"><span>Las</span> <span>pestañas</span>
<span>de los contenidos</span> <span>del canal</span> <span>son</span>
<span>enlaces a otros contenidos</span> <span>publicados por el</span>
<span>canal.</span> La pestaña "<span style="font-weight: bold;">Mi
perfil</span>" enlaza con el perfil del canal. La pestaña "<span style="font-weight: bold;">Fotos</span>"
enlaza con las galerías de fotos. La pestaña "<span style="font-weight: bold;">Ficheros</span>"
enlaza con los ficheros de cualquier tipo compartidos por el canal.</span></dd>
</dl> </dl>
</body>
</html>

View File

@ -1,32 +1,6 @@
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
</head>
<body>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>General</dt> <dt>General</dt>
<dd><span id="result_box" class="" lang="es"><span>Esta</span> <span>es <dd>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.</dd>
la página de</span> <span>perfil</span> <span>de un canal</span><span>.</span> <dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;' title="Pulsar sobre el elemento resaltado...">Pestañas de los contenidos del canal</a></dt>
<span>Por lo general</span> <span>muestra</span> la <span>información <dd>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.</dd>
que describe el</span> <span>canal.</span> <span>Si el canal</span>
<span>representa a una persona</span> <span>en una red social</span><span>,
por ejemplo</span><span>, el perfil</span> <span>podría
proporcionar</span> <span>información de contacto y</span> <span>otros</span>
<span>datos personales</span><span></span><span>.</span> <span>Los
canales pueden</span> <span>tener varios perfiles</span><span>,</span>
<span>en cuyo caso el</span> <span>perfil que se muestra</span> <span
class="">depende del observador</span><span>.</span></span></dd>
<dt><a href="#" onclick='contextualHelpFocus("#tabs-collapse-1", 0); return false;'
title="Pulsar sobre el elemento resaltado...">Pestañas de los
contenidos del canal<br>
</a></dt>
<dd><span id="result_box" class="" lang="es"><span>Las</span> <span>pestañas</span>
<span>de los contenidos</span> <span>del canal</span> <span>son</span>
<span>enlaces a otros contenidos</span> <span>publicados por el</span>
<span>canal.</span> La pestaña "<span style="font-weight: bold;">Mi
perfil</span>" enlaza con el perfil del canal. La pestaña "<span style="font-weight: bold;">Fotos</span>"
enlaza con las galerías de fotos. La pestaña "<span style="font-weight: bold;">Ficheros</span>"
enlaza con los ficheros de cualquier tipo compartidos por el canal.</span></dd>
</dl> </dl>
</body>
</html>

View File

@ -389,7 +389,7 @@ function channel_remove($channel_id, $local = true, $unset_session=false) {
proc_run('php','include/directory.php',$channel_id); proc_run('php','include/directory.php',$channel_id);
if($channel_id == local_channel() && $unset_session) { if($channel_id == local_channel() && $unset_session) {
\Zotlabs\Web\Session::nuke(); App::$session->nuke();
goaway(z_root()); goaway(z_root());
} }

View File

@ -271,7 +271,8 @@ function populate_acl($defaults = null,$show_jotnets = true, $emptyACL_descripti
'$showall' => $showall_caption, '$showall' => $showall_caption,
'$showallOrigin' => $showall_origin, '$showallOrigin' => $showall_origin,
'$showallIcon' => $showall_icon, '$showallIcon' => $showall_icon,
'$showlimited' => t("Limit access:"), '$select_label' => t('Who can see this'),
'$showlimited' => t('Custom selection'),
'$showlimitedDesc' => t('Select "Show" to allow viewing. "Don\'t show" lets you override and limit the scope of "Show".'), '$showlimitedDesc' => t('Select "Show" to allow viewing. "Don\'t show" lets you override and limit the scope of "Show".'),
'$show' => t("Show"), '$show' => t("Show"),
'$hide' => t("Don't show"), '$hide' => t("Don't show"),

View File

@ -486,7 +486,7 @@ require_once('include/api_auth.php');
function api_account_logout(&$a, $type){ function api_account_logout(&$a, $type){
require_once('include/auth.php'); require_once('include/auth.php');
\Zotlabs\Web\Session::nuke(); App::$session->nuke();
return api_apply_template("user", $type, array('$user' => null)); return api_apply_template("user", $type, array('$user' => null));
} }

View File

@ -101,7 +101,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
// process logout request // process logout request
$args = array('channel_id' => local_channel()); $args = array('channel_id' => local_channel());
call_hooks('logging_out', $args); call_hooks('logging_out', $args);
\Zotlabs\Web\Session::nuke(); App::$session->nuke();
info( t('Logged out.') . EOL); info( t('Logged out.') . EOL);
goaway(z_root()); goaway(z_root());
} }
@ -117,7 +117,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
intval(ACCOUNT_ROLE_ADMIN) intval(ACCOUNT_ROLE_ADMIN)
); );
if($x) { if($x) {
\Zotlabs\Web\Session::new_cookie(60 * 60 * 24); // one day App::$session->new_cookie(60 * 60 * 24); // one day
$_SESSION['last_login_date'] = datetime_convert(); $_SESSION['last_login_date'] = datetime_convert();
unset($_SESSION['visitor_id']); // no longer a visitor unset($_SESSION['visitor_id']); // no longer a visitor
authenticate_success($x[0], true, true); authenticate_success($x[0], true, true);
@ -141,7 +141,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
if(x($_SESSION, 'uid') || x($_SESSION, 'account_id')) { if(x($_SESSION, 'uid') || x($_SESSION, 'account_id')) {
Zotlabs\Web\Session::return_check(); App::$session->return_check();
$r = q("select * from account where account_id = %d limit 1", $r = q("select * from account where account_id = %d limit 1",
intval($_SESSION['account_id']) intval($_SESSION['account_id'])
@ -155,14 +155,14 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
} }
if(strcmp(datetime_convert('UTC','UTC','now - 12 hours'), $_SESSION['last_login_date']) > 0 ) { if(strcmp(datetime_convert('UTC','UTC','now - 12 hours'), $_SESSION['last_login_date']) > 0 ) {
$_SESSION['last_login_date'] = datetime_convert(); $_SESSION['last_login_date'] = datetime_convert();
Zotlabs\Web\Session::extend_cookie(); App::$session->extend_cookie();
$login_refresh = true; $login_refresh = true;
} }
authenticate_success($r[0], false, false, false, $login_refresh); authenticate_success($r[0], false, false, false, $login_refresh);
} }
else { else {
$_SESSION['account_id'] = 0; $_SESSION['account_id'] = 0;
\Zotlabs\Web\Session::nuke(); App::$session->nuke();
goaway(z_root()); goaway(z_root());
} }
} // end logged in user returning } // end logged in user returning
@ -170,7 +170,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
else { else {
if(isset($_SESSION)) { if(isset($_SESSION)) {
\Zotlabs\Web\Session::nuke(); App::$session->nuke();
} }
// handle a fresh login request // handle a fresh login request
@ -242,11 +242,11 @@ else {
if($_POST['remember_me']) { if($_POST['remember_me']) {
$_SESSION['remember_me'] = 1; $_SESSION['remember_me'] = 1;
\Zotlabs\Web\Session::new_cookie(31449600); // one year App::$session->new_cookie(31449600); // one year
} }
else { else {
$_SESSION['remember_me'] = 0; $_SESSION['remember_me'] = 0;
\Zotlabs\Web\Session::new_cookie(0); // 0 means delete on browser exit App::$session->new_cookie(0); // 0 means delete on browser exit
} }
// if we haven't failed up this point, log them in. // if we haven't failed up this point, log them in.

View File

@ -30,7 +30,8 @@ function cli_startup() {
unset($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type); unset($db_host, $db_port, $db_user, $db_pass, $db_data, $db_type);
}; };
\Zotlabs\Web\Session::init(); App::$session = new Zotlabs\Web\Session();
App::$session->init();
load_config('system'); load_config('system');

View File

@ -25,23 +25,31 @@ function dba_factory($server, $port,$user,$pass,$db,$dbtype,$install = false) {
$dba = null; $dba = null;
$dbtype = intval($dbtype); $dbtype = intval($dbtype);
$set_port = $port;
if($dbtype == DBTYPE_POSTGRES) { if($dbtype == DBTYPE_POSTGRES) {
require_once('include/dba/dba_postgres.php'); require_once('include/dba/dba_postgres.php');
if(is_null($port)) $port = 5432; if(is_null($port)) $set_port = 5432;
$dba = new dba_postgres($server, $port, $user, $pass, $db, $install); $dba = new dba_postgres($server, $set_port, $user, $pass, $db, $install);
} else { } else {
if(class_exists('mysqli')) { if(class_exists('mysqli')) {
if (is_null($port)) $port = ini_get("mysqli.default_port"); if (is_null($port)) $set_port = ini_get("mysqli.default_port");
require_once('include/dba/dba_mysqli.php'); require_once('include/dba/dba_mysqli.php');
$dba = new dba_mysqli($server, $port,$user,$pass,$db,$install); $dba = new dba_mysqli($server, $set_port,$user,$pass,$db,$install);
} else { } else {
if (is_null($port)) $port = "3306"; if (is_null($port)) $set_port = "3306";
require_once('include/dba/dba_mysql.php'); require_once('include/dba/dba_mysql.php');
$dba = new dba_mysql($server, $port,$user,$pass,$db,$install); $dba = new dba_mysql($server, $set_port,$user,$pass,$db,$install);
} }
} }
if(is_object($dba) && $dba->connected) {
$dns = (($dbtype == DBTYPE_POSTGRES) ? 'postgres' : 'mysql')
. ':host=' . $server . (is_null($port) ? '' : ';port=' . $port)
. ';dbname=' . $db;
$dba->pdo_set(array($dns,$user,$pass));
}
define('NULL_DATE', $dba->get_null_date()); define('NULL_DATE', $dba->get_null_date());
define('ACTIVE_DBTYPE', $dbtype); define('ACTIVE_DBTYPE', $dbtype);
return $dba; return $dba;
@ -60,6 +68,7 @@ abstract class dba_driver {
const UTC_NOW = 'UTC_TIMESTAMP()'; const UTC_NOW = 'UTC_TIMESTAMP()';
protected $db; protected $db;
protected $pdo = array();
public $debug = 0; public $debug = 0;
public $connected = false; public $connected = false;
@ -183,6 +192,15 @@ abstract class dba_driver {
function unescapebin($str) { function unescapebin($str) {
return $str; return $str;
} }
function pdo_set($x) {
$this->pdo = $x;
}
function pdo_get() {
return $this->pdo;
}
} // end abstract dba_driver class } // end abstract dba_driver class

1316
include/feedutils.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@ function import_channel($channel, $account_id, $seize) {
dbesc($channel['channel_address']) dbesc($channel['channel_address'])
); );
if(($r) || (check_webbie(array($channel['channel_hash'])) !== $channel['channel_hash'])) { if(($r) || (check_webbie(array($channel['channel_address'])) !== $channel['channel_address'])) {
if($r[0]['channel_guid'] === $channel['channel_guid'] || $r[0]['channel_hash'] === $channel['channel_hash']) { if($r[0]['channel_guid'] === $channel['channel_guid'] || $r[0]['channel_hash'] === $channel['channel_hash']) {
logger('mod_import: duplicate channel. ', print_r($channel,true)); logger('mod_import: duplicate channel. ', print_r($channel,true));
notice( t('Cannot create a duplicate channel identifier on this system. Import failed.') . EOL); notice( t('Cannot create a duplicate channel identifier on this system. Import failed.') . EOL);
@ -90,7 +90,6 @@ function import_channel($channel, $account_id, $seize) {
set_default_login_identity($account_id,$channel['channel_id'],false); set_default_login_identity($account_id,$channel['channel_id'],false);
logger('import step 1'); logger('import step 1');
$_SESSION['import_step'] = 1; $_SESSION['import_step'] = 1;
ref_session_write(session_id(), serialize($_SESSION));
return $channel; return $channel;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1168,6 +1168,10 @@ function discover_by_webbie($webbie) {
if(! $x) if(! $x)
$probe_old = true; $probe_old = true;
if((! $dfrn) && (! $has_salmon))
$probe_old = true;
if($probe_old) { if($probe_old) {
$y = old_webfinger($webbie); $y = old_webfinger($webbie);
if($y) { if($y) {

View File

@ -1953,6 +1953,16 @@ function remove_community_tag($sender, $arr, $uid) {
*/ */
function update_imported_item($sender, $item, $orig, $uid) { function update_imported_item($sender, $item, $orig, $uid) {
// If this is a comment being updated, remove any privacy information
// so that item_store_update will set it from the original.
if($item['mid'] !== $item['parent_mid']) {
unset($item['allow_cid']);
unset($item['allow_gid']);
unset($item['deny_cid']);
unset($item['deny_gid']);
unset($item['item_private']);
}
$x = item_store_update($item); $x = item_store_update($item);

View File

@ -62,7 +62,8 @@ if(! App::$install) {
load_config('system'); load_config('system');
load_config('feature'); load_config('feature');
\Zotlabs\Web\Session::init(); App::$session = new \Zotlabs\Web\Session();
App::$session->init();
load_hooks(); load_hooks();
call_hooks('init_1'); call_hooks('init_1');
@ -84,7 +85,13 @@ if(! App::$install) {
* *
*/ */
\Zotlabs\Web\Session::start(); if(App::$session) {
App::$session->start();
}
else {
session_start();
register_shutdown_function('session_write_close');
}
/** /**
* Language was set earlier, but we can over-ride it in the session. * Language was set earlier, but we can over-ride it in the session.
@ -136,12 +143,6 @@ else
nav_set_selected('nothing'); nav_set_selected('nothing');
$arr = array('app_menu' => App::get_apps());
call_hooks('app_menu', $arr);
App::set_apps($arr['app_menu']);
$Router = new Zotlabs\Web\Router($a); $Router = new Zotlabs\Web\Router($a);
/* initialise content region */ /* initialise content region */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,30 +11,44 @@ function ACL(backend_url, preset) {
that.deny_cid = (preset[2] || []); that.deny_cid = (preset[2] || []);
that.deny_gid = (preset[3] || []); that.deny_gid = (preset[3] || []);
that.group_uids = []; that.group_uids = [];
that.nw = 4; //items per row. should be calulated from #acl-list.width
that.info = $("#acl-info");
that.list = $("#acl-list");
that.list_content = $("#acl-list-content"); that.list_content = $("#acl-list-content");
that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html()); that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html());
that.showall = $("#acl-showall"); that.showall = $("#acl-showall");
that.showlimited = $("#acl-showlimited"); that.showlimited = $("#acl-showlimited");
that.acl_select = $("#acl-select");
that.preset = preset;
that.self = [];
// set the initial ACL lists in case the enclosing form gets submitted before the ajax loader completes. // set the initial ACL lists in case the enclosing form gets submitted before the ajax loader completes.
that.on_submit(); that.on_submit();
if (preset.length === 0) that.showall.removeClass("btn-default").addClass("btn-warning");
/*events*/ /*events*/
$(document).ready(function() { $(document).ready(function() {
that.showall.click(that.on_showall);
that.showlimited.click(that.on_showlimited);
$(document).on('click','.acl-button-show',that.on_button_show);
$(document).on('click','.acl-button-hide',that.on_button_hide);
$("#acl-search").keypress(that.on_search);
/* startup! */ that.acl_select.change(function(event) {
that.get(0,15000); var option = that.acl_select.val();
that.on_submit();
if(option == 'option1') { // public
that.on_showall(event);
}
if(option == 'option2') { // restricted
that.on_showlimited(event);
}
});
$(document).on('click','.acl-button-show',that.on_button_show);
$(document).on('click','.acl-button-hide',that.on_button_hide);
$("#acl-search").keypress(that.on_search);
/* startup! */
that.get(0,15000);
that.on_submit();
}); });
} }
@ -73,15 +87,9 @@ ACL.prototype.on_search = function(event) {
}; };
ACL.prototype.on_showall = function(event) { ACL.prototype.on_showall = function(event) {
// preventDefault() isn't called here as we want state changes from update_view() to be applied to the radiobutton // preventDefault() isn't called here as we want state changes from update_view() to be applied to the radiobutton
event.stopPropagation(); event.stopPropagation();
if (that.showall.hasClass("btn-warning")) {
return false;
}
that.showall.removeClass("btn-default").addClass("btn-warning");
that.allow_cid = []; that.allow_cid = [];
that.allow_gid = []; that.allow_gid = [];
that.deny_cid = []; that.deny_cid = [];
@ -94,11 +102,22 @@ ACL.prototype.on_showall = function(event) {
}; };
ACL.prototype.on_showlimited = function(event) { ACL.prototype.on_showlimited = function(event) {
// Prevent the radiobutton from being selected, as the showlimited radiobutton // preventDefault() isn't called here as we want state changes from update_view() to be applied to the radiobutton
// option is selected only by selecting show or hide options on channels or groups.
event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return false;
if(that.preset[0].length === 0 && that.preset[1].length === 0 && that.preset[2].length === 0 && that.preset[3].length === 0) {
that.preset[0] = [that.self[0]];
}
that.allow_cid = (that.preset[0] || []);
that.allow_gid = (that.preset[1] || []);
that.deny_cid = (that.preset[2] || []);
that.deny_gid = (that.preset[3] || []);
that.update_view();
that.on_submit();
return true; // return true so that state changes from update_view() will be applied
} }
ACL.prototype.on_selectall = function(event) { ACL.prototype.on_selectall = function(event) {
@ -199,29 +218,26 @@ ACL.prototype.set_deny = function(itemid) {
that.update_view(); that.update_view();
}; };
ACL.prototype.update_radiobuttons = function(isPublic) { ACL.prototype.update_select = function(isPublic) {
that.showall.prop('selected', isPublic);
that.showall.prop('checked', isPublic); that.showlimited.prop('selected', !isPublic);
that.showlimited.prop('checked', !isPublic);
that.showlimited.prop('disabled', isPublic);
}; };
ACL.prototype.update_view = function() { ACL.prototype.update_view = function() {
if (that.allow_gid.length === 0 && that.allow_cid.length === 0 && if (that.allow_gid.length === 0 && that.allow_cid.length === 0 && that.deny_gid.length === 0 && that.deny_cid.length === 0) {
that.deny_gid.length === 0 && that.deny_cid.length === 0) { that.list.hide(); //hide acl-list
// btn-warning indicates that the permissions are public, it was chosen because that.info.show(); //show acl-info
// that.showall used to be a normal button, which btn-warning is a bootstrap style for. that.update_select(true);
that.showall.removeClass("btn-default").addClass("btn-warning");
that.update_radiobuttons(true);
/* jot acl */ /* jot acl */
$('#jot-perms-icon, #dialog-perms-icon').removeClass('fa-lock').addClass('fa-unlock'); $('#jot-perms-icon, #dialog-perms-icon').removeClass('fa-lock').addClass('fa-unlock');
$('#jot-public').show(); $('#jot-public').show();
$('.profile-jot-net input').attr('disabled', false); $('.profile-jot-net input').attr('disabled', false);
} else { } else {
that.showall.removeClass("btn-warning").addClass("btn-default"); that.list.show(); //show acl-list
that.update_radiobuttons(false); that.info.hide(); //hide acl-info
that.update_select(false);
/* jot acl */ /* jot acl */
$('#jot-perms-icon, #dialog-perms-icon').removeClass('fa-unlock').addClass('fa-lock'); $('#jot-perms-icon, #dialog-perms-icon').removeClass('fa-unlock').addClass('fa-lock');
@ -300,12 +316,11 @@ ACL.prototype.get = function(start, count, search) {
}; };
ACL.prototype.populate = function(data) { ACL.prototype.populate = function(data) {
var height = Math.ceil(data.items.length / that.nw) * 42;
that.list_content.height(height);
$(data.items).each(function(){ $(data.items).each(function(){
html = "<div class='acl-list-item {4} {7} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>"; html = "<div class='acl-list-item {4} {7} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>";
html = html.format(this.photo, this.name, this.type, this.xid, '', this.self, this.link, this.taggable); html = html.format(this.photo, this.name, this.type, this.xid, '', this.self, this.link, this.taggable);
if (this.uids !== undefined) that.group_uids[this.xid] = this.uids; if (this.uids !== undefined) that.group_uids[this.xid] = this.uids;
if (this.self === 'abook-self') that.self[0] = this.xid;
//console.log(html); //console.log(html);
that.list_content.append(html); that.list_content.append(html);
}); });

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -333,6 +333,15 @@ input {
text-decoration: none; text-decoration: none;
} }
.section-content-info-wrapper {
color: #fff;
background-color: #43488A;
}
.section-content-info-wrapper a {
color: #fff;
}
.btn, #event-edit-form .btn, input.directory-rating-submit { .btn, #event-edit-form .btn, input.directory-rating-submit {
border: 1px solid #FFF; border: 1px solid #FFF;
color: #FFF; color: #FFF;
@ -450,7 +459,7 @@ a:hover > .fa-trash-o {
.navbar-inverse .navbar-toggle .icon-bar { .navbar-inverse .navbar-toggle .icon-bar {
background-color: #FFF; background-color: #FFF;
} }
.navbar-inverse .navbar-toggle .fa-arrow-circle-down, .navbar-inverse .navbar-toggle .fa-arrow-circle-right, .navbar-inverse .navbar-toggle .fa-arrow-circle-up, .navbar-inverse .navbar-toggle .fa-arrow-circle-left { .navbar-inverse .navbar-toggle .fa-arrow-circle-down, .navbar-inverse .navbar-toggle .fa-arrow-circle-right, .navbar-inverse .navbar-toggle .fa-arrow-circle-up, .navbar-inverse .navbar-toggle .fa-arrow-circle-left, .navbar-inverse .navbar-toggle .fa-question-circle {
color: #FFF; color: #FFF;
} }
.navbar-inverse .navbar-toggle:hover .fa-arrow-circle-down, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-down, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-right, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-right, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-up, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-up, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-left, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-left { .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-down, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-down, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-right, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-right, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-up, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-up, .navbar-inverse .navbar-toggle:hover .fa-arrow-circle-left, .navbar-inverse .navbar-toggle:focus .fa-arrow-circle-left {

View File

@ -63,7 +63,7 @@
background-image: linear-gradient(to bottom, #1E1E1E 0px, #1E1E1E 100%); background-image: linear-gradient(to bottom, #1E1E1E 0px, #1E1E1E 100%);
} }
.alert-info { .alert-info, .section-content-info-wrapper {
color: #CCC; color: #CCC;
background-color:#333; background-color:#333;
border-color: #444; border-color: #444;
@ -79,16 +79,35 @@
color: #fff; color: #fff;
} }
#acl-showall { #acl-select {
color: #fff; background-color:#333;
border: 1px solid #444;
color: #FFF;
} }
#acl-showall {
color: #FFF;
}
#acl-list { #acl-list {
border: 1px solid #333; border: 1px solid #444;
}
#acl-search-wrapper {
border-bottom: 1px solid #444;
} }
.acl-list-item { .acl-list-item {
border: 1px solid #333; border: 1px solid #222;
color: #CCC;
background-color:#333;
}
.abook-self {
border: 1px solid #222;
color: #555;
background-color:#111;
} }
.modal-content { .modal-content {
@ -312,7 +331,7 @@ pre {
background-image: none; background-image: none;
} }
.open .dropdown-toggle.btn-default { .open .dropdown-toggle.btn-default, .open .dropdown-toggle.btn-default:focus {
color: #ccc; color: #ccc;
background-color: #222; background-color: #222;
border-color: #222; border-color: #222;

View File

@ -51,8 +51,21 @@
background-image: linear-gradient(to bottom, #fff 0px, #fff 100%); background-image: linear-gradient(to bottom, #fff 0px, #fff 100%);
} }
#acl-select {
border: 1px solid #000;
color: #000;
}
.acl-list-item {
border: 1px solid #000;
background-color: #FFF;
}
.abook-self { .abook-self {
background-color: #fff; border: 1px solid #EEE;
color: #ccc;
background-color: #EEE;
} }
.acl-button-show, .acl-button-show,
@ -60,18 +73,10 @@
color: #000; color: #000;
} }
#acl-showall {
color: #000;
}
#acl-list { #acl-list {
border: 1px solid #fff; border: 1px solid #fff;
} }
.acl-list-item {
border: 1px solid #fff;
}
.modal-content { .modal-content {
background-color: #fff; background-color: #fff;
} }

View File

@ -51,8 +51,30 @@
background-image: linear-gradient(to bottom, #000 0px, #000 100%); background-image: linear-gradient(to bottom, #000 0px, #000 100%);
} }
.section-content-info-wrapper {
color: #50f148;
background-color:#000;
border: 1px solid #143D12 !important;
}
.modal-header {
border-bottom: 1px solid #143D12;
}
.modal-footer {
border-top: 1px solid #143D12;
}
#acl-select {
background-color: #000;
border: 1px solid #143D12;
color: #50f148;
}
.abook-self { .abook-self {
background-color: #000; color: #333;
background-color: #000 !important;
border: 1px solid #111;
} }
.acl-button-show, .acl-button-show,
@ -60,16 +82,18 @@
color: #fff; color: #fff;
} }
#acl-showall { #acl-list {
color: #fff; border: 1px solid #143D12;
} }
#acl-list { #acl-search-wrapper {
border: 1px solid #000; border-bottom: 1px solid #143D12;
} }
.acl-list-item { .acl-list-item {
border: 1px solid #000; border: 1px solid #111;
background-color:#111;
} }
.modal-content { .modal-content {
@ -267,7 +291,7 @@ pre {
background-image: none; background-image: none;
} }
.open .dropdown-toggle.btn-default { .open .dropdown-toggle.btn-default, .open .dropdown-toggle.btn-default:focus {
color: #50f148; color: #50f148;
background-color: #000; background-color: #000;
border-color: #143D12; border-color: #143D12;

View File

@ -47,8 +47,30 @@
background-image: linear-gradient(to bottom, #000 0px, #000 100%); background-image: linear-gradient(to bottom, #000 0px, #000 100%);
} }
.section-content-info-wrapper {
color: #fff;
background-color:#000;
border: 1px solid #fff !important;
}
.modal-header {
border-bottom: 1px solid #000;
}
.modal-footer {
border-top: 1px solid #000;
}
#acl-select {
background-color: #000;
border: 1px solid #fff;
color: #fff;
}
.abook-self { .abook-self {
background-color: #000; color: #333;
background-color: #111 !important;
border: 1px solid #111;
} }
.acl-button-show, .acl-button-show,
@ -56,16 +78,17 @@
color: #fff; color: #fff;
} }
#acl-showall { #acl-list {
color: #fff; border: 1px solid #000;
} }
#acl-list { #acl-search-wrapper {
border: 1px solid #000; border-bottom: 1px solid #000;
} }
.acl-list-item { .acl-list-item {
border: 1px solid #000; border: 1px solid #fff;
background-color:#000;
} }
.modal-content { .modal-content {
@ -246,10 +269,10 @@ pre {
background-image: none; background-image: none;
} }
.open .dropdown-toggle.btn-default { .open .dropdown-toggle.btn-default, .open .dropdown-toggle.btn-default:focus {
color: #fff; color: #fff;
background-color: #000; background-color: #000;
border-color: #000; border-color: #fff;
} }
.preview { .preview {

View File

@ -12,6 +12,18 @@
{{if $aclModalDesc}} {{if $aclModalDesc}}
<div id="acl-dialog-description" class="section-content-info-wrapper">{{$aclModalDesc}}</div> <div id="acl-dialog-description" class="section-content-info-wrapper">{{$aclModalDesc}}</div>
{{/if}} {{/if}}
<label for="acl-select">{{$select_label}}</label>
<select id="acl-select" name="optionsRadios" class="form-control form-group">
<option id="acl-showall" value="option1" selected>{{$showall}}</option>
<option id="acl-showlimited" value="option2">{{$showlimited}}</option>
</select>
{{if $showallOrigin}}
<div id="acl-info" class="form-group">
<i class="fa fa-info-circle"></i>&nbsp;{{$showallOrigin}}
</div>
{{/if}}
{{if $jotnets}} {{if $jotnets}}
<div class="jotnets-wrapper" role="tab" id="jotnets-wrapper"> <div class="jotnets-wrapper" role="tab" id="jotnets-wrapper">
<a data-toggle="collapse" class="btn btn-block btn-default" href="#jotnets-collapse" aria-expanded="false" aria-controls="jotnets-collapse">{{$jnetModalTitle}} <span class="caret"></span></a> <a data-toggle="collapse" class="btn btn-block btn-default" href="#jotnets-collapse" aria-expanded="false" aria-controls="jotnets-collapse">{{$jnetModalTitle}} <span class="caret"></span></a>
@ -21,25 +33,8 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
{{/if}} {{/if}}
<div id="acl-wrapper"> <div id="acl-wrapper">
<div id="acl-radiowrapper-showall" class="radio">
<label>
<input id="acl-showall" type="radio" name="optionsRadios" value="option1" checked>
{{if $showallIcon}}
<i class="fa {{$showallIcon}}"></i>
{{/if}}
<span id="acl-showall-caption">{{$showall}}</span>
</label>
{{if $showallOrigin}}
&nbsp;<a id="acl-info-icon" role="button" tabindex="0" class="fa fa-info-circle" data-trigger="focus" data-toggle="popover" data-placement="top" data-content="{{$showallOrigin}}"></a>
{{/if}}
</div>
<div id="acl-radiowrapper-showlimited" class="radio">
<label>
<input id="acl-showlimited" type="radio" name="optionsRadios" style="readonly" value="option2">
<span id=acl-showlimited-caption>{{$showlimited}}</span>
</label>
</div>
<div id="acl-list"> <div id="acl-list">
<div id="acl-search-wrapper"> <div id="acl-search-wrapper">
<input type="text" id="acl-search" placeholder="&#xf002; {{$search}}"> <input type="text" id="acl-search" placeholder="&#xf002; {{$search}}">

File diff suppressed because one or more lines are too long