Merge remote-tracking branch 'upstream/develop' into post-thread-user

This commit is contained in:
Michael 2021-02-01 19:31:39 +00:00
commit be3dfb4ffe
25 changed files with 20276 additions and 18222 deletions

View File

@ -551,10 +551,6 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep-
Hook::callAll('about_hook', $o);
### mod/subthread.php
Hook::callAll('post_local_end', $arr);
### mod/profiles.php
Hook::callAll('profile_post', $_POST);

View File

@ -259,10 +259,6 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap
Hook::callAll('about_hook', $o);
### mod/subthread.php
Hook::callAll('post_local_end', $arr);
### mod/profiles.php
Hook::callAll('profile_post', $_POST);

View File

@ -894,7 +894,7 @@ function item_photo_menu($item) {
$ignore_link = '';
if (local_user() && local_user() == $item['uid'] && $item['gravity'] == GRAVITY_PARENT && !$item['self']) {
$sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;';
$sub_link = 'javascript:doFollowThread(' . $item['id'] . '); return false;';
}
$author = ['uid' => 0, 'id' => $item['author-id'],

View File

@ -1,43 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2020, Friendica
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
use Friendica\App;
use Friendica\Network\HTTPException;
use Friendica\Core\Logger;
use Friendica\Core\Session;
use Friendica\Model\Item;
use Friendica\Util\Strings;
function subthread_content(App $a)
{
if (!Session::isAuthenticated()) {
throw new HTTPException\ForbiddenException();
}
$item_id = (($a->argc > 1) ? Strings::escapeTags(trim($a->argv[1])) : 0);
if (!Item::performActivity($item_id, 'follow', local_user())) {
Logger::info('Following item failed', ['item' => $item_id]);
throw new HTTPException\BadRequestException();
}
Logger::info('Followed item', ['item' => $item_id]);
return;
}

View File

@ -0,0 +1,77 @@
<?php
/**
* @copyright Copyright (C) 2020, Friendica
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
namespace Friendica\Module\Item;
use Friendica\BaseModule;
use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Network\HTTPException;
/**
* Module for following threads
*/
class Follow extends BaseModule
{
public static function rawContent(array $parameters = [])
{
$l10n = DI::l10n();
if (!Session::isAuthenticated()) {
throw new HttpException\ForbiddenException($l10n->t('Access denied.'));
}
if (empty($parameters['id'])) {
throw new HTTPException\BadRequestException();
}
$itemId = intval($parameters['id']);
if (!Item::performActivity($itemId, 'follow', local_user())) {
throw new HTTPException\BadRequestException($l10n->t('Unable to follow this item.'));
}
// See if we've been passed a return path to redirect to
$return_path = $_REQUEST['return'] ?? '';
if (!empty($return_path)) {
$rand = '_=' . time();
if (strpos($return_path, '?')) {
$rand = "&$rand";
} else {
$rand = "?$rand";
}
DI::baseUrl()->redirect($return_path . $rand);
}
$return = [
'status' => 'ok',
'item_id' => $itemId,
'verb' => 'follow',
'state' => 1
];
System::jsonExit($return);
}
}

View File

@ -19,33 +19,38 @@
*
*/
namespace Friendica\Module;
namespace Friendica\Module\Item;
use Friendica\BaseModule;
use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Network\HTTPException;
/**
* Toggle starred items
*/
class Starred extends BaseModule
class Star extends BaseModule
{
public static function rawContent(array $parameters = [])
{
if (!local_user()) {
throw new \Friendica\Network\HTTPException\ForbiddenException();
$l10n = DI::l10n();
if (!Session::isAuthenticated()) {
throw new HttpException\ForbiddenException($l10n->t('Access denied.'));
}
if (empty($parameters['item'])) {
throw new \Friendica\Network\HTTPException\BadRequestException();
if (empty($parameters['id'])) {
throw new HTTPException\BadRequestException();
}
$itemId = intval($parameters['item']);
$itemId = intval($parameters['id']);
$item = Post::selectFirstForUser(local_user(), ['starred'], ['uid' => local_user(), 'id' => $itemId]);
if (empty($item)) {
throw new \Friendica\Network\HTTPException\NotFoundException();
throw new HTTPException\NotFoundException();
}
$starred = !(bool)$item['starred'];
@ -53,14 +58,25 @@ class Starred extends BaseModule
Item::update(['starred' => $starred], ['id' => $itemId]);
// See if we've been passed a return path to redirect to
$returnPath = $_REQUEST['return'] ?? '';
if (!empty($returnPath)) {
$rand = '_=' . time() . (strpos($returnPath, '?') ? '&' : '?') . 'rand';
DI::baseUrl()->redirect($returnPath . $rand);
$return_path = $_REQUEST['return'] ?? '';
if (!empty($return_path)) {
$rand = '_=' . time();
if (strpos($return_path, '?')) {
$rand = "&$rand";
} else {
$rand = "?$rand";
}
DI::baseUrl()->redirect($return_path . $rand);
}
// the json doesn't really matter, it will either be 0 or 1
echo json_encode((int)$starred);
exit();
$return = [
'status' => 'ok',
'item_id' => $itemId,
'verb' => 'star',
'state' => (int)$starred,
];
System::jsonExit($return);
}
}

View File

@ -290,10 +290,12 @@ return [
'/testrewrite' => [Module\Install::class, [R::GET]],
],
'/item' => [
'/{id:\d+}/activity/{verb}' => [Module\Item\Activity::class, [ R::POST]],
'/{id:\d+}/ignore' => [Module\Item\Ignore::class, [ R::POST]],
'/{id:\d+}/pin' => [Module\Item\Pin::class, [ R::POST]],
'/item/{id:\d+}' => [
'/activity/{verb}' => [Module\Item\Activity::class, [ R::POST]],
'/follow' => [Module\Item\Follow::class, [ R::POST]],
'/ignore' => [Module\Item\Ignore::class, [ R::POST]],
'/pin' => [Module\Item\Pin::class, [ R::POST]],
'/star' => [Module\Item\Star::class, [ R::POST]],
],
'/localtime' => [Module\Debug\Localtime::class, [R::GET, R::POST]],
@ -412,7 +414,6 @@ return [
'/rsd.xml' => [Module\ReallySimpleDiscovery::class, [R::GET]],
'/smilies[/json]' => [Module\Smilies::class, [R::GET]],
'/statistics.json' => [Module\Statistics::class, [R::GET]],
'/starred/{item:\d+}' => [Module\Starred::class, [R::GET]],
'/toggle_mobile' => [Module\ToggleMobile::class, [R::GET]],
'/tos' => [Module\Tos::class, [R::GET]],

View File

@ -675,28 +675,33 @@ function doActivityItem(ident, verb, un) {
update_item = ident.toString();
}
function dosubthread(ident) {
function doFollowThread(ident) {
unpause();
$('#like-rotator-' + ident.toString()).show();
$.get('subthread/' + ident.toString(), NavUpdate);
$.post('item/' + ident.toString() + '/follow', NavUpdate);
liking = 1;
}
function dostar(ident) {
function doStar(ident) {
ident = ident.toString();
$('#like-rotator-' + ident).show();
$.get('starred/' + ident, function(data) {
if (data.match(/1/)) {
$('#starred-' + ident).addClass('starred');
$('#starred-' + ident).removeClass('unstarred');
$.post('item/' + ident + '/star')
.then(function(data) {
if (data.state === 1) {
$('#starred-' + ident)
.addClass('starred')
.removeClass('unstarred');
$('#star-' + ident).addClass('hidden');
$('#unstar-' + ident).removeClass('hidden');
} else {
$('#starred-' + ident).addClass('unstarred');
$('#starred-' + ident).removeClass('starred');
$('#starred-' + ident)
.addClass('unstarred')
.removeClass('starred');
$('#star-' + ident).removeClass('hidden');
$('#unstar-' + ident).addClass('hidden');
}
})
.always(function () {
$('#like-rotator-' + ident).hide();
});
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -419,7 +419,9 @@ $a->strings["Rotate CW (right)"] = "Ruota a destra";
$a->strings["Rotate CCW (left)"] = "Ruota a sinistra";
$a->strings["This is you"] = "Questo sei tu";
$a->strings["Comment"] = "Commento";
$a->strings["Like"] = "Mi Piace";
$a->strings["I like this (toggle)"] = "Mi piace (clic per cambiare)";
$a->strings["Dislike"] = "Non Mi Piace";
$a->strings["I don't like this (toggle)"] = "Non mi piace (clic per cambiare)";
$a->strings["Map"] = "Mappa";
$a->strings["View Album"] = "Sfoglia l'album";
@ -723,6 +725,7 @@ $a->strings["Display Membership Date"] = "Mostra la Data di Registrazione";
$a->strings["Display membership date in profile"] = "Mostra la data in cui ti sei registrato nel profilo";
$a->strings["Forums"] = "Forum";
$a->strings["External link to forum"] = "Collegamento esterno al forum";
$a->strings["show less"] = "mostra meno";
$a->strings["show more"] = "mostra di più";
$a->strings["Nothing new here"] = "Niente di nuovo qui";
$a->strings["Go back"] = "Torna indietro";
@ -895,6 +898,8 @@ $a->strings["iconv PHP module"] = "modulo PHP iconv";
$a->strings["Error: iconv PHP module required but not installed."] = "Errore: il modulo PHP iconv è richiesto ma non installato.";
$a->strings["POSIX PHP module"] = "mooduo PHP POSIX";
$a->strings["Error: POSIX PHP module required but not installed."] = "Errore, il modulo PHP POSIX è richiesto ma non installato.";
$a->strings["Program execution functions"] = "Funzioni di esecuzione del programma";
$a->strings["Error: Program execution functions required but not enabled."] = "Errore: Funzioni di esecuzione del programma richieste ma non abilitate.";
$a->strings["JSON PHP module"] = "modulo PHP JSON";
$a->strings["Error: JSON PHP module required but not installed."] = "Errore: il modulo PHP JSON è richiesto ma non installato.";
$a->strings["File Information PHP module"] = "Modulo PHP File Information";
@ -971,6 +976,7 @@ $a->strings["template engine cannot be registered without a name."] = "il motore
$a->strings["template engine is not registered!"] = "il motore di modelli non è registrato!";
$a->strings["Update %s failed. See error logs."] = "aggiornamento %s fallito. Guarda i log di errore.";
$a->strings["\n\t\t\t\tThe friendica developers released update %s recently,\n\t\t\t\tbut when I tried to install it, something went terribly wrong.\n\t\t\t\tThis needs to be fixed soon and I can't do it alone. Please contact a\n\t\t\t\tfriendica developer if you can not help me on your own. My database might be invalid."] = "\nGli sviluppatori di Friendica hanno rilasciato l'aggiornamento %s\nrecentemente, ma quando ho provato a installarlo, qualcosa è \nandato terribilmente storto.\nBisogna sistemare le cose e non posso farlo da solo.\nContatta uno sviluppatore se non sei in grado di aiutarmi. Il mio database potrebbe essere invalido.";
$a->strings["The error message is\\n[pre]%s[/pre]"] = "Il messaggio di errore è\\n[pre]%s[/pre]";
$a->strings["[Friendica Notify] Database update"] = "[Notifica di Friendica] Aggiornamento database";
$a->strings["\n\t\t\t\t\tThe friendica database was successfully updated from %s to %s."] = "\n\t\t\t\t\tIl database di friendica è stato aggiornato con succeso da %s a %s.";
$a->strings["Error decoding account file"] = "Errore decodificando il file account";
@ -984,6 +990,8 @@ $a->strings["%d contact not imported"] = [
$a->strings["User profile creation error"] = "Errore durante la creazione del profilo dell'utente";
$a->strings["Done. You can now login with your username and password"] = "Fatto. Ora puoi entrare con il tuo nome utente e la tua password";
$a->strings["The database version had been set to %s."] = "La versione del database è stata impostata come %s.";
$a->strings["No unused tables found."] = "Nessuna tabella inutilizzata trovata.";
$a->strings["These tables are not used for friendica and will be deleted when you execute \"dbstructure drop -e\":"] = "Queste tabelle non sono utilizzate da friendica e saranno eliminate quando eseguirai \"dbstructure drop -e\":";
$a->strings["There are no tables on MyISAM or InnoDB with the Antelope file format."] = "Non ci sono tabelle su MyISAM o InnoDB con il formato file Antelope";
$a->strings["\nError %d occurred during database update:\n%s\n"] = "\nErrore %d durante l'aggiornamento del database:\n%s\n";
$a->strings["Errors encountered performing database changes: "] = "Errori riscontrati eseguendo le modifiche al database:";
@ -1264,6 +1272,7 @@ $a->strings["Local contacts"] = "Contatti locali";
$a->strings["Interactors"] = "Interlocutori";
$a->strings["Database (legacy)"] = "Database (legacy)";
$a->strings["Site"] = "Sito";
$a->strings["General Information"] = "Informazioni Generali";
$a->strings["Republish users to directory"] = "Ripubblica gli utenti sulla directory";
$a->strings["Registration"] = "Registrazione";
$a->strings["File upload"] = "Caricamento file";
@ -1425,12 +1434,8 @@ $a->strings["Disabled"] = "Disabilitato";
$a->strings["Enabled"] = "Abilitato";
$a->strings["Maximum number of parallel workers"] = "Massimo numero di lavori in parallelo";
$a->strings["On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d."] = "Con hosting condiviso, imposta a %d. Su sistemi più grandi, vanno bene valori come %d. Il valore di default è %d.";
$a->strings["Don't use \"proc_open\" with the worker"] = "Non usare \"proc_open\" con il worker";
$a->strings["Enable this if your system doesn't allow the use of \"proc_open\". This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab."] = "Abilita questo se il tuo sistema non consente l'utilizzo di \"proc_open\". Questo può succedere su hosting condiviso. Se questo è attivato dovresti aumentare la frequenza dell'esecuzione dei worker nel tuo crontab.";
$a->strings["Enable fastlane"] = "Abilita fastlane";
$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "Quando abilitato, il meccanismo di fastlane avvia processi aggiuntivi se processi con priorità più alta sono bloccati da processi con priorità più bassa.";
$a->strings["Enable frontend worker"] = "Abilita worker da frontend";
$a->strings["When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server."] = "Quando abilitato il processo del Worker scatta quando avviene l'accesso al backend (es. messaggi che vengono spediti). Su piccole istanze potresti voler chiamare %s/worker ogni tot minuti attraverso una pianificazione cron esterna. Dovresti abilitare quest'opzione solo se non puoi utilizzare cron/operazioni pianificate sul tuo server.";
$a->strings["Use relay servers"] = "Usa server di inoltro";
$a->strings["Enables the receiving of public posts from relay servers. They will be included in the search, subscribed tags and on the global community page."] = "Abilita la ricezione dei messaggi pubblici dai server relay. Saranno inclusi nelle ricerche, nelle etichette alle quali si è abbonati e nella pagina comunità globale.";
$a->strings["\"Social Relay\" server"] = "Server \"Social Relay\"";
@ -1549,6 +1554,8 @@ $a->strings["Request date"] = "Data richiesta";
$a->strings["No registrations."] = "Nessuna registrazione.";
$a->strings["Note from the user"] = "Nota dall'utente";
$a->strings["Deny"] = "Nega";
$a->strings["API endpoint \"%s\" is not implemented"] = "L'endpoint API \"%s\" non è implementato";
$a->strings["The API endpoint is currently not implemented but might be in the future."] = "L'endpoint API attualmente non è implementato ma potrebbe esserlo in futuro.";
$a->strings["Contact not found"] = "Contatto non trovato";
$a->strings["Profile not found"] = "Profilo non trovato";
$a->strings["No installed applications."] = "Nessuna applicazione installata.";
@ -1665,6 +1672,7 @@ $a->strings["Fetch information and keywords"] = "Recupera informazioni e parole
$a->strings["No mirroring"] = "Non duplicare";
$a->strings["Mirror as forwarded posting"] = "Duplica come messaggi ricondivisi";
$a->strings["Mirror as my own posting"] = "Duplica come miei messaggi";
$a->strings["Native reshare"] = "Ricondivisione nativa";
$a->strings["Contact Information / Notes"] = "Informazioni / Note sul contatto";
$a->strings["Contact Settings"] = "Impostazioni Contatto";
$a->strings["Contact"] = "Contatto";
@ -1752,6 +1760,7 @@ $a->strings["Source activity"] = "Sorgente attività";
$a->strings["Source input"] = "Sorgente";
$a->strings["BBCode::toPlaintext"] = "BBCode::toPlaintext";
$a->strings["BBCode::convert (raw HTML)"] = "BBCode::convert (raw HTML)";
$a->strings["BBCode::convert (hex)"] = "BBCode::convert (hex)";
$a->strings["BBCode::convert"] = "BBCode::convert";
$a->strings["BBCode::convert => HTML::toBBCode"] = "BBCode::convert => HTML::toBBCode";
$a->strings["BBCode::toMarkdown"] = "BBCode::toMarkdown";
@ -1771,6 +1780,9 @@ $a->strings["Markdown::convert"] = "Markdown::convert";
$a->strings["Markdown::toBBCode"] = "Markdown::toBBCode";
$a->strings["Raw HTML input"] = "Sorgente HTML grezzo";
$a->strings["HTML Input"] = "Sorgente HTML";
$a->strings["HTML Purified (raw)"] = "HTML Purificato (raw)";
$a->strings["HTML Purified (hex)"] = "HTML Purificato (hex)";
$a->strings["HTML Purified"] = "HTML Purificato";
$a->strings["HTML::toBBCode"] = "HTML::toBBCode";
$a->strings["HTML::toBBCode => BBCode::convert"] = "HTML::toBBCode => BBCode::convert";
$a->strings["HTML::toBBCode => BBCode::convert (raw HTML)"] = "HTML::toBBCode => BBCode::convert (raw HTML)";
@ -1798,6 +1810,7 @@ $a->strings["Converted localtime: %s"] = "Ora locale convertita: %s";
$a->strings["Please select your timezone:"] = "Selezionare il tuo fuso orario:";
$a->strings["Only logged in users are permitted to perform a probing."] = "Solo agli utenti loggati è permesso effettuare un probe.";
$a->strings["Lookup address"] = "Indirizzo di consultazione";
$a->strings["Switch between your accounts"] = "Passa da un account all'altro";
$a->strings["Manage your accounts"] = "Gestisci i tuoi account";
$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Cambia tra differenti identità o pagine comunità/gruppi che condividono il tuo account o per cui hai i permessi di gestione";
$a->strings["Select an identity to manage: "] = "Seleziona un'identità da gestire:";
@ -1849,6 +1862,9 @@ $a->strings["No profile"] = "Nessun profilo";
$a->strings["Method Not Allowed."] = "Metodo Non Consentito.";
$a->strings["Friendica Communications Server - Setup"] = "Friendica Comunicazione Server - Installazione";
$a->strings["System check"] = "Controllo sistema";
$a->strings["Requirement not satisfied"] = "Requisiti non soddisfatti";
$a->strings["Optional requirement not satisfied"] = "Requisiti opzionali non soddisfatti";
$a->strings["OK"] = "OK";
$a->strings["Check again"] = "Controlla ancora";
$a->strings["Base settings"] = "Impostazioni base";
$a->strings["Host name"] = "Nome host";
@ -1917,7 +1933,7 @@ $a->strings["Suggested by:"] = "Suggerito da:";
$a->strings["Claims to be known to you: "] = "Dice di conoscerti: ";
$a->strings["Shall your connection be bidirectional or not?"] = "La connessione dovrà essere bidirezionale o no?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Accettando %s come amico permette a %s di seguire i tuoi messaggi, e a te di riceverne gli aggiornamenti.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Accentrando %s come abbonato gli permette di abbonarsi ai tuoi messaggi, ma tu non riceverai aggiornamenti da lui.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Accettando %s come abbonato gli permetti di abbonarsi ai tuoi messaggi, ma tu non riceverai aggiornamenti da lui.";
$a->strings["Friend"] = "Amico";
$a->strings["Subscriber"] = "Abbonato";
$a->strings["No introductions."] = "Nessuna presentazione.";
@ -2175,6 +2191,8 @@ $a->strings["The request was valid, but the server is refusing action. The user
$a->strings["The requested resource could not be found but may be available in the future."] = "La risorsa richiesta non può' essere trovata ma potrebbe essere disponibile in futuro.";
$a->strings["An unexpected condition was encountered and no more specific message is suitable."] = "Una condizione inattesa è stata riscontrata e nessun messaggio specifico è disponibile.";
$a->strings["The server is currently unavailable (because it is overloaded or down for maintenance). Please try again later."] = "Il server è momentaneamente non disponibile (perchè è sovraccarico o in manutenzione). Per favore, riprova più tardi. ";
$a->strings["Stack trace:"] = "Traccia dello stack:";
$a->strings["Exception thrown in %s:%d"] = "Eccezione lanciata in %s:%d";
$a->strings["At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node's user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication."] = "Al momento della registrazione, e per fornire le comunicazioni tra l'account dell'utente e i suoi contatti, l'utente deve fornire un nome da visualizzare (pseudonimo), un nome utente (soprannome) e un indirizzo email funzionante. I nomi saranno accessibili sulla pagina profilo dell'account da parte di qualsiasi visitatore, anche quando altri dettagli del profilo non sono mostrati. L'indirizzo email sarà usato solo per inviare notifiche riguardo l'interazione coi contatti, ma non sarà mostrato. L'inserimento dell'account nella rubrica degli utenti del nodo o nella rubrica globale è opzionale, può essere impostato nelle impostazioni dell'utente, e non è necessario ai fini delle comunicazioni.";
$a->strings["This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts."] = "Queste informazioni sono richiesta per la comunicazione e sono inviate ai nodi che partecipano alla comunicazione dove sono salvati. Gli utenti possono inserire aggiuntive informazioni private che potrebbero essere trasmesse agli account che partecipano alla comunicazione.";
$a->strings["At any point in time a logged in user can export their account data from the <a href=\"%1\$s/settings/userexport\">account settings</a>. If the user wants to delete their account they can do so at <a href=\"%1\$s/removeme\">%1\$s/removeme</a>. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners."] = "In qualsiasi momento un utente autenticato può esportare i dati del suo account dalle <a href=\"%1\$s/settings/userexport\">impostazioni dell'account</a>. Se l'utente vuole cancellare il suo account lo può fare da <a href=\"%1\$s/removeme\">%1\$s/removeme</a>. L'eliminazione dell'account sarà permanente. L'eliminazione dei dati sarà altresì richiesta ai nodi che partecipano alle comunicazioni.";
@ -2237,9 +2255,12 @@ $a->strings["starred"] = "preferito";
$a->strings["add tag"] = "aggiungi tag";
$a->strings["like"] = "mi piace";
$a->strings["dislike"] = "non mi piace";
$a->strings["Quote and share this"] = "Cita e condividi questo";
$a->strings["Quote share this"] = "Condividi citando questo";
$a->strings["Quote Share"] = "Cita e Condividi";
$a->strings["Share this"] = "Condividi questo";
$a->strings["Reshare this"] = "Ricondividi questo";
$a->strings["Reshare"] = "Ricondividi";
$a->strings["Cancel your Reshare"] = "Annulla la tua Ricondivisione";
$a->strings["Unshare"] = "Non ricondividere più";
$a->strings["%s (Received %s)"] = "%s (Ricevuto %s)";
$a->strings["Comment this item on your system"] = "Commenta questo oggetto sul tuo sistema";
$a->strings["remote comment"] = "commento remoto";
@ -2291,3 +2312,48 @@ $a->strings["Login failed."] = "Accesso fallito.";
$a->strings["Login failed. Please check your credentials."] = "Accesso non riuscito. Per favore controlla le tue credenziali.";
$a->strings["Welcome %s"] = "Benvenuto %s";
$a->strings["Please upload a profile photo."] = "Carica una foto per il profilo.";
$a->strings["Friendica Notification"] = "Notifica Friendica";
$a->strings["%1\$s, %2\$s Administrator"] = "%1\$s, %2\$s Amministratore";
$a->strings["%s Administrator"] = "%s Amministratore";
$a->strings["thanks"] = "grazie";
$a->strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-GG o MM-GG";
$a->strings["never"] = "mai";
$a->strings["less than a second ago"] = "meno di un secondo fa";
$a->strings["year"] = "anno";
$a->strings["years"] = "anni";
$a->strings["months"] = "mesi";
$a->strings["weeks"] = "settimane";
$a->strings["days"] = "giorni";
$a->strings["hour"] = "ora";
$a->strings["hours"] = "ore";
$a->strings["minute"] = "minuto";
$a->strings["minutes"] = "minuti";
$a->strings["second"] = "secondo";
$a->strings["seconds"] = "secondi";
$a->strings["in %1\$d %2\$s"] = "in %1\$d %2\$s";
$a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s fa";
$a->strings["(no subject)"] = "(nessun oggetto)";
$a->strings["default"] = "predefinito";
$a->strings["greenzero"] = "greenzero";
$a->strings["purplezero"] = "purplezero";
$a->strings["easterbunny"] = "easterbunny";
$a->strings["darkzero"] = "darkzero";
$a->strings["comix"] = "comix";
$a->strings["slackr"] = "slackr";
$a->strings["Variations"] = "Varianti";
$a->strings["Light (Accented)"] = "Chiaro (Con accenti)";
$a->strings["Dark (Accented)"] = "Scuro (Con accenti)";
$a->strings["Black (Accented)"] = "Nero (Con accenti)";
$a->strings["Note"] = "Note";
$a->strings["Check image permissions if all users are allowed to see the image"] = "Controlla i permessi dell'immagine che tutti gli utenti possano vederla";
$a->strings["Custom"] = "Personalizzato";
$a->strings["Legacy"] = "Precedente";
$a->strings["Accented"] = "Con accenti";
$a->strings["Select color scheme"] = "Seleziona lo schema colori";
$a->strings["Select scheme accent"] = "Seleziona accento schema";
$a->strings["Blue"] = "Blu";
$a->strings["Red"] = "Rosso";
$a->strings["Purple"] = "Viola";
$a->strings["Green"] = "Verde";
$a->strings["Pink"] = "Rosa";
$a->strings["Copy or paste schemestring"] = "Copia o incolla stringa di schema";

View File

@ -105,7 +105,7 @@
<a href="#" id="pinned-{{$item.id}}" onclick="doPin({{$item.id}}); return false;" class="pin-item icon {{$item.ispinned}}" title="{{$item.pin.toggle}}"></a>
{{/if}}
{{if $item.star}}
<a href="#" id="starred-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="star-item icon {{$item.isstarred}}" title="{{$item.star.toggle}}"></a>
<a href="#" id="starred-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="star-item icon {{$item.isstarred}}" title="{{$item.star.toggle}}"></a>
{{/if}}
{{if $item.tagger}}
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="tag-item icon tagged" title="{{$item.tagger.add}}"></a>

View File

@ -174,7 +174,7 @@
{{* Put additional actions in a dropdown menu *}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.subthread || $item.ignore || $item.drop.dropping}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread || $item.ignore || $item.drop.dropping}}
<span role="presentation" class="separator"></span>
<span class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
<button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i>&nbsp;{{$item.menu}}</button>
@ -206,14 +206,14 @@
{{if $item.star}}
<li role="menuitem">
<a id="star-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
<a id="star-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
</li>
{{/if}}
{{if $item.subthread}}
{{if $item.follow_thread}}
<li role="menuitem">
<a id="subthread-{{$item.id}}" href="javascript:{{$item.subthread.action}}" class="btn-link" title="{{$item.subthread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.subthread.title}}</a>
<a id="follow_thread-{{$item.id}}" href="javascript:{{$item.follow_thread.action}}" class="btn-link" title="{{$item.follow_thread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.follow_thread.title}}</a>
</li>
{{/if}}
@ -223,7 +223,7 @@
</li>
{{/if}}
{{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.subthread) && ($item.ignore || $item.drop.dropping)}}
{{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread) && ($item.ignore || $item.drop.dropping)}}
<li role="separator" class="divider"></li>
{{/if}}

View File

@ -326,7 +326,7 @@ as the value of $top_child_total (this is done at the end of this file)
{{/if}}
{{* Put additional actions in a dropdown menu *}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.subthread || $item.ignore || $item.drop.dropping}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread || $item.ignore || $item.drop.dropping}}
<span role="presentation" class="separator"></span>
<span class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
<button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i>&nbsp;{{$item.menu}}</button>
@ -358,14 +358,14 @@ as the value of $top_child_total (this is done at the end of this file)
{{if $item.star}}
<li role="menuitem">
<a id="star-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
<a id="star-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
</li>
{{/if}}
{{if $item.subthread}}
{{if $item.follow_thread}}
<li role="menuitem">
<a id="subthread-{{$item.id}}" href="javascript:{{$item.subthread.action}}" class="btn-link" title="{{$item.subthread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.subthread.title}}</a>
<a id="follow_thread-{{$item.id}}" href="javascript:{{$item.follow_thread.action}}" class="btn-link" title="{{$item.follow_thread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.follow_thread.title}}</a>
</li>
{{/if}}
@ -375,7 +375,7 @@ as the value of $top_child_total (this is done at the end of this file)
</li>
{{/if}}
{{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.subthread) && ($item.ignore || $item.drop.dropping)}}
{{if ($item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread) && ($item.ignore || $item.drop.dropping)}}
<li role="separator" class="divider"></li>
{{/if}}
@ -492,7 +492,7 @@ as the value of $top_child_total (this is done at the end of this file)
</div>
{{/if}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.subthread || $item.ignore || $item.drop.dropping}}
{{if $item.edpost || $item.tagger || $item.filer || $item.pin || $item.star || $item.follow_thread || $item.ignore || $item.drop.dropping}}
<div class="more-links btn-group{{if $item.thread_level > 1}} dropup{{/if}}">
<button type="button" class="btn btn-sm dropdown-toggle" data-toggle="dropdown" id="dropdownMenuOptions-{{$item.id}}" aria-haspopup="true" aria-expanded="false" title="{{$item.menu}}"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></button>
<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dropdownMenuOptions-{{$item.id}}">
@ -523,14 +523,14 @@ as the value of $top_child_total (this is done at the end of this file)
{{if $item.star}}
<li role="menuitem">
<a id="star-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:dostar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
<a id="star-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classdo}}" title="{{$item.star.do}}"><i class="fa fa-star-o" aria-hidden="true"></i>&nbsp;{{$item.star.do}}</a>
<a id="unstar-{{$item.id}}" href="javascript:doStar({{$item.id}});" class="btn-link {{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="fa fa-star" aria-hidden="true"></i>&nbsp;{{$item.star.undo}}</a>
</li>
{{/if}}
{{if $item.subthread}}
{{if $item.follow_thread}}
<li role="menuitem">
<a id="subthread-{{$item.id}}" href="javascript:{{$item.subthread.action}}" class="btn-link" title="{{$item.subthread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.subthread.title}}</a>
<a id="follow_thread-{{$item.id}}" href="javascript:{{$item.follow_thread.action}}" class="btn-link" title="{{$item.follow_thread.title}}"><i class="fa fa-plus" aria-hidden="true"></i>&nbsp;{{$item.follow_thread.title}}</a>
</li>
{{/if}}

View File

@ -308,20 +308,20 @@ function frio_acl_lookup(App $a, &$results)
*/
function frio_display_item(App $a, &$arr)
{
// Add subthread to the item menu
$subthread = [];
// Add follow to the item menu
$followThread = [];
if (
local_user()
&& local_user() == $arr['item']['uid']
&& $arr['item']['gravity'] == GRAVITY_PARENT
&& !$arr['item']['self'])
{
$subthread = [
$followThread = [
'menu' => 'follow_thread',
'title' => DI::l10n()->t('Follow Thread'),
'action' => 'dosubthread(' . $arr['item']['id'] . ');',
'action' => 'doFollowThread(' . $arr['item']['id'] . ');',
'href' => '#'
];
}
$arr['output']['subthread'] = $subthread;
$arr['output']['follow_thread'] = $followThread;
}

View File

@ -33,8 +33,8 @@
<div class="wall-item-actions-social">
{{if $star}}
<a href="#" id="star-{{$id}}" onclick="dostar({{$id}}); return false;" class="{{$star.classdo}}" title="{{$star.do}}">{{$star.do}}</a>
<a href="#" id="unstar-{{$id}}" onclick="dostar({{$id}}); return false;" class="{{$star.classundo}}" title="{{$star.undo}}">{{$star.undo}}</a>
<a href="#" id="star-{{$id}}" onclick="doStar({{$id}}); return false;" class="{{$star.classdo}}" title="{{$star.do}}">{{$star.do}}</a>
<a href="#" id="unstar-{{$id}}" onclick="doStar({{$id}}); return false;" class="{{$star.classundo}}" title="{{$star.undo}}">{{$star.undo}}</a>
<a href="#" id="tagger-{{$id}}" onclick="itemTag({{$id}}); return false;" class="{{$star.classtagger}}" title="{{$star.tagger}}">{{$star.tagger}}</a>
{{/if}}

View File

@ -52,8 +52,8 @@
<div class="wall-item-actions-social">
{{if $item.star}}
<a href="#" id="star-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
<a href="#" id="star-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="{{$item.star.classtagger}}" title="{{$item.star.tagger}}">{{$item.star.tagger}}</a>
{{/if}}

View File

@ -102,8 +102,8 @@
<a href="#" id="unpin-{{$item.id}}" onclick="doPin({{$item.id}}); return false;" class="{{$item.pin.classundo}}" title="{{$item.pin.undo}}">{{$item.pin.undo}}</a>
{{/if}}
{{if $item.star}}
<a href="#" id="star-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
<a href="#" id="star-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
{{/if}}
{{if $item.ignore}}
<a href="#" id="ignore-{{$item.id}}" onclick="doIgnoreThread({{$item.id}}); return false;" class="{{$item.ignore.classdo}}" title="{{$item.ignore.do}}">{{$item.ignore.do}}</a>

View File

@ -117,7 +117,7 @@
<a href="#" id="pinned-{{$item.id}}" onclick="doPin({{$item.id}}); return false;" class="pin-item icon {{$item.ispinned}}" title="{{$item.pin.toggle}}"></a>
{{/if}}
{{if $item.star}}
<a href="#" id="starred-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="star-item icon {{$item.isstarred}}" title="{{$item.star.toggle}}"></a>
<a href="#" id="starred-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="star-item icon {{$item.isstarred}}" title="{{$item.star.toggle}}"></a>
{{/if}}
{{if $item.tagger}}
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="tag-item icon tagged" title="{{$item.tagger.add}}"></a>

View File

@ -40,8 +40,8 @@
<div class="wall-item-actions-social">
{{if $star}}
<a href="#" id="star-{{$id}}" onclick="dostar({{$id}}); return false;" class="{{$star.classdo}}" title="{{$star.do}}">{{$star.do}}</a>
<a href="#" id="unstar-{{$id}}" onclick="dostar({{$id}}); return false;" class="{{$star.classundo}}" title="{{$star.undo}}">{{$star.undo}}</a>
<a href="#" id="star-{{$id}}" onclick="doStar({{$id}}); return false;" class="{{$star.classdo}}" title="{{$star.do}}">{{$star.do}}</a>
<a href="#" id="unstar-{{$id}}" onclick="doStar({{$id}}); return false;" class="{{$star.classundo}}" title="{{$star.undo}}">{{$star.undo}}</a>
<a href="#" id="tagger-{{$id}}" onclick="itemTag({{$id}}); return false;" class="{{$star.classtagger}}" title="{{$star.tagger}}">{{$star.tagger}}</a>
{{/if}}

View File

@ -57,8 +57,8 @@
<div class="wall-item-actions-social">
{{if $item.star}}
<a href="#" id="star-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
<a href="#" id="star-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}">{{$item.star.do}}</a>
<a href="#" id="unstar-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}">{{$item.star.undo}}</a>
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="{{$item.star.classtagger}}" title="{{$item.star.tagger}}">{{$item.star.tagger}}</a>
{{/if}}

View File

@ -140,8 +140,8 @@
<a role="button" id="unpin-{{$item.id}}" onclick="doPin({{$item.id}}); return false;" class="{{$item.pin.classundo}}" title="{{$item.pin.undo}}"><i class="icon-remove-circle icon-large"><span class="sr-only">{{$item.pin.undo}}</span></i></a>
{{/if}}
{{if $item.star}}
<a role="button" id="star-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}"><i class="icon-star icon-large"><span class="sr-only">{{$item.star.do}}</span></i></a>
<a role="button" id="unstar-{{$item.id}}" onclick="dostar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="icon-star-empty icon-large"><span class="sr-only">{{$item.star.undo}}</span></i></a>
<a role="button" id="star-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classdo}}" title="{{$item.star.do}}"><i class="icon-star icon-large"><span class="sr-only">{{$item.star.do}}</span></i></a>
<a role="button" id="unstar-{{$item.id}}" onclick="doStar({{$item.id}}); return false;" class="{{$item.star.classundo}}" title="{{$item.star.undo}}"><i class="icon-star-empty icon-large"><span class="sr-only">{{$item.star.undo}}</span></i></a>
{{/if}}
{{if $item.ignore}}
<a role="button" id="ignore-{{$item.id}}" onclick="doIgnoreThread({{$item.id}}); return false;" class="{{$item.ignore.classdo}}" title="{{$item.ignore.do}}"><i class="icon-bell-slash icon-large"><span class="sr-only">{{$item.ignore.do}}</span></i></a>