. */ /** * Common utility functions * * @package GNUsocial * @category Util * * @author Hugo Sales * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace App\Util; use Functional as F; use Symfony\Component\Config\Definition\Exception\Exception; abstract class Common { public static function config(string $section, string $field) { } /** * Normalize path by converting \ to / */ public static function normalizePath(string $path): string { if (\DIRECTORY_SEPARATOR !== '/') { $path = strtr($path, DIRECTORY_SEPARATOR, '/'); } return $path; } /** * Get plugin name from it's path, or null if not a plugin */ public static function pluginFromPath(string $path): ?string { $plug = strpos($path, '/plugins/'); if ($plug === false) { return null; } $cut = $plug + strlen('/plugins/'); $cut2 = strpos($path, '/', $cut); if ($cut2) { $final = substr($path, $cut, $cut2 - $cut); } else { // We might be running directly from the plugins dir? // If so, there's no place to store locale info. throw new Exception('The GNU social install dir seems to contain a piece named plugin'); } return $final; } /** * Check whether $haystack starts with $needle * * @param array|string $haystack if array, check that all strings start with $needle */ public static function startsWith($haystack, string $needle): bool { if (is_string($haystack)) { $length = strlen($needle); return substr($haystack, 0, $length) === $needle; } return F\every($haystack, function ($haystack) use ($needle) { return self::startsWith($haystack, $needle); }); } /** * Check whether $haystack ends with $needle * * @param array|string $haystack if array, check that all strings end with $needle */ public static function endsWith($haystack, string $needle) { if (is_string($haystack)) { $length = strlen($needle); if ($length == 0) { return true; } return substr($haystack, -$length) === $needle; } return F\every($haystack, function ($haystack) use ($needle) { return self::endsWith($haystack, $needle); }); } }