public function initialize(): void
{
$bookmark = new Bookmark();
- $bookmark->setTitle('quicksilver (loop) on Vimeo ' . t('(private bookmark with thumbnail demo)'));
- $bookmark->setUrl('https://vimeo.com/153493904');
+ $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.
$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 . '[^\'"]*?[\'"]';
- // Try to retrieve OpenGraph image.
- $ogRegex = '#<meta[^>]+(?:'. $properties .')=(?:'. $orCondition .')[^>]*content=["\'](.*?)["\'].*?>#';
+ // Try to retrieve OpenGraph tag.
+ $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=["\'](.*?)["\'][^>]+(?:'. $properties .')=(?:'. $orCondition .').*?>#';
+ $ogRegexReverse = '#<meta[^>]+content=(["\'])([^\1]*?)\1[^>]+(?:'. $properties .')=(?:'. $orCondition .').*?>#';
if (preg_match($ogRegex, $html, $matches) > 0
|| preg_match($ogRegexReverse, $html, $matches) > 0
) {
- return $matches[1];
+ return $matches[2];
}
return false;
$response = $response->withStatus($throwable->getCode());
} else {
// Internal error (any other Throwable)
- if ($this->container->conf->get('dev.debug', false)) {
- $this->assignView('message', $throwable->getMessage());
+ if ($this->container->conf->get('dev.debug', false) || $this->container->loginManager->isLoggedIn()) {
+ $this->assignView('message', t('Error: ') . $throwable->getMessage());
+ $this->assignView(
+ 'text',
+ '<a href="https://github.com/shaarli/Shaarli/issues/new">'
+ . t('Please report it on Github.')
+ . '</a>'
+ );
$this->assignView('stacktrace', exception2text($throwable));
} else {
$this->assignView('message', t('An unexpected error occurred.'));
$response = $response->withStatus(500);
}
-
return $response->write($this->render('error'));
}
}
margin: 70px 0 25px;
}
+ a {
+ color: var(--main-color);
+ }
+
pre {
margin: 0 20%;
padding: 20px 0;
text-align: left;
- line-height: .7em;
+ line-height: 1em;
}
}
msgid ""
msgstr ""
"Project-Id-Version: Shaarli\n"
-"POT-Creation-Date: 2020-11-05 16:47+0100\n"
-"PO-Revision-Date: 2020-11-05 16:48+0100\n"
+"POT-Creation-Date: 2020-11-05 19:43+0100\n"
+"PO-Revision-Date: 2020-11-05 19:44+0100\n"
"Last-Translator: \n"
"Language-Team: Shaarli\n"
"Language: fr_FR\n"
msgid "Monthly"
msgstr "Mensuel"
-#: application/front/controller/visitor/ErrorController.php:33
+#: application/front/controller/visitor/ErrorController.php:30
+msgid "Error: "
+msgstr "Erreur : "
+
+#: application/front/controller/visitor/ErrorController.php:34
+msgid "Please report it on Github."
+msgstr "Merci de la rapporter sur Github."
+
+#: application/front/controller/visitor/ErrorController.php:39
msgid "An unexpected error occurred."
msgstr "Une erreur inattendue s'est produite."
$this->assertEquals($description, html_extract_tag('description', $html));
}
+ /**
+ * Test html_extract_tag() with double quoted content containing single quote, and the opposite.
+ */
+ public function testHtmlExtractExistentNameTagWithMixedQuotes(): void
+ {
+ $description = 'Bob and Alice share M&M\'s.';
+
+ $html = '<meta property="og:description" content="' . $description . '">';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+
+ $html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" '.
+ 'tag2="content2" content="' . $description . '" tag3="content3">';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+
+ $html = '<meta property="og:description" name="description" content="' . $description . '">';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+
+ $description = 'Bob and Alice share "cookies".';
+
+ $html = '<meta property="og:description" content=\'' . $description . '\'>';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+
+ $html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" '.
+ 'tag2="content2" content=\'' . $description . '\' tag3="content3">';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+
+ $html = '<meta property="og:description" name="description" content=\'' . $description . '\'>';
+ $this->assertEquals($description, html_extract_tag('description', $html));
+ }
+
/**
* Test html_extract_tag() when the tag <meta name= is not found.
*/
}
/**
- * Test displaying error with any exception (no debug): only display an error occurred with HTTP 500.
+ * Test displaying error with any exception (no debug) while logged in:
+ * display full error details
+ */
+ public function testDisplayAnyExceptionErrorNoDebugLoggedIn(): void
+ {
+ $request = $this->createMock(Request::class);
+ $response = new Response();
+
+ // Save RainTPL assigned variables
+ $assignedVariables = [];
+ $this->assignTemplateVars($assignedVariables);
+
+ $this->container->loginManager->method('isLoggedIn')->willReturn(true);
+
+ $result = ($this->controller)($request, $response, new \Exception('abc'));
+
+ static::assertSame(500, $result->getStatusCode());
+ static::assertSame('Error: abc', $assignedVariables['message']);
+ static::assertContainsPolyfill('Please report it on Github', $assignedVariables['text']);
+ static::assertArrayHasKey('stacktrace', $assignedVariables);
+ }
+
+ /**
+ * Test displaying error with any exception (no debug) while logged out:
+ * display standard error without detail
*/
public function testDisplayAnyExceptionErrorNoDebug(): void
{
$assignedVariables = [];
$this->assignTemplateVars($assignedVariables);
+ $this->container->loginManager->method('isLoggedIn')->willReturn(false);
+
$result = ($this->controller)($request, $response, new \Exception('abc'));
static::assertSame(500, $result->getStatusCode());
static::assertSame('An unexpected error occurred.', $assignedVariables['message']);
+ static::assertArrayNotHasKey('text', $assignedVariables);
static::assertArrayNotHasKey('stacktrace', $assignedVariables);
}
}
<div id="pageError" class="page-error-container center">
<h2>{$message}</h2>
+ <img src="{$asset_path}/img/sad_star.png#" alt="">
+
+ {if="!empty($text)"}
+ <p>{$text}</p>
+ {/if}
+
{if="!empty($stacktrace)"}
<pre>
{$stacktrace}
</pre>
{/if}
-
- <img src="{$asset_path}/img/sad_star.png#" alt="">
</div>
{include="page.footer"}
</body>