viewgit/inc/functions.php:22 Function utf8_encode() is deprecated [8192]

Add support for more wikimedia syntax, in particular nowiki tag now supported, a=chris

Chris Pollett [2014-05-18 22:May:th]
Add support for more wikimedia syntax, in particular nowiki tag now supported, a=chris
Filename
controllers/group_controller.php
controllers/static_controller.php
css/search.css
lib/wiki_parser.php
models/group_model.php
views/layouts/web_layout.php
diff --git a/controllers/group_controller.php b/controllers/group_controller.php
index 4716a347b..a744385e2 100644
--- a/controllers/group_controller.php
+++ b/controllers/group_controller.php
@@ -80,11 +80,14 @@ class GroupController extends Controller implements CrawlConstants
         $data[CSRF_TOKEN] = $this->generateCSRFToken($user_id);
         if(!$token_okay) {
             $keep_fields = array("a","f","just_group_id","just_user_id",
-                "just_thread", "limit", "num");
+                "just_thread", "limit", "num", "arg", "page_name");
             $request = $_REQUEST;
             $_REQUEST = array();
             foreach($keep_fields as $field) {
                 if(isset($request[$field])) {
+                    if($field == "arg" && $request[$field] != "read") {
+                        continue;
+                    }
                     $_REQUEST[$field] =
                         $this->clean($request[$field], "string");
                 }
@@ -240,12 +243,10 @@ class GroupController extends Controller implements CrawlConstants
             $i++;
         }
         if(is_string($page)) {
-                $page = $_REQUEST['page'];
             $page = str_replace("'", "'", $page);
         }
         if(isset($_REQUEST['group_id'])) {
             $group_id = $this->clean($_REQUEST['group_id'], "int");
-
         } else {
             $group_id = PUBLIC_GROUP_ID;
         }
@@ -262,6 +263,8 @@ class GroupController extends Controller implements CrawlConstants
                 $data["CAN_EDIT"] = true;
             }
         }
+        $read_address = "?c=group&a=wiki&arg=read&group_id=".
+            "$group_id&page_name=";
         if(isset($_REQUEST["arg"])) {
             switch($_REQUEST["arg"])
             {
@@ -278,7 +281,8 @@ class GroupController extends Controller implements CrawlConstants
                             $group_id, $page_name, $page,
                             $locale_tag, $edit_reason,
                             tl('group_controller_page_created', $page_name),
-                            tl('group_controller_page_discuss_here'));
+                            tl('group_controller_page_discuss_here'),
+                            $read_address);
                         $data['SCRIPT'] .=
                             "doMessage('<h1 class=\"red\" >".
                             tl("group_controller_page_saved").
@@ -303,7 +307,7 @@ class GroupController extends Controller implements CrawlConstants
                             $data["MODE"] = "show";
                             $default_history = false;
                             $data["PAGE_NAME"] = $page_info["PAGE_NAME"];
-                            $parser = new WikiParser();
+                            $parser = new WikiParser($read_address);
                             $parsed_page = $parser->parse($page_info["PAGE"]);
                             $data["PAGE_ID"] = $page_id;
                             $data[CSRF_TOKEN] =
@@ -365,7 +369,7 @@ class GroupController extends Controller implements CrawlConstants
                                 $page_info["PAGE"],
                                 $locale_tag,
                                 tl('group_controller_page_revert_to',
-                                date('c', $revert)));
+                                date('c', $revert)), $read_address);
                             $data['SCRIPT'] .=
                                 "doMessage('<h1 class=\"red\" >".
                                 tl("group_controller_page_reverted").
@@ -460,6 +464,12 @@ class GroupController extends Controller implements CrawlConstants
                 $head = $document_parts[0];
                 $data["PAGE"] = $document_parts[1];
             }
+            if($data['MODE'] == "read" && strpos($data["PAGE"], "`") !== false){
+                if(isset($data["INCLUDE_SCRIPTS"])) {
+                    $data["INCLUDE_SCRIPTS"] = array();
+                }
+                $data["INCLUDE_SCRIPTS"][] = "math";
+            }
         }
         return $data;
     }
diff --git a/controllers/static_controller.php b/controllers/static_controller.php
index 0c315ca24..c68711900 100644
--- a/controllers/static_controller.php
+++ b/controllers/static_controller.php
@@ -108,6 +108,12 @@ class StaticController extends Controller
             $page = "404";
             $page_string = $this->getPage($page);
         }
+        if(strpos($page_string, "`") !== false){
+            if(isset($data["INCLUDE_SCRIPTS"])) {
+                $data["INCLUDE_SCRIPTS"] = array();
+            }
+            $data["INCLUDE_SCRIPTS"][] = "math";
+        }
         $data['page'] = $page;
         $page_parts = explode("END_HEAD_VARS", $page_string);
         $static_view = $this->view("static");
diff --git a/css/search.css b/css/search.css
index a26f21f02..b4d9b6d5a 100755
--- a/css/search.css
+++ b/css/search.css
@@ -94,14 +94,65 @@ p

 .indent
 {
-    text-indent:0.25in;
+    text-indent: 0.25in;
+}
+
+span.indent1
+{
+    margin-left: 0.25in;
+}
+
+span.indent2
+{
+    margin-left: 0.5in;
+}
+
+span.indent3
+{
+    margin-left: 0.75in;
+}
+
+span.indent4
+{
+    margin-left: 1in;
+}
+
+span.indent5
+{
+    margin-left: 1.25in;
 }

 .mobile .indent
 {
-    text-indent:10px;
+    text-indent: 10px;
 }

+.mobile span.indent1
+{
+    margin-left: 10px;
+}
+
+.mobile span.indent2
+{
+    margin-left: 20px;
+}
+
+.mobile span.indent3
+{
+    margin-left: 30px;
+}
+
+.mobile span.indent4
+{
+    margin-left: 40px;
+}
+
+.mobile span.indent5
+{
+    margin-left: 50px;
+}
+
+
 .html-ltr .float-opposite
 {
     float: right;
diff --git a/lib/wiki_parser.php b/lib/wiki_parser.php
index 6951bf83a..aebff1f9c 100644
--- a/lib/wiki_parser.php
+++ b/lib/wiki_parser.php
@@ -55,6 +55,7 @@ class WikiParser implements CrawlConstants
      */
     function __construct($base_address = "")
     {
+        //assume substitutions are applied after htmlentities called on string
         $substitutions = array(
             array('/(\A|\n)=\s*([^=]+)\s*=/',
                 "\n<h1 id='$2'>$2</h1>"),
@@ -99,6 +100,15 @@ class WikiParser implements CrawlConstants
             array("/{{lang[\||\-](.+?)\|(.+?)}}/si", "$1 &rarr; $2"),
             array("/{{convert\|(.+?)\|(.+?)\|(.+?)}}/si", "$1$2"),
             array("/{{IPA-(.+?)\|(.+?)}}/si", "(IPA $2)"),
+            array("/&lt;blockquote&gt;(.+?)&lt;\/blockquote&gt;/s",
+                "<blockquote>$1</blockquote>"),
+            array("/&lt;pre&gt;(.+?)&lt;\/pre&gt;/s", "<pre>$1</pre>"),
+            array("/&lt;tt&gt;(.+?)&lt;\/tt&gt;/s", "<tt>$1</tt>"),
+            array("/&lt;u&gt;(.+?)&lt;\/u&gt;/s", "<u>$1</u>"),
+            array("/&lt;s&gt;(.+?)&lt;\/s&gt;/s", "<s>$1</s>"),
+            array("/&lt;math&gt;(.+?)&lt;\/math&gt;/s", "`$1`"),
+            array("/&lt;br(\s*\/)?&gt;/", "<br />"),
+            array("/&amp;nbsp;/", "&nbsp;"),
             array('/(\A|\n)\*(.+)(\n|\Z)/', "\n<li>$2</li>\n"),
             array('/(\A|\n)\*(.+)(\n|\Z)/', "\n<li>$2</li>\n"),
             array('/(\A|[^>])\n<li>/', "$1\n<ul>\n<li>"),
@@ -130,6 +140,11 @@ class WikiParser implements CrawlConstants
             array('@</li></li>@', "</li>\n</ol>\n</li>"),
             array('/(\A|\n);([^:]+):([^\n]+)/',
                 "<dl><dt>$2</dt>\n<dd>$3</dd></dl>\n"),
+            array('/(\A|\n):\s/', "<span class='indent1'>&nbsp;</span>"),
+            array('/(\A|\n)::\s/', "<span class='indent2'>&nbsp;</span>"),
+            array('/(\A|\n):::\s/', "<span class='indent3'>&nbsp;</span>"),
+            array('/(\A|\n)::::\s/', "<span class='indent4'>&nbsp;</span>"),
+            array('/(\A|\n)(:)+::::\s/', "<span class='indent5'>&nbsp;</span>"),
             array('/(\A|\n)----/', "$1<hr />"),
             array('/\r/', ""),
         );
@@ -154,6 +169,9 @@ class WikiParser implements CrawlConstants
             $head = $document_parts[0];
             $document = $document_parts[1];
         }
+        $document = preg_replace_callback(
+            "/&lt;nowiki&gt;(.+?)&lt;\/nowiki&gt;/s",
+            "base64EncodeCallback", $document);
         $toc = $this->makeTableOfContents($document);
         list($document, $references) = $this->makeReferences($document);
         $document = preg_replace_callback('/(\A|\n){\|(.*?)\n\|}/s',
@@ -174,15 +192,15 @@ class WikiParser implements CrawlConstants
             $start = substr($part, 0, 2);
             if(in_array($start[0], $space_like)) {
                 $document .= "\n<pre>\n".ltrim($part)."\n</pre>\n";
-            } else if($start == ": " || $start == ":\t") {
-                $document .= "\n<div class='indent'>\n".substr($part, 2).
-                    "\n</div>\n";
             } else {
                 $document .= "\n<div>\n".$part. "\n</div>\n";
             }
         }
         $document = $this->insertReferences($document, $references);
         $document = $this->insertTableOfContents($document, $toc);
+        $document = preg_replace_callback(
+            "/&lt;nowiki&gt;(.+?)&lt;\/nowiki&gt;/s",
+            "base64DecodeCallback", $document);
         if($head != "") {
             $document = $head . "END_HEAD_VARS" . $document;
         }
@@ -480,4 +498,20 @@ function fixLinksCallback($matches)
     $out = $matches[2].'"'.str_replace(" ", "_", $matches[3]).'"';
     return $out;
 }
+
+/**
+ *
+ */
+function base64EncodeCallback($matches)
+{
+    return "&lt;nowiki&gt;".base64_encode($matches[1])."&lt;/nowiki&gt;";
+}
+
+/**
+ *
+ */
+function base64DecodeCallback($matches)
+{
+    return base64_decode($matches[1]);
+}
 ?>
diff --git a/models/group_model.php b/models/group_model.php
index 82d20290b..c92dcda0b 100644
--- a/models/group_model.php
+++ b/models/group_model.php
@@ -742,11 +742,11 @@ class GroupModel extends Model
      *
      */
     function setPageName($user_id, $group_id, $page_name, $page, $locale_tag,
-        $edit_comment, $thread_title, $tread_description)
+        $edit_comment, $thread_title, $tread_description, $base_address = "")
     {
         $db = $this->db;
         $pubdate = time();
-        $parser = new WikiParser();
+        $parser = new WikiParser($base_address);
         $parsed_page = $parser->parse($page);
         if($page_id = $this->getPageID($group_id, $page_name, $locale_tag)) {
             $sql = "UPDATE GROUP_PAGE SET PAGE=? WHERE ID = ?";
diff --git a/views/layouts/web_layout.php b/views/layouts/web_layout.php
index 74d79e3a9..09939abbd 100755
--- a/views/layouts/web_layout.php
+++ b/views/layouts/web_layout.php
@@ -131,9 +131,15 @@ class WebLayout extends Layout
         <?php
         if(isset($data['INCLUDE_SCRIPTS'])) {
             foreach($data['INCLUDE_SCRIPTS'] as $script_name) {
-                e('<script type="text/javascript"
-                    src="'.$_SERVER["PATH_INFO"].'/scripts/'.
-                    $script_name.'.js" ></script>');
+                if($script_name == "math") {
+                    e('<script type="text/javascript"
+                        src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?'.
+                        'config=TeX-MML-AM_HTMLorMML"></script>');
+                } else {
+                    e('<script type="text/javascript"
+                        src="'.$_SERVER["PATH_INFO"].'/scripts/'.
+                        $script_name.'.js" ></script>');
+                }
             }
         }
         if(isset($data['INCLUDE_LOCALE_SCRIPT'])) {
ViewGit