]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Merge pull request #1635 from ArthurHoaro/feature/phpcs
authorArthurHoaro <arthur@hoa.ro>
Tue, 10 Nov 2020 09:46:04 +0000 (10:46 +0100)
committerGitHub <noreply@github.com>
Tue, 10 Nov 2020 09:46:04 +0000 (10:46 +0100)
95 files changed:
.travis.yml
Makefile
application/History.php
application/Languages.php
application/Thumbnailer.php
application/TimeZone.php
application/Utils.php
application/api/ApiMiddleware.php
application/api/ApiUtils.php
application/api/controllers/HistoryController.php
application/api/controllers/Info.php
application/api/controllers/Links.php
application/api/exceptions/ApiAuthorizationException.php
application/api/exceptions/ApiException.php
application/bookmark/Bookmark.php
application/bookmark/BookmarkArray.php
application/bookmark/BookmarkFileService.php
application/bookmark/BookmarkFilter.php
application/bookmark/BookmarkIO.php
application/bookmark/BookmarkInitializer.php
application/bookmark/LinkUtils.php
application/bookmark/exception/BookmarkNotFoundException.php
application/bookmark/exception/EmptyDataStoreException.php
application/bookmark/exception/InvalidBookmarkException.php
application/bookmark/exception/NotWritableDataStoreException.php
application/config/ConfigIO.php
application/config/ConfigManager.php
application/config/ConfigPhp.php
application/config/ConfigPlugin.php
application/config/exception/MissingFieldConfigException.php
application/config/exception/UnauthorizedConfigException.php
application/container/ContainerBuilder.php
application/exceptions/IOException.php
application/feed/FeedBuilder.php
application/formatter/BookmarkDefaultFormatter.php
application/formatter/BookmarkMarkdownFormatter.php
application/formatter/BookmarkRawFormatter.php
application/formatter/FormatterFactory.php
application/front/ShaarliMiddleware.php
application/front/controller/admin/ConfigureController.php
application/front/controller/admin/ExportController.php
application/front/controller/admin/ImportController.php
application/front/controller/admin/ManageTagController.php
application/front/controller/admin/PasswordController.php
application/front/controller/admin/PluginsController.php
application/front/controller/admin/ServerController.php
application/front/controller/admin/SessionFilterController.php
application/front/controller/admin/ShaareAddController.php
application/front/controller/admin/ShaareManageController.php
application/front/controller/admin/ShaarePublishController.php
application/front/controller/admin/ThumbnailsController.php
application/front/controller/admin/ToolsController.php
application/front/controller/visitor/BookmarkListController.php
application/front/controller/visitor/DailyController.php
application/front/controller/visitor/FeedController.php
application/front/controller/visitor/InstallController.php
application/front/controller/visitor/LoginController.php
application/front/controller/visitor/PictureWallController.php
application/front/controller/visitor/ShaarliVisitorController.php
application/front/controller/visitor/TagCloudController.php
application/front/controller/visitor/TagController.php
application/helper/ApplicationUtils.php
application/helper/FileUtils.php
application/http/HttpUtils.php
application/http/Url.php
application/http/UrlUtils.php
application/legacy/LegacyController.php
application/legacy/LegacyLinkDB.php
application/legacy/LegacyLinkFilter.php
application/legacy/LegacyUpdater.php
application/netscape/NetscapeBookmarkUtils.php
application/plugin/PluginManager.php
application/plugin/exception/PluginFileNotFoundException.php
application/render/ThemeUtils.php
application/security/BanManager.php
application/security/LoginManager.php
application/security/SessionManager.php
application/updater/Updater.php
application/updater/UpdaterUtils.php
doc/md/dev/Development.md
index.php
phpcs.xml
plugins/addlink_toolbar/addlink_toolbar.php
plugins/archiveorg/archiveorg.php
plugins/default_colors/default_colors.php
plugins/demo_plugin/demo_plugin.php
plugins/isso/isso.php
plugins/piwik/piwik.php
plugins/playvideos/playvideos.php
plugins/pubsubhubbub/pubsubhubbub.php
plugins/qrcode/qrcode.php
plugins/wallabag/WallabagInstance.php
plugins/wallabag/wallabag.php
tests/legacy/LegacyUpdaterTest.php
tests/updater/UpdaterTest.php

index d7460947383a0e595f472908da81ffcec78ef040..422bf835954aab2158f36bb1d8bf03b8b5ca435a 100644 (file)
@@ -49,6 +49,10 @@ cache:
   directories:
     - $HOME/.composer/cache
 
+before_install:
+  # Disable xdebug: it significantly speed up tests and linter, and we don't use coverage yet
+  - phpenv config-rm xdebug.ini || echo 'No xdebug config.'
+
 install:
   # install/update composer and php dependencies
   - composer config --unset platform && composer config platform.php $TRAVIS_PHP_VERSION
@@ -60,4 +64,5 @@ before_script:
 script:
   - make clean
   - make check_permissions
+  - make code_sniffer
   - make all_tests
index 7415887a42cb572a7f632374193e91d87e8895f9..181b61c4c476c1f3f16b5bfeb39789b9ea090bcd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -27,10 +27,6 @@ PHPCS := $(BIN)/phpcs
 code_sniffer:
        @$(PHPCS)
 
-### - errors filtered by coding standard: PEAR, PSR1, PSR2, Zend...
-PHPCS_%:
-       @$(PHPCS) --report-full --report-width=200 --standard=$*
-
 ### - errors by Git author
 code_sniffer_blame:
        @$(PHPCS) --report-gitblame
index bd5c1bf7318b63cec18905f99075b5c3a89c3a40..d230f39de71bf0286158240341e41d73336125c5 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli;
 
 use DateTime;
@@ -31,27 +32,27 @@ class History
     /**
      * @var string Action key: a new link has been created.
      */
-    const CREATED = 'CREATED';
+    public const CREATED = 'CREATED';
 
     /**
      * @var string Action key: a link has been updated.
      */
-    const UPDATED = 'UPDATED';
+    public const UPDATED = 'UPDATED';
 
     /**
      * @var string Action key: a link has been deleted.
      */
-    const DELETED = 'DELETED';
+    public const DELETED = 'DELETED';
 
     /**
      * @var string Action key: settings have been updated.
      */
-    const SETTINGS = 'SETTINGS';
+    public const SETTINGS = 'SETTINGS';
 
     /**
      * @var string Action key: a bulk import has been processed.
      */
-    const IMPORT = 'IMPORT';
+    public const IMPORT = 'IMPORT';
 
     /**
      * @var string History file path.
index d83e0765794af8cfbf0a5f762b5070162181a811..60e916317d7abf95b3b105ec6e57ef7bbe220e94 100644 (file)
@@ -41,7 +41,7 @@ class Languages
     /**
      * Core translations domain
      */
-    const DEFAULT_DOMAIN = 'shaarli';
+    public const DEFAULT_DOMAIN = 'shaarli';
 
     /**
      * @var TranslatorInterface
@@ -76,7 +76,8 @@ class Languages
             $this->language = $confLanguage;
         }
 
-        if (! extension_loaded('gettext')
+        if (
+            ! extension_loaded('gettext')
             || in_array($this->conf->get('translation.mode', 'auto'), ['auto', 'php'])
         ) {
             $this->initPhpTranslator();
@@ -98,7 +99,7 @@ class Languages
         $this->translator->loadDomain(self::DEFAULT_DOMAIN, 'inc/languages');
 
         // Default extension translation from the current theme
-        $themeTransFolder = rtrim($this->conf->get('raintpl_tpl'), '/') .'/'. $this->conf->get('theme') .'/language';
+        $themeTransFolder = rtrim($this->conf->get('raintpl_tpl'), '/') . '/' . $this->conf->get('theme') . '/language';
         if (is_dir($themeTransFolder)) {
             $this->translator->loadDomain($this->conf->get('theme'), $themeTransFolder, false);
         }
@@ -121,7 +122,9 @@ class Languages
         $translations = new Translations();
         // Core translations
         try {
-            $translations = $translations->addFromPoFile('inc/languages/'. $this->language .'/LC_MESSAGES/shaarli.po');
+            $translations = $translations->addFromPoFile(
+                'inc/languages/' . $this->language . '/LC_MESSAGES/shaarli.po'
+            );
             $translations->setDomain('shaarli');
             $this->translator->loadTranslations($translations);
         } catch (\InvalidArgumentException $e) {
@@ -129,11 +132,11 @@ class Languages
 
         // Default extension translation from the current theme
         $theme = $this->conf->get('theme');
-        $themeTransFolder = rtrim($this->conf->get('raintpl_tpl'), '/') .'/'. $theme .'/language';
+        $themeTransFolder = rtrim($this->conf->get('raintpl_tpl'), '/') . '/' . $theme . '/language';
         if (is_dir($themeTransFolder)) {
             try {
                 $translations = Translations::fromPoFile(
-                    $themeTransFolder .'/'. $this->language .'/LC_MESSAGES/'. $theme .'.po'
+                    $themeTransFolder . '/' . $this->language . '/LC_MESSAGES/' . $theme . '.po'
                 );
                 $translations->setDomain($theme);
                 $this->translator->loadTranslations($translations);
@@ -149,7 +152,7 @@ class Languages
 
             try {
                 $extension = Translations::fromPoFile(
-                    $translationPath . $this->language .'/LC_MESSAGES/'. $domain .'.po'
+                    $translationPath . $this->language . '/LC_MESSAGES/' . $domain . '.po'
                 );
                 $extension->setDomain($domain);
                 $this->translator->loadTranslations($extension);
index 5aec23c8d7b6bbf59305f3e651a689cd3d781a21..c4ff8d7abac86a87983cd9b58b9a980fae832540 100644 (file)
@@ -13,7 +13,7 @@ use WebThumbnailer\WebThumbnailer;
  */
 class Thumbnailer
 {
-    const COMMON_MEDIA_DOMAINS = [
+    protected const COMMON_MEDIA_DOMAINS = [
         'imgur.com',
         'flickr.com',
         'youtube.com',
@@ -31,9 +31,9 @@ class Thumbnailer
         'deviantart.com',
     ];
 
-    const MODE_ALL = 'all';
-    const MODE_COMMON = 'common';
-    const MODE_NONE = 'none';
+    public const MODE_ALL = 'all';
+    public const MODE_COMMON = 'common';
+    public const MODE_NONE = 'none';
 
     /**
      * @var WebThumbnailer instance.
@@ -60,7 +60,7 @@ class Thumbnailer
             // TODO: create a proper error handling system able to catch exceptions...
             die(t(
                 'php-gd extension must be loaded to use thumbnails. '
-                .'Thumbnails are now disabled. Please reload the page.'
+                . 'Thumbnails are now disabled. Please reload the page.'
             ));
         }
 
@@ -81,7 +81,8 @@ class Thumbnailer
      */
     public function get($url)
     {
-        if ($this->conf->get('thumbnails.mode') === self::MODE_COMMON
+        if (
+            $this->conf->get('thumbnails.mode') === self::MODE_COMMON
             && ! $this->isCommonMediaOrImage($url)
         ) {
             return false;
index c1869ef87e1d0b96b105c792d8dc902c15ca5246..a420eb9674242b48ea1414aaf7438fc9639798c6 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Generates a list of available timezone continents and cities.
  *
@@ -43,7 +44,7 @@ function generateTimeZoneData($installedTimeZones, $preselectedTimezone = '')
         // Try to split the provided timezone
         $spos = strpos($preselectedTimezone, '/');
         $pcontinent = substr($preselectedTimezone, 0, $spos);
-        $pcity = substr($preselectedTimezone, $spos+1);
+        $pcity = substr($preselectedTimezone, $spos + 1);
     }
 
     $continents = [];
@@ -60,7 +61,7 @@ function generateTimeZoneData($installedTimeZones, $preselectedTimezone = '')
         }
 
         $continent = substr($tz, 0, $spos);
-        $city = substr($tz, $spos+1);
+        $city = substr($tz, $spos + 1);
         $cities[] = ['continent' => $continent, 'city' => $city];
         $continents[$continent] = true;
     }
@@ -85,7 +86,7 @@ function generateTimeZoneData($installedTimeZones, $preselectedTimezone = '')
 function isTimeZoneValid($continent, $city)
 {
     return in_array(
-        $continent.'/'.$city,
+        $continent . '/' . $city,
         timezone_identifiers_list()
     );
 }
index db046893166aaa5a773a815822007541d5d92824..952378ab8620e02a360f73fd10ad4d1147afda9d 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Shaarli utilities
  */
@@ -102,7 +103,7 @@ function escape($input)
     }
 
     if (is_array($input)) {
-        $out = array();
+        $out = [];
         foreach ($input as $key => $value) {
             $out[escape($key)] = escape($value);
         }
@@ -163,7 +164,7 @@ function checkDateFormat($format, $string)
  *
  * @return string $referer - final referer.
  */
-function generateLocation($referer, $host, $loopTerms = array())
+function generateLocation($referer, $host, $loopTerms = [])
 {
     $finalReferer = './?';
 
@@ -196,7 +197,7 @@ function generateLocation($referer, $host, $loopTerms = array())
 function autoLocale($headerLocale)
 {
     // Default if browser does not send HTTP_ACCEPT_LANGUAGE
-    $locales = array('en_US', 'en_US.utf8', 'en_US.UTF-8');
+    $locales = ['en_US', 'en_US.utf8', 'en_US.UTF-8'];
     if (! empty($headerLocale)) {
         if (preg_match_all('/([a-z]{2,3})[-_]?([a-z]{2})?,?/i', $headerLocale, $matches, PREG_SET_ORDER)) {
             $attempts = [];
@@ -376,13 +377,15 @@ function return_bytes($val)
         return $val;
     }
     $val = trim($val);
-    $last = strtolower($val[strlen($val)-1]);
+    $last = strtolower($val[strlen($val) - 1]);
     $val = intval(substr($val, 0, -1));
     switch ($last) {
         case 'g':
             $val *= 1024;
+        // do no break in order 1024^2 for each unit
         case 'm':
             $val *= 1024;
+        // do no break in order 1024^2 for each unit
         case 'k':
             $val *= 1024;
     }
@@ -482,7 +485,9 @@ function alphabetical_sort(&$data, $reverse = false, $byKeys = false)
  */
 function t($text, $nText = '', $nb = 1, $domain = 'shaarli', $variables = [], $fixCase = false)
 {
-    $postFunction = $fixCase ? 'ucfirst' : function ($input) { return $input; };
+    $postFunction = $fixCase ? 'ucfirst' : function ($input) {
+        return $input;
+    };
 
     return $postFunction(dn__($domain, $text, $nText, $nb, $variables));
 }
@@ -494,4 +499,3 @@ function exception2text(Throwable $e): string
 {
     return $e->getMessage() . PHP_EOL . $e->getFile() . $e->getLine() . PHP_EOL . $e->getTraceAsString();
 }
-
index adc8b2666306d185f70fb0668fcefdf2b40b7d13..9fb883589d43a61aff1003882d0531ac8fda3979 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Api;
 
 use malkusch\lock\mutex\FlockMutex;
@@ -108,7 +109,8 @@ class ApiMiddleware
      */
     protected function checkToken($request)
     {
-        if (!$request->hasHeader('Authorization')
+        if (
+            !$request->hasHeader('Authorization')
             && !isset($this->container->environment['REDIRECT_HTTP_AUTHORIZATION'])
         ) {
             throw new ApiAuthorizationException('JWT token not provided');
index eb1ca9bc2b6230e944350759c33386acced2770f..05a2840a6221d3c50c215c7994415c586b01677c 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Api;
 
 use Shaarli\Api\Exceptions\ApiAuthorizationException;
@@ -27,7 +28,7 @@ class ApiUtils
             throw new ApiAuthorizationException('Malformed JWT token');
         }
 
-        $genSign = Base64Url::encode(hash_hmac('sha512', $parts[0] .'.'. $parts[1], $secret, true));
+        $genSign = Base64Url::encode(hash_hmac('sha512', $parts[0] . '.' . $parts[1], $secret, true));
         if ($parts[2] != $genSign) {
             throw new ApiAuthorizationException('Invalid JWT signature');
         }
@@ -42,7 +43,8 @@ class ApiUtils
             throw new ApiAuthorizationException('Invalid JWT payload');
         }
 
-        if (empty($payload->iat)
+        if (
+            empty($payload->iat)
             || $payload->iat > time()
             || time() - $payload->iat > ApiMiddleware::$TOKEN_DURATION
         ) {
index 505647a9568599c3eb97c8bbc519fb9e9a3837f3..d83a3a25c97af2d26b40ce9df308fc71fdeba667 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 namespace Shaarli\Api\Controllers;
 
 use Shaarli\Api\Exceptions\ApiBadParametersException;
index 12f6b2f012e4964bd279f0c832042ac243314095..ae7db93e5c07bbbcf1d691884fc67d8f1c6710b0 100644 (file)
@@ -29,13 +29,13 @@ class Info extends ApiController
         $info = [
             'global_counter' => $this->bookmarkService->count(),
             'private_counter' => $this->bookmarkService->count(BookmarkFilter::$PRIVATE),
-            'settings' => array(
+            'settings' => [
                 'title' => $this->conf->get('general.title', 'Shaarli'),
                 'header_link' => $this->conf->get('general.header_link', '?'),
                 'timezone' => $this->conf->get('general.timezone', 'UTC'),
                 'enabled_plugins' => $this->conf->get('general.enabled_plugins', []),
                 'default_private_links' => $this->conf->get('privacy.default_private_links', false),
-            ),
+            ],
         ];
 
         return $response->withJson($info, 200, $this->jsonStyle);
index 6bf529e4a570a3ff5f789f2de34045946205cd67..c379b9622c6120b3eb8c29bde4702c17074a0961 100644 (file)
@@ -119,7 +119,8 @@ class Links extends ApiController
         $data = (array) ($request->getParsedBody() ?? []);
         $bookmark = ApiUtils::buildBookmarkFromRequest($data, $this->conf->get('privacy.default_private_links'));
         // duplicate by URL, return 409 Conflict
-        if (! empty($bookmark->getUrl())
+        if (
+            ! empty($bookmark->getUrl())
             && ! empty($dup = $this->bookmarkService->findByUrl($bookmark->getUrl()))
         ) {
             return $response->withJson(
@@ -159,7 +160,8 @@ class Links extends ApiController
 
         $requestBookmark = ApiUtils::buildBookmarkFromRequest($data, $this->conf->get('privacy.default_private_links'));
         // duplicate URL on a different link, return 409 Conflict
-        if (! empty($requestBookmark->getUrl())
+        if (
+            ! empty($requestBookmark->getUrl())
             && ! empty($dup = $this->bookmarkService->findByUrl($requestBookmark->getUrl()))
             && $dup->getId() != $id
         ) {
index 0e3f47769943b7447b0e3c5864ca1226868e99d5..c77e9eea8eb61cd080aa76ff63a7765df7481bcd 100644 (file)
@@ -28,7 +28,7 @@ class ApiAuthorizationException extends ApiException
      */
     public function setMessage($message)
     {
-        $original = $this->debug === true ? ': '. $this->getMessage() : '';
+        $original = $this->debug === true ? ': ' . $this->getMessage() : '';
         $this->message = $message . $original;
     }
 }
index d6b66323279f86e4dd886c0477f9c41e4f67a9bb..7deafb961fc33af72f9b470c7b082e424a61e40d 100644 (file)
@@ -44,7 +44,7 @@ abstract class ApiException extends \Exception
         }
         return [
             'message' => $this->getMessage(),
-            'stacktrace' => get_class($this) .': '. $this->getTraceAsString()
+            'stacktrace' => get_class($this) . ': ' . $this->getTraceAsString()
         ];
     }
 
index 8aaeb9d87c504095405b78c7fdc6833d54e167d1..4238ef259a8938eacaba721d6ca92e9cac6d54ae 100644 (file)
@@ -19,7 +19,7 @@ use Shaarli\Bookmark\Exception\InvalidBookmarkException;
 class Bookmark
 {
     /** @var string Date format used in string (former ID format) */
-    const LINK_DATE_FORMAT = 'Ymd_His';
+    public const LINK_DATE_FORMAT = 'Ymd_His';
 
     /** @var int Bookmark ID */
     protected $id;
@@ -106,7 +106,8 @@ class Bookmark
      */
     public function validate(): void
     {
-        if ($this->id === null
+        if (
+            $this->id === null
             || ! is_int($this->id)
             || empty($this->shortUrl)
             || empty($this->created)
@@ -114,7 +115,7 @@ class Bookmark
             throw new InvalidBookmarkException($this);
         }
         if (empty($this->url)) {
-            $this->url = '/shaare/'. $this->shortUrl;
+            $this->url = '/shaare/' . $this->shortUrl;
         }
         if (empty($this->title)) {
             $this->title = $this->url;
index 67bb3b73d55fbcca2f68c3a651f76fb873f140a3..b93281166df4ef676500eff9a4319d48ade1c81c 100644 (file)
@@ -72,7 +72,8 @@ class BookmarkArray implements \Iterator, \Countable, \ArrayAccess
      */
     public function offsetSet($offset, $value)
     {
-        if (! $value instanceof Bookmark
+        if (
+            ! $value instanceof Bookmark
             || $value->getId() === null || empty($value->getUrl())
             || ($offset !== null && ! is_int($offset)) || ! is_int($value->getId())
             || $offset !== null && $offset !== $value->getId()
@@ -222,7 +223,8 @@ class BookmarkArray implements \Iterator, \Countable, \ArrayAccess
      */
     public function getByUrl(string $url): ?Bookmark
     {
-        if (! empty($url)
+        if (
+            ! empty($url)
             && isset($this->urls[$url])
             && isset($this->bookmarks[$this->urls[$url]])
         ) {
index 85efeea60097860bf96066e4c712a35c3d1d20d6..6666a251c821a9eb83e710ddb48973e14008261d 100644 (file)
@@ -69,7 +69,7 @@ class BookmarkFileService implements BookmarkServiceInterface
         } else {
             try {
                 $this->bookmarks = $this->bookmarksIO->read();
-            } catch (EmptyDataStoreException|DatastoreNotInitializedException $e) {
+            } catch (EmptyDataStoreException | DatastoreNotInitializedException $e) {
                 $this->bookmarks = new BookmarkArray();
 
                 if ($this->isLoggedIn) {
@@ -85,7 +85,7 @@ class BookmarkFileService implements BookmarkServiceInterface
             if (! $this->bookmarks instanceof BookmarkArray) {
                 $this->migrate();
                 exit(
-                    'Your data store has been migrated, please reload the page.'. PHP_EOL .
+                    'Your data store has been migrated, please reload the page.' . PHP_EOL .
                     'If this message keeps showing up, please delete data/updates.txt file.'
                 );
             }
@@ -102,7 +102,8 @@ class BookmarkFileService implements BookmarkServiceInterface
         $bookmark = $this->bookmarkFilter->filter(BookmarkFilter::$FILTER_HASH, $hash);
         // PHP 7.3 introduced array_key_first() to avoid this hack
         $first = reset($bookmark);
-        if (!$this->isLoggedIn
+        if (
+            !$this->isLoggedIn
             && $first->isPrivate()
             && (empty($privateKey) || $privateKey !== $first->getAdditionalContentEntry('private_key'))
         ) {
@@ -165,7 +166,8 @@ class BookmarkFileService implements BookmarkServiceInterface
         }
 
         $bookmark = $this->bookmarks[$id];
-        if (($bookmark->isPrivate() && $visibility != 'all' && $visibility != 'private')
+        if (
+            ($bookmark->isPrivate() && $visibility != 'all' && $visibility != 'private')
             || (! $bookmark->isPrivate() && $visibility != 'all' && $visibility != 'public')
         ) {
             throw new Exception('Unauthorized');
@@ -265,7 +267,8 @@ class BookmarkFileService implements BookmarkServiceInterface
         }
 
         $bookmark = $this->bookmarks[$id];
-        if (($bookmark->isPrivate() && $visibility != 'all' && $visibility != 'private')
+        if (
+            ($bookmark->isPrivate() && $visibility != 'all' && $visibility != 'private')
             || (! $bookmark->isPrivate() && $visibility != 'all' && $visibility != 'public')
         ) {
             return false;
@@ -307,7 +310,8 @@ class BookmarkFileService implements BookmarkServiceInterface
         $caseMapping = [];
         foreach ($bookmarks as $bookmark) {
             foreach ($bookmark->getTags() as $tag) {
-                if (empty($tag)
+                if (
+                    empty($tag)
                     || (! $this->isLoggedIn && startsWith($tag, '.'))
                     || $tag === BookmarkMarkdownFormatter::NO_MD_TAG
                     || in_array($tag, $filteringTags, true)
@@ -356,7 +360,7 @@ class BookmarkFileService implements BookmarkServiceInterface
         foreach ($this->search([], null, false, false, true) as $bookmark) {
             if ($to < $bookmark->getCreated()) {
                 $next = $bookmark->getCreated();
-            } else if ($from < $bookmark->getCreated() && $to > $bookmark->getCreated()) {
+            } elseif ($from < $bookmark->getCreated() && $to > $bookmark->getCreated()) {
                 $out[] = $bookmark;
             } else {
                 if ($previous !== null) {
@@ -405,14 +409,14 @@ class BookmarkFileService implements BookmarkServiceInterface
             false
         );
         $updater = new LegacyUpdater(
-            UpdaterUtils::read_updates_file($this->conf->get('resource.updates')),
+            UpdaterUtils::readUpdatesFile($this->conf->get('resource.updates')),
             $bookmarkDb,
             $this->conf,
             true
         );
         $newUpdates = $updater->update();
         if (! empty($newUpdates)) {
-            UpdaterUtils::write_updates_file(
+            UpdaterUtils::writeUpdatesFile(
                 $this->conf->get('resource.updates'),
                 $updater->getDoneUpdates()
             );
index 5d8733dc6b5fa46dfbeafc6d152d49777eb8d287..db83c51c135e012ce7c693a0ab6eee5f82070208 100644 (file)
@@ -150,7 +150,7 @@ class BookmarkFilter
             return $this->bookmarks;
         }
 
-        $out = array();
+        $out = [];
         foreach ($this->bookmarks as $key => $value) {
             if ($value->isPrivate() && $visibility === 'private') {
                 $out[$key] = $value;
@@ -395,7 +395,7 @@ class BookmarkFilter
             $search = $link->getTagsString($tagsSeparator);
             if (strlen(trim($link->getDescription())) && strpos($link->getDescription(), '#') !== false) {
                 // description given and at least one possible tag found
-                $descTags = array();
+                $descTags = [];
                 // find all tags in the form of #tag in the description
                 preg_match_all(
                     '/(?<![' . self::$HASHTAG_CHARS . '])#([' . self::$HASHTAG_CHARS . ']+?)\b/sm',
@@ -552,10 +552,10 @@ class BookmarkFilter
     protected function buildFullTextSearchableLink(Bookmark $link, array &$lengths): string
     {
         $tagString = $link->getTagsString($this->conf->get('general.tags_separator', ' '));
-        $content  = mb_convert_case($link->getTitle(), MB_CASE_LOWER, 'UTF-8') .'\\';
-        $content .= mb_convert_case($link->getDescription(), MB_CASE_LOWER, 'UTF-8') .'\\';
-        $content .= mb_convert_case($link->getUrl(), MB_CASE_LOWER, 'UTF-8') .'\\';
-        $content .= mb_convert_case($tagString, MB_CASE_LOWER, 'UTF-8') .'\\';
+        $content  = mb_convert_case($link->getTitle(), MB_CASE_LOWER, 'UTF-8') . '\\';
+        $content .= mb_convert_case($link->getDescription(), MB_CASE_LOWER, 'UTF-8') . '\\';
+        $content .= mb_convert_case($link->getUrl(), MB_CASE_LOWER, 'UTF-8') . '\\';
+        $content .= mb_convert_case($tagString, MB_CASE_LOWER, 'UTF-8') . '\\';
 
         $lengths['title'] = ['start' => 0, 'end' => mb_strlen($link->getTitle())];
         $nextField = $lengths['title']['end'] + 1;
index f40fa476247ff2fc9fd75c1048c4b7a340516b61..c78dbe41fe7dc8af6c3cd8a96ea2986dea45a914 100644 (file)
@@ -112,12 +112,12 @@ class BookmarkIO
         if (is_file($this->datastore) && !is_writeable($this->datastore)) {
             // The datastore exists but is not writeable
             throw new NotWritableDataStoreException($this->datastore);
-        } else if (!is_file($this->datastore) && !is_writeable(dirname($this->datastore))) {
+        } elseif (!is_file($this->datastore) && !is_writeable(dirname($this->datastore))) {
             // The datastore does not exist and its parent directory is not writeable
             throw new NotWritableDataStoreException(dirname($this->datastore));
         }
 
-        $data = self::$phpPrefix.base64_encode(gzdeflate(serialize($links))).self::$phpSuffix;
+        $data = self::$phpPrefix . base64_encode(gzdeflate(serialize($links))) . self::$phpSuffix;
 
         $this->mutex->synchronized(function () use ($data) {
             file_put_contents(
index 98dd3f1c1ed62e1fb5291807ffb744127afc57f0..8ab5c441a6eb163f2293f782965ca2ad7f0a3ccc 100644 (file)
@@ -13,6 +13,9 @@ namespace Shaarli\Bookmark;
  * To prevent data corruption, it does not overwrite existing bookmarks,
  * even though there should not be any.
  *
+ * We disable this because otherwise it creates indentation issues, and heredoc is not supported by PHP gettext.
+ * @phpcs:disable Generic.Files.LineLength.TooLong
+ *
  * @package Shaarli\Bookmark
  */
 class BookmarkInitializer
@@ -39,7 +42,7 @@ class BookmarkInitializer
         $bookmark->setTitle('Calm Jazz Music - YouTube ' . t('(private bookmark with thumbnail demo)'));
         $bookmark->setUrl('https://www.youtube.com/watch?v=DVEUcbPkb-c');
         $bookmark->setDescription(t(
-'Shaarli will automatically pick up the thumbnail for links to a variety of websites.
+            'Shaarli will automatically pick up the thumbnail for links to a variety of websites.
 
 Explore your new Shaarli instance by trying out controls and menus.
 Visit the project on [Github](https://github.com/shaarli/Shaarli) or [the documentation](https://shaarli.readthedocs.io/en/master/) to learn more about Shaarli.
@@ -54,7 +57,7 @@ Now you can edit or delete the default shaares.
         $bookmark = new Bookmark();
         $bookmark->setTitle(t('Note: Shaare descriptions'));
         $bookmark->setDescription(t(
-'Adding a shaare without entering a URL creates a text-only "note" post such as this one.
+            'Adding a shaare without entering a URL creates a text-only "note" post such as this one.
 This note is private, so you are the only one able to see it while logged in.
 
 You can use this to keep notes, post articles, code snippets, and much more.
@@ -91,7 +94,7 @@ Markdown also supports tables:
             'Shaarli - ' . t('The personal, minimalist, super-fast, database free, bookmarking service')
         );
         $bookmark->setDescription(t(
-'Welcome to Shaarli!
+            'Welcome to Shaarli!
 
 Shaarli allows you to bookmark your favorite pages, and share them with others or store them privately.
 You can add a description to your bookmarks, such as this one, and tag them.
index cf97e3b0a904a08d72a5ee7d3467efb1536f5c96..d65e97ed47ca9163bb8f0f9feef66969b1981166 100644 (file)
@@ -67,14 +67,15 @@ function html_extract_tag($tag, $html)
     $propertiesKey = ['property', 'name', 'itemprop'];
     $properties = implode('|', $propertiesKey);
     // We need a OR here to accept either 'property=og:noquote' or 'property="og:unrelated og:my-tag"'
-    $orCondition  = '["\']?(?:og:)?'. $tag .'["\']?|["\'][^\'"]*?(?:og:)?' . $tag . '[^\'"]*?[\'"]';
+    $orCondition  = '["\']?(?:og:)?' . $tag . '["\']?|["\'][^\'"]*?(?:og:)?' . $tag . '[^\'"]*?[\'"]';
     // Try to retrieve OpenGraph tag.
-    $ogRegex = '#<meta[^>]+(?:'. $properties .')=(?:'. $orCondition .')[^>]*content=(["\'])([^\1]*?)\1.*?>#';
+    $ogRegex = '#<meta[^>]+(?:' . $properties . ')=(?:' . $orCondition . ')[^>]*content=(["\'])([^\1]*?)\1.*?>#';
     // If the attributes are not in the order property => content (e.g. Github)
     // New regex to keep this readable... more or less.
-    $ogRegexReverse = '#<meta[^>]+content=(["\'])([^\1]*?)\1[^>]+(?:'. $properties .')=(?:'. $orCondition .').*?>#';
+    $ogRegexReverse = '#<meta[^>]+content=(["\'])([^\1]*?)\1[^>]+(?:' . $properties . ')=(?:' . $orCondition . ').*?>#';
 
-    if (preg_match($ogRegex, $html, $matches) > 0
+    if (
+        preg_match($ogRegex, $html, $matches) > 0
         || preg_match($ogRegexReverse, $html, $matches) > 0
     ) {
         return $matches[2];
@@ -116,7 +117,7 @@ function hashtag_autolink($description, $indexUrl = '')
      * \p{Mn} - any non marking space (accents, umlauts, etc)
      */
     $regex = '/(^|\s)#([\p{Pc}\p{N}\p{L}\p{Mn}]+)/mui';
-    $replacement = '$1<a href="'. $indexUrl .'./add-tag/$2" title="Hashtag $2">#$2</a>';
+    $replacement = '$1<a href="' . $indexUrl . './add-tag/$2" title="Hashtag $2">#$2</a>';
     return preg_replace($regex, $replacement, $description);
 }
 
index 827a3d358ae98fb0adc15cf482ff06567bbd54ab..a91d1efaa8572859b3e47a97f9d18d476ee86985 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Bookmark\Exception;
 
 use Exception;
index cd48c1e6e517f2242e804112299a6532a33537d1..16a98470a018b2a5ea4635caff6e86a1a5657009 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
-
 namespace Shaarli\Bookmark\Exception;
 
-
-class EmptyDataStoreException extends \Exception {}
+class EmptyDataStoreException extends \Exception
+{
+}
index 10c84a6d2b66cb7d5a6c7ee2015c96f805d5acf0..fe184f8c1b71595f1ea765893fef26a7d09de2c0 100644 (file)
@@ -16,14 +16,14 @@ class InvalidBookmarkException extends \Exception
             } else {
                 $created = 'Not a DateTime object';
             }
-            $this->message = 'This bookmark is not valid'. PHP_EOL;
-            $this->message .= ' - ID: '. $bookmark->getId() . PHP_EOL;
-            $this->message .= ' - Title: '. $bookmark->getTitle() . PHP_EOL;
-            $this->message .= ' - Url: '. $bookmark->getUrl() . PHP_EOL;
-            $this->message .= ' - ShortUrl: '. $bookmark->getShortUrl() . PHP_EOL;
-            $this->message .= ' - Created: '. $created . PHP_EOL;
+            $this->message = 'This bookmark is not valid' . PHP_EOL;
+            $this->message .= ' - ID: ' . $bookmark->getId() . PHP_EOL;
+            $this->message .= ' - Title: ' . $bookmark->getTitle() . PHP_EOL;
+            $this->message .= ' - Url: ' . $bookmark->getUrl() . PHP_EOL;
+            $this->message .= ' - ShortUrl: ' . $bookmark->getShortUrl() . PHP_EOL;
+            $this->message .= ' - Created: ' . $created . PHP_EOL;
         } else {
-            $this->message = 'The provided data is not a bookmark'. PHP_EOL;
+            $this->message = 'The provided data is not a bookmark' . PHP_EOL;
             $this->message .= var_export($bookmark, true);
         }
     }
index 95f34b505fdfcd028bf90c004a0f72c7ec5f0640..df91f3bce9c25c3101aac855ef99cbdbaa700406 100644 (file)
@@ -1,9 +1,7 @@
 <?php
 
-
 namespace Shaarli\Bookmark\Exception;
 
-
 class NotWritableDataStoreException extends \Exception
 {
     /**
@@ -13,7 +11,7 @@ class NotWritableDataStoreException extends \Exception
      */
     public function __construct($dataStore)
     {
-        $this->message = 'Couldn\'t load data from the data store file "'. $dataStore .'". '.
+        $this->message = 'Couldn\'t load data from the data store file "' . $dataStore . '". ' .
             'Your data might be corrupted, or your file isn\'t readable.';
     }
 }
index 3efe5b6fb941b2dafb7107cea11cb59f1bcb59e6..a623bc8ba142a76781345d806310a3d4f536ba58 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Config;
 
 /**
index 3260d7c0967b603077183b0ae80ed12105933792..717a038f7912fa2bc2b403d2d38a1101f6041238 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Config;
 
 use Shaarli\Config\Exception\MissingFieldConfigException;
@@ -20,7 +21,7 @@ class ConfigManager
      */
     protected static $NOT_FOUND = 'NOT_FOUND';
 
-    public static $DEFAULT_PLUGINS = array('qrcode');
+    public static $DEFAULT_PLUGINS = ['qrcode'];
 
     /**
      * @var string Config folder.
@@ -133,7 +134,7 @@ class ConfigManager
     public function set($setting, $value, $write = false, $isLoggedIn = false)
     {
         if (empty($setting) || ! is_string($setting)) {
-            throw new \Exception(t('Invalid setting key parameter. String expected, got: '). gettype($setting));
+            throw new \Exception(t('Invalid setting key parameter. String expected, got: ') . gettype($setting));
         }
 
         // During the ConfigIO transition, map legacy settings to the new ones.
@@ -160,7 +161,7 @@ class ConfigManager
     public function remove($setting, $write = false, $isLoggedIn = false)
     {
         if (empty($setting) || ! is_string($setting)) {
-            throw new \Exception(t('Invalid setting key parameter. String expected, got: '). gettype($setting));
+            throw new \Exception(t('Invalid setting key parameter. String expected, got: ') . gettype($setting));
         }
 
         // During the ConfigIO transition, map legacy settings to the new ones.
@@ -213,7 +214,7 @@ class ConfigManager
     public function write($isLoggedIn)
     {
         // These fields are required in configuration.
-        $mandatoryFields = array(
+        $mandatoryFields = [
             'credentials.login',
             'credentials.hash',
             'credentials.salt',
@@ -222,7 +223,7 @@ class ConfigManager
             'general.title',
             'general.header_link',
             'privacy.default_private_links',
-        );
+        ];
 
         // Only logged in user can alter config.
         if (is_file($this->getConfigFileExt()) && !$isLoggedIn) {
@@ -392,7 +393,7 @@ class ConfigManager
         $this->setEmpty('translation.mode', 'php');
         $this->setEmpty('translation.extensions', []);
 
-        $this->setEmpty('plugins', array());
+        $this->setEmpty('plugins', []);
 
         $this->setEmpty('formatter', 'markdown');
     }
index cad3459462b2f396039ddd8c085794fe555114be..53d6a7a357c910ab0f2789fdacac5728f85da817 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Config;
 
 /**
@@ -12,7 +13,7 @@ class ConfigPhp implements ConfigIO
     /**
      * @var array List of config key without group.
      */
-    public static $ROOT_KEYS = array(
+    public static $ROOT_KEYS = [
         'login',
         'hash',
         'salt',
@@ -22,7 +23,7 @@ class ConfigPhp implements ConfigIO
         'redirector',
         'disablesessionprotection',
         'privateLinkByDefault',
-    );
+    ];
 
     /**
      * Map legacy config keys with the new ones.
@@ -31,7 +32,7 @@ class ConfigPhp implements ConfigIO
      *
      * @var array current key => legacy key.
      */
-    public static $LEGACY_KEYS_MAPPING = array(
+    public static $LEGACY_KEYS_MAPPING = [
         'credentials.login' => 'login',
         'credentials.hash' => 'hash',
         'credentials.salt' => 'salt',
@@ -68,7 +69,7 @@ class ConfigPhp implements ConfigIO
         'privacy.hide_public_links' => 'config.HIDE_PUBLIC_LINKS',
         'privacy.hide_timestamps' => 'config.HIDE_TIMESTAMPS',
         'security.open_shaarli' => 'config.OPEN_SHAARLI',
-    );
+    ];
 
     /**
      * @inheritdoc
@@ -76,12 +77,12 @@ class ConfigPhp implements ConfigIO
     public function read($filepath)
     {
         if (! file_exists($filepath) || ! is_readable($filepath)) {
-            return array();
+            return [];
         }
 
         include $filepath;
 
-        $out = array();
+        $out = [];
         foreach (self::$ROOT_KEYS as $key) {
             $out[$key] = isset($GLOBALS[$key]) ? $GLOBALS[$key] : '';
         }
@@ -95,7 +96,7 @@ class ConfigPhp implements ConfigIO
      */
     public function write($filepath, $conf)
     {
-        $configStr = '<?php '. PHP_EOL;
+        $configStr = '<?php ' . PHP_EOL;
         foreach (self::$ROOT_KEYS as $key) {
             if (isset($conf[$key])) {
                 $configStr .= '$GLOBALS[\'' . $key . '\'] = ' . var_export($conf[$key], true) . ';' . PHP_EOL;
@@ -106,8 +107,8 @@ class ConfigPhp implements ConfigIO
         foreach ($conf['config'] as $key => $value) {
             $configStr .= '$GLOBALS[\'config\'][\''
                 . $key
-                .'\'] = '
-                .var_export($conf['config'][$key], true).';'
+                . '\'] = '
+                . var_export($conf['config'][$key], true) . ';'
                 . PHP_EOL;
         }
 
@@ -115,18 +116,19 @@ class ConfigPhp implements ConfigIO
             foreach ($conf['plugins'] as $key => $value) {
                 $configStr .= '$GLOBALS[\'plugins\'][\''
                     . $key
-                    .'\'] = '
-                    .var_export($conf['plugins'][$key], true).';'
+                    . '\'] = '
+                    . var_export($conf['plugins'][$key], true) . ';'
                     . PHP_EOL;
             }
         }
 
-        if (!file_put_contents($filepath, $configStr)
+        if (
+            !file_put_contents($filepath, $configStr)
             || strcmp(file_get_contents($filepath), $configStr) != 0
         ) {
             throw new \Shaarli\Exceptions\IOException(
                 $filepath,
-                t('Shaarli could not create the config file. '.
+                t('Shaarli could not create the config file. ' .
                   'Please make sure Shaarli has the right to write in the folder is it installed in.')
             );
         }
index ea8dfbdade4f0f0776eff517545e1b3f96f536f3..6cadef126c3a10d91c24e7f885e1d8da7eefba2b 100644 (file)
@@ -39,8 +39,8 @@ function save_plugin_config($formData)
         throw new PluginConfigOrderException();
     }
 
-    $plugins = array();
-    $newEnabledPlugins = array();
+    $plugins = [];
+    $newEnabledPlugins = [];
     foreach ($formData as $key => $data) {
         if (startsWith($key, 'order')) {
             continue;
@@ -62,7 +62,7 @@ function save_plugin_config($formData)
         throw new PluginConfigOrderException();
     }
 
-    $finalPlugins = array();
+    $finalPlugins = [];
     // Make plugins order continuous.
     foreach ($plugins as $plugin) {
         $finalPlugins[] = $plugin;
@@ -81,7 +81,7 @@ function save_plugin_config($formData)
  */
 function validate_plugin_order($formData)
 {
-    $orders = array();
+    $orders = [];
     foreach ($formData as $key => $value) {
         // No duplicate order allowed.
         if (in_array($value, $orders, true)) {
index 9e0a93594d21f61ee76a8d85e2ea231f848ac83e..a5f4356ae6894d809e5628c1b84cccd7edc93974 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 namespace Shaarli\Config\Exception;
 
 /**
index 72311faeffc98ee0a76e7fc3bc884e6a69f8ca12..b041c6e3d4cd66d651eb209ffd4b8ec07a34c438 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 namespace Shaarli\Config\Exception;
 
 /**
index d84418ad6f7828b99ff1fb622013451825cd8e49..f0234eca2f92a4bcca74ea99b915c18d4d2e64f4 100644 (file)
@@ -158,7 +158,7 @@ class ContainerBuilder
 
         $container['updater'] = function (ShaarliContainer $container): Updater {
             return new Updater(
-                UpdaterUtils::read_updates_file($container->conf->get('resource.updates')),
+                UpdaterUtils::readUpdatesFile($container->conf->get('resource.updates')),
                 $container->bookmarkService,
                 $container->conf,
                 $container->loginManager->isLoggedIn()
index 2aa25e5c55be709b4dfeb2c8c1451ef437597a40..c1a9ffbe5bd41ac09dba84f3e6eb1132bce75706 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Exceptions;
 
 use Exception;
index f70fce4fb7fa0589269256c1907ffa5654051d01..ed62af26e1c4b26ae4eb481e37ab32f0a5d9988a 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Feed;
 
 use DateTime;
@@ -107,14 +108,14 @@ class FeedBuilder
         $nblinksToDisplay = $this->getNbLinks(count($linksToDisplay), $userInput);
 
         // Can't use array_keys() because $link is a LinkDB instance and not a real array.
-        $keys = array();
+        $keys = [];
         foreach ($linksToDisplay as $key => $value) {
             $keys[] = $key;
         }
 
         $pageaddr = escape(index_url($this->serverInfo));
         $this->formatter->addContextData('index_url', $pageaddr);
-        $linkDisplayed = array();
+        $linkDisplayed = [];
         for ($i = 0; $i < $nblinksToDisplay && $i < count($keys); $i++) {
             $linkDisplayed[$keys[$i]] = $this->buildItem($feedType, $linksToDisplay[$keys[$i]], $pageaddr);
         }
@@ -176,9 +177,9 @@ class FeedBuilder
         $data = $this->formatter->format($link);
         $data['guid'] = rtrim($pageaddr, '/') . '/shaare/' . $data['shorturl'];
         if ($this->usePermalinks === true) {
-            $permalink = '<a href="'. $data['url'] .'" title="'. t('Direct link') .'">'. t('Direct link') .'</a>';
+            $permalink = '<a href="' . $data['url'] . '" title="' . t('Direct link') . '">' . t('Direct link') . '</a>';
         } else {
-            $permalink = '<a href="'. $data['guid'] .'" title="'. t('Permalink') .'">'. t('Permalink') .'</a>';
+            $permalink = '<a href="' . $data['guid'] . '" title="' . t('Permalink') . '">' . t('Permalink') . '</a>';
         }
         $data['description'] .= PHP_EOL . PHP_EOL . '<br>&#8212; ' . $permalink;
 
index 51bea0f15082ee2ed168446f7fd15f207f7cdd54..7e0afafc8a413f375e14992181b03c2c294e2d47 100644 (file)
@@ -12,8 +12,8 @@ namespace Shaarli\Formatter;
  */
 class BookmarkDefaultFormatter extends BookmarkFormatter
 {
-    const SEARCH_HIGHLIGHT_OPEN = '|@@HIGHLIGHT';
-    const SEARCH_HIGHLIGHT_CLOSE = 'HIGHLIGHT@@|';
+    protected const SEARCH_HIGHLIGHT_OPEN = '|@@HIGHLIGHT';
+    protected const SEARCH_HIGHLIGHT_CLOSE = 'HIGHLIGHT@@|';
 
     /**
      * @inheritdoc
index f7714be9ed34df27a70f971aa28aeef8e9c33b48..ee4e8dca4f993b9a6c02894e674150615e182315 100644 (file)
@@ -16,7 +16,7 @@ class BookmarkMarkdownFormatter extends BookmarkDefaultFormatter
     /**
      * When this tag is present in a bookmark, its description should not be processed with Markdown
      */
-    const NO_MD_TAG = 'nomarkdown';
+    public const NO_MD_TAG = 'nomarkdown';
 
     /** @var \Parsedown instance */
     protected $parsedown;
@@ -71,7 +71,7 @@ class BookmarkMarkdownFormatter extends BookmarkDefaultFormatter
         $processedDescription = $this->replaceTokens($processedDescription);
 
         if (!empty($processedDescription)) {
-            $processedDescription = '<div class="markdown">'. $processedDescription . '</div>';
+            $processedDescription = '<div class="markdown">' . $processedDescription . '</div>';
         }
 
         return $processedDescription;
@@ -110,7 +110,7 @@ class BookmarkMarkdownFormatter extends BookmarkDefaultFormatter
             function ($match) use ($allowedProtocols, $indexUrl) {
                 $link = startsWith($match[1], '?') || startsWith($match[1], '/') ? $indexUrl : '';
                 $link .= whitelist_protocols($match[1], $allowedProtocols);
-                return ']('. $link.')';
+                return '](' . $link . ')';
             },
             $description
         );
@@ -137,7 +137,7 @@ class BookmarkMarkdownFormatter extends BookmarkDefaultFormatter
          * \p{Mn} - any non marking space (accents, umlauts, etc)
          */
         $regex = '/(^|\s)#([\p{Pc}\p{N}\p{L}\p{Mn}]+)/mui';
-        $replacement = '$1[#$2]('. $indexUrl .'./add-tag/$2)';
+        $replacement = '$1[#$2](' . $indexUrl . './add-tag/$2)';
 
         $descriptionLines = explode(PHP_EOL, $description);
         $descriptionOut = '';
@@ -178,17 +178,17 @@ class BookmarkMarkdownFormatter extends BookmarkDefaultFormatter
      */
     protected function sanitizeHtml($description)
     {
-        $escapeTags = array(
+        $escapeTags = [
             'script',
             'style',
             'link',
             'iframe',
             'frameset',
             'frame',
-        );
+        ];
         foreach ($escapeTags as $tag) {
             $description = preg_replace_callback(
-                '#<\s*'. $tag .'[^>]*>(.*</\s*'. $tag .'[^>]*>)?#is',
+                '#<\s*' . $tag . '[^>]*>(.*</\s*' . $tag . '[^>]*>)?#is',
                 function ($match) {
                     return escape($match[0]);
                 },
index bc37227373b4d62f0ff5bb26b53fbc2a2f714018..4ff07cdf4019b837025740d44cf8f253b830f4d0 100644 (file)
@@ -10,4 +10,6 @@ namespace Shaarli\Formatter;
  *
  * @package Shaarli\Formatter
  */
-class BookmarkRawFormatter extends BookmarkFormatter {}
+class BookmarkRawFormatter extends BookmarkFormatter
+{
+}
index a029579f6908f5452056d0db8db16a87c57ee5d4..bb865aedfb06023372813b64c9defcf4f49d1d1d 100644 (file)
@@ -41,7 +41,7 @@ class FormatterFactory
     public function getFormatter(string $type = null): BookmarkFormatter
     {
         $type = $type ? $type : $this->conf->get('formatter', 'default');
-        $className = '\\Shaarli\\Formatter\\Bookmark'. ucfirst($type) .'Formatter';
+        $className = '\\Shaarli\\Formatter\\Bookmark' . ucfirst($type) . 'Formatter';
         if (!class_exists($className)) {
             $className = '\\Shaarli\\Formatter\\BookmarkDefaultFormatter';
         }
index d1aa139989e2689ee61df29f47c2cd08bd2d9999..164217f4f27b83b45754cfcec8d33871a553a26b 100644 (file)
@@ -42,7 +42,8 @@ class ShaarliMiddleware
         $this->initBasePath($request);
 
         try {
-            if (!is_file($this->container->conf->getConfigFileExt())
+            if (
+                !is_file($this->container->conf->getConfigFileExt())
                 && !in_array($next->getName(), ['displayInstall', 'saveInstall'], true)
             ) {
                 return $response->withRedirect($this->container->basePath . '/install');
@@ -86,7 +87,8 @@ class ShaarliMiddleware
      */
     protected function checkOpenShaarli(Request $request, Response $response, callable $next): bool
     {
-        if (// if the user isn't logged in
+        if (
+// if the user isn't logged in
             !$this->container->loginManager->isLoggedIn()
             // and Shaarli doesn't have public content...
             && $this->container->conf->get('privacy.hide_public_links')
index 0ed7ad81086d93b6a0c0d39e3a539dd398a8fb62..dc421661c89ea0e2470a768284513a6267210a02 100644 (file)
@@ -51,7 +51,10 @@ class ConfigureController extends ShaarliAdminController
         $this->assignView('languages', Languages::getAvailableLanguages());
         $this->assignView('gd_enabled', extension_loaded('gd'));
         $this->assignView('thumbnails_mode', $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE));
-        $this->assignView('pagetitle', t('Configure') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
+        $this->assignView(
+            'pagetitle',
+            t('Configure') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
+        );
 
         return $response->write($this->render(TemplatePage::CONFIGURE));
     }
@@ -95,12 +98,15 @@ class ConfigureController extends ShaarliAdminController
         }
 
         $thumbnailsMode = extension_loaded('gd') ? $request->getParam('enableThumbnails') : Thumbnailer::MODE_NONE;
-        if ($thumbnailsMode !== Thumbnailer::MODE_NONE
+        if (
+            $thumbnailsMode !== Thumbnailer::MODE_NONE
             && $thumbnailsMode !== $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE)
         ) {
             $this->saveWarningMessage(
                 t('You have enabled or changed thumbnails mode.') .
-                '<a href="'. $this->container->basePath .'/admin/thumbnails">' . t('Please synchronize them.') .'</a>'
+                '<a href="' . $this->container->basePath . '/admin/thumbnails">' .
+                    t('Please synchronize them.') .
+                '</a>'
             );
         }
         $this->container->conf->set('thumbnails.mode', $thumbnailsMode);
index 2be957fae0f4ec8c62e506f7da8589fca1d70244..f01d7e9becb2ef406c831d08ea5d32e29f40cd91 100644 (file)
@@ -23,7 +23,7 @@ class ExportController extends ShaarliAdminController
      */
     public function index(Request $request, Response $response): Response
     {
-        $this->assignView('pagetitle', t('Export') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
+        $this->assignView('pagetitle', t('Export') . ' - ' . $this->container->conf->get('general.title', 'Shaarli'));
 
         return $response->write($this->render(TemplatePage::EXPORT));
     }
@@ -68,7 +68,7 @@ class ExportController extends ShaarliAdminController
         $response = $response->withHeader('Content-Type', 'text/html; charset=utf-8');
         $response = $response->withHeader(
             'Content-disposition',
-            'attachment; filename=bookmarks_'.$selection.'_'.$now->format(Bookmark::LINK_DATE_FORMAT).'.html'
+            'attachment; filename=bookmarks_' . $selection . '_' . $now->format(Bookmark::LINK_DATE_FORMAT) . '.html'
         );
 
         $this->assignView('date', $now->format(DateTime::RFC822));
index 758d5ef9454a0514316c5beff78181f3146708d8..c2ad6a09f3c107aea84366fda6a0cb42ed4b1ed3 100644 (file)
@@ -38,7 +38,7 @@ class ImportController extends ShaarliAdminController
                 true
             )
         );
-        $this->assignView('pagetitle', t('Import') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
+        $this->assignView('pagetitle', t('Import') . ' - ' . $this->container->conf->get('general.title', 'Shaarli'));
 
         return $response->write($this->render(TemplatePage::IMPORT));
     }
@@ -64,7 +64,7 @@ class ImportController extends ShaarliAdminController
             $msg = sprintf(
                 t(
                     'The file you are trying to upload is probably bigger than what this webserver can accept'
-                    .' (%s). Please upload in smaller chunks.'
+                    . ' (%s). Please upload in smaller chunks.'
                 ),
                 get_max_upload_size(ini_get('post_max_size'), ini_get('upload_max_filesize'))
             );
index 22fb461c1411173c8cb89df4a7de2006d6ba8b4f..8675a0c580bec714c4829948f24e04867f06acbe 100644 (file)
@@ -32,7 +32,7 @@ class ManageTagController extends ShaarliAdminController
         $this->assignView('tags_separator', $separator);
         $this->assignView(
             'pagetitle',
-            t('Manage tags') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Manage tags') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         return $response->write($this->render(TemplatePage::CHANGE_TAG));
@@ -87,7 +87,7 @@ class ManageTagController extends ShaarliAdminController
 
         $this->saveSuccessMessage($alert);
 
-        $redirect = true === $isDelete ? '/admin/tags' : '/?searchtags='. urlencode($toTag);
+        $redirect = true === $isDelete ? '/admin/tags' : '/?searchtags=' . urlencode($toTag);
 
         return $this->redirect($response, $redirect);
     }
index 5ec0d24b2fac824ce8d88e852cf8d62bb6809971..4aaf1f82ce8712a422e3ce77c1efdc3767883785 100644 (file)
@@ -25,7 +25,7 @@ class PasswordController extends ShaarliAdminController
 
         $this->assignView(
             'pagetitle',
-            t('Change password') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Change password') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
     }
 
@@ -78,7 +78,7 @@ class PasswordController extends ShaarliAdminController
 
         // Save new password
         // Salt renders rainbow-tables attacks useless.
-        $this->container->conf->set('credentials.salt', sha1(uniqid('', true) .'_'. mt_rand()));
+        $this->container->conf->set('credentials.salt', sha1(uniqid('', true) . '_' . mt_rand()));
         $this->container->conf->set(
             'credentials.hash',
             sha1(
index 8e05968199df9e099b61d16c7a3c9494a6e3a672..ae47c1af1b2eb8cc84bea8acbfb995fd4e3f00ca 100644 (file)
@@ -42,7 +42,7 @@ class PluginsController extends ShaarliAdminController
         $this->assignView('disabledPlugins', $disabledPlugins);
         $this->assignView(
             'pagetitle',
-            t('Plugin Administration') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Plugin Administration') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         return $response->write($this->render(TemplatePage::PLUGINS_ADMIN));
@@ -64,7 +64,7 @@ class PluginsController extends ShaarliAdminController
                 unset($parameters['parameters_form']);
                 unset($parameters['token']);
                 foreach ($parameters as $param => $value) {
-                    $this->container->conf->set('plugins.'. $param, escape($value));
+                    $this->container->conf->set('plugins.' . $param, escape($value));
                 }
             } else {
                 $this->container->conf->set('general.enabled_plugins', save_plugin_config($parameters));
index 780151dd7debfcc1490545af7fc318322a31508b..fabeaf2f26b09643709bbf1a23f156361fa6bb75 100644 (file)
@@ -72,7 +72,9 @@ class ServerController extends ShaarliAdminController
 
             $this->saveWarningMessage(
                 t('Thumbnails cache has been cleared.') . ' ' .
-                '<a href="'. $this->container->basePath .'/admin/thumbnails">' . t('Please synchronize them.') .'</a>'
+                '<a href="' . $this->container->basePath . '/admin/thumbnails">' .
+                    t('Please synchronize them.') .
+                '</a>'
             );
         } else {
             $folders = [
index d9a7a2e09250d8871521af0c6541ca5df54276ea..0917b6d20fc333c2333932873654b81e6190a0db 100644 (file)
@@ -45,6 +45,4 @@ class SessionFilterController extends ShaarliAdminController
 
         return $this->redirectFromReferer($request, $response, ['visibility']);
     }
-
-
 }
index 8dc386b2d2c70dc8209fa22d71a302986c9f6ecc..ab8e7f4080e8155e5e5e7fd99eb89b06105f19f5 100644 (file)
@@ -23,7 +23,7 @@ class ShaareAddController extends ShaarliAdminController
 
         $this->assignView(
             'pagetitle',
-            t('Shaare a new link') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Shaare a new link') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
         $this->assignView('tags', $tags);
         $this->assignView('default_private_links', $this->container->conf->get('privacy.default_private_links', false));
index 0b14317259bc2fb027f465c3157dc7fc83604f89..35837baac7cc5312db74dc55fce086fa83959f03 100644 (file)
@@ -54,7 +54,7 @@ class ShaareManageController extends ShaarliAdminController
             $data = $formatter->format($bookmark);
             $this->executePageHooks('delete_link', $data);
             $this->container->bookmarkService->remove($bookmark, false);
-            ++ $count;
+            ++$count;
         }
 
         if ($count > 0) {
index 625a5680c3a63c838425345df27679b567dfcbe1..4cbfcdc503f2abeaaefc839056949bfe337c2188 100644 (file)
@@ -118,7 +118,8 @@ class ShaarePublishController extends ShaarliAdminController
             $this->container->conf->get('general.tags_separator', ' ')
         );
 
-        if ($this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE
+        if (
+            $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE
             && true !== $this->container->conf->get('general.enable_async_metadata', true)
             && $bookmark->shouldUpdateThumbnail()
         ) {
@@ -148,7 +149,8 @@ class ShaarePublishController extends ShaarliAdminController
         return $this->redirectFromReferer(
             $request,
             $response,
-            ['/admin/add-shaare', '/admin/shaare'], ['addlink', 'post', 'edit_link'],
+            ['/admin/add-shaare', '/admin/shaare'],
+            ['addlink', 'post', 'edit_link'],
             $bookmark->getShortUrl()
         );
     }
@@ -168,10 +170,10 @@ class ShaarePublishController extends ShaarliAdminController
             $this->assignView($key, $value);
         }
 
-        $editLabel = false === $isNew ? t('Edit') .' ' : '';
+        $editLabel = false === $isNew ? t('Edit') . ' ' : '';
         $this->assignView(
             'pagetitle',
-            $editLabel . t('Shaare') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            $editLabel . t('Shaare') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         return $response->write($this->render(TemplatePage::EDIT_LINK));
@@ -194,7 +196,8 @@ class ShaarePublishController extends ShaarliAdminController
 
             // If this is an HTTP(S) link, we try go get the page to extract
             // the title (otherwise we will to straight to the edit form.)
-            if (true !== $this->container->conf->get('general.enable_async_metadata', true)
+            if (
+                true !== $this->container->conf->get('general.enable_async_metadata', true)
                 && empty($title)
                 && strpos(get_url_scheme($url) ?: '', 'http') !== false
             ) {
index 4dc09d388c86b932c9fe7cb0618a9aa222f8712a..94d97d4bd3bcbd53b3c89bd06a0df14049fc5988 100644 (file)
@@ -34,7 +34,7 @@ class ThumbnailsController extends ShaarliAdminController
         $this->assignView('ids', $ids);
         $this->assignView(
             'pagetitle',
-            t('Thumbnails update') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Thumbnails update') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         return $response->write($this->render(TemplatePage::THUMBNAILS));
index a87f20d29f9d18a443cd066a7f434a60fc61e9b3..560e5e3e76deaa0491241e105e8b10584cce1ff5 100644 (file)
@@ -28,7 +28,7 @@ class ToolsController extends ShaarliAdminController
             $this->assignView($key, $value);
         }
 
-        $this->assignView('pagetitle', t('Tools') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
+        $this->assignView('pagetitle', t('Tools') . ' - ' . $this->container->conf->get('general.title', 'Shaarli'));
 
         return $response->write($this->render(TemplatePage::TOOLS));
     }
index cc3837ced04b1b7da7356491ef974d37764697a2..fe8231be1574b0f1d07d6f62f2d7df3faa85b71f 100644 (file)
@@ -35,7 +35,8 @@ class BookmarkListController extends ShaarliVisitorController
         $formatter->addContextData('base_path', $this->container->basePath);
 
         $searchTags = normalize_spaces($request->getParam('searchtags') ?? '');
-        $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? ''));;
+        $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? ''));
+        ;
 
         // Filter bookmarks according search parameters.
         $visibility = $this->container->sessionManager->getSessionParameter('visibility');
@@ -160,7 +161,7 @@ class BookmarkListController extends ShaarliVisitorController
         $data = array_merge(
             $this->initializeTemplateVars(),
             [
-                'pagetitle' => $bookmark->getTitle() .' - '. $this->container->conf->get('general.title', 'Shaarli'),
+                'pagetitle' => $bookmark->getTitle() . ' - ' . $this->container->conf->get('general.title', 'Shaarli'),
                 'links' => [$formatter->format($bookmark)],
             ]
         );
@@ -185,7 +186,8 @@ class BookmarkListController extends ShaarliVisitorController
             $bookmark->setThumbnail(null);
 
             // Requires an update, not async retrieval, thumbnails enabled
-            if ($bookmark->shouldUpdateThumbnail()
+            if (
+                $bookmark->shouldUpdateThumbnail()
                 && true !== $this->container->conf->get('general.enable_async_metadata', true)
                 && $this->container->conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE
             ) {
index 728bc2d8e81e4107d32efed827351255dea06b58..846cfe22a81c310469391e63e84dc549991792c3 100644 (file)
@@ -132,7 +132,7 @@ class DailyController extends ShaarliVisitorController
                 'date' => $endDateTime,
                 'date_rss' => $endDateTime->format(DateTime::RSS),
                 'date_human' => DailyPageHelper::getDescriptionByType($type, $dayDateTime),
-                'absolute_url' => $indexUrl . 'daily?'. $type .'=' . $day,
+                'absolute_url' => $indexUrl . 'daily?' . $type . '=' . $day,
                 'links' => [],
             ];
 
index 8d8b546aad35cc58573e0083b3ed9d283c0b71a7..edc7ef43a63122db2ea2e1f9a156c1f98bd74b3e 100644 (file)
@@ -27,7 +27,7 @@ class FeedController extends ShaarliVisitorController
 
     protected function processRequest(string $feedType, Request $request, Response $response): Response
     {
-        $response = $response->withHeader('Content-Type', 'application/'. $feedType .'+xml; charset=utf-8');
+        $response = $response->withHeader('Content-Type', 'application/' . $feedType . '+xml; charset=utf-8');
 
         $pageUrl = page_url($this->container->environment);
         $cache = $this->container->pageCacheManager->getCachePage($pageUrl);
index 223292946657169ebd1f42d82afcc5c4971bd46e..bf96592949370026d888ae96f3e155dad483a8b3 100644 (file)
@@ -39,7 +39,8 @@ class InstallController extends ShaarliVisitorController
         // Before installation, we'll make sure that permissions are set properly, and sessions are working.
         $this->checkPermissions();
 
-        if (static::SESSION_TEST_VALUE
+        if (
+            static::SESSION_TEST_VALUE
             !== $this->container->sessionManager->getSessionParameter(static::SESSION_TEST_KEY)
         ) {
             $this->container->sessionManager->setSessionParameter(static::SESSION_TEST_KEY, static::SESSION_TEST_VALUE);
@@ -75,17 +76,18 @@ class InstallController extends ShaarliVisitorController
         // This part makes sure sessions works correctly.
         // (Because on some hosts, session.save_path may not be set correctly,
         // or we may not have write access to it.)
-        if (static::SESSION_TEST_VALUE
+        if (
+            static::SESSION_TEST_VALUE
             !== $this->container->sessionManager->getSessionParameter(static::SESSION_TEST_KEY)
         ) {
             // Step 2: Check if data in session is correct.
             $msg = t(
-                '<pre>Sessions do not seem to work correctly on your server.<br>'.
-                'Make sure the variable "session.save_path" is set correctly in your PHP config, '.
-                'and that you have write access to it.<br>'.
-                'It currently points to %s.<br>'.
-                'On some browsers, accessing your server via a hostname like \'localhost\' '.
-                'or any custom hostname without a dot causes cookie storage to fail. '.
+                '<pre>Sessions do not seem to work correctly on your server.<br>' .
+                'Make sure the variable "session.save_path" is set correctly in your PHP config, ' .
+                'and that you have write access to it.<br>' .
+                'It currently points to %s.<br>' .
+                'On some browsers, accessing your server via a hostname like \'localhost\' ' .
+                'or any custom hostname without a dot causes cookie storage to fail. ' .
                 'We recommend accessing your server via it\'s IP address or Fully Qualified Domain Name.<br>'
             );
             $msg = sprintf($msg, $this->container->sessionManager->getSavePath());
@@ -104,7 +106,8 @@ class InstallController extends ShaarliVisitorController
     public function save(Request $request, Response $response): Response
     {
         $timezone = 'UTC';
-        if (!empty($request->getParam('continent'))
+        if (
+            !empty($request->getParam('continent'))
             && !empty($request->getParam('city'))
             && isTimeZoneValid($request->getParam('continent'), $request->getParam('city'))
         ) {
@@ -114,7 +117,7 @@ class InstallController extends ShaarliVisitorController
 
         $login = $request->getParam('setlogin');
         $this->container->conf->set('credentials.login', $login);
-        $salt = sha1(uniqid('', true) .'_'. mt_rand());
+        $salt = sha1(uniqid('', true) . '_' . mt_rand());
         $this->container->conf->set('credentials.salt', $salt);
         $this->container->conf->set('credentials.hash', sha1($request->getParam('setpassword') . $login . $salt));
 
@@ -123,7 +126,7 @@ class InstallController extends ShaarliVisitorController
         } else {
             $this->container->conf->set(
                 'general.title',
-                'Shared bookmarks on '.escape(index_url($this->container->environment))
+                'Shared bookmarks on ' . escape(index_url($this->container->environment))
             );
         }
 
index f5038fe391137720448a6aa0be6a87c8bed7ea50..4b881535c4174e30bb20f7a3587fd1401e0a97f8 100644 (file)
@@ -43,7 +43,7 @@ class LoginController extends ShaarliVisitorController
         $this
             ->assignView('returnurl', escape($returnUrl))
             ->assignView('remember_user_default', $this->container->conf->get('privacy.remember_user_default', true))
-            ->assignView('pagetitle', t('Login') .' - '. $this->container->conf->get('general.title', 'Shaarli'))
+            ->assignView('pagetitle', t('Login') . ' - ' . $this->container->conf->get('general.title', 'Shaarli'))
         ;
 
         return $response->write($this->render(TemplatePage::LOGIN));
@@ -64,7 +64,8 @@ class LoginController extends ShaarliVisitorController
             return $this->redirect($response, '/');
         }
 
-        if (!$this->container->loginManager->checkCredentials(
+        if (
+            !$this->container->loginManager->checkCredentials(
                 client_ip_id($this->container->environment),
                 $request->getParam('login'),
                 $request->getParam('password')
@@ -101,7 +102,8 @@ class LoginController extends ShaarliVisitorController
      */
     protected function checkLoginState(): bool
     {
-        if ($this->container->loginManager->isLoggedIn()
+        if (
+            $this->container->loginManager->isLoggedIn()
             || $this->container->conf->get('security.open_shaarli', false)
         ) {
             throw new CantLoginException();
index 3c57f8dd61869787565703ad492fb764dd0b5a67..23553ee63105d3f212332a8174ee9f927710c7e0 100644 (file)
@@ -26,7 +26,7 @@ class PictureWallController extends ShaarliVisitorController
 
         $this->assignView(
             'pagetitle',
-            t('Picture wall') .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            t('Picture wall') . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         // Optionally filter the results:
index 54f9fe03fc5bd4c506b04c7cfaae02b8afea0ee5..ae946c592240bcee977fce824b3073d368064ee6 100644 (file)
@@ -144,7 +144,8 @@ abstract class ShaarliVisitorController
         if (null !== $referer) {
             $currentUrl = parse_url($referer);
             // If the referer is not related to Shaarli instance, redirect to default
-            if (isset($currentUrl['host'])
+            if (
+                isset($currentUrl['host'])
                 && strpos(index_url($this->container->environment), $currentUrl['host']) === false
             ) {
                 return $response->withRedirect($defaultPath);
@@ -173,7 +174,7 @@ abstract class ShaarliVisitorController
             }
         }
 
-        $queryString = count($params) > 0 ? '?'. http_build_query($params) : '';
+        $queryString = count($params) > 0 ? '?' . http_build_query($params) : '';
         $anchor = $anchor ? '#' . $anchor : '';
 
         return $response->withRedirect($path . $queryString . $anchor);
index 560cad0808571a5c4c7e0eefc1c6304c057842c6..46d62779dc1a5eed946e9b7e3e3c504fa0a0bec9 100644 (file)
@@ -84,10 +84,10 @@ class TagCloudController extends ShaarliVisitorController
         $this->executePageHooks('render_tag' . $type, $data, 'tag.' . $type);
         $this->assignAllView($data);
 
-        $searchTags = !empty($searchTags) ? trim(str_replace($tagsSeparator, ' ', $searchTags)) .' - ' : '';
+        $searchTags = !empty($searchTags) ? trim(str_replace($tagsSeparator, ' ', $searchTags)) . ' - ' : '';
         $this->assignView(
             'pagetitle',
-            $searchTags . t('Tag '. $type) .' - '. $this->container->conf->get('general.title', 'Shaarli')
+            $searchTags . t('Tag ' . $type) . ' - ' . $this->container->conf->get('general.title', 'Shaarli')
         );
 
         return $response->write($this->render('tag.' . $type));
index 7a3377a718b3c7696b1577ace45aaf70ee3eae51..3aa58542bb0b702acaf44f1b4d552d91c84e3ab9 100644 (file)
@@ -27,7 +27,7 @@ class TagController extends ShaarliVisitorController
         // In case browser does not send HTTP_REFERER, we search a single tag
         if (null === $referer) {
             if (null !== $newTag) {
-                return $this->redirect($response, '/?searchtags='. urlencode($newTag));
+                return $this->redirect($response, '/?searchtags=' . urlencode($newTag));
             }
 
             return $this->redirect($response, '/');
@@ -37,7 +37,7 @@ class TagController extends ShaarliVisitorController
         parse_str($currentUrl['query'] ?? '', $params);
 
         if (null === $newTag) {
-            return $response->withRedirect(($currentUrl['path'] ?? './') .'?'. http_build_query($params));
+            return $response->withRedirect(($currentUrl['path'] ?? './') . '?' . http_build_query($params));
         }
 
         // Prevent redirection loop
@@ -68,7 +68,7 @@ class TagController extends ShaarliVisitorController
         // We also remove page (keeping the same page has no sense, since the results are different)
         unset($params['page']);
 
-        return $response->withRedirect(($currentUrl['path'] ?? './') .'?'. http_build_query($params));
+        return $response->withRedirect(($currentUrl['path'] ?? './') . '?' . http_build_query($params));
     }
 
     /**
@@ -90,7 +90,7 @@ class TagController extends ShaarliVisitorController
         parse_str($currentUrl['query'] ?? '', $params);
 
         if (null === $tagToRemove) {
-            return $response->withRedirect(($currentUrl['path'] ?? './') .'?'. http_build_query($params));
+            return $response->withRedirect(($currentUrl['path'] ?? './') . '?' . http_build_query($params));
         }
 
         // Prevent redirection loop
index 4b34e114caf380d7c6cf28512c908c200f299b88..212dd8e2dc7578aa6da6a3f8d403fff319ae3f42 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Helper;
 
 use Exception;
@@ -16,7 +17,7 @@ class ApplicationUtils
 
     public static $GITHUB_URL = 'https://github.com/shaarli/Shaarli';
     public static $GIT_RAW_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli';
-    public static $GIT_BRANCHES = array('latest', 'stable');
+    public static $GIT_BRANCHES = ['latest', 'stable'];
     private static $VERSION_START_TAG = '<?php /* ';
     private static $VERSION_END_TAG = ' */ ?>';
 
@@ -64,8 +65,8 @@ class ApplicationUtils
         }
 
         return str_replace(
-            array(self::$VERSION_START_TAG, self::$VERSION_END_TAG, PHP_EOL),
-            array('', '', ''),
+            [self::$VERSION_START_TAG, self::$VERSION_END_TAG, PHP_EOL],
+            ['', '', ''],
             $data
         );
     }
@@ -184,13 +185,15 @@ class ApplicationUtils
         $rainTplDir = rtrim($conf->get('resource.raintpl_tpl'), '/');
 
         // Check script and template directories are readable
-        foreach ([
-                     'application',
-                     'inc',
-                     'plugins',
-                     $rainTplDir,
-                     $rainTplDir . '/' . $conf->get('resource.theme'),
-                 ] as $path) {
+        foreach (
+            [
+            'application',
+            'inc',
+            'plugins',
+            $rainTplDir,
+            $rainTplDir . '/' . $conf->get('resource.theme'),
+            ] as $path
+        ) {
             if (!is_readable(realpath($path))) {
                 $errors[] = '"' . $path . '" ' . t('directory is not readable');
             }
@@ -203,10 +206,10 @@ class ApplicationUtils
             ];
         } else {
             $folders = [
-                $conf->get('resource.thumbnails_cache'),
-                $conf->get('resource.data_dir'),
-                $conf->get('resource.page_cache'),
-                $conf->get('resource.raintpl_tmp'),
+            $conf->get('resource.thumbnails_cache'),
+            $conf->get('resource.data_dir'),
+            $conf->get('resource.page_cache'),
+            $conf->get('resource.raintpl_tmp'),
             ];
         }
 
@@ -224,13 +227,15 @@ class ApplicationUtils
         }
 
         // Check configuration files are readable and writable
-        foreach (array(
-                     $conf->getConfigFileExt(),
-                     $conf->get('resource.datastore'),
-                     $conf->get('resource.ban_file'),
-                     $conf->get('resource.log'),
-                     $conf->get('resource.update_check'),
-                 ) as $path) {
+        foreach (
+            [
+                 $conf->getConfigFileExt(),
+                 $conf->get('resource.datastore'),
+                 $conf->get('resource.ban_file'),
+                 $conf->get('resource.log'),
+                 $conf->get('resource.update_check'),
+             ] as $path
+        ) {
             if (!is_file(realpath($path))) {
                 # the file may not exist yet
                 continue;
index 2eac079306dfbf6c99f1bee2e666b8a866f467dd..e8a2168cca98be947e8aba2da18b499543084fa0 100644 (file)
@@ -105,7 +105,7 @@ class FileUtils
         }
 
         foreach (new \DirectoryIterator($path) as $file) {
-            if($file->isDot()) {
+            if ($file->isDot()) {
                 continue;
             }
 
@@ -116,7 +116,7 @@ class FileUtils
 
             if ($file->isFile()) {
                 unlink($file->getPathname());
-            } elseif($file->isDir()) {
+            } elseif ($file->isDir()) {
                 $skipped = static::clearFolder($file->getRealPath(), true, $exclude) || $skipped;
             }
         }
index ed1002b04770b1e5628581c8f9046b96c5cc950c..4bde1d5b8c4b33c97dc91a40f847b96422174f6c 100644 (file)
@@ -48,7 +48,7 @@ function get_http_response(
     $cleanUrl = $urlObj->idnToAscii();
 
     if (!filter_var($cleanUrl, FILTER_VALIDATE_URL) || !$urlObj->isHttp()) {
-        return array(array(0 => 'Invalid HTTP UrlUtils'), false);
+        return [[0 => 'Invalid HTTP UrlUtils'], false];
     }
 
     $userAgent =
@@ -71,7 +71,7 @@ function get_http_response(
 
     $ch = curl_init($cleanUrl);
     if ($ch === false) {
-        return array(array(0 => 'curl_init() error'), false);
+        return [[0 => 'curl_init() error'], false];
     }
 
     // General cURL settings
@@ -82,7 +82,7 @@ function get_http_response(
     curl_setopt(
         $ch,
         CURLOPT_HTTPHEADER,
-        array('Accept-Language: ' . $acceptLanguage)
+        ['Accept-Language: ' . $acceptLanguage]
     );
     curl_setopt($ch, CURLOPT_MAXREDIRS, $maxRedirs);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@@ -90,7 +90,7 @@ function get_http_response(
     curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
 
     // Max download size management
-    curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024*16);
+    curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024 * 16);
     curl_setopt($ch, CURLOPT_NOPROGRESS, false);
     if (is_callable($curlHeaderFunction)) {
         curl_setopt($ch, CURLOPT_HEADERFUNCTION, $curlHeaderFunction);
@@ -122,9 +122,9 @@ function get_http_response(
              * Removing this would require updating
              * GetHttpUrlTest::testGetInvalidRemoteUrl()
              */
-            return array(false, false);
+            return [false, false];
         }
-        return array(array(0 => 'curl_exec() error: ' . $errorStr), false);
+        return [[0 => 'curl_exec() error: ' . $errorStr], false];
     }
 
     // Formatting output like the fallback method
@@ -135,7 +135,7 @@ function get_http_response(
     $rawHeadersLastRedir = end($rawHeadersArrayRedirs);
 
     $content = substr($response, $headSize);
-    $headers = array();
+    $headers = [];
     foreach (preg_split('~[\r\n]+~', $rawHeadersLastRedir) as $line) {
         if (empty($line) || ctype_space($line)) {
             continue;
@@ -146,7 +146,7 @@ function get_http_response(
             $value = $splitLine[1];
             if (array_key_exists($key, $headers)) {
                 if (!is_array($headers[$key])) {
-                    $headers[$key] = array(0 => $headers[$key]);
+                    $headers[$key] = [0 => $headers[$key]];
                 }
                 $headers[$key][] = $value;
             } else {
@@ -157,7 +157,7 @@ function get_http_response(
         }
     }
 
-    return array($headers, $content);
+    return [$headers, $content];
 }
 
 /**
@@ -188,15 +188,15 @@ function get_http_response_fallback(
     $acceptLanguage,
     $maxRedr
 ) {
-    $options = array(
-        'http' => array(
+    $options = [
+        'http' => [
             'method' => 'GET',
             'timeout' => $timeout,
             'user_agent' => $userAgent,
             'header' => "Accept: */*\r\n"
                 . 'Accept-Language: ' . $acceptLanguage
-        )
-    );
+        ]
+    ];
 
     stream_context_set_default($options);
     list($headers, $finalUrl) = get_redirected_headers($cleanUrl, $maxRedr);
@@ -207,7 +207,7 @@ function get_http_response_fallback(
     }
 
     if (! $headers) {
-        return array($headers, false);
+        return [$headers, false];
     }
 
     try {
@@ -215,10 +215,10 @@ function get_http_response_fallback(
         $context = stream_context_create($options);
         $content = file_get_contents($finalUrl, false, $context, -1, $maxBytes);
     } catch (Exception $exc) {
-        return array(array(0 => 'HTTP Error'), $exc->getMessage());
+        return [[0 => 'HTTP Error'], $exc->getMessage()];
     }
 
-    return array($headers, $content);
+    return [$headers, $content];
 }
 
 /**
@@ -237,10 +237,12 @@ function get_redirected_headers($url, $redirectionLimit = 3)
     }
 
     // Headers found, redirection found, and limit not reached.
-    if ($redirectionLimit-- > 0
+    if (
+        $redirectionLimit-- > 0
         && !empty($headers)
         && (strpos($headers[0], '301') !== false || strpos($headers[0], '302') !== false)
-        && !empty($headers['Location'])) {
+        && !empty($headers['Location'])
+    ) {
         $redirection = is_array($headers['Location']) ? end($headers['Location']) : $headers['Location'];
         if ($redirection != $url) {
             $redirection = getAbsoluteUrl($url, $redirection);
@@ -248,7 +250,7 @@ function get_redirected_headers($url, $redirectionLimit = 3)
         }
     }
 
-    return array($headers, $url);
+    return [$headers, $url];
 }
 
 /**
@@ -270,7 +272,7 @@ function getAbsoluteUrl($originalUrl, $newUrl)
     }
 
     $parts = parse_url($originalUrl);
-    $final = $parts['scheme'] .'://'. $parts['host'];
+    $final = $parts['scheme'] . '://' . $parts['host'];
     $final .= (!empty($parts['port'])) ? $parts['port'] : '';
     $final .= '/';
     if ($newUrl[0] != '/') {
@@ -323,7 +325,8 @@ function server_url($server)
                 $scheme = 'https';
             }
 
-            if (($scheme == 'http' && $port != '80')
+            if (
+                ($scheme == 'http' && $port != '80')
                 || ($scheme == 'https' && $port != '443')
             ) {
                 $port = ':' . $port;
@@ -344,22 +347,26 @@ function server_url($server)
             $host = $server['SERVER_NAME'];
         }
 
-        return $scheme.'://'.$host.$port;
+        return $scheme . '://' . $host . $port;
     }
 
     // SSL detection
-    if ((! empty($server['HTTPS']) && strtolower($server['HTTPS']) == 'on')
-        || (isset($server['SERVER_PORT']) && $server['SERVER_PORT'] == '443')) {
+    if (
+        (! empty($server['HTTPS']) && strtolower($server['HTTPS']) == 'on')
+        || (isset($server['SERVER_PORT']) && $server['SERVER_PORT'] == '443')
+    ) {
         $scheme = 'https';
     }
 
     // Do not append standard port values
-    if (($scheme == 'http' && $server['SERVER_PORT'] != '80')
-        || ($scheme == 'https' && $server['SERVER_PORT'] != '443')) {
-        $port = ':'.$server['SERVER_PORT'];
+    if (
+        ($scheme == 'http' && $server['SERVER_PORT'] != '80')
+        || ($scheme == 'https' && $server['SERVER_PORT'] != '443')
+    ) {
+        $port = ':' . $server['SERVER_PORT'];
     }
 
-    return $scheme.'://'.$server['SERVER_NAME'].$port;
+    return $scheme . '://' . $server['SERVER_NAME'] . $port;
 }
 
 /**
@@ -567,7 +574,10 @@ function get_curl_download_callback(
      *
      * @return int|bool length of $data or false if we need to stop the download
      */
-    return function ($ch, $data) use (
+    return function (
+        $ch,
+        $data
+    ) use (
         $retrieveDescription,
         $tagsSeparator,
         &$charset,
@@ -601,7 +611,7 @@ function get_curl_download_callback(
                 $foundChunk = $currentChunk;
                 // Keywords use the format tag1, tag2 multiple words, tag
                 // So we split the result with `,`, then if a tag contains the separator we replace it by `-`.
-                $keywords = tags_array2str(array_map(function(string $keyword) use ($tagsSeparator): string {
+                $keywords = tags_array2str(array_map(function (string $keyword) use ($tagsSeparator): string {
                     return tags_array2str(tags_str2array($keyword, $tagsSeparator), '-');
                 }, tags_str2array($keywords, ',')), $tagsSeparator);
             }
@@ -611,7 +621,8 @@ function get_curl_download_callback(
         // If we already found either the title, description or keywords,
         // it's highly unlikely that we'll found the other metas further than
         // in the same chunk of data or the next one. So we also stop the download after that.
-        if ((!empty($responseCode) && !empty($contentType) && !empty($charset)) && $foundChunk !== null
+        if (
+            (!empty($responseCode) && !empty($contentType) && !empty($charset)) && $foundChunk !== null
             && (! $retrieveDescription
                 || $foundChunk < $currentChunk
                 || (!empty($title) && !empty($description) && !empty($keywords))
index 90444a2f4beaf0ad15df3be06ff36d4431d61811..fe87088f28afee2a5ab4c541d2e95884846f1c9c 100644 (file)
@@ -17,7 +17,7 @@ namespace Shaarli\Http;
  */
 class Url
 {
-    private static $annoyingQueryParams = array(
+    private static $annoyingQueryParams = [
         // Facebook
         'action_object_map=',
         'action_ref_map=',
@@ -37,15 +37,15 @@ class Url
 
         // Other
         'campaign_'
-    );
+    ];
 
-    private static $annoyingFragments = array(
+    private static $annoyingFragments = [
         // ATInternet
         'xtor=RSS-',
 
         // Misc.
         'tk.rss_all'
-    );
+    ];
 
     /*
      * URL parts represented as an array
@@ -120,7 +120,7 @@ class Url
         foreach (self::$annoyingQueryParams as $annoying) {
             foreach ($queryParams as $param) {
                 if (startsWith($param, $annoying)) {
-                    $queryParams = array_diff($queryParams, array($param));
+                    $queryParams = array_diff($queryParams, [$param]);
                     continue;
                 }
             }
index e8d1a283fca632ecce9af242f8676c7f824015a4..de5b7db16b8c99aa29962978674e26bfe755e8ca 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Converts an array-represented URL to a string
  *
  */
 function unparse_url($parsedUrl)
 {
-    $scheme   = isset($parsedUrl['scheme']) ? $parsedUrl['scheme'].'://' : '';
+    $scheme   = isset($parsedUrl['scheme']) ? $parsedUrl['scheme'] . '://' : '';
     $host     = isset($parsedUrl['host']) ? $parsedUrl['host'] : '';
-    $port     = isset($parsedUrl['port']) ? ':'.$parsedUrl['port'] : '';
+    $port     = isset($parsedUrl['port']) ? ':' . $parsedUrl['port'] : '';
     $user     = isset($parsedUrl['user']) ? $parsedUrl['user'] : '';
-    $pass     = isset($parsedUrl['pass']) ? ':'.$parsedUrl['pass']  : '';
+    $pass     = isset($parsedUrl['pass']) ? ':' . $parsedUrl['pass']  : '';
     $pass     = ($user || $pass) ? "$pass@" : '';
     $path     = isset($parsedUrl['path']) ? $parsedUrl['path'] : '';
-    $query    = isset($parsedUrl['query']) ? '?'.$parsedUrl['query'] : '';
-    $fragment = isset($parsedUrl['fragment']) ? '#'.$parsedUrl['fragment'] : '';
+    $query    = isset($parsedUrl['query']) ? '?' . $parsedUrl['query'] : '';
+    $fragment = isset($parsedUrl['fragment']) ? '#' . $parsedUrl['fragment'] : '';
 
     return "$scheme$user$pass$host$port$path$query$fragment";
 }
index 826604e77204f3726862890d0478ad5b448f7199..1fed418b7c16612e875b9be185e07dd730100f4c 100644 (file)
@@ -51,7 +51,7 @@ class LegacyController extends ShaarliVisitorController
 
         if (!$this->container->loginManager->isLoggedIn()) {
             $parameters = $buildParameters($request->getQueryParams(), true);
-            return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
+            return $this->redirect($response, '/login?returnurl=' . $this->getBasePath() . $route . $parameters);
         }
 
         $parameters = $buildParameters($request->getQueryParams(), false);
index 5c02a21b48a69222bee6a3543f36f918b95b402e..d3beafe0dc874b7b8aad069257f2623c13fa7e9a 100644 (file)
@@ -62,7 +62,7 @@ class LegacyLinkDB implements Iterator, Countable, ArrayAccess
     private $datastore;
 
     // Link date storage format
-    const LINK_DATE_FORMAT = 'Ymd_His';
+    public const LINK_DATE_FORMAT = 'Ymd_His';
 
     // List of bookmarks (associative array)
     //  - key:   link date (e.g. "20110823_124546"),
@@ -240,8 +240,8 @@ class LegacyLinkDB implements Iterator, Countable, ArrayAccess
         }
 
         // Create a dummy database for example
-        $this->links = array();
-        $link = array(
+        $this->links = [];
+        $link = [
             'id' => 1,
             'title' => t('The personal, minimalist, super-fast, database free, bookmarking service'),
             'url' => 'https://shaarli.readthedocs.io',
@@ -257,11 +257,11 @@ You use the community supported version of the original Shaarli project, by Seba
             'created' => new DateTime(),
             'tags' => 'opensource software',
             'sticky' => false,
-        );
+        ];
         $link['shorturl'] = link_small_hash($link['created'], $link['id']);
         $this->links[1] = $link;
 
-        $link = array(
+        $link = [
             'id' => 0,
             'title' => t('My secret stuff... - Pastebin.com'),
             'url' => 'http://sebsauvage.net/paste/?8434b27936c09649#bR7XsXhoTiLcqCpQbmOpBi3rq2zzQUC5hBI7ZT1O3x8=',
@@ -270,7 +270,7 @@ You use the community supported version of the original Shaarli project, by Seba
             'created' => new DateTime('1 minute ago'),
             'tags' => 'secretstuff',
             'sticky' => false,
-        );
+        ];
         $link['shorturl'] = link_small_hash($link['created'], $link['id']);
         $this->links[0] = $link;
 
@@ -285,7 +285,7 @@ You use the community supported version of the original Shaarli project, by Seba
     {
         // Public bookmarks are hidden and user not logged in => nothing to show
         if ($this->hidePublicLinks && !$this->loggedIn) {
-            $this->links = array();
+            $this->links = [];
             return;
         }
 
@@ -293,7 +293,7 @@ You use the community supported version of the original Shaarli project, by Seba
         $this->ids = [];
         $this->links = FileUtils::readFlatDB($this->datastore, []);
 
-        $toremove = array();
+        $toremove = [];
         foreach ($this->links as $key => &$link) {
             if (!$this->loggedIn && $link['private'] != 0) {
                 // Transition for not upgraded databases.
@@ -414,7 +414,7 @@ You use the community supported version of the original Shaarli project, by Seba
      * @return array filtered bookmarks, all bookmarks if no suitable filter was provided.
      */
     public function filterSearch(
-        $filterRequest = array(),
+        $filterRequest = [],
         $casesensitive = false,
         $visibility = 'all',
         $untaggedonly = false
@@ -512,7 +512,7 @@ You use the community supported version of the original Shaarli project, by Seba
      */
     public function days()
     {
-        $linkDays = array();
+        $linkDays = [];
         foreach ($this->links as $link) {
             $linkDays[$link['created']->format('Ymd')] = 0;
         }
index 7cf93d60ca3ae2a05d0f61f45062bad4ded672b2..e6d186c444828abc11f1567a88c64d6276975972 100644 (file)
@@ -120,7 +120,7 @@ class LegacyLinkFilter
             return $this->links;
         }
 
-        $out = array();
+        $out = [];
         foreach ($this->links as $key => $value) {
             if ($value['private'] && $visibility === 'private') {
                 $out[$key] = $value;
@@ -143,7 +143,7 @@ class LegacyLinkFilter
      */
     private function filterSmallHash($smallHash)
     {
-        $filtered = array();
+        $filtered = [];
         foreach ($this->links as $key => $l) {
             if ($smallHash == $l['shorturl']) {
                 // Yes, this is ugly and slow
@@ -186,7 +186,7 @@ class LegacyLinkFilter
             return $this->noFilter($visibility);
         }
 
-        $filtered = array();
+        $filtered = [];
         $search = mb_convert_case(html_entity_decode($searchterms), MB_CASE_LOWER, 'UTF-8');
         $exactRegex = '/"([^"]+)"/';
         // Retrieve exact search terms.
@@ -198,8 +198,8 @@ class LegacyLinkFilter
         $explodedSearchAnd = array_values(array_filter($explodedSearchAnd));
 
         // Filter excluding terms and update andSearch.
-        $excludeSearch = array();
-        $andSearch = array();
+        $excludeSearch = [];
+        $andSearch = [];
         foreach ($explodedSearchAnd as $needle) {
             if ($needle[0] == '-' && strlen($needle) > 1) {
                 $excludeSearch[] = substr($needle, 1);
@@ -208,7 +208,7 @@ class LegacyLinkFilter
             }
         }
 
-        $keys = array('title', 'description', 'url', 'tags');
+        $keys = ['title', 'description', 'url', 'tags'];
 
         // Iterate over every stored link.
         foreach ($this->links as $id => $link) {
@@ -336,7 +336,7 @@ class LegacyLinkFilter
         }
 
         // create resulting array
-        $filtered = array();
+        $filtered = [];
 
         // iterate over each link
         foreach ($this->links as $key => $link) {
@@ -352,7 +352,7 @@ class LegacyLinkFilter
             $search = $link['tags']; // build search string, start with tags of current link
             if (strlen(trim($link['description'])) && strpos($link['description'], '#') !== false) {
                 // description given and at least one possible tag found
-                $descTags = array();
+                $descTags = [];
                 // find all tags in the form of #tag in the description
                 preg_match_all(
                     '/(?<![' . self::$HASHTAG_CHARS . '])#([' . self::$HASHTAG_CHARS . ']+?)\b/sm',
@@ -419,7 +419,7 @@ class LegacyLinkFilter
             throw new Exception('Invalid date format');
         }
 
-        $filtered = array();
+        $filtered = [];
         foreach ($this->links as $key => $l) {
             if ($l['created']->format('Ymd') == $day) {
                 $filtered[$key] = $l;
index ed949b1e5ae89b788f38f80c4ffc5d71360c947f..9bda54b8dd87ee9e6b0ef202ae7f136440568857 100644 (file)
@@ -93,7 +93,7 @@ class LegacyUpdater
      */
     public function update()
     {
-        $updatesRan = array();
+        $updatesRan = [];
 
         // If the user isn't logged in, exit without updating.
         if ($this->isLoggedIn !== true) {
@@ -106,7 +106,8 @@ class LegacyUpdater
 
         foreach ($this->methods as $method) {
             // Not an update method or already done, pass.
-            if (!startsWith($method->getName(), 'updateMethod')
+            if (
+                !startsWith($method->getName(), 'updateMethod')
                 || in_array($method->getName(), $this->doneUpdates)
             ) {
                 continue;
@@ -189,7 +190,7 @@ class LegacyUpdater
         }
 
         // Set sub config keys (config and plugins)
-        $subConfig = array('config', 'plugins');
+        $subConfig = ['config', 'plugins'];
         foreach ($subConfig as $sub) {
             foreach ($oldConfig[$sub] as $key => $value) {
                 if (isset($legacyMap[$sub . '.' . $key])) {
@@ -259,7 +260,7 @@ class LegacyUpdater
         $save = $this->conf->get('resource.data_dir') . '/datastore.' . date('YmdHis') . '.php';
         copy($this->conf->get('resource.datastore'), $save);
 
-        $links = array();
+        $links = [];
         foreach ($this->linkDB as $offset => $value) {
             $links[] = $value;
             unset($this->linkDB[$offset]);
@@ -498,7 +499,8 @@ class LegacyUpdater
      */
     public function updateMethodDownloadSizeAndTimeoutConf()
     {
-        if ($this->conf->exists('general.download_max_size')
+        if (
+            $this->conf->exists('general.download_max_size')
             && $this->conf->exists('general.download_timeout')
         ) {
             return true;
index 6ca728b79de783eed9ca8ba0cb37fdfac7774227..2d97b4c85dbb89a3a1b20a582e0da35b97759a3c 100644 (file)
@@ -59,11 +59,11 @@ class NetscapeBookmarkUtils
         $indexUrl
     ) {
         // see tpl/export.html for possible values
-        if (!in_array($selection, array('all', 'public', 'private'))) {
+        if (!in_array($selection, ['all', 'public', 'private'])) {
             throw new Exception(t('Invalid export selection:') . ' "' . $selection . '"');
         }
 
-        $bookmarkLinks = array();
+        $bookmarkLinks = [];
         foreach ($this->bookmarkService->search([], $selection) as $bookmark) {
             $link = $formatter->format($bookmark);
             $link['taglist'] = implode(',', $bookmark->getTags());
index da66dea3952ad3cb0086a4594858f392f3270ba0..3ea55728cc4c9b6af22d88da6f92e533b270069c 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Plugin;
 
 use Shaarli\Config\ConfigManager;
@@ -23,7 +24,7 @@ class PluginManager
      *
      * @var array $loadedPlugins
      */
-    private $loadedPlugins = array();
+    private $loadedPlugins = [];
 
     /**
      * @var ConfigManager Configuration Manager instance.
@@ -57,7 +58,7 @@ class PluginManager
     public function __construct(&$conf)
     {
         $this->conf = $conf;
-        $this->errors = array();
+        $this->errors = [];
     }
 
     /**
@@ -98,7 +99,7 @@ class PluginManager
      *
      * @return void
      */
-    public function executeHooks($hook, &$data, $params = array())
+    public function executeHooks($hook, &$data, $params = [])
     {
         $metadataParameters = [
             'target' => '_PAGE_',
@@ -196,7 +197,7 @@ class PluginManager
      */
     public function getPluginsMeta()
     {
-        $metaData = array();
+        $metaData = [];
         $dirs = glob(self::$PLUGINS_PATH . '/*', GLOB_ONLYDIR | GLOB_MARK);
 
         // Browse all plugin directories.
@@ -217,9 +218,9 @@ class PluginManager
             if (isset($metaData[$plugin]['parameters'])) {
                 $params = explode(';', $metaData[$plugin]['parameters']);
             } else {
-                $params = array();
+                $params = [];
             }
-            $metaData[$plugin]['parameters'] = array();
+            $metaData[$plugin]['parameters'] = [];
             foreach ($params as $param) {
                 if (empty($param)) {
                     continue;
index e5386f02605989de373e21e4b4295c3785ac058a..21ac6604f77a644bab417553d2c79d3d60dd77bc 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Plugin\Exception;
 
 use Exception;
index 86096c64476bf655626633efb692b0a9b352eacc..18471f0a21eb9f5624d80887f0c39844aee146a1 100644 (file)
@@ -23,10 +23,10 @@ class ThemeUtils
     public static function getThemes($tplDir)
     {
         $tplDir = rtrim($tplDir, '/');
-        $allTheme = glob($tplDir.'/*', GLOB_ONLYDIR);
+        $allTheme = glob($tplDir . '/*', GLOB_ONLYDIR);
         $themes = [];
         foreach ($allTheme as $value) {
-            $themes[] = str_replace($tplDir.'/', '', $value);
+            $themes[] = str_replace($tplDir . '/', '', $value);
         }
 
         return $themes;
index 288cbde05fd2e77009b6622b8669729d02903ba6..7077af5b5f339576ffc5b2f54f220dc5e56665c3 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-
 namespace Shaarli\Security;
 
 use Psr\Log\LoggerInterface;
@@ -47,7 +46,8 @@ class BanManager
      * @param string          $banFile        Path to the file containing IP bans and failures
      * @param LoggerInterface $logger         PSR-3 logger to save login attempts in log directory
      */
-    public function __construct($trustedProxies, $nbAttempts, $banDuration, $banFile, LoggerInterface $logger) {
+    public function __construct($trustedProxies, $nbAttempts, $banDuration, $banFile, LoggerInterface $logger)
+    {
         $this->trustedProxies = $trustedProxies;
         $this->nbAttempts = $nbAttempts;
         $this->banDuration = $banDuration;
@@ -80,7 +80,7 @@ class BanManager
 
         if ($this->failures[$ip] >= $this->nbAttempts) {
             $this->bans[$ip] = time() + $this->banDuration;
-            $this->logger->info(format_log('IP address banned from login: '. $ip, $ip));
+            $this->logger->info(format_log('IP address banned from login: ' . $ip, $ip));
         }
         $this->writeBanFile();
     }
@@ -136,7 +136,7 @@ class BanManager
             unset($this->failures[$ip]);
         }
         unset($this->bans[$ip]);
-        $this->logger->info(format_log('Ban lifted for: '. $ip, $ip));
+        $this->logger->info(format_log('Ban lifted for: ' . $ip, $ip));
 
         $this->writeBanFile();
         return false;
index 426e785e1a5431328d0818d49ec6d00d037eb0cd..b795b80e74d33021a58844c7698108eafd5c0796 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Security;
 
 use Exception;
@@ -106,7 +107,8 @@ class LoginManager
             // The user client has a valid stay-signed-in cookie
             // Session information is updated with the current client information
             $this->sessionManager->storeLoginInfo($clientIpId);
-        } elseif ($this->sessionManager->hasSessionExpired()
+        } elseif (
+            $this->sessionManager->hasSessionExpired()
             || $this->sessionManager->hasClientIpChanged($clientIpId)
         ) {
             $this->sessionManager->logout();
@@ -145,7 +147,8 @@ class LoginManager
         // Check credentials
         try {
             $useLdapLogin = !empty($this->configManager->get('ldap.host'));
-            if ($login === $this->configManager->get('credentials.login')
+            if (
+                $login === $this->configManager->get('credentials.login')
                 && (
                     (false === $useLdapLogin && $this->checkCredentialsFromLocalConfig($login, $password))
                     || (true === $useLdapLogin && $this->checkCredentialsFromLdap($login, $password))
@@ -156,7 +159,7 @@ class LoginManager
 
                 return true;
             }
-        } catch(Exception $exception) {
+        } catch (Exception $exception) {
             $this->logger->info(format_log('Exception while checking credentials: ' . $exception, $clientIpId));
         }
 
@@ -174,7 +177,8 @@ class LoginManager
      *
      * @return bool true if the provided credentials are valid, false otherwise
      */
-    public function checkCredentialsFromLocalConfig($login, $password) {
+    public function checkCredentialsFromLocalConfig($login, $password)
+    {
         $hash = sha1($password . $login . $this->configManager->get('credentials.salt'));
 
         return $login == $this->configManager->get('credentials.login')
@@ -193,14 +197,14 @@ class LoginManager
      */
     public function checkCredentialsFromLdap($login, $password, $connect = null, $bind = null)
     {
-        $connect = $connect ?? function($host) {
+        $connect = $connect ?? function ($host) {
             $resource = ldap_connect($host);
 
             ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, 3);
 
             return $resource;
         };
-        $bind = $bind ?? function($handle, $dn, $password) {
+        $bind = $bind ?? function ($handle, $dn, $password) {
             return ldap_bind($handle, $dn, $password);
         };
 
index 96bf193c1040debe1e14003c1f3eaab7deba71bf..f957b91a06db98a4d351d206d3804041057b7208 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Security;
 
 use Shaarli\Config\ConfigManager;
@@ -79,7 +80,7 @@ class SessionManager
      */
     public function generateToken()
     {
-        $token = sha1(uniqid('', true) .'_'. mt_rand() . $this->conf->get('credentials.salt'));
+        $token = sha1(uniqid('', true) . '_' . mt_rand() . $this->conf->get('credentials.salt'));
         $this->session['tokens'][$token] = 1;
         return $token;
     }
index 88a7bc7b27337a0c572647f0d2ac1ef3027939db..4f557d0f58fabca7429684eadbf3dfcc82bb1f7c 100644 (file)
@@ -88,7 +88,8 @@ class Updater
 
         foreach ($this->methods as $method) {
             // Not an update method or already done, pass.
-            if (! startsWith($method->getName(), 'updateMethod')
+            if (
+                ! startsWith($method->getName(), 'updateMethod')
                 || in_array($method->getName(), $this->doneUpdates)
             ) {
                 continue;
@@ -121,12 +122,12 @@ class Updater
 
     public function readUpdates(string $updatesFilepath): array
     {
-        return UpdaterUtils::read_updates_file($updatesFilepath);
+        return UpdaterUtils::readUpdatesFile($updatesFilepath);
     }
 
     public function writeUpdates(string $updatesFilepath, array $updates): void
     {
-        UpdaterUtils::write_updates_file($updatesFilepath, $updates);
+        UpdaterUtils::writeUpdatesFile($updatesFilepath, $updates);
     }
 
     /**
@@ -152,7 +153,8 @@ class Updater
         $updated = false;
 
         foreach ($this->bookmarkService->search() as $bookmark) {
-            if ($bookmark->isNote()
+            if (
+                $bookmark->isNote()
                 && startsWith($bookmark->getUrl(), '?')
                 && 1 === preg_match('/^\?([a-zA-Z0-9-_@]{6})($|&|#)/', $bookmark->getUrl(), $match)
             ) {
index 828a49fc02ae5909e6ab4c5c3502421af581ec81..206f826eda34b5719a5605c0c4b8106206b519b1 100644 (file)
@@ -11,7 +11,7 @@ class UpdaterUtils
      *
      * @return array Already done update methods.
      */
-    public static function read_updates_file($updatesFilepath)
+    public static function readUpdatesFile($updatesFilepath)
     {
         if (! empty($updatesFilepath) && is_file($updatesFilepath)) {
             $content = file_get_contents($updatesFilepath);
@@ -19,7 +19,7 @@ class UpdaterUtils
                 return explode(';', $content);
             }
         }
-        return array();
+        return [];
     }
 
     /**
@@ -30,7 +30,7 @@ class UpdaterUtils
      *
      * @throws \Exception Couldn't write version number.
      */
-    public static function write_updates_file($updatesFilepath, $updates)
+    public static function writeUpdatesFile($updatesFilepath, $updates)
     {
         if (empty($updatesFilepath)) {
             throw new \Exception('Updates file path is not set, can\'t write updates.');
@@ -38,7 +38,7 @@ class UpdaterUtils
 
         $res = file_put_contents($updatesFilepath, implode(';', $updates));
         if ($res === false) {
-            throw new \Exception('Unable to write updates in '. $updatesFilepath . '.');
+            throw new \Exception('Unable to write updates in ' . $updatesFilepath . '.');
         }
     }
 }
index 5c085e039a1d15cfa6bfa95596ef006888a04585..c42e8ffefe083a0a01eee2be35246cee522800f9 100644 (file)
@@ -6,7 +6,7 @@ Please read [Contributing to Shaarli](https://github.com/shaarli/Shaarli/tree/ma
 
 
 - [Unit tests](Unit-tests)
-- Javascript linting - Shaarli uses [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript). 
+- Javascript linting - Shaarli uses [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript).
 Run `make eslint` to check JS style.
 - [GnuPG signature](GnuPG-signature) for tags/releases
 
@@ -51,12 +51,12 @@ PHP (managed through [`composer.json`](https://github.com/shaarli/Shaarli/blob/m
 
 ## Link structure
 
-Every link available through the `LinkDB` object is represented as an array 
+Every link available through the `LinkDB` object is represented as an array
 containing the following fields:
 
   * `id` (integer): Unique identifier.
   * `title` (string): Title of the link.
-  * `url` (string): URL of the link. Used for displayable links (without redirector, url encoding, etc.).  
+  * `url` (string): URL of the link. Used for displayable links (without redirector, url encoding, etc.).
            Can be absolute or relative for Notes.
   * `real_url` (string): Real destination URL, can be redirected, encoded, etc.
   * `shorturl` (string): Permalink small hash.
@@ -66,7 +66,7 @@ containing the following fields:
   * `thumbnail` (string|boolean): relative path of the thumbnail cache file, or false if there isn't any.
   * `created` (DateTime): link creation date time.
   * `updated` (DateTime): last modification date time.
-  
+
 Small hashes are used to make a link to an entry in Shaarli. They are unique: the date of the item (eg. `20110923_150523`) is hashed with CRC32, then converted to base64 and some characters are replaced. They are always 6 characters longs and use only `A-Z a-z 0-9 - _` and `@`.
 
 
@@ -163,11 +163,13 @@ See [`.travis.yml`](https://github.com/shaarli/Shaarli/blob/master/.travis.yml).
 
 ## Static analysis
 
-Patches should try to stick to the [PHP Standard Recommendations](http://www.php-fig.org/psr/) (PSR), especially:
+Patches should try to stick to the [PHP Standard Recommendations](http://www.php-fig.org/psr/) (PSR), and must follow:
 
 - [PSR-1](http://www.php-fig.org/psr/psr-1/) - Basic Coding Standard
 - [PSR-2](http://www.php-fig.org/psr/psr-2/) - Coding Style Guide
+- [PSR-12](http://www.php-fig.org/psr/psr-12/) - Extended Coding Style  Guide
 
+These are enforced on pull requests using our Continuous Integration tools.
 
 **Work in progress:** Static analysis is currently being discussed here: in [#95 - Fix coding style (static analysis)](https://github.com/shaarli/Shaarli/issues/95), [#130 - Continuous Integration tools & features](https://github.com/shaarli/Shaarli/issues/130)
 
index 8fe862361330fd59274eeceddbd8c1518255ba0e..1eb7659af859a2a785a5f913c6be5b6b5f80c966 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Shaarli - The personal, minimalist, super-fast, database free, bookmarking service.
  *
@@ -77,9 +78,9 @@ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
 new Languages(setlocale(LC_MESSAGES, 0), $conf);
 
 $conf->setEmpty('general.timezone', date_default_timezone_get());
-$conf->setEmpty('general.title', t('Shared bookmarks on '). escape(index_url($_SERVER)));
+$conf->setEmpty('general.title', t('Shared bookmarks on ') . escape(index_url($_SERVER)));
 
-RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl').'/'.$conf->get('resource.theme').'/'; // template directory
+RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl') . '/' . $conf->get('resource.theme') . '/'; // template directory
 RainTPL::$cache_dir = $conf->get('resource.raintpl_tmp'); // cache directory
 
 date_default_timezone_set($conf->get('general.timezone', 'UTC'));
@@ -177,6 +178,6 @@ try {
 } catch (Throwable $e) {
     die(nl2br(
         'An unexpected error happened, and the error template could not be displayed.' . PHP_EOL . PHP_EOL .
-       exception2text($e)
+        exception2text($e)
     ));
 }
index 29b95d56dacffcff94e3a92cd6137289750e6686..c559e35da97bb4d8ec7afb229c7845fab983767f 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -5,13 +5,18 @@
   <file>index.php</file>
   <file>application</file>
   <file>plugins</file>
-  <file>tests</file>
+<!--  <file>tests</file>-->
 
   <exclude-pattern>*/*.css</exclude-pattern>
   <exclude-pattern>*/*.js</exclude-pattern>
 
   <arg name="colors"/>
 
-  <rule ref="PSR1"/>
-  <rule ref="PSR2"/>
+  <rule ref="PSR12"/>
+  <rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
+
+  <rule ref="PSR1.Files.SideEffects.FoundWithSymbols">
+    <!--  index.php bootstraps everything, so yes mixed symbols with side effects  -->
+    <exclude-pattern>index.php</exclude-pattern>
+  </rule>
 </ruleset>
index ab6ed6de0cc34f2eca752ea293c90b1b45655a4b..80b1dd95bee836214e1c29f796b1f7a1e37a1721 100644 (file)
@@ -17,26 +17,26 @@ use Shaarli\Render\TemplatePage;
 function hook_addlink_toolbar_render_header($data)
 {
     if ($data['_PAGE_'] == TemplatePage::LINKLIST && $data['_LOGGEDIN_'] === true) {
-        $form = array(
-            'attr' => array(
+        $form = [
+            'attr' => [
                 'method' => 'GET',
                 'action' => $data['_BASE_PATH_'] . '/admin/shaare',
                 'name'   => 'addform',
                 'class'  => 'addform',
-            ),
-            'inputs' => array(
-                array(
+            ],
+            'inputs' => [
+                [
                     'type' => 'text',
                     'name' => 'post',
                     'placeholder' => t('URI'),
-                ),
-                array(
+                ],
+                [
                     'type' => 'submit',
                     'value' => t('Add link'),
                     'class' => 'bigbutton',
-                ),
-            ),
-        );
+                ],
+            ],
+        ];
         $data['fields_toolbar'][] = $form;
     }
 
index ed2715322686e82ca4a9373d3417f57babc67da1..88f2b65339b2ca41c0c0f9571d801857751435bf 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Plugin Archive.org.
  *
index e1fd5cfbdb19daf547519af2d7f41482c88f7b96..574a0bd4df3170decd74967988d8d1c8fb8bb2cb 100644 (file)
@@ -28,14 +28,14 @@ function default_colors_init($conf)
 {
     $params = [];
     foreach (DEFAULT_COLORS_PLACEHOLDERS as $placeholder) {
-        $value = trim($conf->get('plugins.'. $placeholder, ''));
+        $value = trim($conf->get('plugins.' . $placeholder, ''));
         if (strlen($value) > 0) {
             $params[$placeholder] = $value;
         }
     }
 
     if (empty($params)) {
-        $error = t('Default colors plugin error: '.
+        $error = t('Default colors plugin error: ' .
             'This plugin is active and no custom color is configured.');
         return [$error];
     }
@@ -56,7 +56,7 @@ function default_colors_init($conf)
 function hook_default_colors_render_includes($data)
 {
     $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css';
-    if (file_exists($file )) {
+    if (file_exists($file)) {
         $data['css_files'][] = $file ;
     }
 
@@ -75,7 +75,7 @@ function default_colors_generate_css_file($params): void
     $content = '';
     foreach (DEFAULT_COLORS_PLACEHOLDERS as $rule) {
         $content .= !empty($params[$rule])
-            ? default_colors_format_css_rule($params, $rule) .';'. PHP_EOL
+            ? default_colors_format_css_rule($params, $rule) . ';' . PHP_EOL
             : '';
     }
 
@@ -99,8 +99,8 @@ function default_colors_format_css_rule($data, $parameter)
     }
 
     $key = str_replace('DEFAULT_COLORS_', '', $parameter);
-    $key = str_replace('_', '-', strtolower($key)) .'-color';
-    return '  --'. $key .': '. $data[$parameter];
+    $key = str_replace('_', '-', strtolower($key)) . '-color';
+    return '  --' . $key . ': ' . $data[$parameter];
 }
 
 
index defb01f7e4457d05f95f0f95e939297300033904..22d27b6827f306ad3a3230ffd8361cd543a5bd6b 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Demo Plugin.
  *
@@ -82,14 +83,14 @@ function hook_demo_plugin_render_header($data)
              * A link is an array of its attributes (key="value"),
              * and a mandatory `html` key, which contains its value.
              */
-            $button = array(
-                'attr' => array (
+            $button = [
+                'attr' =>  [
                     'href' => '#',
                     'class' => 'mybutton',
                     'title' => 'hover me',
-                ),
+                ],
                 'html' => 'DEMO buttons toolbar',
-            );
+            ];
             $data['buttons_toolbar'][] = $button;
         }
 
@@ -115,29 +116,29 @@ function hook_demo_plugin_render_header($data)
          *   <input input-2-attribute-1="input 2 attribute 1 value">
          * </form>
          */
-        $form = array(
-            'attr' => array(
+        $form = [
+            'attr' => [
                 'method' => 'GET',
                 'action' => $data['_BASE_PATH_'] . '/',
                 'class' => 'addform',
-            ),
-            'inputs' => array(
-                array(
+            ],
+            'inputs' => [
+                [
                     'type' => 'text',
                     'name' => 'demo',
                     'placeholder' => 'demo',
-                )
-            )
-        );
+                ]
+            ]
+        ];
         $data['fields_toolbar'][] = $form;
     }
     // Another button always displayed
-    $button = array(
-        'attr' => array(
+    $button = [
+        'attr' => [
             'href' => '#',
-        ),
+        ],
         'html' => 'Demo',
-    );
+    ];
     $data['buttons_toolbar'][] = $button;
 
     return $data;
@@ -187,7 +188,7 @@ function hook_demo_plugin_render_includes($data)
 function hook_demo_plugin_render_footer($data)
 {
     // Footer text
-    $data['text'][] = '<br>'. demo_plugin_t('Shaarli is now enhanced by the awesome demo_plugin.');
+    $data['text'][] = '<br>' . demo_plugin_t('Shaarli is now enhanced by the awesome demo_plugin.');
 
     // Free elements at the end of the page.
     $data['endofpage'][] = '<marquee id="demo_marquee">' .
@@ -229,13 +230,13 @@ function hook_demo_plugin_render_linklist($data)
      * and a mandatory `html` key, which contains its value.
      * It's also recommended to add key 'on' or 'off' for theme rendering.
      */
-    $action = array(
-        'attr' => array(
+    $action = [
+        'attr' => [
             'href' => '?up',
             'title' => 'Uppercase!',
-        ),
+        ],
         'html' => '←',
-    );
+    ];
 
     if (isset($_GET['up'])) {
         // Manipulate link data
@@ -275,7 +276,7 @@ function hook_demo_plugin_render_linklist($data)
 function hook_demo_plugin_render_editlink($data)
 {
     // Load HTML into a string
-    $html = file_get_contents(PluginManager::$PLUGINS_PATH .'/demo_plugin/field.html');
+    $html = file_get_contents(PluginManager::$PLUGINS_PATH . '/demo_plugin/field.html');
 
     // Replace value in HTML if it exists in $data
     if (!empty($data['link']['stuff'])) {
index d46321633e9fabdc15d714a7356af2dfc23767d3..a54509892e999eff7517d0c0ff2cc77aee7d0ecd 100644 (file)
@@ -19,9 +19,9 @@ function isso_init($conf)
 {
     $issoUrl = $conf->get('plugins.ISSO_SERVER');
     if (empty($issoUrl)) {
-        $error = t('Isso plugin error: '.
+        $error = t('Isso plugin error: ' .
             'Please define the "ISSO_SERVER" setting in the plugin administration page.');
-        return array($error);
+        return [$error];
     }
 }
 
@@ -49,12 +49,12 @@ function hook_isso_render_linklist($data, $conf)
         $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']);
         $data['plugin_end_zone'][] = $isso;
     } else {
-        $button = '<span><a href="'. ($data['_BASE_PATH_'] ?? '') . '/shaare/%s#isso-thread">';
+        $button = '<span><a href="' . ($data['_BASE_PATH_'] ?? '') . '/shaare/%s#isso-thread">';
         // For the default theme we use a FontAwesome icon which is better than an image
         if ($conf->get('resource.theme') === 'default') {
             $button .= '<i class="linklist-plugin-icon fa fa-comment"></i>';
         } else {
-            $button .= '<img class="linklist-plugin-icon" src="'. $data['_ROOT_PATH_'].'/plugins/isso/comment.png" ';
+            $button .= '<img class="linklist-plugin-icon" src="' . $data['_ROOT_PATH_'] . '/plugins/isso/comment.png" ';
             $button .= 'title="Comment on this shaare" alt="Comments" />';
         }
         $button .= '</a></span>';
index 17b1aeccf9926a2a908350ce9a3c448f285f641d..efea8610fc01cfa7c2e71b275f41f2955cb043be 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Piwik plugin.
  * Adds tracking code on each page.
@@ -22,7 +23,7 @@ function piwik_init($conf)
     if (empty($piwikUrl) || empty($piwikSiteid)) {
         $error = t('Piwik plugin error: ' .
             'Please define PIWIK_URL and PIWIK_SITEID in the plugin administration page.');
-        return array($error);
+        return [$error];
     }
 }
 
index 91a9c1e554c58437c5862adfd605019865096be7..4f874f92b98b4d09464ca5e748b03fe47135dd36 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Plugin PlayVideos
  *
@@ -19,14 +20,14 @@ use Shaarli\Render\TemplatePage;
 function hook_playvideos_render_header($data)
 {
     if ($data['_PAGE_'] == TemplatePage::LINKLIST) {
-        $playvideo = array(
-            'attr' => array(
+        $playvideo = [
+            'attr' => [
                 'href' => '#',
                 'title' => t('Video player'),
                 'id' => 'playvideos',
-            ),
-            'html' => '► '. t('Play Videos')
-        );
+            ],
+            'html' => '► ' . t('Play Videos')
+        ];
         $data['buttons_toolbar'][] = $playvideo;
     }
 
index 8fe6799ce6d00933445a9b7b7f1652dc13387af8..299b84fb192b3886c4d2d374725a3022a7bb117e 100644 (file)
@@ -42,7 +42,7 @@ function pubsubhubbub_init($conf)
 function hook_pubsubhubbub_render_feed($data, $conf)
 {
     $feedType = $data['_PAGE_'] == TemplatePage::FEED_RSS ? FeedBuilder::$FEED_RSS : FeedBuilder::$FEED_ATOM;
-    $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/pubsubhubbub/hub.'. $feedType .'.xml');
+    $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/pubsubhubbub/hub.' . $feedType . '.xml');
     $data['feed_plugins_header'][] = sprintf($template, $conf->get('plugins.PUBSUBHUB_URL'));
 
     return $data;
@@ -59,10 +59,10 @@ function hook_pubsubhubbub_render_feed($data, $conf)
  */
 function hook_pubsubhubbub_save_link($data, $conf)
 {
-    $feeds = array(
-        index_url($_SERVER) .'feed/atom',
-        index_url($_SERVER) .'feed/rss',
-    );
+    $feeds = [
+        index_url($_SERVER) . 'feed/atom',
+        index_url($_SERVER) . 'feed/rss',
+    ];
 
     $httpPost = function_exists('curl_version') ? false : 'nocurl_http_post';
     try {
@@ -87,11 +87,11 @@ function hook_pubsubhubbub_save_link($data, $conf)
  */
 function nocurl_http_post($url, $postString)
 {
-    $params = array('http' => array(
+    $params = ['http' => [
         'method' => 'POST',
         'content' => $postString,
         'user_agent' => 'PubSubHubbub-Publisher-PHP/1.0',
-    ));
+    ]];
 
     $context = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $context);
index 24fd18baf99aefe2f6f58c7a9225735f6b54ad7e..2ae10476fcb9618f99e1792e7ccd96db95ba44f4 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Plugin qrcode
  * Add QRCode containing URL for each links.
index f4a0a92bdb8148a180fe169cfc2d2316d2cf1fd3..88f84ae3a10b5b39140dac1ea7bb7a78ec3b9dd9 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Plugin\Wallabag;
 
 /**
@@ -11,20 +12,20 @@ class WallabagInstance
      *          - key: version ID, must match plugin settings.
      *          - value: version name.
      */
-    private static $wallabagVersions = array(
+    private static $wallabagVersions = [
         1 => '1.x',
         2 => '2.x',
-    );
+    ];
 
     /**
      * @var array Static reference to WB endpoint according to the API version.
      *          - key: version name.
      *          - value: endpoint.
      */
-    private static $wallabagEndpoints = array(
+    private static $wallabagEndpoints = [
         '1.x' => '?plainurl=',
         '2.x' => 'bookmarklet?url=',
-    );
+    ];
 
     /**
      * @var string Wallabag user instance URL.
index 8cd3f4adc1dc32891043ece763a960fa3be6cb47..f2003cb9953be148dde47e822de31f7af7c8dc7a 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * Wallabag plugin
  */
@@ -18,9 +19,9 @@ function wallabag_init($conf)
 {
     $wallabagUrl = $conf->get('plugins.WALLABAG_URL');
     if (empty($wallabagUrl)) {
-        $error = t('Wallabag plugin error: '.
+        $error = t('Wallabag plugin error: ' .
             'Please define the "WALLABAG_URL" setting in the plugin administration page.');
-        return array($error);
+        return [$error];
     }
     $conf->setEmpty('plugins.WALLABAG_URL', '2');
 }
index f7391b867f593efd932aba8ae66f46ab6a1685fd..395dd4b70d37826a2434f8bfc3eb73bdad05d97d 100644 (file)
@@ -51,10 +51,10 @@ class LegacyUpdaterTest extends \Shaarli\TestCase
      */
     public function testReadEmptyUpdatesFile()
     {
-        $this->assertEquals(array(), UpdaterUtils::read_updates_file(''));
+        $this->assertEquals(array(), UpdaterUtils::readUpdatesFile(''));
         $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
         touch($updatesFile);
-        $this->assertEquals(array(), UpdaterUtils::read_updates_file($updatesFile));
+        $this->assertEquals(array(), UpdaterUtils::readUpdatesFile($updatesFile));
         unlink($updatesFile);
     }
 
@@ -66,14 +66,14 @@ class LegacyUpdaterTest extends \Shaarli\TestCase
         $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
         $updatesMethods = array('m1', 'm2', 'm3');
 
-        UpdaterUtils::write_updates_file($updatesFile, $updatesMethods);
-        $readMethods = UpdaterUtils::read_updates_file($updatesFile);
+        UpdaterUtils::writeUpdatesFile($updatesFile, $updatesMethods);
+        $readMethods = UpdaterUtils::readUpdatesFile($updatesFile);
         $this->assertEquals($readMethods, $updatesMethods);
 
         // Update
         $updatesMethods[] = 'm4';
-        UpdaterUtils::write_updates_file($updatesFile, $updatesMethods);
-        $readMethods = UpdaterUtils::read_updates_file($updatesFile);
+        UpdaterUtils::writeUpdatesFile($updatesFile, $updatesMethods);
+        $readMethods = UpdaterUtils::readUpdatesFile($updatesFile);
         $this->assertEquals($readMethods, $updatesMethods);
         unlink($updatesFile);
     }
@@ -86,7 +86,7 @@ class LegacyUpdaterTest extends \Shaarli\TestCase
         $this->expectException(\Exception::class);
         $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/');
 
-        UpdaterUtils::write_updates_file('', array('test'));
+        UpdaterUtils::writeUpdatesFile('', array('test'));
     }
 
     /**
@@ -101,7 +101,7 @@ class LegacyUpdaterTest extends \Shaarli\TestCase
         touch($updatesFile);
         chmod($updatesFile, 0444);
         try {
-            @UpdaterUtils::write_updates_file($updatesFile, array('test'));
+            @UpdaterUtils::writeUpdatesFile($updatesFile, array('test'));
         } catch (Exception $e) {
             unlink($updatesFile);
             throw $e;
index 47332544a7b254c8a56ab4adf6c80604daad5ac5..cadd826538f2e76f08bffe27bb3d105abcf43375 100644 (file)
@@ -60,10 +60,10 @@ class UpdaterTest extends TestCase
      */
     public function testReadEmptyUpdatesFile()
     {
-        $this->assertEquals(array(), UpdaterUtils::read_updates_file(''));
+        $this->assertEquals(array(), UpdaterUtils::readUpdatesFile(''));
         $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
         touch($updatesFile);
-        $this->assertEquals(array(), UpdaterUtils::read_updates_file($updatesFile));
+        $this->assertEquals(array(), UpdaterUtils::readUpdatesFile($updatesFile));
         unlink($updatesFile);
     }
 
@@ -75,14 +75,14 @@ class UpdaterTest extends TestCase
         $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
         $updatesMethods = array('m1', 'm2', 'm3');
 
-        UpdaterUtils::write_updates_file($updatesFile, $updatesMethods);
-        $readMethods = UpdaterUtils::read_updates_file($updatesFile);
+        UpdaterUtils::writeUpdatesFile($updatesFile, $updatesMethods);
+        $readMethods = UpdaterUtils::readUpdatesFile($updatesFile);
         $this->assertEquals($readMethods, $updatesMethods);
 
         // Update
         $updatesMethods[] = 'm4';
-        UpdaterUtils::write_updates_file($updatesFile, $updatesMethods);
-        $readMethods = UpdaterUtils::read_updates_file($updatesFile);
+        UpdaterUtils::writeUpdatesFile($updatesFile, $updatesMethods);
+        $readMethods = UpdaterUtils::readUpdatesFile($updatesFile);
         $this->assertEquals($readMethods, $updatesMethods);
         unlink($updatesFile);
     }
@@ -95,7 +95,7 @@ class UpdaterTest extends TestCase
         $this->expectException(\Exception::class);
         $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/');
 
-        UpdaterUtils::write_updates_file('', array('test'));
+        UpdaterUtils::writeUpdatesFile('', array('test'));
     }
 
     /**
@@ -110,7 +110,7 @@ class UpdaterTest extends TestCase
         touch($updatesFile);
         chmod($updatesFile, 0444);
         try {
-            @UpdaterUtils::write_updates_file($updatesFile, array('test'));
+            @UpdaterUtils::writeUpdatesFile($updatesFile, array('test'));
         } catch (Exception $e) {
             unlink($updatesFile);
             throw $e;