* Shaarli utilities
*/
+/**
+ * Logs a message to a text file
+ *
+ * The log format is compatible with fail2ban.
+ *
+ * @param string $logFile where to write the logs
+ * @param string $clientIp the client's remote IPv4/IPv6 address
+ * @param string $message the message to log
+ */
+function logm($logFile, $clientIp, $message)
+{
+ file_put_contents(
+ $logFile,
+ date('Y/m/d H:i:s').' - '.$clientIp.' - '.strval($message).PHP_EOL,
+ FILE_APPEND
+ );
+}
+
/**
* Returns the small hash of a string, using RFC 4648 base64url format
*
return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0);
}
-/**
- * Same as nl2br(), but escapes < and >
- */
-function nl2br_escaped($html)
-{
- return str_replace('>', '>', str_replace('<', '<', nl2br($html)));
-}
-
/**
* htmlspecialchars wrapper
*/
/**
* Checks if a string represents a valid date
+
+ * @param string $format The expected DateTime format of the string
+ * @param string $string A string-formatted date
+ *
+ * @return bool whether the string is a valid date
*
- * @param string a string-formatted date
- * @param format the expected DateTime format of the string
- * @return whether the string is a valid date
- * @see http://php.net/manual/en/class.datetime.php
- * @see http://php.net/manual/en/datetime.createfromformat.php
+ * @see http://php.net/manual/en/class.datetime.php
+ * @see http://php.net/manual/en/datetime.createfromformat.php
*/
function checkDateFormat($format, $string)
{
return $finalReferer;
}
-/**
- * Checks the PHP version to ensure Shaarli can run
- *
- * @param string $minVersion minimum PHP required version
- * @param string $curVersion current PHP version (use PHP_VERSION)
- *
- * @throws Exception the PHP version is not supported
- */
-function checkPHPVersion($minVersion, $curVersion)
-{
- if (version_compare($curVersion, $minVersion) < 0) {
- throw new Exception(
- 'Your PHP version is obsolete!'
- .' Shaarli requires at least PHP '.$minVersion.', and thus cannot run.'
- .' Your PHP version has known security vulnerabilities and should be'
- .' updated as soon as possible.'
- );
- }
-}
-
/**
* Validate session ID to prevent Full Path Disclosure.
*
return true;
}
+
+/**
+ * In a string, converts URLs to clickable links.
+ *
+ * @param string $text input string.
+ * @param string $redirector if a redirector is set, use it to gerenate links.
+ *
+ * @return string returns $text with all links converted to HTML links.
+ *
+ * @see Function inspired from http://www.php.net/manual/en/function.preg-replace.php#85722
+ */
+function text2clickable($text, $redirector)
+{
+ $regex = '!(((?:https?|ftp|file)://|apt:|magnet:)\S+[[:alnum:]]/?)!si';
+
+ if (empty($redirector)) {
+ return preg_replace($regex, '<a href="$1">$1</a>', $text);
+ }
+ // Redirector is set, urlencode the final URL.
+ return preg_replace_callback(
+ $regex,
+ function ($matches) use ($redirector) {
+ return '<a href="' . $redirector . urlencode($matches[1]) .'">'. $matches[1] .'</a>';
+ },
+ $text
+ );
+}
+
+/**
+ * This function inserts where relevant so that multiple spaces are properly displayed in HTML
+ * even in the absence of <pre> (This is used in description to keep text formatting).
+ *
+ * @param string $text input text.
+ *
+ * @return string formatted text.
+ */
+function space2nbsp($text)
+{
+ return preg_replace('/(^| ) /m', '$1 ', $text);
+}
+
+/**
+ * Format Shaarli's description
+ * TODO: Move me to ApplicationUtils when it's ready.
+ *
+ * @param string $description shaare's description.
+ * @param string $redirector if a redirector is set, use it to gerenate links.
+ *
+ * @return string formatted description.
+ */
+function format_description($description, $redirector) {
+ return nl2br(space2nbsp(text2clickable($description, $redirector)));
+}