diff --git a/include/bbcode.php b/include/bbcode.php
index 9ca8e3f03..14d0ce14a 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -99,6 +99,43 @@ function bb_replace_images($body, $images) {
}}
+
+function bb_parse_crypt($match) {
+
+ $attributes = $match[1];
+
+ $algorithm = "";
+ preg_match("/alg='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $algorithm = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+
+ preg_match("/alg=\"\;(.*?)\"\;/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $algorithm = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+
+ $hint = "";
+ preg_match("/hint='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $hint = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+ preg_match("/hint=\"\;(.*?)\"\;/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $hint = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8');
+
+ // Next we really should link to a JS routine based on the algorithm which prompts for a key
+ // something like zdecrypt_{algorithm}, which will be a no-op if the decryption algorithm is not present
+ // We can either pass the text or pass a message ID and let the decryption module call /viewsrc or something
+ // to get the text. The text might be large so the message ID might be preferable. But if we pass the
+ // text directly we won't have to do a network fetch; and can potentially display the results in a popup.
+
+
+ $Text = '
 . '/images/lock_icon.gif)
' . t('Algorithm: ') . $algorithm . '
' . t('Key hint: ') . $hint . '
';
+
+ return $Text;
+
+}
+
+
+
function bb_ShareAttributes($match) {
$attributes = $match[1];
@@ -465,9 +502,9 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true) {
$Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '
', $Text);
}
- if (strpos($Text,'[crypt]') !== false) {
+ if (strpos($Text,'[/crypt]') !== false) {
$Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism",'
 . '/images/lock_icon.gif)
', $Text);
- $Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism",'
 . '/images/lock_icon.gif)
', $Text);
+ $Text = preg_replace_callback("/\[crypt (.*?)\](.*?)\[\/crypt\]/ism", 'bb_parse_crypt', $Text);
}
// Try to Oembed
if ($tryoembed) {