1. 07 May, 2022 1 commit
  2. 06 May, 2022 3 commits
  3. 05 May, 2022 2 commits
  4. 04 May, 2022 3 commits
  5. 29 Apr, 2022 3 commits
  6. 28 Apr, 2022 2 commits
  7. 27 Apr, 2022 2 commits
  8. 26 Apr, 2022 1 commit
  9. 25 Apr, 2022 3 commits
  10. 22 Apr, 2022 2 commits
    • crell's avatar
      [TASK] Switch specific strpos() usages with equivalent string methods · 7fb01f1e
      crell authored and Georg Ringer's avatar Georg Ringer committed
      Due to a former lack of missing proper functions to
      check for strings starting, ending or containing
      sub-strings, workarounds with strpos() constructs
      have been used in TYPO3 as well as in just about
      every PHP application.
      
      PHP finally implemented proper native functions for
      these kind of tasks, which make code more readable
      and avoid to easily oversee bugs.
      
      Additionally, php-cs-fixer provides a rule-set to replace
      most of these changes, see:
      https://cs.symfony.com/doc/ruleSets/PHP80MigrationRisky.html
      
      This rule is now enabled and used to ensure cleaner code
      in the future. The rule is applied to ensure green cgl checks.
      
      Replacements covered by php-cs-fixer rule:
      
      * replace `strpos($haystack, $needle) === 0`
        with `str_starts_with($haystack, $needle)`
      * replace `strpos($haystack, $needle) !== 0`
        with `!str_starts_with($haystack, $needle)`
      * replace `strpos($haystack, $needle) !== false`
        with `str_contains($haystack, $needle)`
      * replace `strpos($haystack, $needle) === false`
        with `!str_contains($haystack, $needle)`
      
      Some additional (manual) replacements on nearby places to
      changed code places:
      
      * replace `substr($haystack, strlen($needle) * -1) === $needle`
        with `str_ends_with($expression, ']')`
      * replace `substr($haystack, strlen($needle) * -1) !== $needle`
        with `!str_ends_with($expression, ']')`
      
      Used commands:
      
      > Build/Scripts/runTests.sh -s cgl
      
      Resolves: #97438
      Releases: main
      Change-Id: Ia1206d4dd08b43597bfe794389f6db8bdeb3de0f
      Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/74365
      
      
      Tested-by: core-ci's avatarcore-ci <typo3@b13.com>
      Tested-by: Nikita Hovratov's avatarNikita Hovratov <nikita.h@live.de>
      Tested-by: Stefan Bürk's avatarStefan Bürk <stefan@buerk.tech>
      Tested-by: Georg Ringer's avatarGeorg Ringer <georg.ringer@gmail.com>
      Reviewed-by: Nikita Hovratov's avatarNikita Hovratov <nikita.h@live.de>
      Reviewed-by: crell's avatarcrell <larry@garfieldtech.com>
      Reviewed-by: Stefan Bürk's avatarStefan Bürk <stefan@buerk.tech>
      Reviewed-by: Georg Ringer's avatarGeorg Ringer <georg.ringer@gmail.com>
      7fb01f1e
    • Benni Mack's avatar
      [!!!][FEATURE] Introduce dedicated class to create typolinks with unified Event · 4f7c4d1c
      Benni Mack authored and Oliver Bartsch's avatar Oliver Bartsch committed
      This change moves all "typolink" functionality
      from cObj->typolink into a custom "LinkFactory"
      class which then calls custom LinkBuilders (as before)
      to do their work.
      
      The main benefit is separation of concerns, thinning
      out functionality from the monster ContentObjectRenderer
      functionality.
      
      Instead of the global hook
      $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['typoLink_PostProc']
      a new PSR-14 Event "AfterLinkIsGeneratedEvent" is introduced,
      which in turn uses the LinkResult to operate on.
      
      This new Event also makes the hook
      $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['urlProcessing']['urlProcessors']
      obsolete, which was used for non-page links + URLs. As
      all functionality for frontend links are now running
      through this event, which contains all information.
      
      In addition, typolink.userFunc now receives
      a LinkResult object instead of a <a> string with arguments,
      and needs to return a LinkResult object again.
      
      Also, the ATagParams hook vanished as well, since the
      new Event can be used easily (and in a much better way!)
      
      Both parts are breaking, all other parts are expected
      to work as before.
      
      A new HtmlLinkResult is added, which allows for building
      a HSC'ed <a> tag properly in typolink().
      
      Architectural Details:
      
      * LinkFactory (new class) is now handling the "typolink" logic
        for creating any kind of links or URLs (page/mails/files).
        For the actual logic of e.g, pages the "PageLinkBuilder" is used
        in this place.
      * Internally, LinkFactory follows the same generation as
        cObj->typolink() before, but uses methods to make the code
        more readable.
      * In the end, LinkFactory will return a "LinkResultInterface"
        which contains everything to build a <a> tag, however it
        cannot return a "UriInterface" from PSR-7, as a
        link to mailto: is not a URL, thus, not supported by PSR-7.
      * The main "cObj->typolink()" method then takes the LinkResultInterface
        and wraps it into a HtmlLinkResult which does a htmlspecialchars()
        around all the attributes and the $linkText. So this is still
        the way to go to use from a public API point of view.
      * As typolink() heavily depends on stdWrap() and thus on cObject
        this information needs to be injected properly of course, and
        has the hard dependency when creating links in the Frontend.
      * new methods $cObj->createUrl() and $cObj->createLink() are added
        to make use of the LinkInterface functionality programmatically,
        so people can choose to get a hsc'ed result via typolink(),
        or typolink_URL(), or a pure data via createUrl() and createLink().
      
      Next steps / further patches:
      * Deprecate "lastTypoLink_LD" etc.
      * Move LinkResultFactory into LinkFactory with ClassAlias
      * Maybe add another method to just generate an URL to the LinkFactory
      * Create JsonLinkResult object and clean up original LinkResult object
      
      Resolves: #96641
      Resolves: #92029
      Releases: main
      Change-Id: Ic9ce01153a0cfdcbacb15e1e3f3e382f95400192
      Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72999
      
      
      Tested-by: core-ci's avatarcore-ci <typo3@b13.com>
      Tested-by: Oliver Hader's avatarOliver Hader <oliver.hader@typo3.org>
      Tested-by: Stefan Bürk's avatarStefan Bürk <stefan@buerk.tech>
      Tested-by: Oliver Bartsch's avatarOliver Bartsch <bo@cedev.de>
      Reviewed-by: Oliver Hader's avatarOliver Hader <oliver.hader@typo3.org>
      Reviewed-by: Stefan Bürk's avatarStefan Bürk <stefan@buerk.tech>
      Reviewed-by: Oliver Bartsch's avatarOliver Bartsch <bo@cedev.de>
      4f7c4d1c
  11. 21 Apr, 2022 1 commit
  12. 20 Apr, 2022 2 commits
  13. 19 Apr, 2022 1 commit
  14. 18 Apr, 2022 1 commit
  15. 17 Apr, 2022 3 commits
  16. 16 Apr, 2022 2 commits
  17. 14 Apr, 2022 1 commit
  18. 12 Apr, 2022 1 commit
  19. 11 Apr, 2022 2 commits
  20. 08 Apr, 2022 4 commits