Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Haakon Meland Eriksen 2016-02-18 20:33:25 +01:00
commit cc264b2d60
55 changed files with 15453 additions and 12440 deletions

View file

@ -220,6 +220,11 @@ function install_apache {
nocheck_install "apache2 apache2-utils"
}
function install_curl {
print_info "installing curl..."
nocheck_install "curl"
}
function install_php {
# openssl and mbstring are included in libapache2-mod-php5
# to_to: php5-suhosin
@ -817,6 +822,7 @@ sslconf=/etc/apache2/sites-available/default-ssl.conf
check_config
update_upgrade
install_curl
install_apache
install_php
install_mysql

View file

@ -48,10 +48,10 @@ require_once('include/AccessList.php');
define ( 'PLATFORM_NAME', 'hubzilla' );
define ( 'RED_VERSION', trim(file_get_contents('version.inc')));
define ( 'STD_VERSION', '1.2.2' );
define ( 'STD_VERSION', '1.2.3' );
define ( 'ZOT_REVISION', 1 );
define ( 'DB_UPDATE_VERSION', 1161 );
define ( 'DB_UPDATE_VERSION', 1163 );
/**
@ -85,7 +85,8 @@ $DIRECTORY_FALLBACK_SERVERS = array(
'https://hubzilla.zottel.net',
'https://hub.pixelbits.de',
'https://my.federated.social',
'https://hubzilla.nl'
'https://hubzilla.nl',
'https://blablanet.es'
);
@ -991,6 +992,10 @@ class App {
if ($user_scalable === false)
$user_scalable = 1;
$preload_images = ((local_channel()) ? get_pconfig(local_channel(),'system','preload_images') : 0);
if ($preload_images === false)
$preload_images = 0;
$interval = ((local_channel()) ? get_pconfig(local_channel(),'system','update_interval') : 80000);
if($interval < 10000)
$interval = 80000;
@ -1004,6 +1009,7 @@ class App {
*/
$tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl, array(
'$preload_images' => $preload_images,
'$user_scalable' => $user_scalable,
'$baseurl' => $this->get_baseurl(),
'$local_channel' => local_channel(),

View file

@ -48,10 +48,9 @@ Content (especially status posts) that you share with other networks or that you
Comments to posts that were created by others and posts which are designated as forum posts belong to you as the creator/author, but the distribution of these posts is not under your direct control. These posts/comments MAY be re-distributed to others, and MAY be visible to anybody on the internet. In the case of comments, the creator of the "first message" in the thread to which you are replying controls the distribution of all comments and replies to that message.
**Private Information**
$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private content is generally hidden or obscured even from hub administrators. It is also stripped from email notifications. It is difficult but NOT impossible for this content to be seen by a hub administrator. End to end encryption is provided as an optional feature and this CANNOT be seen, even by a determined administrator.
$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private channel content CAN be seen in the database of every involved hub administrator, but private messages are obscured in the database. The latter means that it is very difficult, but NOT impossible for this content to be seen by a hub administrator. Private channel content and private messages are also stripped from email notifications. End to end encryption is provided as an optional feature and this CANNOT be seen, even by a determined administrator.
##Identity Privacy

78
doc/ca/Privacy.md Normal file
View file

@ -0,0 +1,78 @@
Política de Privacitat
======================
##Sumari##
Q: Qui pot veure el meu contingut?
A: Per defecte TOTHOM A INTERNET, EXCEPTE que ho hagis restringit. $Projectname permet te triar el nivell de privacitat que desitgis. El contingut restringit no serà visible als "espies de la xarxa " ni als anunciants. Estarà protegit contra l'espionatge per estranys - de la millor manera que sabem. Administradors de nodes amb habilitats i paciència suficients poden ser capaços d'espiar a algunes comunicacions privades però han de invertir molt esforç per fer-ho. Hi maneres de Privacitat en $Projectname que són fins i tot resistents a escoltes il·legals pels administradors de nodes hàbils i decidits.
Q: Pot el meu contingut ser censurat?
A: $Projectname (la xarxa de nodes) NO POT censurat el teu contingut. Els administradors de servidor i del node estan subjectes a les lleis locals i poden suprimir contingut censurable des del seu lloc/node. Qualsevol POT convertir-se en un administrador de node, inclòs tu; i per tant publicar contingut que d'altra manera podria ser censurat. Encara i això estaràs subjecte a les teves lleis locals. Es la teva decisió.
##Definicions
**$Projectname**
Coneguda d'un altre forma com "la xarxa", Hubzilla és una col·lecció d'equips individuals/servidors (àlies nodes) que connecten entre si per formar una xarxa cooperativa més gran.
**node (hub)**
Un equip individual o un servidor connectat a $Projectname. Aquests són proporcionats per un **administrador del node** i poden ser públics o privats, de pagament o gratuïts.
**administrador del node**
L'operador del sistema d'un node individual.
##Polítiques
**Informació Pública**
Qualsevol informació o cualsevol cosa publicada per tu a $Projectname POT ser pública o visible a qualsevol a Internet. En la mesura que sigui possible, $Projectname te permet protegir el contingut i restringir qui pot veure-ho.
La teva foto de perfil, el nom del teu canal, i la ubicació (URL o adreça de xarxa) del seu canal són visibles per a qualsevol persona a Internet i els controls de privacitat no afectaràn la visualització d'aquests elements.
POTS proporcionar, a més, un altra informació de perfil. Qualsevol informació que proporcionis en el teu perfil públic **per defecte** POT ser transmesa a altres centres en $Projectname i, a més, és possible que aparegui en el directori del canal. POTS restringir la visualització d'aquesta informació de perfil. Es POT restringir (permets que visualitzin), només als membres del teu nucli, o només les connexions (amics), o altres conjunts limitats de espectadors com desitgis. Si vols que el teu perfil estigui restringit, has d'establir la configuració de privacitat adequada, o simplement NO PROPORCIONIS informació addicional.
**Contingut**
El contingut que proporciones (missatges d'estat, fotos, arxius, etc.) et pertany a tu. Per defecte a $Projectname és publica contingut de forma oberta i visible per qualsevol en internet (PÚBLIC). POTS controlar això a la seva configuració del canal i restringir els permisos per defecte o pot restringir la visibilitat de qualsevol article únic publicat per separat (PRIVAT). Els desenvolupadors $Projectname s'han d'assegurat que el contingut restringit és visible NOMÉs per als que estan a la llista d'autoritzats - han emprat el millor d'ells per això.
El contingut (especialment les entrades d'estat) que es comparteixen amb altres xarxes o que has fet visible a qualsevol a Internet (PÚBLIC) no poden ser retirats (esborrats) fàcilment un cop que ha estat publicats. Pot haver estat compartit amb altres xarxes i posat a disposició a través de feeds RSS/Atom. També pot haver estat sindicat en altres llocs $Projectname. Pot aparèixer en les xarxes d'espionatge i recerques a Internet. Si no desitges aquest comportament per defecte, si et plau, ajusta la configuració del canal i restringeix qui pot veure el teu contingut.
**Comentaris i entrades a Forums**
Els comentaris als llocs que es van crear per altres i entrades que es designen com missatges al fòrum pertanyen tant a tu com al creador/autor, però la distribució d'aquests llocs no està sota el teu control directe. Aquestes entrades/comentaris es poden tornar a distribuir als altres, i pot ser visible per qualsevol en internet. En el cas dels comentaris, el creador del "primer missatge" al fil al qual està responent controla la distribució de tots els comentaris i respostes a aquest missatge.
**Informació Privada**
Els desenvolupadors de $Projectname aseguraràn que cualsevol contingut que creis designat com PRIVAT estarà protegit contra estaràn protegits contra les escoltes - han emprat el millor d'ells per això. El contingut privat generalment s'amaga o enfosqueix fins i tot als administradors de nodes. També s'eliminen les notificacions per correu electrònic. És difícil, però no impossible que aquest contingut sigui vist per un administrador de node. El xifrat extrem a extrem es facilita com una característica opcional i fa el contingut, NO VISIBLE, fins i tot per un administrador determinat a veure'l.
##Privacitat de la Identitat
La Privacitat per la teva identitat és un altre aspecte. En tenir una identitat descentralitzada a $Projectname, la seva privacitat s'estén més enllà del seu node d'inici. Si vols tenir el control complet de la teva privacitat i seguretat has d'executar el teu propi centre en un servidor dedicat. Per a moltes persones, això és complicat i pot esgotar les seves habilitats tècniques. Així que anem a enumerar algunes precaucions que pots fer per assegurar la teva privacitat tant com sigui possible.
Una identitat descentralitzat té molts avantatges i te dóna un munt de característiques interessants, però has de ser conscient del fet que la teva identitat és coneguda per altres centres de la xarxa $Projectname. Un d'aquests avantatges és que altres canals poden servir contingut personalitzat i permetrà veure el contingut privat (com fotos privades que altres volen compartir amb vostè). Per això els canals necessiten saber qui ets. Però entenem que de vegades aquests altres canals en saben més de tu del que pugui desitjar. Per exemple, el plug-in Visage pot dir-li al propietari d'un canal l'última vegada que vas visitar el seu perfil. Pots renunciar fàcilment a aquest baix nivell de seguiment, que creiem inofensiu.
* Pots activar [No Em Segueixis (anglès:Do Not Track (DNT))](http://donottrack.us/) al teu navegador web. Respectem aquesta nova política de privacitat proposada. Tots en navegadors moderns soporten DNT. Trobaràs als ajustos de privacitat del teu navegador web o sino pots consultar el manual del navegador. Això no afectarà la funcionalitat de $Projectname. Aquest ajust, segurament, es suficient per la majoria de la gent.
* Pots [deshabilitar publicacions](ajustos) del teu canal al nostre canal de directoris. Si vols que la gent trobi el teu canal, has de facilitar la teva direcció del canal a ell(a). Pensem que això es un bon indicador que, en aquest cas, vols es un extra de privacitat i automaticament s'activarà "No Em Segueixis" (DNT).
* Pots tenir un node blocat. Això significa que tots els canals i contingut en aquest node no es públic i invisible al món exterior. Això és quelcom que només ho pot fer l'administrador del teu node. També es respecta això i automàticament s'activa DNT si és sel·leccionat.
###Censura
$Projectname és una xarxa global que inclou a totes les religions i cultures. Això no implica que tots els membres de la xarxa pensin de la mateixa manera que tu pel que fa en temes polèmics, i algunes persones poden sentir una forta oposició al contingut que publiquis. En general, si desitjes publicar alguna cosa que saps que no és universalment acceptable, el millor enfocament consisteix a restringir l'audiència utilitzant els controls de privacitat a un petit cercle d'amics.
$Projectname com un proveïdor de la xarxa no pot censurar el contingut. No obstant això, els administradors de node poden censurar qualsevol contingut que apareix en el seu centre per complir amb les lleis locals o fins i tot el seu judici personal. La seva decisió serà inapel·lable. Si té problemes amb qualsevol administrador de node, pots moure el teu compte i publicacions a un altre lloc que estigui més d'acord amb les teves expectatives. Si us plau comprova (periòdicament) les [Condicions d'ús](help/TermsOfService) del teu centre per aprendre sobre les normes o directrius. Si el teu contingut consisteix en un material que és il·legal o que pugui causar problemes, es recomana ENCARIDAMENT a allotjar tu mateix (convertir-te en un administrador de node). Podràs trobar que el teu contingut està bloquejat en alguns centres, però $Projectname, com a xarxa, no pot bloquejar una vegada publicat.
$Projectname RECOMANA que els administradors de nodes ofereixin un període de gràcia de 1-2 dies entre advertir al titular d'un compte, que hi ha contingut que ha de ser eliminat, i l'eliminació física o desactivació del compte. Això li donarà al propietari del contingut l'oportunitat d'exportar els seus canal de meta-dades i importar-lo a un altre lloc. En rares ocasions el contingut pot ser de tal naturalesa que es justifiqui l'eliminació immediata del compte. Aquesta és una decisió del node, no és una decisió de $Projectname.
Si normalment i regularment publiques contingut per a adults o de caràcter ofensiu, es recomana ENCARIDAMENT que marquis el compte com "NSFW" (No segur per al treball). Això evitarà que es mostri la teva foto de perfil al directori, excepte per als espectadors que han optat per desactivar el "mode segur". Si la teva foto de perfil es considera per a adults o ofensiu pels administradors de directori, l'administrador del directori POT marcar la teva foto de perfil com NSFW. Actualment no hi ha un sistema oficial per revertir aquesta decisió. Així DEURIES marcar tu mateix, el teu compte, com a NSFW si és probable que no sigui apropiat per a audiències generals.
#include doc/macros/main_footer.bb;

8
doc/ca/TermsOfService.md Normal file
View file

@ -0,0 +1,8 @@
Termes del Servei
================
Aquest node Hubzilla encara no te Termes del Servei. Estic buscant un model adient.....
En resum empreu el servei respectant els altres i no cometeu il·legalitats. Aquest node no s'identifica amb les opinions dels usuaris ni es responsablilitza de les mateixes.
#include doc/SiteTOS.md;

27
doc/ca/about.bb Normal file
View file

@ -0,0 +1,27 @@
[b]Que és[/b]
$Projectname és una xarxa de comunicacions descentralitzades, que permet comunicacions lliures de censura, amb privacitat, i per tant lliure de les urpes opressores de gegants contemporanis de comunicació corporativa. Aquests gegants funcionen principalment com xarxes d''espionatge per a cobrar a clients de totes les classes i tipus, a més de monopolitzar i centralitzar Internet; una característica que no formava part dels objectius originals i revolucionàries que van produir la World Wide Web.
$Projectname és gratuït i de codi obert. Està dissenyat per a creixèr des de una raspberry pi de 35, fins el màxim de la gama de servidors AMD i servidors empresarials de múltiples nuclis que funcionen amb Intel Xeon. Pot ser utilitzat per a suportar la comunicació entre uns pocs individus, o l'escalar a molts milers i més.
$Projectname pretén ser àgil i capaç de treballar amb múltiples recursos informàtics. És fàcil d'utilitzar pels usuaris habituals d''ordinadors, així com per administradors de sistemes i desenvolupadors.
La forma d'utilitzar depèn de com voleu utilitzar-lo.
Està escrit en el llenguatge de scripting PHP, pel que és trivial instal·lar-lo en qualsevol plataforma d'allotjament en ús avui en dia. Això inclou l'auto-allotjament a casa, en els proveïdors d'allotjament, com ara [url=http://mediatemple.com/]Media Temple[/url] i [url=http://www.dreamhost.com/]Dreamhost[/url], o en servidors virtuals i dedicats, oferts per gràcia de [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] o [url=https://aws.amazon.com]Amazon AWS[/url].
En altres paraules, $Projectname es pot executar en qualsevol plataforma informàtica que vingui amb un servidor web, una base de dades compatible amb MySQL i el llenguatge de scripting PHP.
De pas, $Projectname ofereix una sèrie de atractius únics:
[b]Identificació amb un sol clic d'usuari:[/b] vol dir que pot accedir a llocs en $Projectname simplement fent clic als enllaços a llocs remots. L''autenticació passa automàgicament en segon plà. Oblida't de recordar múltiples noms d'usuari amb múltiples contrasenyes en accedir a diferents llocs en línia.
[b]La clonació:[/b] de les identitats en línia. La seva presència en línia ja no ha d'estar lligat a un sol servidor, nom de domini o adreça IP. Pot clonar i importar la seva identitat (o canal com en diem) a un altre servidor (o, en un concentrasor com son coneguts els servidors a $Projectname). Ara, si el seu concentrador/servidor cau, no et preocupis, els teus contactes, missatges [i]*[/i], i els missatges de [i]*[/i] automàgicament segueixen estant disponibles i accessibles al seu canal clonat. [i](*: només es perden els missatges i els missatges a partir del moment en que va clonar el seu canal)[/i]
[b]Privacitat:[/b] les identitats a $Projectname (Zot identificadors) es poden eliminar, salvar/descarregar i clonar. L'usuari el control total de les seves dades. Si vostè decideix esborrar tot el seu contingut i esborrar la seva ID Zot, tot el que has de fer és fer clic a un enllaç i s'eliminen immediatament d concentrador/servidor. No hi ha preguntes, sense problemes.
#include doc/macros/main_footer.bb;

View file

@ -0,0 +1,19 @@
[size=large][b]Comptes, Perfils i Canals[/b][/size]
Una vegada t'has registrat amb un [i]compte[/i] al servei, també has de crear un [i]perfil[/i] i un [i]canal[/i].
[b]Compte[/b]
Tens i]un[/i] compte. Això consisteix en una adreça de correu electrònic i una contrasenya. Amb el teu compte pots accedit al teu perfil i al teu canal.
[i]Pensa en el teu compte com una via per autenticar-te al teu lloc $Projectname. Et permet fer coses com, crear perfils i canals amb els que podràs amb altres persones.[/i]
[b]Perfil[/b]
Segurament t'has registrat a altres serveis a internet, com fòrums, o comunicacions en línia. Per a tots ells proveeixes alguna informació de tu, data de naixement, país, edat, i que es el que d'agrada. [observer=1]If you like you can see your profile here: [baseurl]/profile/[observer.webname] and edit it by clicking on the pencil icon next to your avatar image. [/observer]
Unlike other services $Projectname offers you the advantage of creating [i]many more profiles[/i]. That way you are able to distinguish between profiles targeted specially at everyone (your public profile), your work mates, your family and your partner.
[i]Think of your profile as the basic information about yourself you tell other people.[/i]
[b]Channel[/b]
During the registration you created your first [i]channel[/i]. Yes, besides several profiles you are able to have several channels. This might be a bit confusing in the beginning, but let's clear things up. You already have created one channel. You can use this one for the public, to communicate with people about every day life. But perhaps you are an avid book reader and many people are bored by that. So you open a [i]second channel[/i] just for the book lovers, where you all can talk about books as much as you like. Obviously this is a new stream of posts, with a new profile (... or new profile[i]s[/i] ...) and completely different contacts. Some connections might exist in both channels, but there will be some that are exclusive to only one of both. You yourself just switch between both of them just like you would in real life switch when talking to people you meet on the street or people you meet specially to talk about books. You can even connect to yourself, or better: to your other channel. :)
[i]Think of a channel as different spaces dedicated to different topics where you meet with different people.[/i]
#include doc/macros/main_footer.bb;

15
doc/ca/admins.bb Normal file
View file

@ -0,0 +1,15 @@
[h2]Documentació per a Administradors de Concentradors (dits Hubs en anglès)[/h2]
[h3]Administradors[/h3]
[zrl=[baseurl]/help/install]Instal·lació[/zrl]
[zrl=[baseurl]/help/red2pi]Instal·lant $Projectname en una Raspberry Pi[/zrl]
[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname en OpenShift[/zrl]
[zrl=[baseurl]/help/troubleshooting]Consells per solucionar problemes[/zrl]
[zrl=[baseurl]/help/hidden_configs]Afinant Configuracions ocultes de $Projectname[/zrl]
[zrl=[baseurl]/help/faq_admins]FAQ Per als Administradors[/zrl]
[zrl=[baseurl]/help/service_classes]Classes de Serveis[/zrl]
[zrl=[baseurl]/help/directories]Treballant amb i configuració de directoris[/zrl]
[zrl=[baseurl]/help/theme_management]Gestió de Temes[/zrl]

32
doc/ca/channels.bb Normal file
View file

@ -0,0 +1,32 @@
[b]Canals[/b]
Els canals són simplement col·leccions de continguts emmagatzemats en un sol lloc. Un canal pot representar qualsevol cosa. Podria representi, un lloc web, un fòrum, àlbums de fotos, qualsevol cosa. Per a la majoria de la gent, el seu primer canal serà &quot;Ell&quot; mateix.
Les característiques més importants d'un canal que &quot;em&quot; representa són:
Comunicacions segures i privades &quot;lliures d'spam&quot;
Identitat i &quot;un sol inici de sessió &quot; a través de tota la xarxa
Controls de privacitat i permisos que s'estenen a tota la xarxa
Serveis de directori (com una guia telefònica)
En resum, una cadena que et representa a mateix és &quot;jo, a l'Internet &quot;.
Hauràs de crear el teu primer canal com a part del procés de registre. També pots crear canals additonal des del menú &quot;Selecciona canal &quot;.
Se li demanarà que proporcioni un nom de canal, i un curt sobrenom. Per a un canal que et representa a tu mateix, és una bona idea utilitzar el teu nom real per assegurar-se que els teus amics puguin trobar-te, i connectar al teu canal. El sobrenom curt s'utilitzarà per generar un nom &quot;intermediari&quot;. Això és una mica com un nom d'usuari, i es veurà com una adreça de correu electrònic, prenent forma sobrenom@domini. Has de pensar una mica en que desitges utilitzar aquí. Imagina a algú demanant la teu nom intermediari i haver de dir-los que és &quot;Crema-miss_issipi.123&quot;. &quot;cremamississipi&quot; seria una opció molt millor.
Una vegada que hagis creat el teu canal, se't portarà a la pàgina de configuració, que permet definir el teu canal, i establir els teus permisos predeterminats.
Un cop fet això, el canal està llest per utilitzar. En [observer=1][observer.url][/observer][observer=0]example.com/channel/username[/observer] trobaràs el teu canal de &quot;flux&quot;. Aquí és on apareixerà la teva activitat recent, en ordre cronològic invers. Si publica a la casella &quot;compartir&quot;, apareixerà l'entrada a la part superior del teu flux. També trobaràs enllaços a totes les altres àrees de comunicació per aquest canal. El fitxa &quot;en quant a &quot; conté el teu &quot;perfil&quot;, la pàgina de fotos conté àlbums de fotos, i la pàgina d'esdeveniments conté esdeveniments compartits per tu i els teus contactes.
La pàgina &quot;Xarxa&quot; conté tots els missatges recents de tota la xarxa $Projectname, de nou amb sentit cronològic invers. Els missatges exactes que apareixen aquí depenen en gran mesura dels teus permisos. En la teva forma més permissiva, rebràs missatges de desconeguts. A l'altre extrem de l'escala, podràs veure els missatges de només els seus amics - o si ets realment antisocial, només els teus propis missatges.
Com s'ha esmentat al principi, són possibles molts altres tipus de canal, però, el procediment de creació és el mateix. La diferència entre els canals es troba principalment en els permisos assignats. Per exemple, una cadena per a l'intercanvi de documents amb els seus col.legues a la feina, és millor si canvieu valors més permissius per &quot;Em pot escriure en el meu&quot; públic &quot;magatzem d'arxius &quot;, que un compte personal. Per obtenir més informació, consulteu la secció de permisos.
#include doc/macros/main_footer.bb;

34
doc/ca/develop.bb Normal file
View file

@ -0,0 +1,34 @@
[h2]Documentació per Desenvolupadors[/h2]
[h3]Documentació Tècnica[/h3]
[zrl=[baseurl]/help/Zot---A-High-Level-Overview]Una vista en profunditat a Zot[/zrl]
[zrl=[baseurl]/help/zot]Una introducció a Zot[/zrl]
[zrl=[baseurl]/help/zot_structures]Estuctures a Zot[/zrl]
[zrl=[baseurl]/help/comanche]Descripcions de Pàgina a Comanche[/zrl]
[zrl=[baseurl]/help/Creating-Templates]Creant Plantilles a Comanche[/zrl]
[zrl=[baseurl]/help/Widgets]Artilugis[/zrl]
[zrl=[baseurl]/help/plugins]Complements[/zrl]
[zrl=[baseurl]/help/hooklist]Ganxos (detallat - en construcció)[/zrl]
[zrl=[baseurl]/help/doco]Documentació[/zrl]
[zrl=[baseurl]/help/DerivedTheme1]Creant Temes Derivats[/zrl]
[zrl=[baseurl]/help/schema_development]Esquemes[/zrl]
[zrl=[baseurl]/help/Translations]Traduccions[/zrl]
[zrl=[baseurl]/help/developers]Desenvolupadors[/zrl]
[zrl=[baseurl]/help/intro_for_developers]Introducció per Desenvolupadors[/zrl]
[zrl=[baseurl]/help/database]Documentació del esquema de la base de dades[/zrl]
[zrl=[baseurl]/help/api_functions]Funcions de la API[/zrl]
[zrl=[baseurl]/help/api_posting]Entrades a $Projectname emprant la API[/zrl]
[zrl=[baseurl]/help/developer_function_primer]Funcions Red 101[/zrl]
[zrl=[baseurl]/doc/html/]Refrència del Codi (Doxygen generat - ajust de cookies)[/zrl]
[zrl=[baseurl]/help/to_do_doco]Llista de Pendents per a la Documentació del Projecte $Projectname[/zrl]
[zrl=[baseurl]/help/to_do_code]Llista de Pendents per a Desenvolupadors[/zrl]
[zrl=[baseurl]/help/roadmap]Full de ruta[/zrl]
[zrl=[baseurl]/help/git_for_non_developers]Git per a No-Desenvolupadors[/zrl]
[zrl=[baseurl]/help/dev_beginner]Manual pas-a-pas per a desenvolupadors principiants[/zrl]
[h3]Preguntes Més Freqüents (FAQ) Per Desenvolupadors[/h3]
[zrl=[baseurl]/help/faq_developers]FAQ Per Desenvoupadors[/zrl]
[h3]Recursos Externs[/h3]
[url=https://zothub.com/channel/one]Development Channel[/url]
[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]

202
doc/ca/features.bb Normal file
View file

@ -0,0 +1,202 @@
[b][size=36]Característiques[/size][/b]
[b][size=24]$Projectname en Poques Paraules[/size][/b]
TL;DR
$Projectname proveeix publicacions i comunicacions socials distribuïdes amb [b]permisos descentralitzats[/b].
Així, que vol dir "permisos descentralitzats"? Em donen la habilitat de compàrtir quelcom al meu lloc web (fotos, mitjans, arxius, pàgines web, etc.) Aamb persones específiques en llocs completament diferents - encara que no necesàriament amb [i]tothom[/i] en aquests llocs web; i no es necessita tenir un usuari i contrasenya en aquests altres llocs web per poder fer-ho ni per poder tafanejar el que ells han compartit amb mi. Ells tenen un usuari i contrasenya al seu lloc web i "màgica autenticació" entre llocs web afiliats a la xarxa. També, al esser centralitzat, no hi ha terceres parts que puguin saltar-se els permisos i veure el que estàs fent a la xarxa.
$Projectname combina moltes característiques dels blocs tradicionals, les xarxes socials i els mitjans de comunicació, sistemes de gestió de continguts i emmagatzematge en el núvol personal en un marc de treball fàcil d'utilitzar. Cada node de la xarxa pot funcionar independent o enllaçar amb altres nodes per crear una súper-xarxa; deixant la privacitat sota el control de l'editor original.
$Projectname és una aplicació de servidor web de codi obert escrit originalment en PHP/MySQL i és fàcilment instalable per aquells amb habilitats d'administració web bàsiques. També s'estén fàcilment a través de plugins i temes i altres eines de tercers.
[b][size=24]Característiques de $Projectname[/size][/b]
$Projectname és un tot terreny per a la publicació web i una xarxa de comunicacions amb diverses característiques úniques. Està dissenyat per a ser utilitzat per la gamma més àmplia de persones a la web, dels blocaires no tècnics, als programadors de PHP experts i administradors de sistemes experimentats.
A aquesta pàgina s'enumeren algunes de les característiques fonamentals de $Projectname que s'inclouen amb la versió oficial. Igual que amb la majoria del programari lliure i de codi obert, pot haver moltes altres extensions, complements, plugins, temes i configuracions que estan limitats només per les necessitats i la imaginació dels membres.
[b][size=24]Construït per la Privacitat i la Llibertat[/size][/b]
Un dels objectius de disseny de $Projectname és permetre la comunicació fàcil a la web, mentre que preserva la intimitat, si així es desitja pels membres. Per aconseguir aquest objectiu, $Projectname inclou una sèrie de característiques que permeten nivells arbitraris de privacitat:
[b]Control Lliscant d'Afinitat[/b]
En afegir connexions en $Projectname, els membres tenen l'opció d'assignar nivells de "afinitat" (el prop que la seva amistat és amb el contacte) per a la nova connexió. Per exemple, quan s'afegeix a algú que resulta ser una persona a la que segueixes el seu bloc, podries assignar al seu canal un nivell d'afinitat de &quot;Coneguts&quot;.
D'altra banda, quan s'afegeix el canal d'un amic, que pot ser col·locat sota el nivell d'afinitat de &quot;Amics&quot;.
En aquest punt, l'eina [i]Control Lliscant d'Afinitat[/i] de $Projectname, que en general apareix a la part superior de la teva pàgina, ajusta el contingut de la pàgina per incloure als que estan dins del rang afinitat desitjada. No es mostraran Canals fora d'aquest rang, llevat que s'ajusti el Control Lliscant per incloure'ls.
El Control Lliscant D'Afinitat permet filtrar instantàniament grans quantitats de contingut, agrupats per nivells de proximitat.
[b]Filtre de Connexions[/b]
Tens la capacitat de controlar amb precisió el que apareix en el teu flux emprant opcionalment el "filtre de connexió". Quan s'activa, l'editor de connexió proporciona entrades per a la selecció de criteris que ha de ser aparellat amb la finalitat d'incloure o excloure un lloc específic d'un canal específic. Una vegada que un missatge s'ha permès, tots els comentaris a aquest lloc se'ls permet, independentment de si s'ajusten als criteris de selecció. Pots seleccionar paraules que si estàn presents al bloc o assegurar-te que està inclosses en el teu flux. Les expressions regulars es poden usar per al control encara més fi, així com hashtags o fins i tot l'idioma detectat del lloc.
[b]Llista de Control d'Accés[/b]
En compartir el contingut, els membres tenen l'opció de restringir qui veu el contingut. En fer clic al cadenat sota de la casella de compartir, un pot triar els destinataris desitjats del lloc, fent clic en els seus noms.
Un cop enviat, el missatge serà visible únicament pel remitent i els destinataris seleccionats. En altres paraules, el missatge no apareixerà al mur públic.
Llistes de Control d'Accés es poden aplicar als continguts i missatges, fotos, esdeveniments, pàgines web, sales de xat i arxius.
[b]Inici de Sessió Únic[/b]
Les Llistes de Control d'Accés treballen per a tots els canals a la xarxa gràcies a la nostra tecnologia única d'inici de sessió únic. La majoria dels enllaços interns proporcionen una identitat símbolica que pot ser verificada en altres llocs $Projectname i s'utilitza per controlar l'accés als recursos privats. Entres una vegada al teu concentrador. Després d'això, l'autenticació de tots els recursos de $Projectname és "màgia".
[b]WebDAV activa l'Emagatzematge d'Arxius[/b]
Els arxius poden ser enviats a la teva àrea d'emmagatzematge personal utilitzant les teves utilitats del sistema operatiu (arrossegar i deixar anar en la majoria dels casos). Pots protegir aquests arxius amb la Llista de Control d'Accés amb qualsevol combinació de membres de $Projectname (incloent alguns membres d'altres terceres xarxes) o fer-los públics.
[b]Foto Àlbums[/b]
Salva Fotos en Àlbums. Totes les fotografies es poden protegir mitjançant llistes de control d'accés.
[b]Calendari d'Esdeveniments[/b]
Creació i gestió d'esdeveniments i tasques, que també poden ser protegits amb llistes de control d'accés. Els esdeveniments poden ser importats/exportats a un altre programari amb el format estàndard de la indústria vCalendar/iCal i compartida en els llocs amb els altres. Esdeveniments d'aniversari s'agreguen automàticament dels teus amics i es tradueixen a la seva zona horària correcta així sabràs exactament quan es produeix l'aniversari - no importa on et trobis en el món en relació amb la persona de l'aniversari. Els esdeveniments es creen normalment amb taulells d'assistència perquè els teus amics i connexions puguin confirmar la seva assistència a l'instant.
[b]Sales de Xat[/b]
Pots crear qualsevol nombre de sales de xat personals i permetre l'accés a través de llistes de control d'accés. Aquestes solen ser més segures que XMPP, IRC, i altres transports de missatgeria instantània, encara que també permetem l'ús d'aquests altres serveis a través de connectors.
[b]Constructor de Pàgines Web[/b]
$Projectname moltes eines de creació de "Gestió de Contingut" per a la creació de pàgines web, incloent l'edició disposició, menús, blocs, widgets, i pàgina/contingut per regions. Totes aquestes poden ser d'accés controlat perquè les pàgines resultants siguin privades per al seu públic objectiu.
[b]Apps/Aplicacions[/b]
Apps poden ser construïdes i distribuïdes pels membres. Aquestes aplicacions són diferents del tradicional "bloqueig pel proveïdor" perquè són controlats completament per l'autor - que pot proporcionar control d'accés a les pàgines d'aplicacions de destinació i la càrrega consegüent per a aquest accés. La majoria de les aplicacions en $Projectname són gratuïtes i es poden crear fàcilment per aquells que no tenen coneixements de programació.
[b]Disposició[/b]
La disposició de la pàgina es basa en un llenguatge de descripció anomenat Comanche. $Projectname en si mateix està escrit amb dissenys de Comanche i es poden canviar. Això permet un nivell de personalització que no se sol trobar en els anomenats "entorns multiusuari".
[b]Favorits[/b]
Compartir i guardar/administrar els enllaços de favorits proporcionats en les converses.
[b]Xifrat de missatges privats i Dubtes sobre la confidencialitat[/b]
El correu privat s'emmagatzema en un format ocult. Si això no és a prova de bales, en general, evita l'espionatge informal per l'administrador del lloc o ISP.
Cada canal de $Projectname el seu propi conjunt únic de claus RSA (de 4096 bits) públiques i privades associades, que es genera quan es crea primer els canals. Això s'utilitza per protegir els missatges privats i missatges en trànsit.
A més, els missatges poden ser creats utilitzant "xifrat d'extrem a extrem", que no pot ser llegit per els operadors $Projectname o ISPs o algú que no coneixi el codi d'accés.
Els missatges públics en general, no es xifren en trànsit o en l'emmagatzematge.
Els missatges privats poden ser retirats (com si no s'hagués enviat), encara que no es garanteix que el destinatari no l'ha llegit abans que l'hagis retirat.
Entrades i missatges poden ser creats amb una data de venciment, moment en el qual s'eliminaran/borraran en el lloc del destinatari.
[b]Servei de Federació[/b]
A més de l'afegit (addon) "connectors d'entrades creuades" a una varietat de xarxes alternatives, no hi ha suport natiu per a la importació de continguts de RSS/Atom i usar això per crear canals especials. A més, una implementació experimental, però de treball del protocol de la Diàspora permet la comunicació amb la gent en les xarxes socials friendica i Diàspora descentralitzats. Actualment això es va marcar experimental a causa de que aquestes xarxes no tenen el mateix nivell de funcions de privacitat i encriptació i habilitats com $Projectname i poden presentar riscos per a la privacitat.
També hi ha suport experimental per a l'autenticació OpenID que es pot utilitzar en les llistes de control d'accés. Aquest és un treball en progrés. El seu concentrador $Projectname pot ser utilitzat com un proveïdor d'OpenID per autenticar als serveis externs que utilitzen aquesta tecnologia.
Els canals poden tenir permisos per convertir-se en "canals derivats" on dos o més canals existents es combinen per crear un nou canal d'actualitat.
[b]Col·leccions[/b]
"Col·leccions" és la nostra implementació de grups de privacitat, que és similar a Google "Cercles" i "Aspectes" de Diaspora. Això li permet filtrar el flux entrant per col·leccions o grups, i automàticament configurar la llista de control d'accés sortint a només aquells en la Col·lecció quan publiqui. Pots obviar tot això en qualsevol moment (abans d'enviar l'entrada).
[b]Serveis de Directori [/b]
Oferim fàcil accés a un directori de membres i proporcionem eines descentralitzades capaçes de proporcionar amics "suggerits". Els directoris són llocs normals $Projectname que han optat per acceptar la funció de servidor de directori. Això requereix més recursos que la majoria dels llocs típics pel que no és el predeterminat. Els Directoris estan sincronitzats i reflecteixen el que tots ells contenen amb informació actualitzada sobre tota la xarxa (subjecte a demores normals de propagació).
[b]TLS/SSL[/b]
Els concentradors de $Projectname que empran TLS/SSL, les comunicacions entre client i servidor son encriptades via TLS/SSL. Donades les recents revelacions en els mitjans de comunicació en relació amb, la vigilància global i l'elusió de xifrat pel NSA i GCHQ, és raonable suposar que les comunicacions HTTPS-protegides es poden veure compromeses de diverses maneres. Les comunicacions privades són en conseqüència xifrades en un nivell superior abans d'enviar-les fora del lloc.
[b]Ajustos del Canals[/b]
Quan es crea un canal, es tria un rol al que s'apliquen una sèrie d'ajustos de seguretat i privacitat preconfigurats. Aquests són elegits per les millors pràctiques per mantenir la privacitat en els nivells requerits.
Si escolliu un paper privacitat "personalitzat", cada canal permet permisos de gra fi que es fixaràn per a diferents aspectes de la comunicació. Per exemple, sota la capçalera &quot;Ajusts de Seguretat i Privacitat&quot;, cada aspecte a la banda esquerra de la pàgina, sis (6) Opcions possibles de visualització/accés, que es poden seleccionar fent clic al menú desplegable. També hi ha una sèrie d'altres opcions de privacitat que pots editar.
Les opcions són:
- Ningú, excepte tu mateix.
- Només aquells que es permeten específicament.
- Qualsevol persona en la seva llibreta d'adreces.
- Qualsevol en aquest lloc web.
- Qualsevol persona en aquesta xarxa.
- Qualsevol autenticat.
- Qualsevol persona a Internet.
[b]Forums Públics i Privats[/b]
Els fòrums són típicament canals que poden estar obertes a la participació de múltiples autors. Actualment existeixen dos mecanismes per pujar als fòrums: 1) els missatges "de mur a mur" i 2) a través de les etiquetes de foro @menció. Els fòrums poden ser creats per qualsevol persona i s'utilitzats per a qualsevol propòsit. El directori conté una opció per buscar fòrums públics. Als Fòrums privats només es poden fer entrades pels membres i sovint només son vistos pels membres.
[b]Clonat de Comptes[/b]
Els Comptes a $Projectname es refereixen com a [i]identitats nómades[/i], perquè la identitat d'un membre no està lligada al concentrador/servidor on es va crear originalment. Per exemple, quan es crea un compte de Facebook o Gmail, que està lligat a aquests serveis. No poden funcionar sense Facebook.com o Gmail.com.
Per contra, imagina que has creat una identitat a $Projectname anomenada [b]tina@Hubzillahub.com[/b]. Aquesta es pot clonar a un altre hub de $Projectname amb el mateix nom o un altre de diferent: per exemple [b]viuPerSempre@HubzillaHub.info[/b]
Tots dos canals estan ara sincronitzats, el que significa que tots els seus contactes i preferències es dupliquen en el teu clon. No importa si s'envia un missatge des del seu hub original o el nou centre. Els missatges/emtrades seran reflectits/des en tots dos comptes.
Aquesta és una característica bastant revolucionària, si tenim en compte alguns dels escenaris:
- Què passa si el concentrador/servidor on la identitat es basa cau sobtadament fora de línia? Sense clonació, un membre no pot comunicar fins que aquest centre torna a estar de nou en línia (sens dubte molts de vosaltres heu vist i maleït el Twitter "Fail Whale"). Amb la clonació, es pot iniciar la sessió al compte clonat, i la vida continua feliços per sempre. - L'administrador del teu concentrador/servidor ja no es pot permetre el luxe de pagar el concentrador/servidor $Projectname que ofereix gratuitament. Llavors anuncia que el centre serà tancant en dues setmanes. Això li dóna temps suficient als socis/partíceps per clonar la seva identitat/s i preservar les seves relacions de $Projectname, amics i contingut. - Què passa si la teva identitat està subjecta a la censura del govern? El teu proveïdor del concentrador/servidor pot ser obligat a eliminar el teu compte, juntament amb les identitats i dades associades. Amb la clonació, a $Projectname ofereixes [b]resistència a la censura[/b]. Pots tenir centenars de clons, si vols, amb noms totalment diferents, i existents en molts centres diferents, escampats a tot l'Internet.
$Projectname ofereix noves i interesants possibilitats per a la privacitat. Pots llegir més a la pàgina &lt;&lt;Bones Pràctiques en Comunicacions Privades&gt;&gt;.
A tenir en compte. Per a una explicació completa de la clonació d'identitat, llegir el &lt;HOW TO CLONE MY IDENTITY&gt;.
[b]Perfils Multiples[/b]
Es poden crear qualsevol nombre de perfils amb informació diferent i es poden fer-se visible/s a alguns de les teves connexions/amics. Un perfil "per defecte" es pot veure per qualsevol persona i pot contenir informació limitada, amb més informació disponible per grups o persones seleccionades. Això vol dir que el perfil (i el contingut del lloc) per als teus amics bevedors de cervesa pot ser diferents del que presentes als seus companys de treball, i també completament diferent del que és visible per al públic en general.
[b]Còpies de Seguretat del Compte[/b]
Hubzilla ofereix una còpia de seguretat del compte, amb un simple clic, on pots descarregar una còpia de seguretat completa del teu perfil(s).
Les còpies de seguretat es poden utilitzar per clonar o restaurar un perfil.
[b]Eliminació del Compte[/b]
Els comptes poden ser [b]esborrats immediatament[/b] fent clic en un enllaç. [b]Això és així[/b]. Tot el contingut associat s'elimina de la xarxa (això inclou els missatges i qualsevol altre tipus de contingut produït pel perfil suprimit). Depenent del nombre de connexions que , el procés d'eliminació de contingut remot podria portar el seu temps, però està previst que passi tan aviat com sigui possible.
[b][size=20]Creació de Contingut[/size][/b]
[b]Escribint Entrades[/b]
$Projectname suporta un nombre de diferents alternatives per afegir contingut amb text enriquit. La opció per defecte es una variant personalitzada de _BBcode, ajustada per al seu ús a $Projectname. Pots activar l'ús de Markdown (un llenguatge de marques) fàcil de treballar amb ell. Un editor visual també es pot emprar. El editor visual tradicionalment emprat en $Projectname va tenir seriosos problemes i ha estat eliminat. Estem actualment buscant un substitut.
Quant creem &quot;llocs Web&quot;, El contingut espot afegir en HTML, Markdown, BBcode, i/o text plà.
[b]Esborrat del contingut[/b]
Qualsevol contingut creat a $Projectname roman sota el control del membre (o canal) que el va crear originalment. En qualsevol moment, un membre pot esborrar un missatge o un rang de missatges. El procés d'esborrat assegura que el contingut es eliminat, indiferentment de on es va publicar si en el canal primari (l'inicial)del concentrador/servidor o en altre qualsevol on el canal es va autenticar remotament via Zot ($Projectname communicació i protocol d'autenticació).
[b]Multimedia[/b]
Igual que qualsevol altre sistema modern de blocs, xarxes socials, o d'un servei de micro-blogging, $Projectname és compatible amb la càrrega d'arxius, la incorporació dels vídeos, l'enllaç de pàgines web.
[b]Vista Prèvia/Edició[/b]
Les entrades es poder pre visualitzar abans d'enviar-les i reeditar desprès de ser enviades.
[b]Votacions/Consens[/b]
El missatges poden convertir-se en "consensos", són articles que ofereixen als lectors una forma de retroalimentació, es recopilen en comptadors de "d'acord", "en desacord" i "abstenir-se". Que permeten mesurar l'interès per les idees i crear enquestes informals.
[b]Estenent $Projectname[/b]
$Projectname es pot estendre per diferents nombre de vies, a través de la personalització del lloc, la teva personalització, ajustos optatius, temes i addons/plugins.
[b]API[/b]
Una API està disponible per al seu ús per serveis de terceres part. Està basat originalment en una de les primeres API's de Twitter(de la que existeixen cents d'eines de terceres parts). S'està ampliant actualment per proporcionar accés a les instal·lacions i capacitats que són específiques de $Projectname. L'accés pot ser proporcionada per usuari/contrasenya o OAuth i es proporciona registre de clients d'aplicacions OAuth.
#include doc/macros/main_footer.bb;

3
doc/ca/first-post.bb Normal file
View file

@ -0,0 +1,3 @@
[size=large]La teva primera entrada[/size]
... pendent de ser escrita ...

20
doc/ca/general.bb Normal file
View file

@ -0,0 +1,20 @@
[h2]Informació del Projecte/Lloc[/h2]
[zrl=[baseurl]/help/Privacy]Politica de Privacitat[/zrl]
[zrl=[baseurl]/help/history]Història de $Projectname[/zrl]
[h3]Recursos Externs[/h3]
[zrl=[baseurl]/help/external-resource-links]Enllaços a Recursos Externs[/zrl]
[url=https://github.com/redmatrix/hubzilla]Lloc Web Principal[/url]
[url=https://github.com/redmatrix/hubzilla-addons]Complements del Lloc Web[/url]
[url=[baseurl]/help/credits]Credits en $Projectname[/url]
[h3]Sobre Aquest Node $Projectname[/h3]
[zrl=[baseurl]/help/TermsOfService]Termes de Servei per a AQUEST Node[/zrl]
[zrl=[baseurl]/siteinfo]Informació del Node[/zrl]
[zrl=[baseurl]/siteinfo/json]Informació Tècnica Detallada en format JSON d'aquest Node[/zrl]

12
doc/ca/main.bb Normal file
View file

@ -0,0 +1,12 @@
[zrl=[baseurl]/help/about][b]Que és $Projectname?[/b][/zrl]
$Projectname és una plataforma de comunicació i publicació descentralitzada que et permet mantenir el control de les teves necessitats de comunicació, gràcies a l'encriptació automàtica i control d'accés de gra fi. Éts tu, i només tu qui decideixes qui pot veure les teves coses.
[zrl=[baseurl]/help/features][b]Característiques de $Projectname[/b][/zrl]
$Projectname ja s'està executant com una xarxa distribuïda global i demostra la seva versatilitat i escalabilitat des de independent fins a grans llocs.
Penseu en plataformes independents de comunicació de la família, de comunitats en línia distribuïdes, fòrums de suport, blocs i pàgines web. O proveïdors de continguts professionals amb canals premium comercials i accés de continguts específics. El que vulguis, $Projectname és allà per atendre la teva creativitat.
[zrl=[baseurl]/help/what_is_zot][b]Tens Zot? Be, Deuries.[/b][/zrl]
Zot és el gran nou protocol de communicació inventat especialment per a $Projectname. Com a membre, ja no estàs lligat a un sol lloc o concentrador (hub) gràcies a les "identitats nòmades". Migra fàcilment a un altre servidor i manté els teus contactes intactes, o clona i executa el mateix canal en diversos servidors. Encara que un d'ells tanqui, no es perd res. A més, una vegada que estàs dins de $Projectname no hi ha necessitat d'autenticar dues vegades, fins i tot quan s'accedeix des d'un altre lloc $Projectname. Zot és el que difèrencia $Projectname de qualsevol altre projecte.

25
doc/ca/members.bb Normal file
View file

@ -0,0 +1,25 @@
[h2]Documentació per a Membres del Concentrador[/h2]
[h3]Començant[/h3]
[zrl=[baseurl]/help/registration]Registrant un Compte[/zrl]
[zrl=[baseurl]/help/accounts_profiles_channels_basics]Tu a $Projectname: breument comptes, perfils i canals[/zrl]
[zrl=[baseurl]/help/profiles]Perfils[/zrl]
[zrl=[baseurl]/help/channels]Canals[/zrl]
[zrl=[baseurl]/help/roles]Permisos per roles i tipus de Canals[/zrl]
[zrl=[baseurl]/help/first-post]La teva primera entrada[/zrl]
[zrl=[baseurl]/help/connecting_to_channels]Connectant Amb Altres Canals[/zrl]
[zrl=[baseurl]/help/permissions]Permisos I Encriptació: Tu Tens El Control[/zrl]
[zrl=[baseurl]/help/cloud]Emmagatzegament Al Núbol[/zrl]
[zrl=[baseurl]/help/remove_account]Esborrar un Canal o un Compte[/zrl]
[h3]Ajuda per als Membres[/h3]
[zrl=[baseurl]/help/tags_and_mentions]Etiquetes i Mencions[/zrl]
[zrl=[baseurl]/help/webpages]Pàgines Web[/zrl]
[zrl=[baseurl]/help/bbcode]Referència BBcode per a entrades i comentaris[/zrl]
[zrl=[baseurl]/help/checking_account_quota_usage]Comprovant la Quota d'Ús del Compte[/zrl]
[zrl=[baseurl]/help/cloud_desktop_clients]Clients d'Escriptori al Núbol[/zrl]
[zrl=[baseurl]/help/AdvancedSearch]Cerca Avançada al Directori[/zrl]
[zrl=[baseurl]/help/addons]Ajuda pels Addons[/zrl]
[zrl=[baseurl]/help/diaspora_compat]Compatibilitat de Comunicacions amb Diaspora (Diaspora i Friendica)[/zrl]
[zrl=[baseurl]/help/faq_members]FAQ Per Membres[/zrl]
[zrl=[baseurl]/help/bugs]Errors, Assumptes, i les coses que arriben de cop a la nit...[/zrl]

37
doc/ca/profiles.bb Normal file
View file

@ -0,0 +1,37 @@
[b]Profiles[/b]
$Projectname has unlimited profiles. You may use different profiles to show different &quot;sides of yourself&quot; to different audiences. This is different to having different channels. Different channels allow for completely different sets of information. You may have a channel for yourself, a channel for your sports team, a channel for your website, or whatever else. A profile allows for finely graded &quot;sides&quot; of each channel. For example, your default public profile might say &quot;Hello, I'm Fred, and I like laughing&quot;. You may show your close friends a profile that adds &quot;and I also enjoy dwarf tossing&quot;.
You always have a profile known as your &quot;default&quot; or &quot;public&quot; profile. This profile is always available to the general public and cannot be hidden (there may be rare exceptions on privately run or disconnected sites). You may, and probably should restrict the information you make available on your public profile.
That said, if you want other friends to be able to find you, it helps to have the following information in your public profile...
[ul][*]Your real name or at least a nickname everybody knows
[*]A photo of you
[*]Your location on the planet, at least to a country level.[/ul]
In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some &quot;Keywords&quot; to your profile. Such as &quot;music, linux, photography&quot; or whatever. You can add as many keywords as you like.
To create an alternate profile, first go to [zrl=[baseurl]/settings/features]Settings &gt; Additional Features[/zrl] and enable &quot;Multiple Profiles&quot; there, otherwise you won't have the ability to use more than just your default profile.
Then select &quot;Edit Profiles&quot; from the menu of your $Projectname site. You may edit an existing profile, change the profile photo, add things to a profile or create a new profile. You may also create a &quot;clone&quot; of an existing profile if you only wish to change a few items but don't wish to enter all the information again. To do that, click on the profile you want to clone and choose &quot;Clone this profile&quot; there.
In the list of your profiles, you can also choose the contacts who can see a specific profile. Just click on &quot;Edit visibility&quot; next to the profile in question (only available for the profiles that are not your default profile) and then click on user images to add them to or remove them from the group of people who can see this profile.
Once a profile has been selected, when the person views your profile, they will see the private profile you have assigned. If they are not authenticated, they will see your public profile.
There is a setting which allows you to publish your profile to a directory and ensure that it can be found by others. You can change this setting on the &quot;Settings&quot; page.
If you do not wish to be found be people unless you give them your channel address, you may leave your profile unpublished.
[b]Keywords and Directory Search[/b]
On the directory page, you may search for people with published profiles. Currently, only the name field and the keywords are searched. You may also include such keywords in your default profile - which may be used to search for common interests with other members. Keywords are used in the channel suggestion tool and although they aren't visible in the directory, they are shown if people visit your profile page.
On your Connnections page and in the directory there is a link to &quot;Suggestions&quot; or &quot;Channel Suggestions&quot;, respectively. This will find channels who have matching and/or similar keywords. The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance.
See Also
[zrl=[baseurl]/help/AdvancedSearch]Advanced Searching[/zrl]
#include doc/macros/main_footer.bb;

35
doc/ca/registration.bb Normal file
View file

@ -0,0 +1,35 @@
[size=large][b]Registre[/b][/size]
No tots els llocs $Projectname permeten la inscripció oberta. Si es permet el registre, veureu un enllaç de &quot; Registre &quot; immediatament sota de l'entrada a la pàgina principal del lloc. Seguint aquest enllaç et portarà a la pàgina de registre del lloc. En alguns llocs es pot redirigir a un altre lloc que permet registres. Com tots els llocs $Projectname estan vinculats, no importa on resideix el teu compte.
[b]La Teva Adreça de Correu Electrònic[/b]
Si us plau introdueix la teva adreça de correu electrònic vàlida. La teva adreça de correu electrònic mai es farà pública. Aquesta adreça s'utilitzarà per activar el teu compte, que (opcionalment) enviarà notificacions de correu electrònic per als missatges entrants o articles, [i]i per recuperar contrasenyes perdudes[/i].
[b]Contrasenya[/b]
Introdueix una contrasenya de la teva elecció, i repeix-la en la segona casella per assegurar-te que es va escriure correctament. Com $Projectname ofereix una identitat descentralitzada, Es pot accedir al teu compte en molts altres llocs web no només en el que t'has donat d'alta.
[b]Termes Del Servei[/b]
Clica a l'enllaç per llegir els [zrl=[baseurl]/help/TermsOfService]Termes de Servei[/zrl] del lloc. Una vegada llegits, marca la casella al formulari de registre per confirmar.
[b]Registre[/b]
Una vegada que hagis proporcionat els detalls necessaris, fes clic al botó "Registrar-se". Alguns llocs poden requerir l'aprovació de l'administrador abans de processar el registre, s'avisarà si aquest és el cas. Si us plau, mira el teu correu electrònic (incloent carpetes d'spam) per poder finalitzar la teva aprovació de registre.
[b]Crear un Canal[/b]
A continuació, se et presentarà la pantalla &quot; Afegir un canal&quot;. Normalment, el primer canal serà un que et representa - pel que l'ús del seu propi nom (o pseudònim) com el nom del canal és una bona idea. El nom de la cadena ha de ser pensat com un títol o descripció breu del teu canal. El &quot; triar un sobrenom curt &quot; és similar a un &quot;nom d'usuari &quot;. Farem servir tot el que entra aquí per crear una adreça de canal, que altres persones utilitzaran per connectar-se amb tu, i que utilitzaràs per iniciar sessió en altres llocs. Això s'assembla a una adreça de correu electrònic, i pren la forma nickname@siteyouregisteredat.xyz
Quan es crea el teu canal se't portarà directament a la pàgina de configuració on pots definir permisos, habilitar les funcions, etc. Totes aquestes coses es tracten a la secció corresponent dels fitxers d'ajuda.
Veure Tambè
[zrl=[baseurl]/help/accounts_profiles_channels_basics]Lo Basic sobre Identitats dins $Projectname[/zrl]
[zrl=[baseurl]/help/accounts]Comptes[/zrl]
[zrl=[baseurl]/help/profiles]Perfils[/zrl]
[zrl=[baseurl]/help/permissions]Permisos[/zrl]
[zrl=[baseurl]/help/remove_account]Eliminar Compte[/zrl]
#include doc/macros/main_footer.bb;

61
doc/ca/what_is_zot.bb Normal file
View file

@ -0,0 +1,61 @@
[b]Qué és Zot?[/b]
Zot és el protocol que fa funcionar $Projectname, proveeix tres Característiques esencials: Comunicacions, Identitat, i Control d'Accéss.
Les funcionalitats que proveeix es poden describir de la següent manera:
- una relació en línia es només un munt de permisos
- internet és només un altre carpeta
[b][size=20]Comunicacions[/size][/b]
Zot és un protocol revolucionari que ofereix [i]comunicacions descentralitzades[/i] i [i]gestió d'identitat[/i] en tota la malla (o entrallat de connexions). El resultat es una plataforma que proveeix serveis web comparables amb els que ofereixen les grans companyies, però sense elles ni els seus problemes de privacitat, la seva insaciable necessitat de beneficis, ni la seva idea dels jardins-privats.
Comunicacions i xarxes socials són una part integral del teixit. Qualsevol canal (i qualsevol servei ofert per aquest canal) por fer ús complert de les grans caracteristiques de comunicació social a escala global. Aquestes comunicacions poden ser públiques o privades - i comunicacions privades no es limiten a encriptar totalment l'enviament, sino que també encripten l'emmagatzegament per tal d'impedir que, administradors de sistemes murris o proveidors de servei, accidental o intencionadament tafanegin o revelin dades personals.
Zot permet un ampli vental de serveis en segon plà per a la xarxa, des de oferir suggeriments d'amics, a serveis de directori. També pot realitzar altres coses que normalment només són possibles en un proveïdor centralitzat, com missatges &quot;de mur a mur&quot;. Perfils particulars/múltiples es poden crear fàcilment i el contingut del web es pot adaptar a l'espectador a través del [i]Control Lliscant d'Afinitat[/i].
No trobaràs, de cap manera, aquestes característiques en altres serveis de comunicació descentralitzades. A més de proporcionar la descentralització de concentradors (servidors), potser la característica més innovadora i interessant de Zot és el subministrament de serveis [i]d'identitat descentralitzada[/i].
[b][size=20]Identitat[/size][/b]
La capa que permet identitat mitjançant Zot es única. Facilita [i]l'identificació única invisible[/i] al llarg de tots els llocs de la malla.
També ofereix [i]identitat nómada[/i], de tal forma que les teves comunicacions amb amics, familiars , i qualsevol amb el que et comuniquis no s'han de veure afectats per la pérdua (caiguda, desconnexió) temporal/permanent del teu node de comunicació primari.
Les parts importants de la teva identitat i les relacions es poden copiar a una memòria USB, o el teu ordinador portàtil, i poden aparèixer en qualsevol node de la xarxa en qualsevol moment - amb tots els teus amics i preferències intactes.
Fonamentalment, aquestes instàncies (identitats) nòmades es mantenen en sincronia per tal que qualsevol instància pugui fer-se càrrec si un altre està en perill o danyada. Això el protegeix contra no només d'una fallada del sistema, sinó també de sobrecàrregues temporals del lloc i/o la manipulació governamental o censura.
Identitat nòmada, inici de sessió únic, i nodes $Projectname descentralitzats, al nostre parer, introduir un alt grau de grau de [i]resiliència[/i] i [i]persistència[/i] en les comunicacions d'Internet, que són profundament necessàries en direcció contrària de les tendències mundials cap a la centralització corporativa, així com la vigilància governamental indiscriminada i la censura.
Com naveges per la xarxa, els canals de visualització i el seu contingut únic, que es produeix sobre la marxa, fins i tot a través de centres de servidors completament diferents. No hi ha contrasenyes per entrar. No hi ha res a escriure. No tens que posar teu nom en cada nou lloc que visites.
Com Zot pot fer això? En diem [i]identificació-màgica[/i], perquè $Projectname oculta els detalls de les complexitats que van a l'inici únic de sessió, les identitats nòmades, i l'experiència de navegació a la xarxa. Aquest és un dels objectius de disseny de $Projectname: per augmentar la privacitat i la llibertat a la xarxa, alhora que redueix la complexitat i el tedi interposat per la necessitat d'introduir noves contrasenyes i noms d'usuari per a cada vista diferent, que pots visitar en línia.
Entrar com a usuari només una vegada en el teu centre d'origen (o qualsevol centre de recolçament nòmada que hagis triat). Això permet accedir a tots els serveis autenticats en qualsevol lloc de la malla - com ara anar a comprar, blocs, fòrums, i l'accés a la informació privada. Això és igual que els serveis oferts pels grans proveïdors de les empreses amb enormes bases de dades d'usuaris; però, pots ser un membre d'aquesta comunitat, així com un servidor en aquesta xarxa emprant un RasberryPi de 35$. La teva contrasenya no s'emmagatzema en un miler de diferents llocs, o encara pitjor, només en uns pocs llocs com Google i Facebook, fora del teu control directe.
No pots ser silenciat. No pots ser eliminat de la xarxa, llevat que triïs per sortir, tu mateix.
[b][size=20]Control d'Accés[/size][/b]
La capa de identitat de Zot permet proporcionar permisos específics a qualsevol contingut que desitgis publicar - i aquests permisos s'estenen per $ProjectName. Això és com tenir un sol súper gran espai web format per un exèrcit de petits llocs web individuals - i on cada canal a la xarxa pot controlar completament les seves preferències de privacitat i ús compartit dels recursos web que creen.
Actualment, la xarxa suporta comunicacions, àlbums de fotos, esdeveniments, i arxius. Això s'ampliarà en el futur per proporcionar serveis de gestió de continguts (pàgines web) i instal·lacions d'emmagatzematge en el núvol, com biblioteques WebDAV i multimèdia. Cada objecte i la forma en què es comparteix i amb qui està completament sota el teu control.
Aquest tipus de control està disponible en grans proveïdors de serveis com Facebook i Google, ja que poseeixen la base de dades d'usuari. Dins de la xarxa, no hi ha necessitat d'un gran usuari de base de dades a la teva màquina - perquè la xarxa [i]és[/i] la teva base de dades d'usuari. essencialment infinita capacitat (limitada pel nombre total de nodes en línia a través d'Internet), i s'estén entre centenars, i potencialment milions d'ordinadors.
L'accés pot ser concedit o negat per a qualsevol recurs, a qualsevol canal, o qualsevol grup de canals; en qualsevol lloc dins de la malla. Altres podràn accedir al teu contingut si els permets fer-ho, i ni tan sols cal tenir un compte al node. Les teves fotos privades no es poden veure, perquè els permissos realment funcionen; no són un complement que s'ha afegit a l'últim moment. Si no ets a la llista d'espectadors permesos per a una foto en particular, tu no la veuràs.
[b][size=18]Recursos Addicionals i Enllaços[/size][/b]
Per més detalla, informació tècnica sobre Zot, clica sobre algún dels següents enllaços:
- [url=https://github.com/friendica/red/wiki/Zot---A-High-Level-Overview]Vista per experts (en anglès)[/url]
- [url=https://github.com/friendica/red/wiki/zot]Especificació pel desenvolupament de Zot (en anglès)[/url]
- [url=https://github.com/redmatrix/hubzilla/blob/master/include/zot.php]Referència per la implementació de Zot en PHP (en anglès)[/url]
#include doc/macros/main_footer.bb;

View file

@ -83,7 +83,9 @@ This document assumes you're an administrator.
'forum', 'forum_restricted' and 'forum_private'.
Read more about permissions roles [zrl=[baseurl]/help/roles]here[/zrl].
[b]system.workflow_channel_next[/b]
The page to direct users to immediately after creating a channel.
The page to direct new members to immediately after creating a channel.
[b]system.workflow_register_next[/b]
The page to direct members to immediately after creating an account (only when auto_channel_create or UNO is enabled).
[b]system.max_daily_registrations[/b]
Set the maximum number of new registrations allowed on any day.
Useful to prevent oversubscription after a bout of publicity

View file

@ -38,7 +38,7 @@ function get_feature_default($feature) {
function get_features($filtered = true) {
if(UNO)
if(UNO && $filtered)
return array();
$arr = array(

View file

@ -849,7 +849,7 @@ function get_item_elements($x,$allow_code = false) {
if($allow_code)
$arr['body'] = $x['body'];
else
$arr['body'] = (($x['body']) ? htmlspecialchars($x['body'],ENT_COMPAT,'UTF-8',false) : '');
$arr['body'] = (($x['body']) ? htmlspecialchars($x['body'],ENT_COMPAT,'UTF-8',false) : '');
$key = get_config('system','pubkey');
@ -917,6 +917,7 @@ function get_item_elements($x,$allow_code = false) {
$arr['attach'] = activity_sanitise($x['attach']);
$arr['term'] = decode_tags($x['tags']);
$arr['iconfig'] = decode_item_meta($x['meta']);
$arr['item_private'] = ((array_key_exists('flags',$x) && is_array($x['flags']) && in_array('private',$x['flags'])) ? 1 : 0);
@ -1324,6 +1325,9 @@ function encode_item($item,$mirror = false) {
if($item['term'])
$x['tags'] = encode_item_terms($item['term'],$mirror);
if($item['iconfig'])
$x['meta'] = encode_item_meta($item['iconfig'],$mirror);
if($item['diaspora_meta']) {
$z = json_decode($item['diaspora_meta'],true);
if($z) {
@ -1434,6 +1438,30 @@ function encode_item_terms($terms,$mirror = false) {
return $ret;
}
function encode_item_meta($meta,$mirror = false) {
$ret = array();
if($meta) {
foreach($meta as $m) {
if($m['sharing'] || $mirror)
$ret[] = array('family' => $m['cat'], 'key' => $m['k'], 'value' => $m['v'], 'sharing' => intval($m['sharing']));
}
}
return $ret;
}
function decode_item_meta($meta) {
$ret = array();
if(is_array($meta) && $meta) {
foreach($meta as $m) {
$ret[] = array('cat' => escape_tags($m['family']),'k' => escape_tags($m['key']),'v' => $m['value'],'sharing' => $m['sharing']);
}
}
return $ret;
}
/**
* @brief
*
@ -2446,6 +2474,13 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
unset($arr['term']);
}
$meta = null;
if(array_key_exists('iconfig',$arr)) {
$meta = $arr['iconfig'];
unset($arr['iconfig']);
}
if(strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid) || strlen($public_policy))
$private = 1;
else
@ -2523,6 +2558,15 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
$arr['term'] = $terms;
}
if($meta) {
foreach($meta as $m) {
set_iconfig($current_post,$m['cat'],$m['k'],$m['v'],$m['sharing']);
}
$arr['iconfig'] = $meta;
}
call_hooks('post_remote_end',$arr);
// update the commented timestamp on the parent
@ -2744,6 +2788,13 @@ function item_store_update($arr,$allow_exec = false, $deliver = true) {
unset($arr['term']);
}
$meta = null;
if(array_key_exists('iconfig',$arr)) {
$meta = $arr['iconfig'];
unset($arr['iconfig']);
}
dbesc_array($arr);
logger('item_store_update: ' . print_r($arr,true), LOGGER_DATA);
@ -2785,6 +2836,17 @@ function item_store_update($arr,$allow_exec = false, $deliver = true) {
$arr['term'] = $terms;
}
$r = q("delete from iconfig where iid = %d",
intval($orig_post_id)
);
if($meta) {
foreach($meta as $m) {
set_iconfig($orig_post_id,$m['cat'],$m['k'],$m['v'],$m['sharing']);
}
$arr['iconfig'] = $meta;
}
call_hooks('post_remote_update_end',$arr);
if($deliver) {
@ -4007,12 +4069,25 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
$o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
}
if(activity_compare($item['obj_type'],ACTIVITY_OBJ_EVENT) && activity_compare($item['verb'],ACTIVITY_POST)) {
$obj = ((is_array($item['obj'])) ? $item['object'] : json_decode($item['object'],true));
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
$o .= '<summary>' . xmlify(bbcode($obj['title'])) . '</summary>' . "\r\n";
$o .= '<dtstart xmlns="urn:ietf:params:xml:ns:xcal">' . datetime_convert('UTC','UTC', $obj['start'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '</dtstart>' . "\r\n";
$o .= '<dtend xmlns="urn:ietf:params:xml:ns:xcal">' . datetime_convert('UTC','UTC', $obj['finish'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '</dtend>' . "\r\n";
$o .= '<location>' . bbcode($obj['location']) . '</location>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify(bbcode($obj['description'])) . '</content>' . "\r\n";
}
else {
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify(prepare_text($body,$item['mimetype'])) . '</content>' . "\r\n";
}
$o .= '<id>' . xmlify($item['mid']) . '</id>' . "\r\n";
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
$o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n";
$o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify(prepare_text($body,$item['mimetype'])) . '</content>' . "\r\n";
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
if($item['location']) {
@ -4675,6 +4750,10 @@ function fetch_post_tags($items,$link = false) {
dbesc($tag_finder_str),
intval(TERM_OBJ_POST)
);
$imeta = q("select * from iconfig where iid in ( %s )",
dbesc($tag_finder_str)
);
}
for($x = 0; $x < count($items); $x ++) {
@ -4698,6 +4777,26 @@ function fetch_post_tags($items,$link = false) {
}
}
}
if($imeta) {
foreach($imeta as $i) {
if(array_key_exists('item_id',$items[$x])) {
if($i['iid'] == $items[$x]['item_id']) {
if(! is_array($items[$x]['iconfig']))
$items[$x]['iconfig'] = array();
$i['v'] = ((preg_match('|^a:[0-9]+:{.*}$|s',$i['v'])) ? unserialize($i['v']) : $i['v']);
$items[$x]['iconfig'][] = $i;
}
}
else {
if($i['iid'] == $items[$x]['id']) {
if(! is_array($items[$x]['iconfig']))
$items[$x]['iconfig'] = array();
$i['v'] = ((preg_match('|^a:[0-9]+:{.*}$|s',$i['v'])) ? unserialize($i['v']) : $i['v']);
$items[$x]['iconfig'][] = $i;
}
}
}
}
}
return $items;
@ -5306,3 +5405,212 @@ function asencode_person($p) {
return $ret;
}
function send_profile_photo_activity($channel,$photo,$profile) {
// for now only create activities for the default profile
if(! intval($profile['is_default']))
return;
$arr = array();
$arr['item_thread_top'] = 1;
$arr['item_origin'] = 1;
$arr['item_wall'] = 1;
$arr['obj_type'] = ACTIVITY_OBJ_PHOTO;
$arr['verb'] = ACTIVITY_UPDATE;
$arr['object'] = json_encode(array(
'type' => $arr['obj_type'],
'id' => z_root() . '/photo/profile/l/' . $channel['channel_id'],
'link' => array('rel' => 'photo', 'type' => $photo['type'], 'href' => z_root() . '/photo/profile/l/' . $channel['channel_id'])
));
if(stripos($profile['gender'],t('female')) !== false)
$t = t('%1$s updated her %2$s');
elseif(stripos($profile['gender'],t('male')) !== false)
$t = t('%1$s updated his %2$s');
else
$t = t('%1$s updated their %2$s');
$ptext = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo['resource_id'] . ']' . t('profile photo') . '[/zrl]';
$ltext = '[zrl=' . z_root() . '/profile/' . $channel['channel_address'] . ']' . '[zmg=150x150]' . z_root() . '/photo/' . $photo['resource_id'] . '-4[/zmg][/zrl]';
$arr['body'] = sprintf($t,$channel['channel_name'],$ptext) . "\n\n" . $ltext;
$acl = new AccessList($channel);
$x = $acl->get();
$arr['allow_cid'] = $x['allow_cid'];
$arr['allow_gid'] = $x['allow_gid'];
$arr['deny_cid'] = $x['deny_cid'];
$arr['deny_gid'] = $x['deny_gid'];
$arr['uid'] = $channel['channel_id'];
$arr['aid'] = $channel['channel_account_id'];
$arr['owner_xchan'] = $channel['channel_hash'];
$arr['author_xchan'] = $channel['channel_hash'];
post_activity_item($arr);
}
function get_iconfig(&$item, $family, $key) {
$is_item = false;
if(is_array($item)) {
$is_item = true;
if((! array_key_exists('iconfig',$item)) || (! is_array($item['iconfig'])))
$item['iconfig'] = array();
if(array_key_exists('item_id',$item))
$iid = $item['item_id'];
else
$iid = $item['id'];
}
elseif(intval($item))
$iid = $item;
if(! $iid)
return false;
if(is_array($item) && array_key_exists('iconfig',$item) && is_array($item['iconfig'])) {
foreach($item['iconfig'] as $c) {
if($c['iid'] == $iid && $c['cat'] == $family && $c['k'] == $key)
return $c['v'];
}
}
$r = q("select * from iconfig where iid = %d and cat = '%s' and k = '%s' limit 1",
intval($iid),
dbesc($family),
dbesc($key)
);
if($r) {
$r[0]['v'] = ((preg_match('|^a:[0-9]+:{.*}$|s',$r[0]['v'])) ? unserialize($r[0]['v']) : $r[0]['v']);
if($is_item)
$item['iconfig'][] = $r[0];
return $r[0]['v'];
}
return false;
}
/**
* set_iconfig(&$item, $family, $key, $value, $sharing = false);
*
* $item - item array or item id. If passed an array the iconfig meta information is
* added to the item structure (which will need to be saved with item_store eventually).
* If passed an id, the DB is updated, but may not be federated and/or cloned.
* $family - namespace of meta variable
* $key - key of meta variable
* $value - value of meta variable
* $sharing - boolean (default false); if true the meta information is propagated with the item
* to other sites/channels, mostly useful when $item is an array and has not yet been stored/delivered.
* If the meta information is added after delivery and you wish it to be shared, it may be necessary to
* alter the item edited timestamp and invoke the delivery process on the updated item. The edited
* timestamp needs to be altered in order to trigger an item_store_update() at the receiving end.
*/
function set_iconfig(&$item, $family, $key, $value, $sharing = false) {
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
$is_item = false;
$idx = null;
if(is_array($item)) {
$is_item = true;
if((! array_key_exists('iconfig',$item)) || (! is_array($item['iconfig'])))
$item['iconfig'] = array();
elseif($item['iconfig']) {
for($x = 0; $x < count($item['iconfig']); $x ++) {
if($item['iconfig'][$x]['cat'] == $family && $item['iconfig'][$x]['k'] == $key) {
$idx = $x;
}
}
}
$entry = array('cat' => $family, 'k' => $key, 'v' => $value, 'sharing' => $sharing);
if(is_null($idx))
$item['iconfig'][] = $entry;
else
$item['iconfig'][$idx] = $entry;
return $value;
}
if(intval($item))
$iid = intval($item);
if(! $iid)
return false;
if(get_iconfig($item, $family, $key) === false) {
$r = q("insert into iconfig( iid, cat, k, v, sharing ) values ( %d, '%s', '%s', '%s', %d ) ",
intval($iid),
dbesc($family),
dbesc($key),
dbesc($dbvalue),
intval($sharing)
);
}
else {
$r = q("update iconfig set v = '%s', sharing = %d where iid = %d and cat = '%s' and k = '%s' ",
dbesc($dbvalue),
intval($sharing),
intval($iid),
dbesc($family),
dbesc($key)
);
}
if(! $r)
return false;
return $value;
}
function del_iconfig(&$item, $family, $key) {
$is_item = false;
$idx = null;
if(is_array($item)) {
$is_item = true;
if(is_array($item['iconfig'])) {
for($x = 0; $x < count($item['iconfig']); $x ++) {
if($item['iconfig'][$x]['cat'] == $family && $item['iconfig'][$x]['k'] == $key) {
unset($item['iconfig'][$x]);
}
}
}
return true;
}
if(intval($item))
$iid = intval($item);
if(! $iid)
return false;
return q("delete from iconfig where iid = %d and cat = '%s' and k = '%s' ",
intval($iid),
dbesc($family),
dbesc($key)
);
}

View file

@ -65,15 +65,22 @@ function get_best_language() {
if(isset($langs) && count($langs)) {
foreach ($langs as $lang => $v) {
$lang = strtolower($lang);
if(file_exists("view/$lang") && is_dir("view/$lang")) {
if(is_dir("view/$lang")) {
$preferred = $lang;
break;
}
}
}
if(isset($preferred))
return $preferred;
if(! isset($preferred))
$preferred = 'unset';
$arr = array('langs' => $langs, 'preferred' => $preferred);
call_hooks('get_best_language',$arr);
if($arr['preferred'] !== 'unset')
return $arr['preferred'];
$a = get_app();
return ((isset($a->config['system']['language'])) ? $a->config['system']['language'] : 'en');

View file

@ -542,11 +542,14 @@ function widget_settings_menu($arr) {
'selected' => ((argv(1) === 'oauth') ? 'active' : ''),
);
$tabs[] = array(
'label' => t('Export channel'),
'url' => $a->get_baseurl(true) . '/uexport',
'selected' => ''
);
// IF can go away when UNO export and import is fully functional
if(! UNO) {
$tabs[] = array(
'label' => t('Export channel'),
'url' => $a->get_baseurl(true) . '/uexport',
'selected' => ''
);
}
if($role === false || $role === 'custom') {
$tabs[] = array(

View file

@ -543,6 +543,21 @@ CREATE TABLE IF NOT EXISTS `hubloc` (
KEY `hubloc_error` (`hubloc_error`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `iconfig` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`iid` int(11) NOT NULL DEFAULT '0',
`cat` char(255) NOT NULL DEFAULT '',
`k` char(255) NOT NULL DEFAULT '',
`v` mediumtext NOT NULL,
`sharing` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `iid` (`iid`),
KEY `cat` (`cat`),
KEY `k` (`k`),
KEY `sharing` (`sharing`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `issue` (
`issue_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`issue_created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

View file

@ -538,6 +538,19 @@ create index "hubloc_primary" on hubloc ("hubloc_primary");
create index "hubloc_orphancheck" on hubloc ("hubloc_orphancheck");
create index "hubloc_error" on hubloc ("hubloc_error");
create index "hubloc_deleted" on hubloc ("hubloc_deleted");
CREATE TABLE "iconfig" (
"id" serial NOT NULL,
"iid" bigint NOT NULL DEFAULT '0',
"cat" text NOT NULL DEFAULT '',
"k" text NOT NULL DEFAULT '',
"v" text NOT NULL DEFAULT '',
"sharing" int NOT NULL DEFAULT '0',
PRIMARY_KEY("id")
);
create index "iconfig_iid" on iconfig ("iid");
create index "iconfig_cat" on iconfig ("cat");
create index "iconfig_k" on iconfig ("k");
create index "iconfig_sharing" on iconfig ("sharing");
CREATE TABLE "issue" (
"issue_id" serial NOT NULL,
"issue_created" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00',

View file

@ -1,6 +1,6 @@
<?php
define( 'UPDATE_VERSION' , 1161 );
define( 'UPDATE_VERSION' , 1163 );
/**
*
@ -1957,3 +1957,50 @@ function update_r1160() {
return UPDATE_FAILED;
}
function update_r1161() {
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
$r1 = q("CREATE TABLE \"iconfig\" (
\"id\" serial NOT NULL,
\"iid\" bigint NOT NULL DEFAULT '0',
\"cat\" text NOT NULL DEFAULT '',
\"k\" text NOT NULL DEFAULT '',
\"v\" text NOT NULL DEFAULT '',
PRIMARY_KEY(\"id\")
) ");
$r2 = q("create index \"iconfig_iid\" on iconfig (\"iid\") ");;
$r3 = q("create index \"iconfig_cat\" on iconfig (\"cat\") ");
$r4 = q("create index \"iconfig_k\" on iconfig (\"k\") ");
$r = $r1 && $r2 && $r3 && $r4;
}
else {
$r = q("CREATE TABLE IF NOT EXISTS `iconfig` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`iid` int(11) NOT NULL DEFAULT '0',
`cat` char(255) NOT NULL DEFAULT '',
`k` char(255) NOT NULL DEFAULT '',
`v` mediumtext NOT NULL,
PRIMARY KEY (`id`),
KEY `iid` (`iid`),
KEY `cat` (`cat`),
KEY `k` (`k`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ");
}
if($r)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}
function update_r1162() {
$r1 = q("alter table iconfig add sharing int not null default '0' ");
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES)
$r2 = q("create index \"iconfig_sharing\" on iconfig (\"sharing\") ");
else
$r2 = q("alter table iconfig add index ( sharing ) ");
if($r1 && $r2)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
}

View file

@ -7,7 +7,7 @@
*/
require_once('include/queue_fn.php');
require_once('include/account.php');
/**
* @param App &$a
@ -861,13 +861,13 @@ function admin_page_users_post($a) {
// registration approved button was submitted
if (x($_POST, 'page_users_approve')) {
foreach ($pending as $hash) {
user_allow($hash);
account_allow($hash);
}
}
// registration deny button was submitted
if (x($_POST, 'page_users_deny')) {
foreach ($pending as $hash) {
user_deny($hash);
account_deny($hash);
}
}

View file

@ -25,7 +25,7 @@ function connedit_init(&$a) {
return;
if((argc() >= 2) && intval(argv(1))) {
$r = q("SELECT abook.*, xchan.*
$r = q("SELECT abook.*, xchan.*
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel = %d and abook_id = %d LIMIT 1",
intval(local_channel()),
@ -58,14 +58,14 @@ function connedit_post(&$a) {
$channel = $a->get_channel();
// TODO if configured for hassle-free permissions, we'll post the form with ajax as soon as the
// connection enable is toggled to a special autopost url and set permissions immediately, leaving
// the other form elements alone pending a manual submit of the form. The downside is that there
// connection enable is toggled to a special autopost url and set permissions immediately, leaving
// the other form elements alone pending a manual submit of the form. The downside is that there
// will be a window of opportunity when the permissions have been set but before you've had a chance
// to review and possibly restrict them. The upside is we won't have to warn you that your connection
// can't do anything until you save the bloody form.
// can't do anything until you save the bloody form.
$autopost = (((argc() > 2) && (argv(2) === 'auto')) ? true : false);
$orig_record = q("SELECT * FROM abook WHERE abook_id = %d AND abook_channel = %d LIMIT 1",
intval($contact_id),
intval(local_channel())
@ -145,7 +145,7 @@ function connedit_post(&$a) {
if($z) {
$record = $z[0]['xlink_id'];
$w = q("update xlink set xlink_rating = '%d', xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s'
$w = q("update xlink set xlink_rating = '%d', xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s'
where xlink_id = %d",
intval($rating),
dbesc($rating_text),
@ -172,7 +172,7 @@ function connedit_post(&$a) {
}
if($record) {
proc_run('php','include/ratenotif.php','rating',$record);
}
}
}
if(($_REQUEST['pending']) && intval($orig_record[0]['abook_pending'])) {
@ -181,7 +181,7 @@ function connedit_post(&$a) {
// @fixme it won't be common, but when you accept a new connection request
// the permissions will now be that of your permissions role and ignore
// any you may have set manually on the form. We'll probably see a bug if somebody
// tries to set the permissions *and* approve the connection in the same
// tries to set the permissions *and* approve the connection in the same
// request. The workaround is to approve the connection, then go back and
// adjust permissions as desired.
@ -210,7 +210,7 @@ function connedit_post(&$a) {
intval(local_channel())
);
if($orig_record[0]['abook_profile'] != $profile_id) {
if($orig_record[0]['abook_profile'] != $profile_id) {
//Update profile photo permissions
logger('A new profile was assigned - updating profile photos');
@ -224,7 +224,7 @@ function connedit_post(&$a) {
else
notice( t('Failed to update connection record.') . EOL);
if($a->poi && $a->poi['abook_my_perms'] != $abook_my_perms
if($a->poi && $a->poi['abook_my_perms'] != $abook_my_perms
&& (! intval($a->poi['abook_self']))) {
proc_run('php', 'include/notifier.php', (($new_friend) ? 'permission_create' : 'permission_update'), $contact_id);
}
@ -238,8 +238,8 @@ function connedit_post(&$a) {
group_add_member(local_channel(),'',$a->poi['abook_xchan'],$g['id']);
}
// Check if settings permit ("post new friend activity" is allowed, and
// friends in general or this friend in particular aren't hidden)
// Check if settings permit ("post new friend activity" is allowed, and
// friends in general or this friend in particular aren't hidden)
// and send out a new friend activity
$pr = q("select * from profile where uid = %d and is_default = 1 and hide_friends = 0",
@ -285,7 +285,7 @@ function connedit_post(&$a) {
// Refresh the structure in memory with the new data
$r = q("SELECT abook.*, xchan.*
$r = q("SELECT abook.*, xchan.*
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel = %d and abook_id = %d LIMIT 1",
intval(local_channel()),
@ -300,7 +300,7 @@ function connedit_post(&$a) {
call_hooks('accept_follow', $arr);
}
if(! is_null($autoperms))
if(! is_null($autoperms))
set_pconfig(local_channel(),'system','autoperms',(($autoperms) ? $abook_my_perms : 0));
connedit_clone($a);
@ -322,7 +322,7 @@ function connedit_clone(&$a) {
if(! $a->poi)
return;
$r = q("SELECT abook.*, xchan.*
$r = q("SELECT abook.*, xchan.*
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel = %d and abook_id = %d LIMIT 1",
intval(local_channel()),
@ -365,6 +365,8 @@ function connedit_content(&$a) {
$my_perms = $x['perms_accept'];
}
$yes_no = array(t('No'),t('Yes'));
if($my_perms) {
$o .= "<script>function connectDefaultShare() {
\$('.abook-edit-me').each(function() {
@ -398,7 +400,7 @@ function connedit_content(&$a) {
notice( t('Could not access address book record.') . EOL);
goaway($a->get_baseurl(true) . '/connections');
}
if($cmd === 'update') {
// pull feed and consume it, which should subscribe to the hub.
proc_run('php',"include/poller.php","$contact_id");
@ -408,7 +410,7 @@ function connedit_content(&$a) {
if($cmd === 'refresh') {
if($orig_record[0]['xchan_network'] === 'zot') {
if(! zot_refresh($orig_record[0],get_app()->get_channel()))
if(! zot_refresh($orig_record[0],get_app()->get_channel()))
notice( t('Refresh failed - channel is currently unavailable.') );
}
else {
@ -475,13 +477,13 @@ function connedit_content(&$a) {
require_once('include/Contact.php');
// FIXME
// We need to send either a purge or a refresh packet to the other side (the channel being unfriended).
// We need to send either a purge or a refresh packet to the other side (the channel being unfriended).
// The issue is that the abook DB record _may_ get destroyed when we call contact_remove. As the notifier runs
// in the background there could be a race condition preventing this packet from being sent in all cases.
// PLACEHOLDER
contact_remove(local_channel(), $orig_record[0]['abook_id']);
build_sync_packet(0 /* use the current local_channel */,
build_sync_packet(0 /* use the current local_channel */,
array('abook' => array(array(
'abook_xchan' => $orig_record[0]['abook_xchan'],
'entry_deleted' => true))
@ -505,28 +507,28 @@ function connedit_content(&$a) {
'view' => array(
'label' => t('View Profile'),
'url' => chanlink_cid($contact['abook_id']),
'url' => chanlink_cid($contact['abook_id']),
'sel' => '',
'title' => sprintf( t('View %s\'s profile'), $contact['xchan_name']),
),
'refresh' => array(
'label' => t('Refresh Permissions'),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/refresh',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/refresh',
'sel' => '',
'title' => t('Fetch updated permissions'),
),
'recent' => array(
'label' => t('Recent Activity'),
'url' => $a->get_baseurl(true) . '/network/?f=&cid=' . $contact['abook_id'],
'url' => $a->get_baseurl(true) . '/network/?f=&cid=' . $contact['abook_id'],
'sel' => '',
'title' => t('View recent posts and comments'),
),
'block' => array(
'label' => (intval($contact['abook_blocked']) ? t('Unblock') : t('Block')),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/block',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/block',
'sel' => (intval($contact['abook_blocked']) ? 'active' : ''),
'title' => t('Block (or Unblock) all communications with this connection'),
'info' => (intval($contact['abook_blocked']) ? t('This connection is blocked!') : ''),
@ -534,7 +536,7 @@ function connedit_content(&$a) {
'ignore' => array(
'label' => (intval($contact['abook_ignored']) ? t('Unignore') : t('Ignore')),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/ignore',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/ignore',
'sel' => (intval($contact['abook_ignored']) ? 'active' : ''),
'title' => t('Ignore (or Unignore) all inbound communications from this connection'),
'info' => (intval($contact['abook_ignored']) ? t('This connection is ignored!') : ''),
@ -542,7 +544,7 @@ function connedit_content(&$a) {
'archive' => array(
'label' => (intval($contact['abook_archived']) ? t('Unarchive') : t('Archive')),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/archive',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/archive',
'sel' => (intval($contact['abook_archived']) ? 'active' : ''),
'title' => t('Archive (or Unarchive) this connection - mark channel dead but keep content'),
'info' => (intval($contact['abook_archived']) ? t('This connection is archived!') : ''),
@ -550,7 +552,7 @@ function connedit_content(&$a) {
'hide' => array(
'label' => (intval($contact['abook_hidden']) ? t('Unhide') : t('Hide')),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/hide',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/hide',
'sel' => (intval($contact['abook_hidden']) ? 'active' : ''),
'title' => t('Hide or Unhide this connection from your other connections'),
'info' => (intval($contact['abook_hidden']) ? t('This connection is hidden!') : ''),
@ -558,7 +560,7 @@ function connedit_content(&$a) {
'delete' => array(
'label' => t('Delete'),
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/drop',
'url' => $a->get_baseurl(true) . '/connedit/' . $contact['abook_id'] . '/drop',
'sel' => '',
'title' => t('Delete this connection'),
),
@ -639,7 +641,7 @@ function connedit_content(&$a) {
$channel = $a->get_channel();
$global_perms = get_perms();
$existing = get_all_perms(local_channel(),$contact['abook_xchan']);
$existing = get_all_perms(local_channel(),$contact['abook_xchan']);
$unapproved = array('pending', t('Approve this connection'), '', t('Accept connection to allow communication'), array(t('No'),('Yes')));
@ -668,7 +670,7 @@ function connedit_content(&$a) {
$locstr = '';
$locs = q("select hubloc_addr as location from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s'
$locs = q("select hubloc_addr as location from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s'
and hubloc_deleted = 0 and site_dead = 0",
dbesc($contact['xchan_hash'])
);
@ -690,7 +692,7 @@ function connedit_content(&$a) {
$o .= replace_macros($tpl,array(
'$header' => (($self) ? t('Connection Default Permissions') : sprintf( t('Connection: %s'),$contact['xchan_name'])),
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), 'Connection requests will be approved without your interaction', array(t('No'),('Yes'))),
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no),
'$addr' => $contact['xchan_addr'],
'$addr_text' => t('This connection\'s primary address is'),
'$loc_text' => t('Available locations:'),
@ -705,8 +707,8 @@ function connedit_content(&$a) {
'$lbl_rating_txt' => t('Optionally explain your rating'),
'$connfilter' => feature_enabled(local_channel(),'connfilter'),
'$connfilter_label' => t('Custom Filter'),
'$incl' => array('abook_incl',t('Only import posts with this text'), $contact['abook_incl'],t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
'$excl' => array('abook_excl',t('Do not import posts with this text'), $contact['abook_excl'],t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
'$incl' => array('abook_incl',t('Only import posts with this text'), $contact['abook_incl'],t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
'$excl' => array('abook_excl',t('Do not import posts with this text'), $contact['abook_excl'],t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
'$rating_text' => array('rating_text', t('Optionally explain your rating'),$rating_text,''),
'$rating_info' => t('This information is public!'),
'$rating' => $rating,

View file

@ -233,6 +233,8 @@ function item_post(&$a) {
$post_id = $i[0]['iid'];
}
$iconfig = null;
if($post_id) {
$i = q("SELECT * FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
intval($profile_uid),
@ -241,6 +243,9 @@ function item_post(&$a) {
if(! count($i))
killme();
$orig_post = $i[0];
$iconfig = q("select * from iconfig where iid = %d",
intval($post_id)
);
}
@ -792,6 +797,9 @@ function item_post(&$a) {
$datarray['plink'] = $plink;
$datarray['route'] = $route;
if($iconfig)
$datarray['iconfig'] = $iconfig;
// preview mode - prepare the body for display and send it via json
if($preview) {
@ -808,8 +816,6 @@ function item_post(&$a) {
if($orig_post)
$datarray['edit'] = true;
if(feature_enabled($profile_uid,'suppress_duplicates') && (! $orig_post)) {
$z = q("select created from item where uid = %d and body = '%s'",

View file

@ -130,7 +130,7 @@ function new_channel_content(&$a) {
'$title' => t('Add a Channel'),
'$desc' => t('A channel is your own collection of related web pages. A channel can be used to hold social network profiles, blogs, conversation groups and forums, celebrity pages, and much more. You may create as many channels as your service provider allows.'),
'$label_name' => t('Channel Name'),
'$label_name' => t('Name'),
'$help_name' => t('Examples: "Bob Jameson", "Lisa and her Horses", "Soccer", "Aviation Group" '),
'$label_nick' => t('Choose a short nickname'),
'$nick_hub' => '@' . str_replace(array('http://','https://','/'), '', get_config('system','baseurl')),

View file

@ -26,6 +26,7 @@ function pdledit_content(&$a) {
if(argc() > 1)
$module = 'mod_' . argv(1) . '.pdl';
else {
$o .= '<div class="generic-content-wrapper-styled">';
$o .= '<h1>' . t('Edit System Page Description') . '</h1>';
$files = glob('mod/*');
if($files) {
@ -38,6 +39,8 @@ function pdledit_content(&$a) {
}
}
$o .= '</div>';
// list module pdl files
return $o;
}

View file

@ -274,58 +274,6 @@ function profile_photo_post(&$a) {
}
function send_profile_photo_activity($channel,$photo,$profile) {
// for now only create activities for the default profile
if(! intval($profile['is_default']))
return;
$arr = array();
$arr['item_thread_top'] = 1;
$arr['item_origin'] = 1;
$arr['item_wall'] = 1;
$arr['obj_type'] = ACTIVITY_OBJ_PHOTO;
$arr['verb'] = ACTIVITY_UPDATE;
$arr['object'] = json_encode(array(
'type' => $arr['obj_type'],
'id' => z_root() . '/photo/profile/l/' . $channel['channel_id'],
'link' => array('rel' => 'photo', 'type' => $photo['type'], 'href' => z_root() . '/photo/profile/l/' . $channel['channel_id'])
));
if(stripos($profile['gender'],t('female')) !== false)
$t = t('%1$s updated her %2$s');
elseif(stripos($profile['gender'],t('male')) !== false)
$t = t('%1$s updated his %2$s');
else
$t = t('%1$s updated their %2$s');
$ptext = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo['resource_id'] . ']' . t('profile photo') . '[/zrl]';
$ltext = '[zrl=' . z_root() . '/profile/' . $channel['channel_address'] . ']' . '[zmg=150x150]' . z_root() . '/photo/' . $photo['resource_id'] . '-4[/zmg][/zrl]';
$arr['body'] = sprintf($t,$channel['channel_name'],$ptext) . "\n\n" . $ltext;
$acl = new AccessList($channel);
$x = $acl->get();
$arr['allow_cid'] = $x['allow_cid'];
$arr['allow_gid'] = $x['allow_gid'];
$arr['deny_cid'] = $x['deny_cid'];
$arr['deny_gid'] = $x['deny_gid'];
$arr['uid'] = $channel['channel_id'];
$arr['aid'] = $channel['channel_account_id'];
$arr['owner_xchan'] = $channel['channel_hash'];
$arr['author_xchan'] = $channel['channel_hash'];
post_activity_item($arr);
}
/* @brief Generate content of profile-photo view
*
@ -452,6 +400,8 @@ function profile_photo_content(&$a) {
'$title' => t('Upload Profile Photo'),
'$submit' => t('Upload'),
'$profiles' => $profiles,
'$single' => ((count($profiles) == 1) ? true : false),
'$profile0' => $profiles[0],
'$form_security_token' => get_form_security_token("profile_photo"),
// FIXME - yuk
'$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . $a->get_baseurl() . '">' . t('skip this step') . '</a>' : '<a href="'. $a->get_baseurl() . '/photos/' . $a->channel['channel_address'] . '">' . t('select a photo from your photo albums') . '</a>')

View file

@ -145,6 +145,7 @@ function register_post(&$a) {
authenticate_success($result['account'],true,false,true);
$new_channel = false;
$next_page = 'new_channel';
if(get_config('system','auto_channel_create') || UNO) {
$new_channel = auto_channel_create($result['account']['account_id']);
@ -156,10 +157,10 @@ function register_post(&$a) {
else
$new_channel = false;
}
if(! $new_channel) {
if(! strlen($next_page = get_config('system','workflow_register_next')))
$next_page = 'new_channel';
$x = get_config('system','workflow_register_next');
if($x) {
$next_page = $x;
$_SESSION['workflow'] = true;
}
@ -243,9 +244,10 @@ function register_content(&$a) {
'$label_invite' => t('Please enter your invitation code'),
'$invite_code' => $invite_code,
'$auto_create' => $auto_create,
'$label_name' => t('Channel Name'),
'$label_name' => t('Name'),
'$help_name' => t('Enter your name'),
'$label_nick' => t('Choose a short nickname'),
'$nick_hub' => '@' . str_replace(array('http://','https://','/'), '', get_config('system','baseurl')),
'$nick_desc' => t('Your nickname will be used to create an easily remembered channel address (like an email address) which you can share with others.'),
'$name' => $name,
'$help_role' => t('Please choose a channel type (such as social networking or community forum) and privacy requirements so we can select the best permissions for you'),

View file

@ -155,6 +155,7 @@ function settings_post(&$a) {
$theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : $a->channel['channel_theme']);
$mobile_theme = ((x($_POST,'mobile_theme')) ? notags(trim($_POST['mobile_theme'])) : '');
$preload_images = ((x($_POST,'preload_images')) ? intval($_POST['preload_images']) : 0);
$user_scalable = ((x($_POST,'user_scalable')) ? intval($_POST['user_scalable']) : 0);
$nosmile = ((x($_POST,'nosmile')) ? intval($_POST['nosmile']) : 0);
$title_tosource = ((x($_POST,'title_tosource')) ? intval($_POST['title_tosource']) : 0);
@ -184,6 +185,7 @@ function settings_post(&$a) {
set_pconfig(local_channel(),'system','mobile_theme',$mobile_theme);
}
set_pconfig(local_channel(),'system','preload_images',$preload_images);
set_pconfig(local_channel(),'system','user_scalable',$user_scalable);
set_pconfig(local_channel(),'system','update_interval', $browser_update);
set_pconfig(local_channel(),'system','itemspage', $itemspage);
@ -803,6 +805,9 @@ function settings_content(&$a) {
$theme_selected = (!x($_SESSION,'theme')? $default_theme : $_SESSION['theme']);
$mobile_theme_selected = (!x($_SESSION,'mobile_theme')? $default_mobile_theme : $_SESSION['mobile_theme']);
$preload_images = get_pconfig(local_channel(),'system','preload_images');
$preload_images = (($preload_images===false)? '0': $preload_images); // default if not set: 0
$user_scalable = get_pconfig(local_channel(),'system','user_scalable');
$user_scalable = (($user_scalable===false)? '1': $user_scalable); // default if not set: 1
@ -836,7 +841,8 @@ function settings_content(&$a) {
'$uid' => local_channel(),
'$theme' => (($themes) ? array('theme', t('Display Theme:'), $theme_selected, '', $themes, 'preview') : false),
'$mobile_theme' => (($mobile_themes) ? array('mobile_theme', t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, '') : false),
'$mobile_theme' => (($mobile_themes) ? array('mobile_theme', t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, '') : false),
'$preload_images' => array('preload_images', t("Preload images before rendering the page"), $preload_images, t("The subjective page load time will be longer but the page will be ready when displayed"), $yes_no),
'$user_scalable' => array('user_scalable', t("Enable user zoom on mobile devices"), $user_scalable, '', $yes_no),
'$ajaxint' => array('browser_update', t("Update browser every xx seconds"), $browser_update, t('Minimum of 10 seconds, no maximum')),
'$itemspage' => array('itemspage', t("Maximum number of conversations to load at any time:"), $itemspage, t('Maximum of 100 items')),

View file

@ -1 +1 @@
2016-02-12.1307H
2016-02-17.1312H

View file

@ -79,3 +79,8 @@ h2 {
clear: both;
margin-bottom: 20px;
}
.descriptive-paragraph {
margin-left: 20px;
margin-bottom: 25px;
}

File diff suppressed because it is too large Load diff

View file

@ -14,73 +14,6 @@ $a->strings["User '%s' deleted"] = "El usuario '%s' ha sido eliminado";
$a->strings["No username found in import file."] = "No se ha encontrado el nombre de usuario en el fichero importado.";
$a->strings["Unable to create a unique channel address. Import failed."] = "No se ha podido crear una dirección de canal única. Ha fallado la importación.";
$a->strings["Import completed."] = "Importación completada.";
$a->strings["Private Message"] = "Mensaje Privado";
$a->strings["Edit"] = "Editar";
$a->strings["Delete"] = "Eliminar";
$a->strings["Select"] = "Seleccionar";
$a->strings["Save to Folder"] = "Guardar en carpeta";
$a->strings["I will attend"] = "Participaré";
$a->strings["I will not attend"] = "No participaré";
$a->strings["I might attend"] = "Quizá participe";
$a->strings["I agree"] = "Estoy de acuerdo";
$a->strings["I disagree"] = "No estoy de acuerdo";
$a->strings["I abstain"] = "Me abstengo";
$a->strings["View all"] = "Ver todo";
$a->strings["__ctx:noun__ Like"] = array(
0 => "Me gusta",
1 => "Me gusta",
);
$a->strings["__ctx:noun__ Dislike"] = array(
0 => "No me gusta",
1 => "No me gusta",
);
$a->strings["Add Star"] = "Destacar añadiendo una estrella";
$a->strings["Remove Star"] = "Eliminar estrella";
$a->strings["Toggle Star Status"] = "Activar o desactivar el estado de entrada preferida";
$a->strings["starred"] = "preferidas";
$a->strings["Message signature validated"] = "Firma de mensaje validada";
$a->strings["Message signature incorrect"] = "Firma de mensaje incorrecta";
$a->strings["Add Tag"] = "Añadir etiqueta";
$a->strings["I like this (toggle)"] = "Me gusta (cambiar)";
$a->strings["like"] = "me gusta";
$a->strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
$a->strings["dislike"] = "no me gusta";
$a->strings["Share This"] = "Compartir esto";
$a->strings["share"] = "compartir";
$a->strings["Delivery Report"] = "Informe de transmisión";
$a->strings["%d comment"] = array(
0 => "%d comentario",
1 => "%d comentarios",
);
$a->strings["View %s's profile - %s"] = "Ver el perfil de %s - %s";
$a->strings["to"] = "a";
$a->strings["via"] = "mediante";
$a->strings["Wall-to-Wall"] = "De página del perfil a página del perfil (de \"muro\" a \"muro\")";
$a->strings["via Wall-To-Wall:"] = "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")";
$a->strings["from %s"] = "desde %s";
$a->strings["last edited: %s"] = "último cambio: %s";
$a->strings["Expires: %s"] = "Caduca: %s";
$a->strings["Save Bookmarks"] = "Guardar en Marcadores";
$a->strings["Add to Calendar"] = "Añadir al calendario";
$a->strings["Mark all seen"] = "Marcar todo como visto";
$a->strings["__ctx:noun__ Likes"] = "Me gusta";
$a->strings["__ctx:noun__ Dislikes"] = "No me gusta";
$a->strings["Close"] = "Cerrar";
$a->strings["Please wait"] = "Espere por favor";
$a->strings["[+] show all"] = "[+] mostrar todo:";
$a->strings["This is you"] = "Este es usted";
$a->strings["Comment"] = "Comentar";
$a->strings["Submit"] = "Enviar";
$a->strings["Bold"] = "Negrita";
$a->strings["Italic"] = "Itálico ";
$a->strings["Underline"] = "Subrayar";
$a->strings["Quote"] = "Citar";
$a->strings["Code"] = "Código";
$a->strings["Image"] = "Imagen";
$a->strings["Insert Link"] = "Insertar enlace";
$a->strings["Video"] = "Vídeo";
$a->strings["Preview"] = "Previsualizar";
$a->strings["Encrypt text"] = "Cifrar texto";
$a->strings["parent"] = "padre";
$a->strings["Collection"] = "Colección";
$a->strings["Principal"] = "Principal";
@ -98,6 +31,8 @@ $a->strings["Name"] = "Nombre";
$a->strings["Type"] = "Tipo";
$a->strings["Size"] = "Tamaño";
$a->strings["Last Modified"] = "Última modificación";
$a->strings["Edit"] = "Editar";
$a->strings["Delete"] = "Eliminar";
$a->strings["You are using %1\$s of your available file storage."] = "Está usando %1\$s de su espacio disponible para ficheros.";
$a->strings["You are using %1\$s of %2\$s available file storage. (%3\$s&#37;)"] = "Está usando %1\$s de %2\$s que tiene a su disposición para ficheros. (%3\$s&#37;)";
$a->strings["WARNING:"] = "ATENCIÓN:";
@ -126,13 +61,14 @@ $a->strings["Show"] = "Mostrar";
$a->strings["Don't show"] = "No mostrar";
$a->strings["Other networks and post services"] = "Otras redes y servicios de publicación";
$a->strings["Permissions"] = "Permisos";
$a->strings["Close"] = "Cerrar";
$a->strings[" and "] = "y";
$a->strings["public profile"] = "perfil público";
$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s ha cambiado %2\$s a &ldquo;%3\$s&rdquo;";
$a->strings["Visit %1\$s's %2\$s"] = "Visitar %2\$s de %1\$s";
$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s ha actualizado %2\$s cambiando %3\$s.";
$a->strings["Public Timeline"] = "Cronología pública";
$a->strings["Site Admin"] = "Adminstrador del sitio";
$a->strings["Site Admin"] = "Administrador del sitio";
$a->strings["Bookmarks"] = "Marcadores";
$a->strings["Address Book"] = "Libreta de direcciones";
$a->strings["Login"] = "Iniciar sesión";
@ -248,10 +184,18 @@ $a->strings["__ctx:title__ Abstain"] = "Abstención";
$a->strings["__ctx:title__ Attending"] = "Participaré";
$a->strings["__ctx:title__ Not attending"] = "No participaré";
$a->strings["__ctx:title__ Might attend"] = "Quizá participe";
$a->strings["Select"] = "Seleccionar";
$a->strings["Private Message"] = "Mensaje Privado";
$a->strings["Message signature validated"] = "Firma de mensaje validada";
$a->strings["Message signature incorrect"] = "Firma de mensaje incorrecta";
$a->strings["View %s's profile @ %s"] = "Ver el perfil @ %s de %s";
$a->strings["Categories:"] = "Categorías:";
$a->strings["Filed under:"] = "Archivado bajo:";
$a->strings["from %s"] = "desde %s";
$a->strings["last edited: %s"] = "último cambio: %s";
$a->strings["Expires: %s"] = "Caduca: %s";
$a->strings["View in context"] = "Mostrar en su contexto";
$a->strings["Please wait"] = "Espere por favor";
$a->strings["remove"] = "eliminar";
$a->strings["Loading..."] = "Cargando...";
$a->strings["Delete Selected Items"] = "Eliminar elementos seleccionados";
@ -288,9 +232,15 @@ $a->strings["Tag term:"] = "Término de la etiqueta:";
$a->strings["Save to Folder:"] = "Guardar en carpeta:";
$a->strings["Where are you right now?"] = "¿Donde está ahora?";
$a->strings["Expires YYYY-MM-DD HH:MM"] = "Caduca YYYY-MM-DD HH:MM";
$a->strings["Preview"] = "Previsualizar";
$a->strings["Share"] = "Compartir";
$a->strings["Page link name"] = "Nombre de enlace de página";
$a->strings["Post as"] = "Publicar como";
$a->strings["Bold"] = "Negrita";
$a->strings["Italic"] = "Itálico ";
$a->strings["Underline"] = "Subrayar";
$a->strings["Quote"] = "Citar";
$a->strings["Code"] = "Código";
$a->strings["Upload photo"] = "Subir foto";
$a->strings["upload photo"] = "subir foto";
$a->strings["Attach file"] = "Adjuntar fichero";
@ -314,6 +264,7 @@ $a->strings["Public post"] = "Entrada pública";
$a->strings["Example: bob@example.com, mary@example.com"] = "Ejemplo: roberto@ejemplo.com, maría@ejemplo.com";
$a->strings["Set expiration date"] = "Configurar fecha de caducidad";
$a->strings["Set publish date"] = "Establecer la fecha de publicación";
$a->strings["Encrypt text"] = "Cifrar texto";
$a->strings["OK"] = "OK";
$a->strings["Cancel"] = "Cancelar";
$a->strings["Discover"] = "Descubrir";
@ -339,6 +290,15 @@ $a->strings["Files and Storage"] = "Ficheros y repositorio";
$a->strings["Chatrooms"] = "Salas de chat";
$a->strings["Saved Bookmarks"] = "Marcadores guardados";
$a->strings["Manage Webpages"] = "Administrar páginas web";
$a->strings["View all"] = "Ver todo";
$a->strings["__ctx:noun__ Like"] = array(
0 => "Me gusta",
1 => "Me gusta",
);
$a->strings["__ctx:noun__ Dislike"] = array(
0 => "No me gusta",
1 => "No me gusta",
);
$a->strings["__ctx:noun__ Attending"] = array(
0 => "Participaré",
1 => "Participaré",
@ -419,6 +379,8 @@ $a->strings["Cannot create a duplicate channel identifier on this system. Import
$a->strings["Channel clone failed. Import failed."] = "La clonación del canal no ha salido bien. La importación ha fallado.";
$a->strings["Cloned channel not found. Import failed."] = "No se ha podido importar el canal porque el canal clonado no se ha encontrado.";
$a->strings["Delete this item?"] = "¿Borrar este elemento?";
$a->strings["Comment"] = "Comentar";
$a->strings["[+] show all"] = "[+] mostrar todo:";
$a->strings["[-] show less"] = "[-] mostrar menos";
$a->strings["[+] expand"] = "[+] expandir";
$a->strings["[-] collapse"] = "[-] contraer";
@ -433,6 +395,7 @@ $a->strings["Nothing new here"] = "Nada nuevo por aquí";
$a->strings["Rate This Channel (this is public)"] = "Valorar este canal (esto es público)";
$a->strings["Rating"] = "Valoración";
$a->strings["Describe (optional)"] = "Describir (opcional)";
$a->strings["Submit"] = "Enviar";
$a->strings["Please enter a link URL"] = "Por favor, introduzca una dirección de enlace";
$a->strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Cambios no guardados. ¿Está seguro de que desea abandonar la página?";
$a->strings["Location"] = "Ubicación";
@ -638,7 +601,9 @@ $a->strings["have"] = "tener";
$a->strings["has"] = "tiene";
$a->strings["want"] = "quiero";
$a->strings["wants"] = "quiere";
$a->strings["like"] = "me gusta";
$a->strings["likes"] = "gusta de";
$a->strings["dislike"] = "no me gusta";
$a->strings["dislikes"] = "no gusta de";
$a->strings["Invalid data packet"] = "Paquete de datos no válido";
$a->strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal";
@ -998,6 +963,41 @@ $a->strings["Plugin Features"] = "Extensiones";
$a->strings["User registrations waiting for confirmation"] = "Registros de usuarios pendientes de confirmación";
$a->strings["View Photo"] = "Ver foto";
$a->strings["Edit Album"] = "Editar álbum";
$a->strings["Save to Folder"] = "Guardar en carpeta";
$a->strings["I will attend"] = "Participaré";
$a->strings["I will not attend"] = "No participaré";
$a->strings["I might attend"] = "Quizá participe";
$a->strings["I agree"] = "Estoy de acuerdo";
$a->strings["I disagree"] = "No estoy de acuerdo";
$a->strings["I abstain"] = "Me abstengo";
$a->strings["Add Star"] = "Destacar añadiendo una estrella";
$a->strings["Remove Star"] = "Eliminar estrella";
$a->strings["Toggle Star Status"] = "Activar o desactivar el estado de entrada preferida";
$a->strings["starred"] = "preferidas";
$a->strings["Add Tag"] = "Añadir etiqueta";
$a->strings["I like this (toggle)"] = "Me gusta (cambiar)";
$a->strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
$a->strings["Share This"] = "Compartir esto";
$a->strings["share"] = "compartir";
$a->strings["Delivery Report"] = "Informe de transmisión";
$a->strings["%d comment"] = array(
0 => "%d comentario",
1 => "%d comentarios",
);
$a->strings["View %s's profile - %s"] = "Ver el perfil de %s - %s";
$a->strings["to"] = "a";
$a->strings["via"] = "mediante";
$a->strings["Wall-to-Wall"] = "De página del perfil a página del perfil (de \"muro\" a \"muro\")";
$a->strings["via Wall-To-Wall:"] = "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")";
$a->strings["Save Bookmarks"] = "Guardar en Marcadores";
$a->strings["Add to Calendar"] = "Añadir al calendario";
$a->strings["Mark all seen"] = "Marcar todo como visto";
$a->strings["__ctx:noun__ Likes"] = "Me gusta";
$a->strings["__ctx:noun__ Dislikes"] = "No me gusta";
$a->strings["This is you"] = "Este es usted";
$a->strings["Image"] = "Imagen";
$a->strings["Insert Link"] = "Insertar enlace";
$a->strings["Video"] = "Vídeo";
$a->strings["Not Found"] = "No encontrado";
$a->strings["Page not found."] = "Página no encontrada.";
$a->strings["Some blurb about what to do when you're new here"] = "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí";
@ -1289,6 +1289,7 @@ $a->strings["Nothing to import."] = "No hay nada para importar.";
$a->strings["Unable to download data from old server"] = "No se han podido descargar datos de su antiguo servidor";
$a->strings["Imported file is empty."] = "El fichero importado está vacío.";
$a->strings["Warning: Database versions differ by %1\$d updates."] = "Atención: Las versiones de la base de datos difieren en %1\$d actualizaciones.";
$a->strings["Server platform is not compatible. Operation not permitted."] = "La plataforma del servidor no es compatible. Operación no permitida.";
$a->strings["No channel. Import failed."] = "No hay canal. La importación ha fallado";
$a->strings["You must be logged in to use this feature."] = "Debe estar registrado para poder usar esta funcionalidad.";
$a->strings["Import Channel"] = "Importar canal";
@ -1319,10 +1320,10 @@ $a->strings["Send invitations"] = "Enviar invitaciones";
$a->strings["Enter email addresses, one per line:"] = "Introduzca las direcciones de correo electrónico, una por línea:";
$a->strings["Your message:"] = "Su mensaje:";
$a->strings["Please join my community on \$Projectname."] = "Por favor, únase a mi comunidad en \$Projectname.";
$a->strings["You will need to supply this invitation code: "] = "Debe proporcionar este código de invitación:";
$a->strings["You will need to supply this invitation code:"] = "Tendrá que suministrar este código de invitación:";
$a->strings["1. Register at any \$Projectname location (they are all inter-connected)"] = "1. Regístrese en cualquier sitio de \$Projectname (están todos interconectados)";
$a->strings["2. Enter my \$Projectname network address into the site searchbar."] = "2. Introduzca mi dirección \$Projectname en la caja de búsqueda del sitio.";
$a->strings["or visit "] = "o visite ";
$a->strings["or visit"] = "o visitar";
$a->strings["3. Click [Connect]"] = "3. Pulse [conectar]";
$a->strings["Unable to locate original post."] = "No ha sido posible encontrar la entrada original.";
$a->strings["Empty post discarded."] = "La entrada vacía ha sido desechada.";
@ -1619,7 +1620,7 @@ $a->strings["for channel"] = "por canal";
$a->strings["on server"] = "en el servidor";
$a->strings["Server"] = "Servidor";
$a->strings["Block public"] = "Bloquear páginas públicas";
$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Intentar bloquear el acceso a este sitio da todas las páginas personales o públicas, a menos que estén autenticadas actualmente.";
$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado.";
$a->strings["Allow communications only from these sites"] = "Permitir la comunicación solo desde estos sitios";
$a->strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera";
$a->strings["Block communications from these sites"] = "Bloquear la comunicación desde estos sitios";
@ -1907,12 +1908,12 @@ $a->strings["Redirect"] = "Redirigir";
$a->strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera";
$a->strings["Icon url"] = "Dirección del icono";
$a->strings["Optional"] = "Opcional";
$a->strings["You can't edit this application."] = "No puede modificar esta aplicación.";
$a->strings["Application not found."] = "Aplicación no encontrada.";
$a->strings["Connected Apps"] = "Aplicaciones conectadas";
$a->strings["Client key starts with"] = "La \"client key\" empieza por";
$a->strings["No name"] = "Sin nombre";
$a->strings["Remove authorization"] = "Eliminar autorización";
$a->strings["No feature settings configured"] = "No se ha establecido la configuración de características";
$a->strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos";
$a->strings["Feature/Addon Settings"] = "Ajustes de los complementos";
$a->strings["Account Settings"] = "Configuración de la cuenta";
$a->strings["Enter New Password:"] = "Introduzca la nueva contraseña:";
@ -2052,6 +2053,8 @@ $a->strings["Website URL"] = "Dirección del sitio web";
$a->strings["Please use SSL (https) URL if available."] = "Por favor, use SSL (https) si está disponible.";
$a->strings["Please select a default timezone for your website"] = "Por favor, selecciones la zona horaria por defecto de su sitio web";
$a->strings["Site settings"] = "Ajustes del sitio";
$a->strings["Enable \$Projectname <strong>advanced</strong> features?"] = "¿Habilitar las funcionalidades <strong>avanzadas</strong> de \$Projectname ?";
$a->strings["Some advanced features, while useful - may be best suited for technically proficient audiences"] = "Algunas funcionalidades avanzadas, si bien bien son útiles, pueden ser más adecuadas para un público técnicamente competente";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web.";
$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron.";
$a->strings["PHP executable path"] = "Ruta del ejecutable PHP";

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

@ -617,8 +617,8 @@ function updateConvItems(mode,data) {
/* autocomplete @nicknames */
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
/*
var bimgs = $(".wall-item-body img").not(function() { return this.complete; });
var bimgs = ((preloadImages) ? false : $(".wall-item-body img").not(function() { return this.complete; }));
var bimgcount = bimgs.length;
if (bimgcount) {
@ -631,37 +631,49 @@ function updateConvItems(mode,data) {
} else {
collapseHeight();
}
*/
collapseHeight();
}
function collapseHeight() {
var origContentHeight = parseInt($("#region_2").height());
var cDiff = 0;
var i = 0;
var position = $(window).scrollTop();
$(".wall-item-content, .directory-collapse").each(function() {
var orgHeight = parseInt($(this).css('height'));
if(orgHeight > divmore_height) {
if(! $(this).hasClass('divmore')) {
var trigger = $(window).scrollTop() < $(this).offset().top ? true : false;
//var trigger = $(window).scrollTop() < $(this).offset().top ? true : false;
//console.log($(this).offset().top + divmore_height - $(window).scrollTop() + cDiff - ($(".divgrow-showmore").outerHeight() * i));
if(trigger) {
$(this).readmore({
speed: 0,
heightMargin: 50,
collapsedHeight: divmore_height,
moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>',
lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>',
beforeToggle: function(trigger, element, expanded) {
if(expanded) {
if((($(element).offset().top + divmore_height) - $(window).scrollTop()) < 65 ) {
$(window).scrollTop($(window).scrollTop() - (orgHeight - divmore_height));
}
// check if we will collapse some content above the visible content and compensate the diff later
if($(this).offset().top + divmore_height - $(window).scrollTop() + cDiff - ($(".divgrow-showmore").outerHeight() * i) < 65) {
//$(this).css('color', 'red');
//console.log($(this).offset().top + divmore_height + ' / ' + $(window).scrollTop());
diff = orgHeight - divmore_height;
cDiff = cDiff + diff;
i++;
}
//if(trigger) {
$(this).readmore({
speed: 0,
heightMargin: 50,
collapsedHeight: divmore_height,
moreLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowmore + '</a>',
lessLink: '<a href="#" class="divgrow-showmore">' + aStr.divgrowless + '</a>',
beforeToggle: function(trigger, element, expanded) {
if(expanded) {
if((($(element).offset().top + divmore_height) - $(window).scrollTop()) < 65 ) {
$(window).scrollTop($(window).scrollTop() - (orgHeight - divmore_height));
}
}
});
$(this).addClass('divmore');
}
}
});
$(this).addClass('divmore');
//}
}
}
});
@ -670,6 +682,12 @@ function collapseHeight() {
contentHeightDiff = origContentHeight - collapsedContentHeight;
console.log('collapseHeight() - contentHeightDiff: ' + contentHeightDiff + 'px');
if(i){
var sval = position - cDiff + ($(".divgrow-showmore").outerHeight() * i);
console.log('collapsed above viewport count: ' + i);
$(window).scrollTop(sval);
}
}
@ -721,39 +739,67 @@ function liveUpdate() {
$.get(update_url, function(data) {
var dready = new Date();
console.log('DATA ready in: ' + (dready - dstart)/1000 + ' seconds.');
console.log('LOADING images...');
$('.wall-item-body, .wall-photo-item',data).imagesLoaded( function() {
var iready = new Date();
console.log('IMAGES ready in: ' + (iready - dready)/1000 + ' seconds.');
if(update_mode === 'update' || preloadImages) {
console.log('LOADING images...');
page_load = false;
scroll_next = false;
updateConvItems(update_mode,data);
$("#page-spinner").spin(false);
$("#profile-jot-text-loading").spin(false);
$('.wall-item-body, .wall-photo-item',data).imagesLoaded( function() {
var iready = new Date();
console.log('IMAGES ready in: ' + (iready - dready)/1000 + ' seconds.');
if(update_mode === 'update') {
$(window).scrollTop($(window).scrollTop() + $("#region_2").height() - orgHeight + contentHeightDiff);
page_load = false;
scroll_next = false;
updateConvItems(update_mode,data);
$("#page-spinner").spin(false);
$("#profile-jot-text-loading").spin(false);
// adjust scroll position if new content was added above viewport
if(update_mode === 'update') {
$(window).scrollTop($(window).scrollTop() + $("#region_2").height() - orgHeight + contentHeightDiff);
}
in_progress = false;
// FIXME - the following lines were added so that almost
// immediately after we update the posts on the page, we
// re-check and update the notification counts.
// As it turns out this causes a bit of an inefficiency
// as we're pinging twice for every update, once before
// and once after. A btter way to do this is to rewrite
// NavUpdate and perhaps LiveUpdate so that we check for
// post updates first and only call the notification ping
// once.
updateCountsOnly = true;
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,10);
});
}
else {
page_load = false;
scroll_next = false;
updateConvItems(update_mode,data);
$("#page-spinner").spin(false);
$("#profile-jot-text-loading").spin(false);
in_progress = false;
in_progress = false;
// FIXME - the following lines were added so that almost
// immediately after we update the posts on the page, we
// re-check and update the notification counts.
// As it turns out this causes a bit of an inefficiency
// as we're pinging twice for every update, once before
// and once after. A btter way to do this is to rewrite
// NavUpdate and perhaps LiveUpdate so that we check for
// post updates first and only call the notification ping
// once.
// FIXME - the following lines were added so that almost
// immediately after we update the posts on the page, we
// re-check and update the notification counts.
// As it turns out this causes a bit of an inefficiency
// as we're pinging twice for every update, once before
// and once after. A btter way to do this is to rewrite
// NavUpdate and perhaps LiveUpdate so that we check for
// post updates first and only call the notification ping
// once.
updateCountsOnly = true;
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,10);
updateCountsOnly = true;
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,10);
});
}
});
}
@ -1231,21 +1277,8 @@ function zFormError(elm,x) {
$(window).scroll(function () {
if(typeof buildCmd == 'function') {
// This is a content page with items and/or conversations
$('#more').hide();
$('#no-more').hide();
if($(window).scrollTop() + $(window).height() > $(document).height() - 200) {
$('#more').css("top","400");
$('#more').show();
}
if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
// if($(window).scrollTop() > $(document).height() - ($(window).height() * 1.5 )) {
if($(window).scrollTop() + $(window).height() > $(document).height() - 300) {
if((pageHasMoreContent) && (! loadingPage)) {
$('#more').hide();
$('#no-more').hide();
next_page++;
scroll_next = true;
loadingPage = true;
@ -1255,18 +1288,8 @@ $(window).scroll(function () {
}
else {
// This is some other kind of page - perhaps a directory
if($(window).scrollTop() + $(window).height() > $(document).height() - 200) {
$('#more').css("top","400");
$('#more').show();
}
if($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
// if($(window).scrollTop() > ($(document).height() - $(window).height() * 1.5 )) {
if($(window).scrollTop() + $(window).height() > $(document).height() - 300) {
if((pageHasMoreContent) && (! loadingPage) && (! justifiedGalleryActive)) {
$('#more').hide();
$('#no-more').hide();
next_page++;
scroll_next = true;
loadingPage = true;

File diff suppressed because it is too large Load diff

View file

@ -14,73 +14,6 @@ $a->strings["User '%s' deleted"] = "Account '%s' verwijderd";
$a->strings["No username found in import file."] = "Geen gebruikersnaam in het importbestand gevonden.";
$a->strings["Unable to create a unique channel address. Import failed."] = "Niet in staat om een uniek kanaaladres aan te maken. Importeren is mislukt.";
$a->strings["Import completed."] = "Import voltooid.";
$a->strings["Private Message"] = "Niet voor iedereen zichtbaar";
$a->strings["Edit"] = "Bewerken";
$a->strings["Delete"] = "Verwijderen";
$a->strings["Select"] = "Kies";
$a->strings["Save to Folder"] = "In map opslaan";
$a->strings["I will attend"] = "Aanwezig";
$a->strings["I will not attend"] = "Niet aanwezig";
$a->strings["I might attend"] = "Mogelijk aanwezig";
$a->strings["I agree"] = "Eens";
$a->strings["I disagree"] = "Oneens";
$a->strings["I abstain"] = "Onthouding";
$a->strings["View all"] = "Toon alles";
$a->strings["__ctx:noun__ Like"] = array(
0 => "vindt dit leuk",
1 => "vinden dit leuk",
);
$a->strings["__ctx:noun__ Dislike"] = array(
0 => "vindt dit niet leuk",
1 => "vinden dit niet leuk",
);
$a->strings["Add Star"] = "Ster toevoegen";
$a->strings["Remove Star"] = "Ster verwijderen";
$a->strings["Toggle Star Status"] = "Ster toevoegen of verwijderen";
$a->strings["starred"] = "met ster";
$a->strings["Message signature validated"] = "Berichtkenmerk gevalideerd";
$a->strings["Message signature incorrect"] = "Berichtkenmerk onjuist";
$a->strings["Add Tag"] = "Tag toevoegen";
$a->strings["I like this (toggle)"] = "Vind ik leuk";
$a->strings["like"] = "vind dit leuk";
$a->strings["I don't like this (toggle)"] = "Vind ik niet leuk";
$a->strings["dislike"] = "vind dit niet leuk";
$a->strings["Share This"] = "Delen";
$a->strings["share"] = "delen";
$a->strings["Delivery Report"] = "Afleveringsrapport";
$a->strings["%d comment"] = array(
0 => "%d reactie",
1 => "%d reacties weergeven",
);
$a->strings["View %s's profile - %s"] = "Profiel van %s bekijken - %s";
$a->strings["to"] = "aan";
$a->strings["via"] = "via";
$a->strings["Wall-to-Wall"] = "Kanaal-naar-kanaal";
$a->strings["via Wall-To-Wall:"] = "via kanaal-naar-kanaal";
$a->strings["from %s"] = "van %s";
$a->strings["last edited: %s"] = "laatst bewerkt: %s";
$a->strings["Expires: %s"] = "Verloopt: %s";
$a->strings["Save Bookmarks"] = "Bladwijzers opslaan";
$a->strings["Add to Calendar"] = "Aan agenda toevoegen";
$a->strings["Mark all seen"] = "Markeer alles als bekeken";
$a->strings["__ctx:noun__ Likes"] = "vinden dit leuk";
$a->strings["__ctx:noun__ Dislikes"] = "vinden dit niet leuk";
$a->strings["Close"] = "Sluiten";
$a->strings["Please wait"] = "Even wachten";
$a->strings["[+] show all"] = "[+] alle";
$a->strings["This is you"] = "Dit ben jij";
$a->strings["Comment"] = "Reactie";
$a->strings["Submit"] = "Opslaan";
$a->strings["Bold"] = "Vet";
$a->strings["Italic"] = "Cursief";
$a->strings["Underline"] = "Onderstrepen";
$a->strings["Quote"] = "Citeren";
$a->strings["Code"] = "Broncode";
$a->strings["Image"] = "Afbeelding";
$a->strings["Insert Link"] = "Link invoegen";
$a->strings["Video"] = "Video";
$a->strings["Preview"] = "Voorvertoning";
$a->strings["Encrypt text"] = "Tekst versleutelen";
$a->strings["parent"] = "omhoog";
$a->strings["Collection"] = "map";
$a->strings["Principal"] = "principal";
@ -98,6 +31,8 @@ $a->strings["Name"] = "Naam";
$a->strings["Type"] = "Type";
$a->strings["Size"] = "Grootte";
$a->strings["Last Modified"] = "Laatst gewijzigd";
$a->strings["Edit"] = "Bewerken";
$a->strings["Delete"] = "Verwijderen";
$a->strings["You are using %1\$s of your available file storage."] = "Je gebruikt %1\$s van de beschikbare bestandsopslag.";
$a->strings["You are using %1\$s of %2\$s available file storage. (%3\$s&#37;)"] = "Je gebruikt %1\$s van totaal %2\$s beschikbare bestandsopslag. (%3\$s&#37;)";
$a->strings["WARNING:"] = "WAARSCHUWING:";
@ -126,6 +61,7 @@ $a->strings["Show"] = "Tonen";
$a->strings["Don't show"] = "Niet tonen";
$a->strings["Other networks and post services"] = "Andere netwerken en diensten";
$a->strings["Permissions"] = "Permissies";
$a->strings["Close"] = "Sluiten";
$a->strings[" and "] = " en ";
$a->strings["public profile"] = "openbaar profiel";
$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s veranderde %2\$s naar &ldquo;%3\$s&rdquo;";
@ -162,7 +98,7 @@ $a->strings["Profile Photo"] = "Profielfoto";
$a->strings["Update"] = "Bijwerken";
$a->strings["Install"] = "Installeren";
$a->strings["Purchase"] = "Aanschaffen";
$a->strings["Permission denied."] = "Toegang geweigerd";
$a->strings["Permission denied."] = "Toegang geweigerd.";
$a->strings["Item was not found."] = "Item niet gevonden";
$a->strings["No source file."] = "Geen bronbestand.";
$a->strings["Cannot locate file to replace"] = "Kan het te vervangen bestand niet vinden";
@ -248,10 +184,18 @@ $a->strings["__ctx:title__ Abstain"] = "onthoudingen";
$a->strings["__ctx:title__ Attending"] = "aanwezig";
$a->strings["__ctx:title__ Not attending"] = "niet aanwezig";
$a->strings["__ctx:title__ Might attend"] = "mogelijk aanwezig";
$a->strings["Select"] = "Kies";
$a->strings["Private Message"] = "Niet voor iedereen zichtbaar";
$a->strings["Message signature validated"] = "Berichtkenmerk gevalideerd";
$a->strings["Message signature incorrect"] = "Berichtkenmerk onjuist";
$a->strings["View %s's profile @ %s"] = "Bekijk het profiel van %s @ %s";
$a->strings["Categories:"] = "Categorieën:";
$a->strings["Filed under:"] = "Bewaard onder:";
$a->strings["from %s"] = "van %s";
$a->strings["last edited: %s"] = "laatst bewerkt: %s";
$a->strings["Expires: %s"] = "Verloopt: %s";
$a->strings["View in context"] = "In context bekijken";
$a->strings["Please wait"] = "Even wachten";
$a->strings["remove"] = "verwijderen";
$a->strings["Loading..."] = "Aan het laden...";
$a->strings["Delete Selected Items"] = "Verwijder de geselecteerde items";
@ -288,9 +232,15 @@ $a->strings["Tag term:"] = "Tag:";
$a->strings["Save to Folder:"] = "Bewaar in map: ";
$a->strings["Where are you right now?"] = "Waar bevind je je op dit moment?";
$a->strings["Expires YYYY-MM-DD HH:MM"] = "Verloopt op DD-MM-YYYY om HH:MM";
$a->strings["Preview"] = "Voorvertoning";
$a->strings["Share"] = "Delen";
$a->strings["Page link name"] = "Linknaam pagina";
$a->strings["Post as"] = "Bericht plaatsen als";
$a->strings["Bold"] = "Vet";
$a->strings["Italic"] = "Cursief";
$a->strings["Underline"] = "Onderstrepen";
$a->strings["Quote"] = "Citeren";
$a->strings["Code"] = "Broncode";
$a->strings["Upload photo"] = "Foto uploaden";
$a->strings["upload photo"] = "foto uploaden";
$a->strings["Attach file"] = "Bestand toevoegen";
@ -314,6 +264,7 @@ $a->strings["Public post"] = "Openbaar bericht";
$a->strings["Example: bob@example.com, mary@example.com"] = "Voorbeeld: bob@voorbeeld.nl, mary@voorbeeld.be";
$a->strings["Set expiration date"] = "Verloopdatum instellen";
$a->strings["Set publish date"] = "Publicatiedatum instellen";
$a->strings["Encrypt text"] = "Tekst versleutelen";
$a->strings["OK"] = "OK";
$a->strings["Cancel"] = "Annuleren";
$a->strings["Discover"] = "Ontdekken";
@ -339,6 +290,15 @@ $a->strings["Files and Storage"] = "Bestanden en opslagruimte";
$a->strings["Chatrooms"] = "Chatkanalen";
$a->strings["Saved Bookmarks"] = "Opgeslagen bladwijzers";
$a->strings["Manage Webpages"] = "Webpagina's beheren";
$a->strings["View all"] = "Toon alles";
$a->strings["__ctx:noun__ Like"] = array(
0 => "vindt dit leuk",
1 => "vinden dit leuk",
);
$a->strings["__ctx:noun__ Dislike"] = array(
0 => "vindt dit niet leuk",
1 => "vinden dit niet leuk",
);
$a->strings["__ctx:noun__ Attending"] = array(
0 => "aanwezig",
1 => "aanwezig",
@ -419,6 +379,8 @@ $a->strings["Cannot create a duplicate channel identifier on this system. Import
$a->strings["Channel clone failed. Import failed."] = "Het klonen van het kanaal is mislukt. Importeren mislukt.";
$a->strings["Cloned channel not found. Import failed."] = "Gekloond kanaal niet gevonden. Importeren mislukt.";
$a->strings["Delete this item?"] = "Dit item verwijderen?";
$a->strings["Comment"] = "Reactie";
$a->strings["[+] show all"] = "[+] alle";
$a->strings["[-] show less"] = "[-] minder reacties weergeven";
$a->strings["[+] expand"] = "[+] uitklappen";
$a->strings["[-] collapse"] = "[-] inklappen";
@ -433,6 +395,7 @@ $a->strings["Nothing new here"] = "Niets nieuw hier";
$a->strings["Rate This Channel (this is public)"] = "Beoordeel dit kanaal (dit is openbaar)";
$a->strings["Rating"] = "Beoordeling";
$a->strings["Describe (optional)"] = "Omschrijving (optioneel)";
$a->strings["Submit"] = "Opslaan";
$a->strings["Please enter a link URL"] = "Vul een internetadres/URL in:";
$a->strings["Unsaved changes. Are you sure you wish to leave this page?"] = "Niet opgeslagen wijzigingen. Ben je er zeker van dat je deze pagina wil verlaten?";
$a->strings["Location"] = "Locatie";
@ -638,7 +601,9 @@ $a->strings["have"] = "heb";
$a->strings["has"] = "heeft";
$a->strings["want"] = "wil";
$a->strings["wants"] = "wil";
$a->strings["like"] = "vind dit leuk";
$a->strings["likes"] = "vindt dit leuk";
$a->strings["dislike"] = "vind dit niet leuk";
$a->strings["dislikes"] = "vindt dit niet leuk";
$a->strings["Invalid data packet"] = "Datapakket ongeldig";
$a->strings["Unable to verify channel signature"] = "Kanaalkenmerk kon niet worden geverifieerd. ";
@ -998,6 +963,41 @@ $a->strings["Plugin Features"] = "Plugin-opties";
$a->strings["User registrations waiting for confirmation"] = "Accounts die op goedkeuring wachten";
$a->strings["View Photo"] = "Foto weergeven";
$a->strings["Edit Album"] = "Album bewerken";
$a->strings["Save to Folder"] = "In map opslaan";
$a->strings["I will attend"] = "Aanwezig";
$a->strings["I will not attend"] = "Niet aanwezig";
$a->strings["I might attend"] = "Mogelijk aanwezig";
$a->strings["I agree"] = "Eens";
$a->strings["I disagree"] = "Oneens";
$a->strings["I abstain"] = "Onthouding";
$a->strings["Add Star"] = "Ster toevoegen";
$a->strings["Remove Star"] = "Ster verwijderen";
$a->strings["Toggle Star Status"] = "Ster toevoegen of verwijderen";
$a->strings["starred"] = "met ster";
$a->strings["Add Tag"] = "Tag toevoegen";
$a->strings["I like this (toggle)"] = "Vind ik leuk";
$a->strings["I don't like this (toggle)"] = "Vind ik niet leuk";
$a->strings["Share This"] = "Delen";
$a->strings["share"] = "delen";
$a->strings["Delivery Report"] = "Afleveringsrapport";
$a->strings["%d comment"] = array(
0 => "%d reactie",
1 => "%d reacties weergeven",
);
$a->strings["View %s's profile - %s"] = "Profiel van %s bekijken - %s";
$a->strings["to"] = "aan";
$a->strings["via"] = "via";
$a->strings["Wall-to-Wall"] = "Kanaal-naar-kanaal";
$a->strings["via Wall-To-Wall:"] = "via kanaal-naar-kanaal";
$a->strings["Save Bookmarks"] = "Bladwijzers opslaan";
$a->strings["Add to Calendar"] = "Aan agenda toevoegen";
$a->strings["Mark all seen"] = "Markeer alles als bekeken";
$a->strings["__ctx:noun__ Likes"] = "vinden dit leuk";
$a->strings["__ctx:noun__ Dislikes"] = "vinden dit niet leuk";
$a->strings["This is you"] = "Dit ben jij";
$a->strings["Image"] = "Afbeelding";
$a->strings["Insert Link"] = "Link invoegen";
$a->strings["Video"] = "Video";
$a->strings["Not Found"] = "Niet gevonden";
$a->strings["Page not found."] = "Pagina niet gevonden.";
$a->strings["Some blurb about what to do when you're new here"] = "Welkom op \$Projectname. Klik op de tab ontdekken of klik rechtsboven op de <a href=\"directory\">kanalengids</a>, om kanalen te vinden. Rechtsboven vind je ook <a href=\"directory\">apps</a>, waar je vrijwel alle functies van \$Projectname kunt vinden. Voor <a href=\"directory\">hulp</a> met \$Projectname klik je op het vraagteken.";
@ -1289,6 +1289,7 @@ $a->strings["Nothing to import."] = "Niets gevonden om te importeren";
$a->strings["Unable to download data from old server"] = "Niet in staat om gegevens van de oude hub te downloaden";
$a->strings["Imported file is empty."] = "Geïmporteerde bestand is leeg";
$a->strings["Warning: Database versions differ by %1\$d updates."] = "Waarschuwing: database-versies lopen %1\$d updates achter.";
$a->strings["Server platform is not compatible. Operation not permitted."] = "Server-platform is niet compatibel. Actie is niet toegestaan.";
$a->strings["No channel. Import failed."] = "Geen kanaal. Importeren mislukt.";
$a->strings["You must be logged in to use this feature."] = "Je moet ingelogd zijn om dit onderdeel te kunnen gebruiken.";
$a->strings["Import Channel"] = "Kanaal importeren";
@ -1319,10 +1320,10 @@ $a->strings["Send invitations"] = "Uitnodigingen verzenden";
$a->strings["Enter email addresses, one per line:"] = "Voer e-mailadressen in, één per regel:";
$a->strings["Your message:"] = "Jouw bericht:";
$a->strings["Please join my community on \$Projectname."] = "Hierbij nodig ik je uit om mij, en andere vrienden en kennissen, op \$Projectname te vergezellen. Lees meer over \$Projectname op http://hubzilla.org";
$a->strings["You will need to supply this invitation code: "] = "Je moet deze uitnodigingscode opgeven: ";
$a->strings["You will need to supply this invitation code:"] = "Je moet deze uitnodigingscode opgeven:";
$a->strings["1. Register at any \$Projectname location (they are all inter-connected)"] = "1. Registreer je op een willekeurige \$Projectname-hub (ze zijn allemaal onderling met elkaar verbonden):";
$a->strings["2. Enter my \$Projectname network address into the site searchbar."] = "2. Nadat je bent ingelogd en een kanaal hebt aangemaakt kan je mijn \$Projectname-kanaaladres in het zoekveld invullen:";
$a->strings["or visit "] = "of bezoek ";
$a->strings["or visit"] = "of bezoek";
$a->strings["3. Click [Connect]"] = "3. Klik op [+ Verbinden]";
$a->strings["Unable to locate original post."] = "Niet in staat om de originele locatie van het bericht te vinden. ";
$a->strings["Empty post discarded."] = "Leeg bericht geannuleerd";
@ -1907,7 +1908,7 @@ $a->strings["Redirect"] = "Redirect/doorverwijzing";
$a->strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI voor redirect - laat leeg, behalve wanneer de applicatie dit vereist";
$a->strings["Icon url"] = "URL van pictogram";
$a->strings["Optional"] = "Optioneel";
$a->strings["You can't edit this application."] = "Je kan deze applicatie niet bewerken";
$a->strings["Application not found."] = "Applicatie niet gevonden.";
$a->strings["Connected Apps"] = "Verbonden applicaties";
$a->strings["Client key starts with"] = "Client key begint met";
$a->strings["No name"] = "Geen naam";
@ -2025,7 +2026,7 @@ $a->strings["Personal menu to display in your channel pages"] = "Persoonlijk men
$a->strings["Remove this channel."] = "Verwijder dit kanaal.";
$a->strings["Firefox Share \$Projectname provider"] = "\$Projectname-service voor Firefox Share";
$a->strings["Start calendar week on monday"] = "Begin in de agenda de week op maandag";
$a->strings["\$Projectname Server - Setup"] = "\$Projectname Server - Setup";
$a->strings["\$Projectname Server - Setup"] = "\$Projectname Hub - Setup";
$a->strings["Could not connect to database."] = "Could not connect to database.";
$a->strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "Could not connect to specified hub URL. Possible SSL certificate or DNS issue.";
$a->strings["Could not create table."] = "Could not create table.";
@ -2036,7 +2037,7 @@ $a->strings["System check"] = "System check";
$a->strings["Check again"] = "Check again";
$a->strings["Database connection"] = "Database connection";
$a->strings["In order to install \$Projectname we need to know how to connect to your database."] = "In order to install \$Projectname we need to know how to connect to your database.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Please contact your hosting provider or site administrator if you have questions about these settings.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Please contact your hosting provider or server administrator if you have questions about these settings.";
$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "The database you specify below should already exist. If it does not, please create it before continuing.";
$a->strings["Database Server Name"] = "Database Server Name";
$a->strings["Default is 127.0.0.1"] = "Default is 127.0.0.1";
@ -2052,6 +2053,8 @@ $a->strings["Website URL"] = "Hub URL";
$a->strings["Please use SSL (https) URL if available."] = "Please use SSL (https) URL if available.";
$a->strings["Please select a default timezone for your website"] = "Please select a default timezone for your hub";
$a->strings["Site settings"] = "Hub settings";
$a->strings["Enable \$Projectname <strong>advanced</strong> features?"] = "Enable \$Projectname <strong>advanced</strong> features?";
$a->strings["Some advanced features, while useful - may be best suited for technically proficient audiences"] = "Some advanced features, while useful - may be best suited for technically proficient audiences";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Could not find a command line version of PHP in the web server PATH.";
$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = "If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron.";
$a->strings["PHP executable path"] = "PHP executable path";
@ -2107,7 +2110,7 @@ $a->strings["Url rewrite in .htaccess is not working. Check your server configur
$a->strings["Url rewrite is working"] = "Url rewrite is working";
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root.";
$a->strings["Errors encountered creating database tables."] = "Errors encountered creating database tables.";
$a->strings["<h1>What next</h1>"] = "<h1>Wat nu</h1>";
$a->strings["<h1>What next</h1>"] = "<h1>What next</h1>";
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "IMPORTANT: You will need to [manually] setup a scheduled task for the poller.";
$a->strings["No valid account found."] = "Geen geldige account gevonden.";
$a->strings["Password reset request issued. Check your email."] = "Het verzoek om je wachtwoord opnieuw in te stellen is behandeld. Controleer je e-mail.";

View file

@ -1,23 +1,29 @@
<div class="generic-content-wrapper-styled">
<h1>{{$title}}</h1>
<div id="profile-photo-content" class="generic-content-wrapper">
<div class="section-title-wrapper">
<h2>{{$title}}</h2>
</div>
<div class="section-content-wrapper">
<form enctype="multipart/form-data" action="cover_photo" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<form enctype="multipart/form-data" action="cover_photo" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<div id="profile-photo-upload-wrapper">
<div id="profile-photo-upload-wrapper">
<label id="profile-photo-upload-label" class="form-label" for="profile-photo-upload">{{$lbl_upfile}}</label>
<input name="userfile" class="form-input" type="file" id="profile-photo-upload" size="48" />
<div class="clear"></div>
<label id="profile-photo-upload-label" class="form-label" for="profile-photo-upload">{{$lbl_upfile}}</label>
<input name="userfile" class="form-input" type="file" id="profile-photo-upload" size="48" />
<div class="clear"></div>
<br />
<br />
<div id="profile-photo-submit-wrapper">
<input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
</div>
</div>
<div id="profile-photo-submit-wrapper">
<input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
</div>
</div>
</form>
<div id="profile-photo-link-select-wrapper">
{{$select}}
</div>
</form>
<br />
<br />
<div id="profile-photo-link-select-wrapper">
{{$select}}
</div>
</div>
</div>

View file

@ -28,6 +28,7 @@
var justifiedGalleryActive = false;
{{if $channel_hash}}var channelHash = '{{$channel_hash}}';{{/if}}
{{if $channel_id}}var channelId = '{{$channel_id}}';{{/if}}{{* Used in e.g. autocomplete *}}
var preloadImages = {{$preload_images}};
</script>

View file

@ -5,27 +5,29 @@
</div>
<div class="section-content-wrapper">
<div id="mood-desc">{{$desc}}</div>
<div id="mood-desc">{{$desc}}</div>
<br />
<br />
<br />
<br />
<form action="mood" method="get">
<br />
<br />
<form action="mood" method="get">
<br />
<br />
<input id="mood-parent" type="hidden" value="{{$parent}}" name="parent" />
<input id="mood-parent" type="hidden" value="{{$parent}}" name="parent" />
<div class="form-group field custom">
<select name="verb" id="mood-verb-select" class="form-control" >
{{foreach $verbs as $v}}
<option value="{{$v.0}}">{{$v.1}}</option>
{{/foreach}}
</select>
<div class="form-group field custom">
<select name="verb" id="mood-verb-select" class="form-control" >
{{foreach $verbs as $v}}
<option value="{{$v.0}}">{{$v.1}}</option>
{{/foreach}}
</select>
</div>
<br />
<br />
<input type="submit" name="submit" value="{{$submit}}" />
</form>
</div>
</div>
<br />
<br />
<input type="submit" name="submit" value="{{$submit}}" />
</form>

View file

@ -1,3 +1,4 @@
<div class="generic-content-wrapper-styled">
<h1>{{$header}}</h1>
<h2>{{$mname}} {{$module}}</h2>
@ -17,5 +18,4 @@
<input type="submit" name="submit" value="{{$submit}}" />
</form>
</div>

View file

@ -1,31 +1,43 @@
<div class="generic-content-wrapper-styled">
<h1>{{$title}}</h1>
<div id="profile-photo-content" class="generic-content-wrapper">
<div class="section-title-wrapper">
<h2>{{$title}}</h2>
</div>
<div class="section-content-wrapper">
<form enctype="multipart/form-data" action="profile_photo" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<form enctype="multipart/form-data" action="profile_photo" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<div id="profile-photo-upload-wrapper">
<div id="profile-photo-upload-wrapper">
<label id="profile-photo-upload-label" class="form-label" for="profile-photo-upload">{{$lbl_upfile}}</label>
<input name="userfile" class="form-input" type="file" id="profile-photo-upload" size="48" />
<div class="clear"></div>
<label id="profile-photo-upload-label" class="form-label" for="profile-photo-upload">{{$lbl_upfile}}</label>
<input name="userfile" class="form-input" type="file" id="profile-photo-upload" size="48" />
<div class="clear"></div>
<label id="profile-photo-profiles-label" class="form-label" for="profile-photo-profiles">{{$lbl_profiles}}</label>
<select name="profile" id="profile-photo-profiles" class="form-input" >
{{foreach $profiles as $p}}
<option value="{{$p.id}}" {{if $p.is_default}}selected="selected"{{/if}}>{{$p.name}}</option>
{{/foreach}}
</select>
<div class="clear"></div>
{{if $single}}
<input type="hidden" name="profile" value="{{$profile0.id}}" />
{{else}}
<div id="profile-photo-submit-wrapper">
<input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
</div>
</div>
</form>
<div id="profile-photo-link-select-wrapper">
{{$select}}
</div>
<label id="profile-photo-profiles-label" class="form-label" for="profile-photo-profiles">{{$lbl_profiles}}</label>
<select name="profile" id="profile-photo-profiles" class="form-control" >
{{foreach $profiles as $p}}
<option value="{{$p.id}}" {{if $p.is_default}}selected="selected"{{/if}}>{{$p.name}}</option>
{{/foreach}}
</select>
<div class="clear"></div>
<br />
<br />
{{/if}}
<div id="profile-photo-submit-wrapper">
<input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
</div>
</div>
</form>
<br />
<br />
<div id="profile-photo-link-select-wrapper">
{{$select}}
</div>
</div>
</div>

View file

@ -31,14 +31,12 @@
{{include file="field_select_grouped.tpl" field=$role}}
<div id="newchannel-role-end" class="newchannel-field-end"></div>
{{/if}}
<div id="newchannel-name-help" class="descriptive-paragraph">{{$help_name}}</div>
<label for="newchannel-name" id="label-newchannel-name" class="register-label" >{{$label_name}}</label>
<input type="text" name="name" id="newchannel-name" class="register-input" value="{{$name}}" />
<div id="name-spinner"></div>
<div id="newchannel-name-feedback" class="register-feedback"></div>
<div id="newchannel-name-end" class="register-field-end"></div>
<div id="newchannel-name-help" class="descriptive-paragraph">{{$help_name}}</div>
{{/if}}
@ -62,12 +60,13 @@
<div id="register-password2-end" class="register-field-end"></div>
{{if $auto_create}}
<div id="newchannel-nick-desc" class="descriptive-paragraph">{{$nick_desc}}</div>
<label for="newchannel-nickname" id="label-newchannel-nickname" class="register-label" >{{$label_nick}}</label>
<input type="text" name="nickname" id="newchannel-nickname" class="register-input" value="{{$nickname}}" />
<div id="nick-spinner"></div>
<div id="newchannel-nick-desc" style="text-align: right;">{{$nick_hub}}</div>
<div id="newchannel-nickname-feedback" class="register-feedback"></div>
<div id="newchannel-nickname-end" class="register-field-end"></div>
<div id="newchannel-nick-desc" class="descriptive-paragraph">{{$nick_desc}}</div>
{{/if}}

View file

@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
<a title="{{$removechannel}}" class="btn btn-danger btn-xs pull-right" href="removeme"><i class="icon-trash"></i>&nbsp;{{$removeme}}</a>
{{if $server_role != 'basic'}}<a title="{{$removechannel}}" class="btn btn-danger btn-xs pull-right" href="removeme"><i class="icon-trash"></i>&nbsp;{{$removeme}}</a>{{/if}}
<h2>{{$ptitle}}</h2>
<div class="clear"></div>
</div>

View file

@ -65,6 +65,7 @@
{{include file="field_checkbox.tpl" field=$channel_list_mode}}
{{include file="field_checkbox.tpl" field=$network_list_mode}}
{{include file="field_checkbox.tpl" field=$user_scalable}}
{{include file="field_checkbox.tpl" field=$preload_images}}
{{if $expert}}
<div class="form-group">
<a class="btn btn-default "href="pdledit">{{$layout_editor}}</a>

View file

@ -1,7 +1,9 @@
<div class="generic-content-wrapper-styled">
<h1>{{$title}}</h1>
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
<h2>{{$title}}</h2>
</div>
<div class="section-content-tools-wrapper">
<form action="settings/oauth" method="post" autocomplete="off">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
@ -31,3 +33,4 @@
</form>
</div>
</div>

View file

@ -1,5 +1,8 @@
<h1>{{$title}}</h1>
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
<h2>{{$title}}</h2>
</div>
<div class="section-content-tools-wrapper">
<form method="POST">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
@ -15,3 +18,5 @@
</div>
</form>
</div>
</div>