From 63da4a75e9da71a2decebd81b62554457dbd1fb5 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 4 Nov 2021 20:29:59 +0000 Subject: [PATCH 1/2] The boot.php had been cleared of most functions --- boot.php | 335 +----------------- include/api.php | 3 - mod/photos.php | 3 - mod/ping.php | 2 +- mod/settings.php | 2 +- mod/uimport.php | 4 +- mod/wall_upload.php | 3 - src/App.php | 14 + src/App/Page.php | 26 +- src/Content/Conversation.php | 6 +- src/Content/Nav.php | 2 +- src/Content/Widget.php | 2 +- src/Core/Lock/Type/SemaphoreLock.php | 4 +- src/Core/Renderer.php | 8 +- src/Core/System.php | 86 ++++- src/Core/Worker.php | 40 ++- src/Model/Item.php | 2 +- src/Model/Photo.php | 3 - src/Model/User.php | 2 +- src/Module/ActivityPub/Inbox.php | 3 +- src/Module/Admin/Site.php | 9 +- src/Module/BaseAdmin.php | 2 +- src/Module/Invite.php | 8 +- src/Module/Special/HTTPException.php | 2 +- src/Module/WellKnown/XSocialRelay.php | 5 +- src/Network/HTTPClient/Factory/HttpClient.php | 3 +- src/Object/Image.php | 12 - src/Protocol/DFRN.php | 44 ++- src/Protocol/Relay.php | 12 +- src/Render/FriendicaSmartyEngine.php | 2 +- src/Worker/OnePoll.php | 3 +- src/Worker/SpoolPost.php | 3 +- static/defaults.config.php | 10 + static/settings.config.php | 4 +- tests/datasets/config/.htconfig.php | 2 +- tests/src/Core/Lock/SemaphoreLockTest.php | 7 +- view/theme/frio/config.php | 2 +- 37 files changed, 279 insertions(+), 401 deletions(-) diff --git a/boot.php b/boot.php index a4d0fe5c73..d291220ce8 100644 --- a/boot.php +++ b/boot.php @@ -27,14 +27,7 @@ * easily as email does today. */ -use Friendica\Core\Protocol; -use Friendica\Core\System; -use Friendica\Database\DBA; -use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\Notification; -use Friendica\Util\BasePath; -use Friendica\Util\DateTimeFormat; define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_CODENAME', 'Siberian Iris'); @@ -51,51 +44,6 @@ define('NEW_TABLE_STRUCTURE_VERSION', 1288); */ define('EOL', "
\r\n"); -/** - * Image storage quality. - * - * Lower numbers save space at cost of image detail. - * For ease of upgrade, please do not change here. Set system.jpegquality = n in config/local.config.php, - * where n is between 1 and 100, and with very poor results below about 50 - */ -define('JPEG_QUALITY', 100); - -/** - * system.png_quality = n where is between 0 (uncompressed) to 9 - */ -define('PNG_QUALITY', 8); - -/** - * An alternate way of limiting picture upload sizes. Specify the maximum pixel - * length that pictures are allowed to be (for non-square pictures, it will apply - * to the longest side). Pictures longer than this length will be resized to be - * this length (on the longest side, the other side will be scaled appropriately). - * Modify this value using - * - * 'system' => [ - * 'max_image_length' => 'n', - * ... - * ], - * - * in config/local.config.php - * - * If you don't want to set a maximum length, set to -1. The default value is - * defined by 'MAX_IMAGE_LENGTH' below. - */ -define('MAX_IMAGE_LENGTH', -1); - -/** - * Not yet used - */ -define('DEFAULT_DB_ENGINE', 'InnoDB'); - -/** @deprecated since version 2019.03, please use \Friendica\Module\Register::CLOSED instead */ -define('REGISTER_CLOSED', \Friendica\Module\Register::CLOSED); -/** @deprecated since version 2019.03, please use \Friendica\Module\Register::APPROVE instead */ -define('REGISTER_APPROVE', \Friendica\Module\Register::APPROVE); -/** @deprecated since version 2019.03, please use \Friendica\Module\Register::OPEN instead */ -define('REGISTER_OPEN', \Friendica\Module\Register::OPEN); - /** * @name CP * @@ -111,72 +59,6 @@ define('CP_USERS_AND_GLOBAL', 2); * @} */ -/** - * These numbers are used in stored permissions - * and existing allocations MUST NEVER BE CHANGED - * OR RE-ASSIGNED! You may only add to them. - */ -$netgroup_ids = [ - Protocol::DFRN => (-1), - Protocol::ZOT => (-2), - Protocol::OSTATUS => (-3), - Protocol::FEED => (-4), - Protocol::DIASPORA => (-5), - Protocol::MAIL => (-6), - Protocol::FACEBOOK => (-8), - Protocol::LINKEDIN => (-9), - Protocol::XMPP => (-10), - Protocol::MYSPACE => (-11), - Protocol::GPLUS => (-12), - Protocol::PUMPIO => (-13), - Protocol::TWITTER => (-14), - Protocol::DIASPORA2 => (-15), - Protocol::STATUSNET => (-16), - Protocol::NEWS => (-18), - Protocol::ICALENDAR => (-19), - Protocol::PNUT => (-20), - - Protocol::PHANTOM => (-127), -]; - -/** - * Maximum number of "people who like (or don't like) this" that we will list by name - */ -define('MAX_LIKERS', 75); - -/** - * @name Notification - * - * Email notification options - * @{ - */ -/** @deprecated since 2020.03, use Notification\Type::INTRO instead */ -define('NOTIFY_INTRO', Notification\Type::INTRO); -/** @deprecated since 2020.03, use Notification\Type::CONFIRM instead */ -define('NOTIFY_CONFIRM', Notification\Type::CONFIRM); -/** @deprecated since 2020.03, use Notification\Type::WALL instead */ -define('NOTIFY_WALL', Notification\Type::WALL); -/** @deprecated since 2020.03, use Notification\Type::COMMENT instead */ -define('NOTIFY_COMMENT', Notification\Type::COMMENT); -/** @deprecated since 2020.03, use Notification\Type::MAIL instead */ -define('NOTIFY_MAIL', Notification\Type::MAIL); -/** @deprecated since 2020.03, use Notification\Type::SUGGEST instead */ -define('NOTIFY_SUGGEST', Notification\Type::SUGGEST); -/** @deprecated since 2020.03, use Notification\Type::PROFILE instead */ -define('NOTIFY_PROFILE', Notification\Type::PROFILE); -/** @deprecated since 2020.03, use Notification\Type::TAG_SELF instead */ -define('NOTIFY_TAGSELF', Notification\Type::TAG_SELF); -/** @deprecated since 2020.03, use Notification\Type::TAG_SHARE instead */ -define('NOTIFY_TAGSHARE', Notification\Type::TAG_SHARE); -/** @deprecated since 2020.03, use Notification\Type::POKE instead */ -define('NOTIFY_POKE', Notification\Type::POKE); -/** @deprecated since 2020.03, use Notification\Type::SHARE instead */ -define('NOTIFY_SHARE', Notification\Type::SHARE); - -/** @deprecated since 2020.12, use Notification\Type::SYSTEM instead */ -define('NOTIFY_SYSTEM', Notification\Type::SYSTEM); -/* @}*/ - /** * @name Gravity * @@ -204,18 +86,6 @@ define('PRIORITY_NEGLIGIBLE', 50); define('PRIORITIES', [PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE]); /* @}*/ -/** - * @name Social Relay settings - * - * See here: https://github.com/jaywink/social-relay - * and here: https://wiki.diasporafoundation.org/Relay_servers_for_public_posts - * @{ - */ -define('SR_SCOPE_NONE', ''); -define('SR_SCOPE_ALL', 'all'); -define('SR_SCOPE_TAGS', 'tags'); -/* @}*/ - // Normally this constant is defined - but not if "pcntl" isn't installed if (!defined("SIGTERM")) { define("SIGTERM", 15); @@ -229,6 +99,14 @@ if (!defined('CURLE_OPERATION_TIMEDOUT')) { define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED); } +if (!function_exists('exif_imagetype')) { + function exif_imagetype($file) + { + $size = getimagesize($file); + return $size[2]; + } +} + /** * Returns the user id of locally logged in user or false. * @@ -323,200 +201,3 @@ function info($s) $_SESSION['sysmsg_info'][] = $s; } - -function feed_birthday($uid, $tz) -{ - /** - * Determine the next birthday, but only if the birthday is published - * in the default profile. We _could_ also look for a private profile that the - * recipient can see, but somebody could get mad at us if they start getting - * public birthday greetings when they haven't made this info public. - * - * Assuming we are able to publish this info, we are then going to convert - * the start time from the owner's timezone to UTC. - * - * This will potentially solve the problem found with some social networks - * where birthdays are converted to the viewer's timezone and salutations from - * elsewhere in the world show up on the wrong day. We will convert it to the - * viewer's timezone also, but first we are going to convert it from the birthday - * person's timezone to GMT - so the viewer may find the birthday starting at - * 6:00PM the day before, but that will correspond to midnight to the birthday person. - */ - $birthday = ''; - - if (!strlen($tz)) { - $tz = 'UTC'; - } - - $profile = DBA::selectFirst('profile', ['dob'], ['uid' => $uid]); - if (DBA::isResult($profile)) { - $tmp_dob = substr($profile['dob'], 5); - if (intval($tmp_dob)) { - $y = DateTimeFormat::timezoneNow($tz, 'Y'); - $bd = $y . '-' . $tmp_dob . ' 00:00'; - $t_dob = strtotime($bd); - $now = strtotime(DateTimeFormat::timezoneNow($tz)); - if ($t_dob < $now) { - $bd = $y + 1 . '-' . $tmp_dob . ' 00:00'; - } - $birthday = DateTimeFormat::convert($bd, 'UTC', $tz, DateTimeFormat::ATOM); - } - } - - return $birthday; -} - -/** - * Check if current user has admin role. - * - * @return bool true if user is an admin - */ -function is_site_admin() -{ - $a = DI::app(); - - $admin_email = DI::config()->get('config', 'admin_email'); - - $adminlist = explode(',', str_replace(' ', '', $admin_email)); - - return local_user() && $admin_email && DBA::exists('user', ['uid' => $a->getLoggedInUserId(), 'email' => $adminlist]); -} - -/** - * Returns the complete URL of the current page, e.g.: http(s)://something.com/network - * - * Taken from http://webcheatsheet.com/php/get_current_page_url.php - */ -function curPageURL() -{ - $pageURL = 'http'; - if (!empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on")) { - $pageURL .= "s"; - } - - $pageURL .= "://"; - - if ($_SERVER["SERVER_PORT"] != "80" && $_SERVER["SERVER_PORT"] != "443") { - $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; - } else { - $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; - } - return $pageURL; -} - -function get_temppath() -{ - $temppath = DI::config()->get("system", "temppath"); - - if (($temppath != "") && System::isDirectoryUsable($temppath)) { - // We have a temp path and it is usable - return BasePath::getRealPath($temppath); - } - - // We don't have a working preconfigured temp path, so we take the system path. - $temppath = sys_get_temp_dir(); - - // Check if it is usable - if (($temppath != "") && System::isDirectoryUsable($temppath)) { - // Always store the real path, not the path through symlinks - $temppath = BasePath::getRealPath($temppath); - - // To avoid any interferences with other systems we create our own directory - $new_temppath = $temppath . "/" . DI::baseUrl()->getHostname(); - if (!is_dir($new_temppath)) { - /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method? - mkdir($new_temppath); - } - - if (System::isDirectoryUsable($new_temppath)) { - // The new path is usable, we are happy - DI::config()->set("system", "temppath", $new_temppath); - return $new_temppath; - } else { - // We can't create a subdirectory, strange. - // But the directory seems to work, so we use it but don't store it. - return $temppath; - } - } - - // Reaching this point means that the operating system is configured badly. - return ''; -} - -/** - * Returns the path where spool files are stored - * - * @return string Spool path - */ -function get_spoolpath() -{ - $spoolpath = DI::config()->get('system', 'spoolpath'); - if (($spoolpath != "") && System::isDirectoryUsable($spoolpath)) { - // We have a spool path and it is usable - return $spoolpath; - } - - // We don't have a working preconfigured spool path, so we take the temp path. - $temppath = get_temppath(); - - if ($temppath != "") { - // To avoid any interferences with other systems we create our own directory - $spoolpath = $temppath . "/spool"; - if (!is_dir($spoolpath)) { - mkdir($spoolpath); - } - - if (System::isDirectoryUsable($spoolpath)) { - // The new path is usable, we are happy - DI::config()->set("system", "spoolpath", $spoolpath); - return $spoolpath; - } else { - // We can't create a subdirectory, strange. - // But the directory seems to work, so we use it but don't store it. - return $temppath; - } - } - - // Reaching this point means that the operating system is configured badly. - return ""; -} - -if (!function_exists('exif_imagetype')) { - function exif_imagetype($file) - { - $size = getimagesize($file); - return $size[2]; - } -} - -function validate_include(&$file) -{ - $orig_file = $file; - - $file = realpath($file); - - if (strpos($file, getcwd()) !== 0) { - return false; - } - - $file = str_replace(getcwd() . "/", "", $file, $count); - if ($count != 1) { - return false; - } - - if ($orig_file !== $file) { - return false; - } - - $valid = false; - if (strpos($file, "include/") === 0) { - $valid = true; - } - - if (strpos($file, "addon/") === 0) { - $valid = true; - } - - // Simply return flag - return $valid; -} diff --git a/include/api.php b/include/api.php index 6a00268b04..2495f5d192 100644 --- a/include/api.php +++ b/include/api.php @@ -4604,9 +4604,6 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ // check max length of images on server $max_length = DI::config()->get('system', 'max_image_length'); - if (!$max_length) { - $max_length = MAX_IMAGE_LENGTH; - } if ($max_length > 0) { $Image->scaleDown($max_length); logger::info("File upload: Scaling picture to new size " . $max_length); diff --git a/mod/photos.php b/mod/photos.php index 2efd3a5a7a..5ca9aa600a 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -703,9 +703,6 @@ function photos_post(App $a) @unlink($src); $max_length = DI::config()->get('system', 'max_image_length'); - if (!$max_length) { - $max_length = MAX_IMAGE_LENGTH; - } if ($max_length > 0) { $image->scaleDown($max_length); } diff --git a/mod/ping.php b/mod/ping.php index c12594902a..fce4cbcf01 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -196,7 +196,7 @@ function ping_init(App $a) $myurl = DI::baseUrl() . '/profile/' . $a->getLoggedInUserNickname(); $mail_count = DBA::count('mail', ["`uid` = ? AND NOT `seen` AND `from-url` != ?", local_user(), $myurl]); - if (intval(DI::config()->get('config', 'register_policy')) === \Friendica\Module\Register::APPROVE && is_site_admin()) { + if (intval(DI::config()->get('config', 'register_policy')) === \Friendica\Module\Register::APPROVE && $a->isSiteAdmin()) { $regs = Friendica\Model\Register::getPending(); if (DBA::isResult($regs)) { diff --git a/mod/settings.php b/mod/settings.php index e84917c35c..d3fbd81db8 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -492,7 +492,7 @@ function settings_content(App $a) $settings_connectors = ''; Hook::callAll('connector_settings', $settings_connectors); - if (is_site_admin()) { + if ($a->isSiteAdmin()) { $diasp_enabled = DI::l10n()->t('Built-in support for %s connectivity is %s', DI::l10n()->t('Diaspora (Socialhome, Hubzilla)'), ((DI::config()->get('system', 'diaspora_enabled')) ? DI::l10n()->t('enabled') : DI::l10n()->t('disabled'))); $ostat_enabled = DI::l10n()->t('Built-in support for %s connectivity is %s', DI::l10n()->t('OStatus (GNU Social)'), ((DI::config()->get('system', 'ostatus_disabled')) ? DI::l10n()->t('disabled') : DI::l10n()->t('enabled'))); } else { diff --git a/mod/uimport.php b/mod/uimport.php index 62bece5e3a..a00bf25087 100644 --- a/mod/uimport.php +++ b/mod/uimport.php @@ -29,7 +29,7 @@ use Friendica\DI; function uimport_post(App $a) { - if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !is_site_admin()) { + if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) { notice(DI::l10n()->t('Permission denied.')); return; } @@ -42,7 +42,7 @@ function uimport_post(App $a) function uimport_content(App $a) { - if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !is_site_admin()) { + if ((DI::config()->get('config', 'register_policy') != \Friendica\Module\Register::OPEN) && !$a->isSiteAdmin()) { notice(DI::l10n()->t('User imports on closed servers can only be done by an administrator.')); return; } diff --git a/mod/wall_upload.php b/mod/wall_upload.php index 38819c9a58..fd88ab2bc2 100644 --- a/mod/wall_upload.php +++ b/mod/wall_upload.php @@ -177,9 +177,6 @@ function wall_upload_post(App $a, $desktopmode = true) @unlink($src); $max_length = DI::config()->get('system', 'max_image_length'); - if (!$max_length) { - $max_length = MAX_IMAGE_LENGTH; - } if ($max_length > 0) { $Image->scaleDown($max_length); $filesize = strlen($Image->asString()); diff --git a/src/App.php b/src/App.php index 44a5eb40df..dd84883887 100644 --- a/src/App.php +++ b/src/App.php @@ -154,6 +154,20 @@ class App return local_user() && $this->user_id && ($this->user_id == local_user()); } + /** + * Check if current user has admin role. + * + * @return bool true if user is an admin + */ + public function isSiteAdmin() + { + $admin_email = $this->config->get('config', 'admin_email'); + + $adminlist = explode(',', str_replace(' ', '', $admin_email)); + + return local_user() && $admin_email && $this->database->exists('user', ['uid' => $this->getLoggedInUserId(), 'email' => $adminlist]); + } + /** * Fetch the user id * @return int diff --git a/src/App/Page.php b/src/App/Page.php index 578f9ab3e3..fcb2d18533 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -257,6 +257,28 @@ class Page implements ArrayAccess ]) . $this->page['htmlhead']; } + /** + * Returns the complete URL of the current page, e.g.: http(s)://something.com/network + * + * Taken from http://webcheatsheet.com/php/get_current_page_url.php + */ + private function curPageURL() + { + $pageURL = 'http'; + if (!empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on")) { + $pageURL .= "s"; + } + + $pageURL .= "://"; + + if ($_SERVER["SERVER_PORT"] != "80" && $_SERVER["SERVER_PORT"] != "443") { + $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; + } else { + $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; + } + return $pageURL; + } + /** * Initializes Page->page['footer']. * @@ -290,9 +312,9 @@ class Page implements ArrayAccess */ if ($mode->isMobile() || $mode->isTablet()) { if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) { - $link = 'toggle_mobile?address=' . urlencode(curPageURL()); + $link = 'toggle_mobile?address=' . urlencode($this->curPageURL()); } else { - $link = 'toggle_mobile?off=1&address=' . urlencode(curPageURL()); + $link = 'toggle_mobile?off=1&address=' . urlencode($this->curPageURL()); } $this->page['footer'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate("toggle_mobile_footer.tpl"), [ '$toggle_link' => $link, diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 7bd7ea69fb..d8cbbf7cbb 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -223,12 +223,12 @@ class Conversation break; } } elseif ($total > 1) { - if ($total < MAX_LIKERS) { + if ($total < $this->config->get('system', 'max_likers')) { $likers = implode(', ', array_slice($links, 0, -1)); $likers .= ' ' . $this->l10n->t('and') . ' ' . $links[count($links) - 1]; } else { - $likers = implode(', ', array_slice($links, 0, MAX_LIKERS - 1)); - $likers .= ' ' . $this->l10n->t('and %d other people', $total - MAX_LIKERS); + $likers = implode(', ', array_slice($links, 0, $this->config->get('system', 'max_likers') - 1)); + $likers .= ' ' . $this->l10n->t('and %d other people', $total - $this->config->get('system', 'max_likers')); } $spanatts = "class=\"fakelink\" onclick=\"openClose('{$verb}list-$id');\""; diff --git a/src/Content/Nav.php b/src/Content/Nav.php index 90822c7e6f..506e71623c 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -295,7 +295,7 @@ class Nav } // Show the link to the admin configuration page if user is admin - if (is_site_admin()) { + if ($a->isSiteAdmin()) { $nav['admin'] = ['admin/', DI::l10n()->t('Admin'), '', DI::l10n()->t('Site setup and configuration')]; } diff --git a/src/Content/Widget.php b/src/Content/Widget.php index 4a3e918674..8ec57dce40 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -63,7 +63,7 @@ class Widget if (DI::config()->get('system', 'invitation_only')) { $x = intval(DI::pConfig()->get(local_user(), 'system', 'invites_remaining')); - if ($x || is_site_admin()) { + if ($x || DI::app()->isSiteAdmin()) { DI::page()['aside'] .= ''; diff --git a/src/Core/Lock/Type/SemaphoreLock.php b/src/Core/Lock/Type/SemaphoreLock.php index f68b5546cd..198e8dcc41 100644 --- a/src/Core/Lock/Type/SemaphoreLock.php +++ b/src/Core/Lock/Type/SemaphoreLock.php @@ -24,7 +24,7 @@ namespace Friendica\Core\Lock\Type; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Lock\Enum\Type; use Friendica\Core\Lock\Exception\InvalidLockDriverException; -use function get_temppath; +use Friendica\Core\System; class SemaphoreLock extends AbstractLock { @@ -44,7 +44,7 @@ class SemaphoreLock extends AbstractLock { $success = true; - $temp = get_temppath(); + $temp = System::getTempPath(); $file = $temp . '/' . $key . '.sem'; diff --git a/src/Core/Renderer.php b/src/Core/Renderer.php index 4eb4084728..608c707434 100644 --- a/src/Core/Renderer.php +++ b/src/Core/Renderer.php @@ -84,7 +84,7 @@ class Renderer $output = $t->replaceMacros($template, $vars); } catch (Exception $e) { DI::logger()->critical($e->getMessage(), ['template' => $template, 'vars' => $vars]); - $message = is_site_admin() ? + $message = DI::app()->isSiteAdmin() ? $e->getMessage() : DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); throw new ServiceUnavailableException($message); @@ -113,7 +113,7 @@ class Renderer $template = $t->getTemplateFile($file, $subDir); } catch (Exception $e) { DI::logger()->critical($e->getMessage(), ['file' => $file, 'subDir' => $subDir]); - $message = is_site_admin() ? + $message = DI::app()->isSiteAdmin() ? $e->getMessage() : DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); throw new ServiceUnavailableException($message); @@ -140,7 +140,7 @@ class Renderer } else { $admin_message = DI::l10n()->t('template engine cannot be registered without a name.'); DI::logger()->critical($admin_message, ['class' => $class]); - $message = is_site_admin() ? + $message = DI::app()->isSiteAdmin() ? $admin_message : DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); throw new ServiceUnavailableException($message); @@ -174,7 +174,7 @@ class Renderer $admin_message = DI::l10n()->t('template engine is not registered!'); DI::logger()->critical($admin_message, ['template_engine' => $template_engine]); - $message = is_site_admin() ? + $message = DI::app()->isSiteAdmin() ? $admin_message : DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); throw new ServiceUnavailableException($message); diff --git a/src/Core/System.php b/src/Core/System.php index f680b6530d..2a7510ec76 100644 --- a/src/Core/System.php +++ b/src/Core/System.php @@ -21,10 +21,12 @@ namespace Friendica\Core; +use Exception; use Friendica\DI; use Friendica\Network\HTTPException\FoundException; use Friendica\Network\HTTPException\MovedPermanentlyException; use Friendica\Network\HTTPException\TemporaryRedirectException; +use Friendica\Util\BasePath; use Friendica\Util\XML; /** @@ -323,6 +325,88 @@ class System exit(); } + /** + * Fetch the temp path of the system + * + * @return string Path for temp files + */ + public static function getTempPath() + { + $temppath = DI::config()->get("system", "temppath"); + + if (($temppath != "") && System::isDirectoryUsable($temppath)) { + // We have a temp path and it is usable + return BasePath::getRealPath($temppath); + } + + // We don't have a working preconfigured temp path, so we take the system path. + $temppath = sys_get_temp_dir(); + + // Check if it is usable + if (($temppath != "") && System::isDirectoryUsable($temppath)) { + // Always store the real path, not the path through symlinks + $temppath = BasePath::getRealPath($temppath); + + // To avoid any interferences with other systems we create our own directory + $new_temppath = $temppath . "/" . DI::baseUrl()->getHostname(); + if (!is_dir($new_temppath)) { + /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method? + mkdir($new_temppath); + } + + if (System::isDirectoryUsable($new_temppath)) { + // The new path is usable, we are happy + DI::config()->set("system", "temppath", $new_temppath); + return $new_temppath; + } else { + // We can't create a subdirectory, strange. + // But the directory seems to work, so we use it but don't store it. + return $temppath; + } + } + + // Reaching this point means that the operating system is configured badly. + return ''; + } + + /** + * Returns the path where spool files are stored + * + * @return string Spool path + */ + public static function getSpoolPath() + { + $spoolpath = DI::config()->get('system', 'spoolpath'); + if (($spoolpath != "") && System::isDirectoryUsable($spoolpath)) { + // We have a spool path and it is usable + return $spoolpath; + } + + // We don't have a working preconfigured spool path, so we take the temp path. + $temppath = self::getTempPath(); + + if ($temppath != "") { + // To avoid any interferences with other systems we create our own directory + $spoolpath = $temppath . "/spool"; + if (!is_dir($spoolpath)) { + mkdir($spoolpath); + } + + if (System::isDirectoryUsable($spoolpath)) { + // The new path is usable, we are happy + DI::config()->set("system", "spoolpath", $spoolpath); + return $spoolpath; + } else { + // We can't create a subdirectory, strange. + // But the directory seems to work, so we use it but don't store it. + return $temppath; + } + } + + // Reaching this point means that the operating system is configured badly. + return ""; + } + /// @todo Move the following functions from boot.php /* function local_user() @@ -331,7 +415,5 @@ class System function notice($s) function info($s) function is_site_admin() - function get_temppath() - function get_spoolpath() */ } diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 0431c79521..3d1648ea45 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -277,6 +277,44 @@ class Worker return DBA::exists('workerqueue', $condition); } + /** + * Checks if the given file is valid to be included + * + * @param mixed $file + * @return bool + */ + private static function validateInclude(&$file) + { + $orig_file = $file; + + $file = realpath($file); + + if (strpos($file, getcwd()) !== 0) { + return false; + } + + $file = str_replace(getcwd() . "/", "", $file, $count); + if ($count != 1) { + return false; + } + + if ($orig_file !== $file) { + return false; + } + + $valid = false; + if (strpos($file, "include/") === 0) { + $valid = true; + } + + if (strpos($file, "addon/") === 0) { + $valid = true; + } + + // Simply return flag + return $valid; + } + /** * Execute a worker entry * @@ -360,7 +398,7 @@ class Worker $include = "include/".$include.".php"; } - if (!validate_include($include)) { + if (!self::validateInclude($include)) { Logger::warning("Include file is not valid", ['file' => $argv[0]]); $stamp = (float)microtime(true); DBA::delete('workerqueue', ['id' => $queue["id"]]); diff --git a/src/Model/Item.php b/src/Model/Item.php index 297506176a..094fa3b029 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -448,7 +448,7 @@ class Item // We use "microtime" to keep the arrival order and "mt_rand" to avoid duplicates $file = 'item-' . round(microtime(true) * 10000) . '-' . mt_rand() . '.msg'; - $spoolpath = get_spoolpath(); + $spoolpath = System::getSpoolPath(); if ($spoolpath != "") { $spool = $spoolpath . '/' . $file; diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 13beb05b3c..d27bac47ac 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -951,9 +951,6 @@ class Photo @unlink($src); $max_length = DI::config()->get('system', 'max_image_length'); - if (!$max_length) { - $max_length = MAX_IMAGE_LENGTH; - } if ($max_length > 0) { $Image->scaleDown($max_length); $filesize = strlen($Image->asString()); diff --git a/src/Model/User.php b/src/Model/User.php index 65e64cb5cd..92f50dd25c 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -706,7 +706,7 @@ class User { $cache = new CacheItemPool(); $cache->changeConfig([ - 'cacheDirectory' => get_temppath() . '/password-exposed-cache/', + 'cacheDirectory' => System::getTempPath() . '/password-exposed-cache/', ]); try { diff --git a/src/Module/ActivityPub/Inbox.php b/src/Module/ActivityPub/Inbox.php index 36940cb2de..2ef12a83d8 100644 --- a/src/Module/ActivityPub/Inbox.php +++ b/src/Module/ActivityPub/Inbox.php @@ -23,6 +23,7 @@ namespace Friendica\Module\ActivityPub; use Friendica\BaseModule; use Friendica\Core\Logger; +use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Protocol\ActivityPub; @@ -48,7 +49,7 @@ class Inbox extends BaseModule } else { $filename = 'failed-activitypub'; } - $tempfile = tempnam(get_temppath(), $filename); + $tempfile = tempnam(System::getTempPath(), $filename); file_put_contents($tempfile, json_encode(['parameters' => $parameters, 'header' => $_SERVER, 'body' => $postdata], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); Logger::notice('Incoming message stored', ['file' => $tempfile]); } diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index 71deb67ef3..2cc4ac23a3 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -24,6 +24,7 @@ namespace Friendica\Module\Admin; use Friendica\App; use Friendica\Core\Renderer; use Friendica\Core\Search; +use Friendica\Core\System; use Friendica\Core\Theme; use Friendica\Core\Worker; use Friendica\Database\DBA; @@ -138,8 +139,8 @@ class Site extends BaseAdmin $theme = (!empty($_POST['theme']) ? Strings::escapeTags(trim($_POST['theme'])) : ''); $theme_mobile = (!empty($_POST['theme_mobile']) ? Strings::escapeTags(trim($_POST['theme_mobile'])) : ''); $maximagesize = (!empty($_POST['maximagesize']) ? intval(trim($_POST['maximagesize'])) : 0); - $maximagelength = (!empty($_POST['maximagelength']) ? intval(trim($_POST['maximagelength'])) : MAX_IMAGE_LENGTH); - $jpegimagequality = (!empty($_POST['jpegimagequality']) ? intval(trim($_POST['jpegimagequality'])) : JPEG_QUALITY); + $maximagelength = (!empty($_POST['maximagelength']) ? intval(trim($_POST['maximagelength'])) : -1); + $jpegimagequality = (!empty($_POST['jpegimagequality']) ? intval(trim($_POST['jpegimagequality'])) : 100); $register_policy = (!empty($_POST['register_policy']) ? intval(trim($_POST['register_policy'])) : 0); $daily_registrations = (!empty($_POST['max_daily_registrations']) ? intval(trim($_POST['max_daily_registrations'])) : 0); @@ -463,7 +464,7 @@ class Site extends BaseAdmin $additional_info = DI::config()->get('config', 'info'); // Automatically create temporary paths - get_temppath(); + System::getTempPath(); /* Register policy */ $register_choices = [ @@ -609,7 +610,7 @@ class Site extends BaseAdmin '$worker_fastlane' => ['worker_fastlane', DI::l10n()->t('Enable fastlane'), DI::config()->get('system', 'worker_fastlane'), DI::l10n()->t('When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.')], '$relay_directly' => ['relay_directly', DI::l10n()->t('Direct relay transfer'), DI::config()->get('system', 'relay_directly'), DI::l10n()->t('Enables the direct transfer to other servers without using the relay servers')], - '$relay_scope' => ['relay_scope', DI::l10n()->t('Relay scope'), DI::config()->get('system', 'relay_scope'), DI::l10n()->t('Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'), [SR_SCOPE_NONE => DI::l10n()->t('Disabled'), SR_SCOPE_ALL => DI::l10n()->t('all'), SR_SCOPE_TAGS => DI::l10n()->t('tags')]], + '$relay_scope' => ['relay_scope', DI::l10n()->t('Relay scope'), DI::config()->get('system', 'relay_scope'), DI::l10n()->t('Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'), [Relay::SCOPE_NONE => DI::l10n()->t('Disabled'), Relay::SCOPE_ALL => DI::l10n()->t('all'), Relay::SCOPE_TAGS => DI::l10n()->t('tags')]], '$relay_server_tags' => ['relay_server_tags', DI::l10n()->t('Server tags'), DI::config()->get('system', 'relay_server_tags'), DI::l10n()->t('Comma separated list of tags for the "tags" subscription.')], '$relay_deny_tags' => ['relay_deny_tags', DI::l10n()->t('Deny Server tags'), DI::config()->get('system', 'relay_deny_tags'), DI::l10n()->t('Comma separated list of tags that are rejected.')], '$relay_user_tags' => ['relay_user_tags', DI::l10n()->t('Allow user tags'), DI::config()->get('system', 'relay_user_tags'), DI::l10n()->t('If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags".')], diff --git a/src/Module/BaseAdmin.php b/src/Module/BaseAdmin.php index 5d5841f994..69c2879de6 100644 --- a/src/Module/BaseAdmin.php +++ b/src/Module/BaseAdmin.php @@ -59,7 +59,7 @@ abstract class BaseAdmin extends BaseModule } } - if (!is_site_admin()) { + if (!DI::app()->isSiteAdmin()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('You don\'t have access to administration pages.')); } diff --git a/src/Module/Invite.php b/src/Module/Invite.php index 82b8c604a9..566e54b129 100644 --- a/src/Module/Invite.php +++ b/src/Module/Invite.php @@ -67,7 +67,7 @@ class Invite extends BaseModule if ($config->get('system', 'invitation_only')) { $invitation_only = true; $invites_remaining = DI::pConfig()->get(local_user(), 'system', 'invites_remaining'); - if ((!$invites_remaining) && (!is_site_admin())) { + if ((!$invites_remaining) && (!$app->isSiteAdmin())) { throw new HTTPException\ForbiddenException(); } } @@ -82,11 +82,11 @@ class Invite extends BaseModule continue; } - if ($invitation_only && ($invites_remaining || is_site_admin())) { + if ($invitation_only && ($invites_remaining || $app->isSiteAdmin())) { $code = Model\Register::createForInvitation(); $nmessage = str_replace('$invite_code', $code, $message); - if (!is_site_admin()) { + if (!$app->isSiteAdmin()) { $invites_remaining--; if ($invites_remaining >= 0) { DI::pConfig()->set(local_user(), 'system', 'invites_remaining', $invites_remaining); @@ -138,7 +138,7 @@ class Invite extends BaseModule if ($config->get('system', 'invitation_only')) { $inviteOnly = true; $x = DI::pConfig()->get(local_user(), 'system', 'invites_remaining'); - if ((!$x) && (!is_site_admin())) { + if ((!$x) && (!$app->isSiteAdmin())) { throw new HTTPException\ForbiddenException(DI::l10n()->t('You have no more invitations available')); } } diff --git a/src/Module/Special/HTTPException.php b/src/Module/Special/HTTPException.php index 8fe4c8ce57..3b771c3ac7 100644 --- a/src/Module/Special/HTTPException.php +++ b/src/Module/Special/HTTPException.php @@ -51,7 +51,7 @@ class HTTPException '$stack_trace' => DI::l10n()->t('Stack trace:'), ]; - if (is_site_admin()) { + if (DI::app()->isSiteAdmin()) { $vars['$thrown'] = DI::l10n()->t('Exception thrown in %s:%d', $e->getFile(), $e->getLine()); $vars['$trace'] = $e->getTraceAsString(); } diff --git a/src/Module/WellKnown/XSocialRelay.php b/src/Module/WellKnown/XSocialRelay.php index 15b8e276ad..96968680dc 100644 --- a/src/Module/WellKnown/XSocialRelay.php +++ b/src/Module/WellKnown/XSocialRelay.php @@ -24,6 +24,7 @@ namespace Friendica\Module\WellKnown; use Friendica\BaseModule; use Friendica\DI; use Friendica\Model\Search; +use Friendica\Protocol\Relay; /** * Node subscription preferences for social realy systems @@ -40,7 +41,7 @@ class XSocialRelay extends BaseModule $systemTags = []; $userTags = []; - if ($scope == SR_SCOPE_TAGS) { + if ($scope == Relay::SCOPE_TAGS) { $server_tags = $config->get('system', 'relay_server_tags'); $tagitems = explode(',', $server_tags); @@ -57,7 +58,7 @@ class XSocialRelay extends BaseModule $tagList = array_unique(array_merge($systemTags, $userTags)); $relay = [ - 'subscribe' => ($scope != SR_SCOPE_NONE), + 'subscribe' => ($scope != Relay::SCOPE_NONE), 'scope' => $scope, 'tags' => $tagList, 'protocols' => [ diff --git a/src/Network/HTTPClient/Factory/HttpClient.php b/src/Network/HTTPClient/Factory/HttpClient.php index c7ee68a926..18fc73ab88 100644 --- a/src/Network/HTTPClient/Factory/HttpClient.php +++ b/src/Network/HTTPClient/Factory/HttpClient.php @@ -5,6 +5,7 @@ namespace Friendica\Network\HTTPClient\Factory; use Friendica\App; use Friendica\BaseFactory; use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\System; use Friendica\Network\HTTPClient\Client; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Util\Profiler; @@ -106,7 +107,7 @@ class HttpClient extends BaseFactory $resolver->setMaxResponseDataSize(1000000); // Designate a temporary file that will store cookies during the session. // Some websites test the browser for cookie support, so this enhances results. - $resolver->setCookieJar(get_temppath() .'/resolver-cookie-' . Strings::getRandomName(10)); + $resolver->setCookieJar(System::getTempPath() .'/resolver-cookie-' . Strings::getRandomName(10)); return new Client\HttpClient($logger, $this->profiler, $guzzle, $resolver); } diff --git a/src/Object/Image.php b/src/Object/Image.php index dd95903696..4551db248c 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -134,9 +134,6 @@ class Image switch ($this->getType()) { case "image/png": $quality = DI::config()->get('system', 'png_quality'); - if ((! $quality) || ($quality > 9)) { - $quality = PNG_QUALITY; - } /* * From http://www.imagemagick.org/script/command-line-options.php#quality: * @@ -150,9 +147,6 @@ class Image break; case "image/jpeg": $quality = DI::config()->get('system', 'jpeg_quality'); - if ((! $quality) || ($quality > 100)) { - $quality = JPEG_QUALITY; - } $this->image->setCompressionQuality($quality); } @@ -680,16 +674,10 @@ class Image switch ($this->getType()) { case "image/png": $quality = DI::config()->get('system', 'png_quality'); - if ((!$quality) || ($quality > 9)) { - $quality = PNG_QUALITY; - } imagepng($this->image, null, $quality); break; case "image/jpeg": $quality = DI::config()->get('system', 'jpeg_quality'); - if ((!$quality) || ($quality > 100)) { - $quality = JPEG_QUALITY; - } imagejpeg($this->image, null, $quality); } $string = ob_get_contents(); diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index ac51e104a9..79a90d403c 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -413,6 +413,48 @@ class DFRN return $root; } + /** + * Determine the next birthday, but only if the birthday is published + * in the default profile. We _could_ also look for a private profile that the + * recipient can see, but somebody could get mad at us if they start getting + * public birthday greetings when they haven't made this info public. + * + * Assuming we are able to publish this info, we are then going to convert + * the start time from the owner's timezone to UTC. + * + * This will potentially solve the problem found with some social networks + * where birthdays are converted to the viewer's timezone and salutations from + * elsewhere in the world show up on the wrong day. We will convert it to the + * viewer's timezone also, but first we are going to convert it from the birthday + * person's timezone to GMT - so the viewer may find the birthday starting at + * 6:00PM the day before, but that will correspond to midnight to the birthday person. + */ + private static function determineNextBirthday($uid, $tz) + { + $birthday = ''; + + if (!strlen($tz)) { + $tz = 'UTC'; + } + + $profile = DBA::selectFirst('profile', ['dob'], ['uid' => $uid]); + if (DBA::isResult($profile)) { + $tmp_dob = substr($profile['dob'], 5); + if (intval($tmp_dob)) { + $y = DateTimeFormat::timezoneNow($tz, 'Y'); + $bd = $y . '-' . $tmp_dob . ' 00:00'; + $t_dob = strtotime($bd); + $now = strtotime(DateTimeFormat::timezoneNow($tz)); + if ($t_dob < $now) { + $bd = $y + 1 . '-' . $tmp_dob . ' 00:00'; + } + $birthday = DateTimeFormat::convert($bd, 'UTC', $tz, DateTimeFormat::ATOM); + } + } + + return $birthday; + } + /** * Adds the author element in the header for the DFRN protocol * @@ -467,7 +509,7 @@ class DFRN return $author; } - $birthday = feed_birthday($owner['uid'], $owner['timezone']); + $birthday = self::determineNextBirthday($owner['uid'], $owner['timezone']); if ($birthday) { XML::addElement($doc, $author, "dfrn:birthday", $birthday); diff --git a/src/Protocol/Relay.php b/src/Protocol/Relay.php index da9a2e3923..d98fda46d7 100644 --- a/src/Protocol/Relay.php +++ b/src/Protocol/Relay.php @@ -37,9 +37,15 @@ use Friendica\Util\Strings; /** * Base class for relay handling + * @see https://github.com/jaywink/social-relay + * @see https://wiki.diasporafoundation.org/Relay_servers_for_public_posts */ class Relay { + const SCOPE_NONE = ''; + const SCOPE_ALL = 'all'; + const SCOPE_TAGS = 'tags'; + /** * Check if a post is wanted * @@ -55,7 +61,7 @@ class Relay $scope = $config->get('system', 'relay_scope'); - if ($scope == SR_SCOPE_NONE) { + if ($scope == self::SCOPE_NONE) { Logger::info('Server does not accept relay posts - rejected', ['network' => $network, 'url' => $url]); return false; } @@ -74,7 +80,7 @@ class Relay $userTags = []; $denyTags = []; - if ($scope == SR_SCOPE_TAGS) { + if ($scope == self::SCOPE_TAGS) { $server_tags = $config->get('system', 'relay_server_tags'); $tagitems = explode(',', mb_strtolower($server_tags)); foreach ($tagitems as $tag) { @@ -119,7 +125,7 @@ class Relay } } - if ($scope == SR_SCOPE_ALL) { + if ($scope == self::SCOPE_ALL) { Logger::info('Server accept all posts - accepted', ['network' => $network, 'url' => $url]); return true; } diff --git a/src/Render/FriendicaSmartyEngine.php b/src/Render/FriendicaSmartyEngine.php index c336273c72..e482b70e64 100644 --- a/src/Render/FriendicaSmartyEngine.php +++ b/src/Render/FriendicaSmartyEngine.php @@ -51,7 +51,7 @@ final class FriendicaSmartyEngine extends TemplateEngine if (!is_writable(DI::basePath() . '/view/smarty3')) { $admin_message = DI::l10n()->t('The folder view/smarty3/ must be writable by webserver.'); DI::logger()->critical($admin_message); - $message = is_site_admin() ? + $message = DI::app()->isSiteAdmin() ? $admin_message : DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.'); throw new ServiceUnavailableException($message); diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index 1b5fdaa343..a5567841e1 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -23,6 +23,7 @@ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Core\Protocol; +use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -152,7 +153,7 @@ class OnePoll return false; } - $cookiejar = tempnam(get_temppath(), 'cookiejar-onepoll-'); + $cookiejar = tempnam(System::getTempPath(), 'cookiejar-onepoll-'); $curlResult = DI::httpClient()->get($contact['poll'], [HttpClientOptions::COOKIEJAR => $cookiejar]); unlink($cookiejar); diff --git a/src/Worker/SpoolPost.php b/src/Worker/SpoolPost.php index e32cee1f2f..9501dc64a4 100644 --- a/src/Worker/SpoolPost.php +++ b/src/Worker/SpoolPost.php @@ -22,6 +22,7 @@ namespace Friendica\Worker; use Friendica\Core\Logger; +use Friendica\Core\System; use Friendica\Model\Item; /** @@ -29,7 +30,7 @@ use Friendica\Model\Item; */ class SpoolPost { public static function execute() { - $path = get_spoolpath(); + $path = System::getSpoolPath(); if (($path != '') && is_writable($path)){ if ($dh = opendir($path)) { diff --git a/static/defaults.config.php b/static/defaults.config.php index 0d25a1751a..0cfc2f6582 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -295,6 +295,12 @@ return [ // on detected mobile devices 'itemspage_network_mobile' => 20, + // jpeg_quality (Integer) + // + // Lower numbers save space at cost of image detail + // where n is between 1 and 100, and with very poor results below about 50 + 'jpeg_quality' => 100, + // like_no_comment (Boolean) // Don't update the "commented" value of an item when it is liked. 'like_no_comment' => false, @@ -359,6 +365,10 @@ return [ // If you don't want to set a maximum length, set to -1. 'max_image_length' => -1, + // max_likers (Integer) + // Maximum number of "people who like (or don't like) this" that we will list by name + 'max_likers' => 75, + // max_processes_backend (Integer) // Maximum number of concurrent database processes for background tasks. 'max_processes_backend' => 5, diff --git a/static/settings.config.php b/static/settings.config.php index 5530163dc8..e3a7a10a2c 100644 --- a/static/settings.config.php +++ b/static/settings.config.php @@ -176,9 +176,9 @@ return [ // Directly transmit content to relay subscribers without using a relay server 'relay_directly' => false, - // relay_scope (SR_SCOPE_NONE, SR_SCOPE_TAGS or SR_SCOPE_ALL) + // relay_scope (Relay::SCOPE_NONE, Relay::SCOPE_TAGS or Relay::SCOPE_ALL) // Defines the scope of accepted posts from the relay servers - 'relay_scope' => SR_SCOPE_NONE, + 'relay_scope' => '', // relay_server_tags (String) // Comma separated list of tags for the "tags" subscription. diff --git a/tests/datasets/config/.htconfig.php b/tests/datasets/config/.htconfig.php index 7ab35bb28e..696ca5a03c 100644 --- a/tests/datasets/config/.htconfig.php +++ b/tests/datasets/config/.htconfig.php @@ -31,7 +31,7 @@ $a->config['sitename'] = "Friendica My Network"; // and/or approve/deny the request. // In order to perform system administration via the admin panel, admin_email // must precisely match the email address of the person logged in. -$a->config['register_policy'] = REGISTER_OPEN; +$a->config['register_policy'] = Friendica\Module\Register::OPEN; $a->config['register_text'] = 'A register text'; $a->config['admin_email'] = 'admin@test.it'; $a->config['admin_nickname'] = 'Friendly admin'; diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 17e83a37d3..02cd447090 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -26,6 +26,7 @@ use Friendica\App; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Config\Type\JitConfig; use Friendica\Core\Lock\Type\SemaphoreLock; +use Friendica\Core\System; use Friendica\DI; use Mockery; use Mockery\MockInterface; @@ -73,7 +74,7 @@ class SemaphoreLockTest extends LockTest */ public function testMissingFileNotOverriding() { - $file = get_temppath() . '/test.sem'; + $file = System::getTempPath() . '/test.sem'; touch($file); self::assertTrue(file_exists($file)); @@ -91,7 +92,7 @@ class SemaphoreLockTest extends LockTest */ public function testMissingFileOverriding() { - $file = get_temppath() . '/test.sem'; + $file = System::getTempPath() . '/test.sem'; touch($file); self::assertTrue(file_exists($file)); @@ -104,7 +105,7 @@ class SemaphoreLockTest extends LockTest */ public function testOverrideSemFile() { - $file = get_temppath() . '/test.sem'; + $file = System::getTempPath() . '/test.sem'; touch($file); self::assertTrue(file_exists($file)); diff --git a/view/theme/frio/config.php b/view/theme/frio/config.php index 38334e1d18..ee4f036607 100644 --- a/view/theme/frio/config.php +++ b/view/theme/frio/config.php @@ -57,7 +57,7 @@ function theme_post(App $a) function theme_admin_post(App $a) { - if (!is_site_admin()) { + if (!$a->isSiteAdmin()) { return; } From 99a93a422bd182c3d8b513638d3750a6493b654e Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 4 Nov 2021 23:01:41 +0000 Subject: [PATCH 2/2] todo removed --- src/Core/System.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/Core/System.php b/src/Core/System.php index 2a7510ec76..2cc9a48bc3 100644 --- a/src/Core/System.php +++ b/src/Core/System.php @@ -406,14 +406,4 @@ class System // Reaching this point means that the operating system is configured badly. return ""; } - - /// @todo Move the following functions from boot.php - /* - function local_user() - function public_contact() - function remote_user() - function notice($s) - function info($s) - function is_site_admin() - */ }