Merge pull request #8319 from MrPetovan/task/8318-dislike-user-setting

Add new hide dislike user setting
This commit is contained in:
Michael Vogel 2020-02-20 18:18:49 +01:00 committed by GitHub
commit 90e23581f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 274 additions and 285 deletions

View file

@ -587,6 +587,10 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o
'announce' => ['title' => DI::l10n()->t('Reshares','title')] 'announce' => ['title' => DI::l10n()->t('Reshares','title')]
]; ];
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
// array with html for each thread (parent+comments) // array with html for each thread (parent+comments)
$threads = []; $threads = [];
$threadsid = -1; $threadsid = -1;
@ -678,6 +682,10 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o
'share' => null, 'share' => null,
]; ];
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
unset($likebuttons['dislike']);
}
$body = Item::prepareBody($item, true, $preview); $body = Item::prepareBody($item, true, $preview);
list($categories, $folders) = DI::contentItem()->determineCategoriesTerms($item); list($categories, $folders) = DI::contentItem()->determineCategoriesTerms($item);

View file

@ -1384,7 +1384,7 @@ function photos_content(App $a)
$likebuttons = Renderer::replaceMacros($like_tpl, [ $likebuttons = Renderer::replaceMacros($like_tpl, [
'$id' => $link_item['id'], '$id' => $link_item['id'],
'$likethis' => DI::l10n()->t("I like this \x28toggle\x29"), '$likethis' => DI::l10n()->t("I like this \x28toggle\x29"),
'$nolike' => DI::l10n()->t("I don't like this \x28toggle\x29"), '$dislike' => DI::pConfig()->get(local_user(), 'system', 'hide_dislike') ? '' : DI::l10n()->t("I don't like this \x28toggle\x29"),
'$wait' => DI::l10n()->t('Please wait'), '$wait' => DI::l10n()->t('Please wait'),
'$return_path' => DI::args()->getQueryString(), '$return_path' => DI::args()->getQueryString(),
]); ]);
@ -1413,10 +1413,17 @@ function photos_content(App $a)
} }
$conv_responses = [ $conv_responses = [
'like' => ['title' => DI::l10n()->t('Likes','title')],'dislike' => ['title' => DI::l10n()->t('Dislikes','title')], 'like' => ['title' => DI::l10n()->t('Likes','title')],
'attendyes' => ['title' => DI::l10n()->t('Attending','title')], 'attendno' => ['title' => DI::l10n()->t('Not attending','title')], 'attendmaybe' => ['title' => DI::l10n()->t('Might attend','title')] 'dislike' => ['title' => DI::l10n()->t('Dislikes','title')],
'attendyes' => ['title' => DI::l10n()->t('Attending','title')],
'attendno' => ['title' => DI::l10n()->t('Not attending','title')],
'attendmaybe' => ['title' => DI::l10n()->t('Might attend','title')]
]; ];
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
// display comments // display comments
if (DBA::isResult($items)) { if (DBA::isResult($items)) {
foreach ($items as $item) { foreach ($items as $item) {
@ -1515,9 +1522,8 @@ function photos_content(App $a)
} }
} }
} }
$response_verbs = ['like'];
$response_verbs[] = 'dislike'; $responses = get_responses($conv_responses, ['like', 'dislike'], $link_item);
$responses = get_responses($conv_responses, $response_verbs, $link_item);
$paginate = $pager->renderFull($total); $paginate = $pager->renderFull($total);
} }

View file

@ -27,7 +27,6 @@ use Friendica\Core\ACL;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme; use Friendica\Core\Theme;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
@ -37,131 +36,21 @@ use Friendica\Model\GContact;
use Friendica\Model\Group; use Friendica\Model\Group;
use Friendica\Model\Notify\Type; use Friendica\Model\Notify\Type;
use Friendica\Model\User; use Friendica\Model\User;
use Friendica\Module\BaseSettings;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
use Friendica\Protocol\Email; use Friendica\Protocol\Email;
use Friendica\Util\Strings; use Friendica\Util\Strings;
use Friendica\Util\Temporal; use Friendica\Util\Temporal;
use Friendica\Worker\Delivery; use Friendica\Worker\Delivery;
function get_theme_config_file($theme)
{
$theme = Strings::sanitizeFilePathItem($theme);
$a = DI::app();
$base_theme = $a->theme_info['extends'] ?? '';
if (file_exists("view/theme/$theme/config.php")) {
return "view/theme/$theme/config.php";
}
if ($base_theme && file_exists("view/theme/$base_theme/config.php")) {
return "view/theme/$base_theme/config.php";
}
return null;
}
function settings_init(App $a) function settings_init(App $a)
{ {
if (!local_user()) { if (!local_user()) {
notice(DI::l10n()->t('Permission denied.') . EOL); notice(DI::l10n()->t('Permission denied.'));
return; return;
} }
// These lines provide the javascript needed by the acl selector BaseSettings::content();
$tpl = Renderer::getMarkupTemplate('settings/head.tpl');
DI::page()['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$ispublic' => DI::l10n()->t('everybody')
]);
$tabs = [
[
'label' => DI::l10n()->t('Account'),
'url' => 'settings',
'selected' => (($a->argc == 1) && ($a->argv[0] === 'settings')?'active':''),
'accesskey' => 'o',
],
];
$tabs[] = [
'label' => DI::l10n()->t('Two-factor authentication'),
'url' => 'settings/2fa',
'selected' => (($a->argc > 1) && ($a->argv[1] === '2fa') ? 'active' : ''),
'accesskey' => 'o',
];
$tabs[] = [
'label' => DI::l10n()->t('Profile'),
'url' => 'settings/profile',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'profile')?'active':''),
'accesskey' => 'p',
];
if (Feature::get()) {
$tabs[] = [
'label' => DI::l10n()->t('Additional features'),
'url' => 'settings/features',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'features') ? 'active' : ''),
'accesskey' => 't',
];
}
$tabs[] = [
'label' => DI::l10n()->t('Display'),
'url' => 'settings/display',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'display')?'active':''),
'accesskey' => 'i',
];
$tabs[] = [
'label' => DI::l10n()->t('Social Networks'),
'url' => 'settings/connectors',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'connectors')?'active':''),
'accesskey' => 'w',
];
$tabs[] = [
'label' => DI::l10n()->t('Addons'),
'url' => 'settings/addon',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'addon')?'active':''),
'accesskey' => 'l',
];
$tabs[] = [
'label' => DI::l10n()->t('Manage Accounts'),
'url' => 'settings/delegation',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'delegation')?'active':''),
'accesskey' => 'd',
];
$tabs[] = [
'label' => DI::l10n()->t('Connected apps'),
'url' => 'settings/oauth',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'oauth')?'active':''),
'accesskey' => 'b',
];
$tabs[] = [
'label' => DI::l10n()->t('Export personal data'),
'url' => 'settings/userexport',
'selected' => (($a->argc > 1) && ($a->argv[1] === 'userexport')?'active':''),
'accesskey' => 'e',
];
$tabs[] = [
'label' => DI::l10n()->t('Remove account'),
'url' => 'removeme',
'selected' => (($a->argc == 1) && ($a->argv[0] === 'removeme')?'active':''),
'accesskey' => 'r',
];
$tabtpl = Renderer::getMarkupTemplate("generic_links_widget.tpl");
DI::page()['aside'] = Renderer::replaceMacros($tabtpl, [
'$title' => DI::l10n()->t('Settings'),
'$class' => 'settings-widget',
'$items' => $tabs,
]);
} }
function settings_post(App $a) function settings_post(App $a)
@ -335,69 +224,6 @@ function settings_post(App $a)
return; return;
} }
if (($a->argc > 1) && ($a->argv[1] === 'display')) {
BaseModule::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display');
$theme = !empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : $a->user['theme'];
$mobile_theme = !empty($_POST['mobile_theme']) ? Strings::escapeTags(trim($_POST['mobile_theme'])) : '';
$nosmile = !empty($_POST['nosmile']) ? intval($_POST['nosmile']) : 0;
$first_day_of_week = !empty($_POST['first_day_of_week']) ? intval($_POST['first_day_of_week']) : 0;
$infinite_scroll = !empty($_POST['infinite_scroll']) ? intval($_POST['infinite_scroll']) : 0;
$no_auto_update = !empty($_POST['no_auto_update']) ? intval($_POST['no_auto_update']) : 0;
$no_smart_threading = !empty($_POST['no_smart_threading']) ? intval($_POST['no_smart_threading']) : 0;
$browser_update = !empty($_POST['browser_update']) ? intval($_POST['browser_update']) : 0;
if ($browser_update != -1) {
$browser_update = $browser_update * 1000;
if ($browser_update < 10000) {
$browser_update = 10000;
}
}
$itemspage_network = !empty($_POST['itemspage_network']) ?
intval($_POST['itemspage_network']) :
DI::config()->get('system', 'itemspage_network');
if ($itemspage_network > 100) {
$itemspage_network = 100;
}
$itemspage_mobile_network = !empty($_POST['itemspage_mobile_network']) ?
intval($_POST['itemspage_mobile_network']) :
DI::config()->get('system', 'itemspage_network_mobile');
if ($itemspage_mobile_network > 100) {
$itemspage_mobile_network = 100;
}
if ($mobile_theme !== '') {
DI::pConfig()->set(local_user(), 'system', 'mobile_theme', $mobile_theme);
}
DI::pConfig()->set(local_user(), 'system', 'update_interval' , $browser_update);
DI::pConfig()->set(local_user(), 'system', 'itemspage_network' , $itemspage_network);
DI::pConfig()->set(local_user(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
DI::pConfig()->set(local_user(), 'system', 'no_smilies' , $nosmile);
DI::pConfig()->set(local_user(), 'system', 'first_day_of_week' , $first_day_of_week);
DI::pConfig()->set(local_user(), 'system', 'infinite_scroll' , $infinite_scroll);
DI::pConfig()->set(local_user(), 'system', 'no_auto_update' , $no_auto_update);
DI::pConfig()->set(local_user(), 'system', 'no_smart_threading' , $no_smart_threading);
if (in_array($theme, Theme::getAllowedList())) {
if ($theme == $a->user['theme']) {
// call theme_post only if theme has not been changed
if (($themeconfigfile = get_theme_config_file($theme)) !== null) {
require_once $themeconfigfile;
theme_post($a);
}
} else {
DBA::update('user', ['theme' => $theme], ['uid' => local_user()]);
}
} else {
notice(DI::l10n()->t('The theme you chose isn\'t available.'));
}
Hook::callAll('display_settings_post', $_POST);
DI::baseUrl()->redirect('settings/display');
return; // NOTREACHED
}
BaseModule::checkFormSecurityTokenRedirectOnError('/settings', 'settings'); BaseModule::checkFormSecurityTokenRedirectOnError('/settings', 'settings');
// Import Contacts from CSV file // Import Contacts from CSV file
@ -885,101 +711,6 @@ function settings_content(App $a)
return $o; return $o;
} }
/*
* DISPLAY SETTINGS
*/
if (($a->argc > 1) && ($a->argv[1] === 'display')) {
$default_theme = DI::config()->get('system', 'theme');
if (!$default_theme) {
$default_theme = 'default';
}
$default_mobile_theme = DI::config()->get('system', 'mobile-theme');
if (!$default_mobile_theme) {
$default_mobile_theme = 'none';
}
$allowed_themes = Theme::getAllowedList();
$themes = [];
$mobile_themes = ["---" => DI::l10n()->t('No special theme for mobile devices')];
foreach ($allowed_themes as $theme) {
$is_experimental = file_exists('view/theme/' . $theme . '/experimental');
$is_unsupported = file_exists('view/theme/' . $theme . '/unsupported');
$is_mobile = file_exists('view/theme/' . $theme . '/mobile');
if (!$is_experimental || ($is_experimental && (DI::config()->get('experimentals', 'exp_themes')==1 || is_null(DI::config()->get('experimentals', 'exp_themes'))))) {
$theme_name = ucfirst($theme);
if ($is_unsupported) {
$theme_name = DI::l10n()->t('%s - (Unsupported)', $theme_name);
} elseif ($is_experimental) {
$theme_name = DI::l10n()->t('%s - (Experimental)', $theme_name);
}
if ($is_mobile) {
$mobile_themes[$theme] = $theme_name;
} else {
$themes[$theme] = $theme_name;
}
}
}
$theme_selected = $a->user['theme'] ?: $default_theme;
$mobile_theme_selected = Session::get('mobile-theme', $default_mobile_theme);
$browser_update = intval(DI::pConfig()->get(local_user(), 'system', 'update_interval'));
if (intval($browser_update) != -1) {
$browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
}
$itemspage_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_network'));
$itemspage_network = (($itemspage_network > 0 && $itemspage_network < 101) ? $itemspage_network : DI::config()->get('system', 'itemspage_network'));
$itemspage_mobile_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network'));
$itemspage_mobile_network = (($itemspage_mobile_network > 0 && $itemspage_mobile_network < 101) ? $itemspage_mobile_network : DI::config()->get('system', 'itemspage_network_mobile'));
$nosmile = DI::pConfig()->get(local_user(), 'system', 'no_smilies', 0);
$first_day_of_week = DI::pConfig()->get(local_user(), 'system', 'first_day_of_week', 0);
$weekdays = [0 => DI::l10n()->t("Sunday"), 1 => DI::l10n()->t("Monday")];
$infinite_scroll = DI::pConfig()->get(local_user(), 'system', 'infinite_scroll', 0);
$no_auto_update = DI::pConfig()->get(local_user(), 'system', 'no_auto_update', 0);
$no_smart_threading = DI::pConfig()->get(local_user(), 'system', 'no_smart_threading', 0);
$theme_config = "";
if (($themeconfigfile = get_theme_config_file($theme_selected)) !== null) {
require_once $themeconfigfile;
$theme_config = theme_content($a);
}
$tpl = Renderer::getMarkupTemplate('settings/display.tpl');
$o = Renderer::replaceMacros($tpl, [
'$ptitle' => DI::l10n()->t('Display Settings'),
'$form_security_token' => BaseModule::getFormSecurityToken("settings_display"),
'$submit' => DI::l10n()->t('Save Settings'),
'$baseurl' => DI::baseUrl()->get(true),
'$uid' => local_user(),
'$theme' => ['theme', DI::l10n()->t('Display Theme:'), $theme_selected, '', $themes, true],
'$mobile_theme' => ['mobile_theme', DI::l10n()->t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, false],
'$ajaxint' => ['browser_update', DI::l10n()->t("Update browser every xx seconds"), $browser_update, DI::l10n()->t('Minimum of 10 seconds. Enter -1 to disable it.')],
'$itemspage_network' => ['itemspage_network', DI::l10n()->t("Number of items to display per page:"), $itemspage_network, DI::l10n()->t('Maximum of 100 items')],
'$itemspage_mobile_network' => ['itemspage_mobile_network', DI::l10n()->t("Number of items to display per page when viewed from mobile device:"), $itemspage_mobile_network, DI::l10n()->t('Maximum of 100 items')],
'$nosmile' => ['nosmile', DI::l10n()->t("Don't show emoticons"), $nosmile, DI::l10n()->t('Normally emoticons are replaced with matching symbols. This setting disables this behaviour.')],
'$calendar_title' => DI::l10n()->t('Calendar'),
'$first_day_of_week' => ['first_day_of_week', DI::l10n()->t('Beginning of week:'), $first_day_of_week, '', $weekdays, false],
'$infinite_scroll' => ['infinite_scroll', DI::l10n()->t("Infinite scroll"), $infinite_scroll, DI::l10n()->t('Automatic fetch new items when reaching the page end.')],
'$no_auto_update' => ['no_auto_update', DI::l10n()->t("Automatic updates only at the top of the network page"), $no_auto_update, DI::l10n()->t('When disabled, the network page is updated all the time, which could be confusing while reading.')],
'$no_smart_threading' => ['no_smart_threading', DI::l10n()->t('Disable Smart Threading'), $no_smart_threading, DI::l10n()->t('Disable the automatic suppression of extraneous thread indentation.')],
'$d_tset' => DI::l10n()->t('General Theme Settings'),
'$d_ctset' => DI::l10n()->t('Custom Theme Settings'),
'$d_cset' => DI::l10n()->t('Content Settings'),
'stitle' => DI::l10n()->t('Theme settings'),
'$theme_config' => $theme_config,
]);
return $o;
}
/* /*
* ACCOUNT SETTINGS * ACCOUNT SETTINGS
*/ */

View file

@ -258,6 +258,28 @@ class Theme
return 'view/theme/' . $theme . '/style.pcss' . (!empty($query_params) ? '?' . http_build_query($query_params) : ''); return 'view/theme/' . $theme . '/style.pcss' . (!empty($query_params) ? '?' . http_build_query($query_params) : '');
} }
/**
* Returns the path of the provided theme
*
* @param $theme
* @return string|null
*/
public static function getConfigFile($theme)
{
$theme = Strings::sanitizeFilePathItem($theme);
$a = DI::app();
$base_theme = $a->theme_info['extends'] ?? '';
if (file_exists("view/theme/$theme/config.php")) {
return "view/theme/$theme/config.php";
}
if ($base_theme && file_exists("view/theme/$base_theme/config.php")) {
return "view/theme/$base_theme/config.php";
}
return null;
}
/** /**
* Returns the background color of the provided theme if available. * Returns the background color of the provided theme if available.
* *

View file

@ -0,0 +1,211 @@
<?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\Settings;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\Theme;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Module\BaseSettings;
use Friendica\Network\HTTPException;
use Friendica\Util\Strings;
/**
* Module to update user settings
*/
class Display extends BaseSettings
{
public static function post(array $parameters = [])
{
if (!local_user() || !empty(DI::app()->user['uid']) && DI::app()->user['uid'] != local_user()) {
throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
}
self::checkFormSecurityTokenRedirectOnError('/settings/display', 'settings_display');
$theme = !empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : DI::app()->user['theme'];
$mobile_theme = !empty($_POST['mobile_theme']) ? Strings::escapeTags(trim($_POST['mobile_theme'])) : '';
$nosmile = !empty($_POST['nosmile']) ? intval($_POST['nosmile']) : 0;
$first_day_of_week = !empty($_POST['first_day_of_week']) ? intval($_POST['first_day_of_week']) : 0;
$infinite_scroll = !empty($_POST['infinite_scroll']) ? intval($_POST['infinite_scroll']) : 0;
$no_auto_update = !empty($_POST['no_auto_update']) ? intval($_POST['no_auto_update']) : 0;
$no_smart_threading = !empty($_POST['no_smart_threading']) ? intval($_POST['no_smart_threading']) : 0;
$hide_dislike = !empty($_POST['hide_dislike']) ? intval($_POST['hide_dislike']) : 0;
$browser_update = !empty($_POST['browser_update']) ? intval($_POST['browser_update']) : 0;
if ($browser_update != -1) {
$browser_update = $browser_update * 1000;
if ($browser_update < 10000) {
$browser_update = 10000;
}
}
$itemspage_network = !empty($_POST['itemspage_network']) ?
intval($_POST['itemspage_network']) :
DI::config()->get('system', 'itemspage_network');
if ($itemspage_network > 100) {
$itemspage_network = 100;
}
$itemspage_mobile_network = !empty($_POST['itemspage_mobile_network']) ?
intval($_POST['itemspage_mobile_network']) :
DI::config()->get('system', 'itemspage_network_mobile');
if ($itemspage_mobile_network > 100) {
$itemspage_mobile_network = 100;
}
if ($mobile_theme !== '') {
DI::pConfig()->set(local_user(), 'system', 'mobile_theme', $mobile_theme);
}
DI::pConfig()->set(local_user(), 'system', 'itemspage_network' , $itemspage_network);
DI::pConfig()->set(local_user(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
DI::pConfig()->set(local_user(), 'system', 'update_interval' , $browser_update);
DI::pConfig()->set(local_user(), 'system', 'no_auto_update' , $no_auto_update);
DI::pConfig()->set(local_user(), 'system', 'no_smilies' , $nosmile);
DI::pConfig()->set(local_user(), 'system', 'infinite_scroll' , $infinite_scroll);
DI::pConfig()->set(local_user(), 'system', 'no_smart_threading' , $no_smart_threading);
DI::pConfig()->set(local_user(), 'system', 'hide_dislike' , $hide_dislike);
DI::pConfig()->set(local_user(), 'system', 'first_day_of_week' , $first_day_of_week);
if (in_array($theme, Theme::getAllowedList())) {
if ($theme == DI::app()->user['theme']) {
// call theme_post only if theme has not been changed
if (($themeconfigfile = Theme::getConfigFile($theme)) !== null) {
require_once $themeconfigfile;
theme_post(DI::app());
}
} else {
DBA::update('user', ['theme' => $theme], ['uid' => local_user()]);
}
} else {
notice(DI::l10n()->t('The theme you chose isn\'t available.'));
}
Hook::callAll('display_settings_post', $_POST);
DI::baseUrl()->redirect('settings/display');
}
public static function content(array $parameters = [])
{
parent::content($parameters);
if (!local_user()) {
throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.'));
}
$default_theme = DI::config()->get('system', 'theme');
if (!$default_theme) {
$default_theme = 'default';
}
$default_mobile_theme = DI::config()->get('system', 'mobile-theme');
if (!$default_mobile_theme) {
$default_mobile_theme = 'none';
}
$allowed_themes = Theme::getAllowedList();
$themes = [];
$mobile_themes = ["---" => DI::l10n()->t('No special theme for mobile devices')];
foreach ($allowed_themes as $theme) {
$is_experimental = file_exists('view/theme/' . $theme . '/experimental');
$is_unsupported = file_exists('view/theme/' . $theme . '/unsupported');
$is_mobile = file_exists('view/theme/' . $theme . '/mobile');
if (!$is_experimental || (DI::config()->get('experimentals', 'exp_themes') || is_null(DI::config()->get('experimentals', 'exp_themes')))) {
$theme_name = ucfirst($theme);
if ($is_unsupported) {
$theme_name = DI::l10n()->t('%s - (Unsupported)', $theme_name);
} elseif ($is_experimental) {
$theme_name = DI::l10n()->t('%s - (Experimental)', $theme_name);
}
if ($is_mobile) {
$mobile_themes[$theme] = $theme_name;
} else {
$themes[$theme] = $theme_name;
}
}
}
$theme_selected = DI::app()->user['theme'] ?: $default_theme;
$mobile_theme_selected = Session::get('mobile-theme', $default_mobile_theme);
$itemspage_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_network'));
$itemspage_network = (($itemspage_network > 0 && $itemspage_network < 101) ? $itemspage_network : DI::config()->get('system', 'itemspage_network'));
$itemspage_mobile_network = intval(DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network'));
$itemspage_mobile_network = (($itemspage_mobile_network > 0 && $itemspage_mobile_network < 101) ? $itemspage_mobile_network : DI::config()->get('system', 'itemspage_network_mobile'));
$browser_update = intval(DI::pConfig()->get(local_user(), 'system', 'update_interval'));
if (intval($browser_update) != -1) {
$browser_update = (($browser_update == 0) ? 40 : $browser_update / 1000); // default if not set: 40 seconds
}
$no_auto_update = DI::pConfig()->get(local_user(), 'system', 'no_auto_update', 0);
$nosmile = DI::pConfig()->get(local_user(), 'system', 'no_smilies', 0);
$infinite_scroll = DI::pConfig()->get(local_user(), 'system', 'infinite_scroll', 0);
$no_smart_threading = DI::pConfig()->get(local_user(), 'system', 'no_smart_threading', 0);
$hide_dislike = DI::pConfig()->get(local_user(), 'system', 'hide_dislike', 0);
$first_day_of_week = DI::pConfig()->get(local_user(), 'system', 'first_day_of_week', 0);
$weekdays = [0 => DI::l10n()->t("Sunday"), 1 => DI::l10n()->t("Monday")];
$theme_config = '';
if ($themeconfigfile = Theme::getConfigFile($theme_selected)) {
require_once $themeconfigfile;
$theme_config = theme_content(DI::app());
}
$tpl = Renderer::getMarkupTemplate('settings/display.tpl');
$o = Renderer::replaceMacros($tpl, [
'$ptitle' => DI::l10n()->t('Display Settings'),
'$submit' => DI::l10n()->t('Save Settings'),
'$d_tset' => DI::l10n()->t('General Theme Settings'),
'$d_ctset' => DI::l10n()->t('Custom Theme Settings'),
'$d_cset' => DI::l10n()->t('Content Settings'),
'$stitle' => DI::l10n()->t('Theme settings'),
'$calendar_title' => DI::l10n()->t('Calendar'),
'$form_security_token' => self::getFormSecurityToken('settings_display'),
'$baseurl' => DI::baseUrl()->get(true),
'$uid' => local_user(),
'$theme' => ['theme', DI::l10n()->t('Display Theme:'), $theme_selected, '', $themes, true],
'$mobile_theme' => ['mobile_theme', DI::l10n()->t('Mobile Theme:'), $mobile_theme_selected, '', $mobile_themes, false],
'$theme_config' => $theme_config,
'$itemspage_network' => ['itemspage_network' , DI::l10n()->t('Number of items to display per page:'), $itemspage_network, DI::l10n()->t('Maximum of 100 items')],
'$itemspage_mobile_network' => ['itemspage_mobile_network', DI::l10n()->t('Number of items to display per page when viewed from mobile device:'), $itemspage_mobile_network, DI::l10n()->t('Maximum of 100 items')],
'$ajaxint' => ['browser_update' , DI::l10n()->t('Update browser every xx seconds'), $browser_update, DI::l10n()->t('Minimum of 10 seconds. Enter -1 to disable it.')],
'$no_auto_update' => ['no_auto_update' , DI::l10n()->t('Automatic updates only at the top of the network page'), $no_auto_update, DI::l10n()->t('When disabled, the network page is updated all the time, which could be confusing while reading.')],
'$nosmile' => ['nosmile' , DI::l10n()->t('Don\'t show emoticons'), $nosmile, DI::l10n()->t('Normally emoticons are replaced with matching symbols. This setting disables this behaviour.')],
'$infinite_scroll' => ['infinite_scroll' , DI::l10n()->t('Infinite scroll'), $infinite_scroll, DI::l10n()->t('Automatic fetch new items when reaching the page end.')],
'$no_smart_threading' => ['no_smart_threading' , DI::l10n()->t('Disable Smart Threading'), $no_smart_threading, DI::l10n()->t('Disable the automatic suppression of extraneous thread indentation.')],
'$hide_dislike' => ['hide_dislike' , DI::l10n()->t('Hide the Dislike feature'), $hide_dislike, DI::l10n()->t('Hides the Dislike button and dislike reactions on posts and comments.')],
'$first_day_of_week' => ['first_day_of_week', DI::l10n()->t('Beginning of week:'), $first_day_of_week, '', $weekdays, false],
]);
return $o;
}
}

View file

@ -373,6 +373,10 @@ class Post
$location_e = $location; $location_e = $location;
$owner_name_e = $this->getOwnerName(); $owner_name_e = $this->getOwnerName();
if (DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) {
$buttons['dislike'] = false;
}
// Disable features that aren't available in several networks // Disable features that aren't available in several networks
if ($buttons["dislike"] && !in_array($item["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) { if ($buttons["dislike"] && !in_array($item["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) {
$buttons["dislike"] = false; $buttons["dislike"] = false;

View file

@ -273,6 +273,7 @@ return [
'/verify' => [Module\Settings\TwoFactor\Verify::class, [R::GET, R::POST]], '/verify' => [Module\Settings\TwoFactor\Verify::class, [R::GET, R::POST]],
], ],
'/delegation[/{action}/{user_id}]' => [Module\Settings\Delegation::class, [R::GET, R::POST]], '/delegation[/{action}/{user_id}]' => [Module\Settings\Delegation::class, [R::GET, R::POST]],
'/display' => [Module\Settings\Display::class, [R::GET, R::POST]],
'/profile' => [ '/profile' => [
'[/]' => [Module\Settings\Profile\Index::class, [R::GET, R::POST]], '[/]' => [Module\Settings\Profile\Index::class, [R::GET, R::POST]],
'/photo[/new]' => [Module\Settings\Profile\Photo\Index::class, [R::GET, R::POST]], '/photo[/new]' => [Module\Settings\Profile\Photo\Index::class, [R::GET, R::POST]],

View file

@ -1,8 +1,8 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-{{$id}}"> <div class="wall-item-like-buttons" id="wall-item-like-buttons-{{$id}}">
<a href="#" class="icon like" title="{{$likethis}}" onclick="dolike({{$id}},'like'); return false"></a> <a href="#" class="icon like" title="{{$likethis}}" onclick="dolike({{$id}},'like'); return false"></a>
{{if $nolike}} {{if $dislike}}
<a href="#" class="icon dislike" title="{{$nolike}}" onclick="dolike({{$id}},'dislike'); return false"></a> <a href="#" class="icon dislike" title="{{$dislike}}" onclick="dolike({{$id}},'dislike'); return false"></a>
{{/if}} {{/if}}
<img id="like-rotator-{{$id}}" class="like-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" /> <img id="like-rotator-{{$id}}" class="like-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" />
</div> </div>

View file

@ -18,10 +18,11 @@
{{include file="field_checkbox.tpl" field=$nosmile}} {{include file="field_checkbox.tpl" field=$nosmile}}
{{include file="field_checkbox.tpl" field=$infinite_scroll}} {{include file="field_checkbox.tpl" field=$infinite_scroll}}
{{include file="field_checkbox.tpl" field=$no_smart_threading}} {{include file="field_checkbox.tpl" field=$no_smart_threading}}
{{include file="field_checkbox.tpl" field=$hide_dislike}}
<h2>{{$calendar_title}}</h2> <h2>{{$calendar_title}}</h2>
{{include file="field_select.tpl" field=$first_day_of_week}} {{include file="field_select.tpl" field=$first_day_of_week}}
<div class="settings-submit-wrapper" > <div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" /> <input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
</div> </div>

View file

@ -3,9 +3,9 @@
<button type="button" class="btn-link button-likes" id="like-{{$id}}" title="{{$likethis}}" onclick="dolike({{$id}},'like'); return false;" data-toggle="button"> <button type="button" class="btn-link button-likes" id="like-{{$id}}" title="{{$likethis}}" onclick="dolike({{$id}},'like'); return false;" data-toggle="button">
<i class="faded-icon page-action fa fa-thumbs-up" aria-hidden="true"></i> <i class="faded-icon page-action fa fa-thumbs-up" aria-hidden="true"></i>
</button> </button>
{{if $nolike}} {{if $dislike}}
<span class="icon-padding"> </span> <span class="icon-padding"> </span>
<button type="button" class="btn-link button-likes" id="dislike-{{$id}}" title="{{$nolike}}" onclick="dolike({{$id}},'dislike'); return false;" data-toggle="button"> <button type="button" class="btn-link button-likes" id="dislike-{{$id}}" title="{{$dislike}}" onclick="dolike({{$id}},'dislike'); return false;" data-toggle="button">
<i class="faded-icon page-action fa fa-thumbs-down" aria-hidden="true"></i> <i class="faded-icon page-action fa fa-thumbs-down" aria-hidden="true"></i>
</button> </button>
{{/if}} {{/if}}

View file

@ -73,6 +73,7 @@
{{include file="field_checkbox.tpl" field=$nosmile}} {{include file="field_checkbox.tpl" field=$nosmile}}
{{include file="field_checkbox.tpl" field=$infinite_scroll}} {{include file="field_checkbox.tpl" field=$infinite_scroll}}
{{include file="field_checkbox.tpl" field=$no_smart_threading}} {{include file="field_checkbox.tpl" field=$no_smart_threading}}
{{include file="field_checkbox.tpl" field=$hide_dislike}}
<div class="form-group pull-right settings-submit-wrapper" > <div class="form-group pull-right settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button> <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>

View file

@ -53,8 +53,10 @@
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="{{$item.star.classtagger}}" title="{{$item.star.tagger}}">{{$item.star.tagger}}</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}} {{/if}}
{{if $item.vote}} {{if $item.vote.like}}
<a href="#" id="like-{{$item.id}}"{{if $item.responses.like.self}} class="active{{/if}}" title="{{$item.vote.like.0}}" onclick="dolike({{$item.id}},'like'); return false">{{$item.vote.like.1}}</a> <a href="#" id="like-{{$item.id}}"{{if $item.responses.like.self}} class="active{{/if}}" title="{{$item.vote.like.0}}" onclick="dolike({{$item.id}},'like'); return false">{{$item.vote.like.1}}</a>
{{/if}}
{{if $item.vote.dislike}}
<a href="#" id="dislike-{{$item.id}}"{{if $item.responses.dislike.self}} class="active{{/if}}" title="{{$item.vote.dislike.0}}" onclick="dolike({{$item.id}},'dislike'); return false">{{$item.vote.dislike.1}}</a> <a href="#" id="dislike-{{$item.id}}"{{if $item.responses.dislike.self}} class="active{{/if}}" title="{{$item.vote.dislike.0}}" onclick="dolike({{$item.id}},'dislike'); return false">{{$item.vote.dislike.1}}</a>
{{/if}} {{/if}}

View file

@ -60,8 +60,10 @@
<a href="#" id="tagger-{{$item.id}}" onclick="itemTag({{$item.id}}); return false;" class="{{$item.star.classtagger}}" title="{{$item.star.tagger}}">{{$item.star.tagger}}</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}} {{/if}}
{{if $item.vote}} {{if $item.vote.like}}
<a href="#" id="like-{{$item.id}}"{{if $item.responses.like.self}} class="active"{{/if}} title="{{$item.vote.like.0}}" onclick="dolike({{$item.id}},'like'); return false">{{$item.vote.like.1}}</a> <a href="#" id="like-{{$item.id}}"{{if $item.responses.like.self}} class="active"{{/if}} title="{{$item.vote.like.0}}" onclick="dolike({{$item.id}},'like'); return false">{{$item.vote.like.1}}</a>
{{/if}}
{{if $item.vote.dislike}}
<a href="#" id="dislike-{{$item.id}}"{{if $item.responses.dislike.self}} class="active"{{/if}} title="{{$item.vote.dislike.0}}" onclick="dolike({{$item.id}},'dislike'); return false">{{$item.vote.dislike.1}}</a> <a href="#" id="dislike-{{$item.id}}"{{if $item.responses.dislike.self}} class="active"{{/if}} title="{{$item.vote.dislike.0}}" onclick="dolike({{$item.id}},'dislike'); return false">{{$item.vote.dislike.1}}</a>
{{/if}} {{/if}}