File tree Expand file tree Collapse file tree 3 files changed +60
-24
lines changed
wcfsetup/install/files/lib Expand file tree Collapse file tree 3 files changed +60
-24
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace wcf \command \unfurl \url ;
4+
5+ use wcf \data \unfurl \url \UnfurlUrl ;
6+ use wcf \data \unfurl \url \UnfurlUrlAction ;
7+ use wcf \system \background \BackgroundQueueHandler ;
8+ use wcf \system \background \job \UnfurlUrlBackgroundJob ;
9+
10+ /**
11+ * Returns the unfurl url object for a given url.
12+ *
13+ * @author Marcel Werk
14+ * @copyright 2001-2025 WoltLab GmbH
15+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16+ * @since 6.2
17+ */
18+ final class FindOrCreateUnfurlUrl
19+ {
20+ public const REFETCH_UNFURL_URL = 86_400 ;
21+
22+ public function __construct (
23+ private readonly string $ url ,
24+ ) {}
25+
26+ public function __invoke (): UnfurlUrl
27+ {
28+ $ object = UnfurlUrl::getByUrl ($ this ->url );
29+
30+ if (!$ object ) {
31+ $ returnValues = (new UnfurlUrlAction ([], 'create ' , [
32+ 'data ' => [
33+ 'url ' => $ this ->url ,
34+ 'urlHash ' => \sha1 ($ this ->url ),
35+ ],
36+ ]))->executeAction ();
37+
38+ $ object = $ returnValues ['returnValues ' ];
39+ \assert ($ object instanceof UnfurlUrl);
40+ }
41+
42+ if ($ object ->status !== UnfurlUrl::STATUS_PENDING && $ object ->lastFetch < \TIME_NOW - self ::REFETCH_UNFURL_URL ) {
43+ BackgroundQueueHandler::getInstance ()->enqueueIn ([
44+ new UnfurlUrlBackgroundJob ($ object ),
45+ ]);
46+
47+ BackgroundQueueHandler::getInstance ()->forceCheck ();
48+ }
49+
50+ return $ object ;
51+ }
52+ }
Original file line number Diff line number Diff line change 22
33namespace wcf \data \unfurl \url ;
44
5+ use wcf \command \unfurl \url \FindOrCreateUnfurlUrl ;
56use wcf \data \AbstractDatabaseObjectAction ;
67use wcf \system \background \BackgroundQueueHandler ;
78use wcf \system \background \job \UnfurlUrlBackgroundJob ;
@@ -82,22 +83,10 @@ private function saveImageData(array $imageData): int
8283
8384 /**
8485 * Returns the unfurl url object to a given url.
86+ * @deprecated 6.2 Use `FindOrCreateUnfurlUrl` instead.
8587 */
8688 public function findOrCreate (): UnfurlUrl
8789 {
88- $ object = UnfurlUrl::getByUrl ($ this ->parameters ['data ' ]['url ' ]);
89-
90- if (!$ object ) {
91- $ returnValues = (new self ([], 'create ' , [
92- 'data ' => [
93- 'url ' => $ this ->parameters ['data ' ]['url ' ],
94- 'urlHash ' => \sha1 ($ this ->parameters ['data ' ]['url ' ]),
95- ],
96- ]))->executeAction ();
97-
98- return $ returnValues ['returnValues ' ];
99- }
100-
101- return $ object ;
90+ return (new FindOrCreateUnfurlUrl ($ this ->parameters ['data ' ]['url ' ]))();
10291 }
10392}
Original file line number Diff line number Diff line change 44
55use Laminas \Diactoros \Exception \InvalidArgumentException ;
66use Laminas \Diactoros \Uri ;
7- use wcf \data \unfurl \url \UnfurlUrlAction ;
7+ use wcf \command \unfurl \url \FindOrCreateUnfurlUrl ;
88use wcf \util \DOMUtil ;
99use wcf \util \Url ;
1010
@@ -42,7 +42,7 @@ public static function setUnfurl(HtmlNodePlainLink $link): void
4242 // be encoded at all times according to RFC 1738.
4343 $ path = \preg_replace_callback (
4444 '~[^0-9a-zA-Z$-_.+!* \'(),;/?:@=&]~ ' ,
45- static fn (array $ matches ) => \rawurlencode ($ matches [0 ]),
45+ static fn (array $ matches ) => \rawurlencode ($ matches [0 ]),
4646 $ path
4747 );
4848 $ uri = $ uri ->withPath ($ path );
@@ -91,13 +91,8 @@ private static function lowercaseHostname(Uri $uri): Uri
9191
9292 private static function findOrCreate (Uri $ uri ): int
9393 {
94- $ object = new UnfurlUrlAction ([], 'findOrCreate ' , [
95- 'data ' => [
96- 'url ' => $ uri ->__toString (),
97- ],
98- ]);
99- $ returnValues = $ object ->executeAction ();
100-
101- return $ returnValues ['returnValues ' ]->urlID ;
94+ $ unfurlUrl = (new FindOrCreateUnfurlUrl ($ uri ->__toString ()))();
95+
96+ return $ unfurlUrl ->urlID ;
10297 }
10398}
You can’t perform that action at this time.
0 commit comments