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

fix issues with resource file names in wiki system, a=chris

Chris Pollett [2019-01-27 22:Jan:th]
fix issues with resource file names in wiki system, a=chris
Filename
src/controllers/Controller.php
src/controllers/ResourceController.php
src/controllers/components/SocialComponent.php
src/executables/Fetcher.php
src/models/CrawlModel.php
src/models/GroupModel.php
src/models/ParallelModel.php
diff --git a/src/controllers/Controller.php b/src/controllers/Controller.php
index b56040f04..a1124ddd0 100755
--- a/src/controllers/Controller.php
+++ b/src/controllers/Controller.php
@@ -1023,4 +1023,46 @@ abstract class Controller
         $fuzzy_value = $i;
         return $fuzzy_value;
     }
+    /**
+     * Used to store in a session which media list items have been viewed so
+     * we can put an indicator by them when the media list is rendered
+     *
+     * @param int $page_id the id of page with media list
+     * @param string $sub_path the resource folder on that page
+     * @param string $media_name item to store indiicator into session for
+     */
+    public function recordViewSession($page_id, $sub_path, $media_name)
+    {
+        $hash_id = L\crawlHash($page_id . $media_name . $sub_path);
+        if (empty($_SESSION['USER_ID']) || $_SESSION['USER_ID'] ==
+            C\PUBLIC_USER_ID || !empty($_REQUEST['t'])) {
+            return;
+        }
+        if (empty($_SESSION['seen_media']) ||
+            !is_array($_SESSION['seen_media'])) {
+            $_SESSION['seen_media'] = [];
+        }
+        if (in_array($hash_id, $_SESSION['seen_media'])) {
+            if (end($_SESSION['seen_media']) == $hash_id) {
+                // this item was already the most recently viewed
+                return;
+            }
+            $_SESSION['seen_media'] = array_diff($_SESSION['seen_media'],
+                [$hash_id]);
+        }
+        array_push($_SESSION['seen_media'], $hash_id);
+        $keep_deleting = true;
+        while ($keep_deleting) {
+            if (strlen(serialize($_SESSION)) >= C\MAX_USER_SESSION_SIZE) {
+                array_shift($_SESSION['seen_media']);
+            }
+            if (count($_SESSION['seen_media']) <= 0) {
+                $keep_deleting = false;
+            }
+            if ($this->model("user")->setUserSession(
+                $_SESSION['USER_ID'], $_SESSION)) {
+                $keep_deleting = false;
+            }
+        }
     }
+}
diff --git a/src/controllers/ResourceController.php b/src/controllers/ResourceController.php
index 91004c8cb..32c7d90bb 100644
--- a/src/controllers/ResourceController.php
+++ b/src/controllers/ResourceController.php
@@ -268,48 +268,6 @@ class ResourceController extends Controller implements CrawlConstants
         }
         return $base_dir;
     }
-    /**
-     * Used to store in a session which media list items have been viewed so
-     * we can put an indicator by them when the media list is rendered
-     *
-     * @param int $page_id the id of page with media list
-     * @param string $sub_path the resource folder on that page
-     * @param string $media_name item to store indiicator into session for
-     */
-    public function recordViewSession($page_id, $sub_path, $media_name)
-    {
-        $hash_id = L\crawlHash($page_id . $media_name . $sub_path);
-        if (empty($_SESSION['USER_ID']) || $_SESSION['USER_ID'] ==
-            C\PUBLIC_USER_ID || !empty($_REQUEST['t'])) {
-            return;
-        }
-        if (empty($_SESSION['seen_media']) ||
-            !is_array($_SESSION['seen_media'])) {
-            $_SESSION['seen_media'] = [];
-        }
-        if (in_array($hash_id, $_SESSION['seen_media'])) {
-            if (end($_SESSION['seen_media']) == $hash_id) {
-                // this item was already the most recently viewed
-                return;
-            }
-            $_SESSION['seen_media'] = array_diff($_SESSION['seen_media'],
-                [$hash_id]);
-        }
-        array_push($_SESSION['seen_media'], $hash_id);
-        $keep_deleting = true;
-        while ($keep_deleting) {
-            if (strlen(serialize($_SESSION)) >= C\MAX_USER_SESSION_SIZE) {
-                array_shift($_SESSION['seen_media']);
-            }
-            if (count($_SESSION['seen_media']) <= 0) {
-                $keep_deleting = false;
-            }
-            if ($this->model("user")->setUserSession(
-                $_SESSION['USER_ID'], $_SESSION)) {
-                $keep_deleting = false;
-            }
-        }
-    }
     /**
      * Code to handle HTTP range requests of resources. This allows
      * HTTP pseudo-streaming of video. This code was inspired by:
diff --git a/src/controllers/components/SocialComponent.php b/src/controllers/components/SocialComponent.php
index 3316356d3..d80ed8a2e 100644
--- a/src/controllers/components/SocialComponent.php
+++ b/src/controllers/components/SocialComponent.php
@@ -2859,7 +2859,7 @@ class SocialComponent extends Component implements CrawlConstants
         $group_model = $parent->model("group");
         if (!empty($_REQUEST['clear']) && !empty($_SESSION['seen_media'])
             && is_array($_SESSION['seen_media'])) {
-            $media_name = $parent->clean($_REQUEST['clear'], 'string');
+            $media_name = $parent->clean($_REQUEST['clear'], 'file_name');
             $hash_id = L\crawlHash($data["PAGE_ID"]. $media_name . $sub_path);
             if (in_array($hash_id, $_SESSION['seen_media'])) {
                 $_SESSION['seen_media'] = array_diff($_SESSION['seen_media'],
@@ -3198,7 +3198,6 @@ EOD;
                 "   } ".
                 "   wiki.scrollTop = $scroll_top;" .
                 "}";
-
         }
         $data["MODE"] = "edit";
         $page_info = $group_model->getPageInfoByName($group_id,
@@ -3401,7 +3400,7 @@ EOD;
         }
         if (isset($_REQUEST['delete'])) {
             $resource_name = $parent->clean($_REQUEST['delete'],
-                "string");
+                "file_name");
             $upload_allowed = false;
             if (isset($page_info['ID']) &&
                 $group_model->deleteResource($resource_name,
@@ -3574,10 +3573,12 @@ EOD;
      */
     public function mediaWiki(&$data, $group_id, $page_id, $sub_path="")
     {
-        if (!isset($page_id) || !isset($_REQUEST['n'])) { return; }
+        if (!isset($page_id) || !isset($_REQUEST['n'])) {
+            return;
+        }
         $parent = $this->parent;
         $group_model = $parent->model("group");
-        $media_name = $parent->clean($_REQUEST['n'], "string");
+        $media_name = $parent->clean($_REQUEST['n'], "file_name");
         $page_info = $group_model->getPageInfoByPageId($page_id);
         $data["DISCUSS_THREAD"] = $page_info["DISCUSS_THREAD"];
         $data['SCRIPT'] = (empty($data['SCRIPT'])) ? "" : $data['SCRIPT'];
@@ -3634,8 +3635,8 @@ EOD;
         $page_string = "";
         $data['URL_PREFIX'] = $url_prefix;
         if (!empty($prev_name)) {
-            $data['PREV_LINK'] = "$url_prefix&amp;n=".urlencode($prev_name);
-            $prev_link = html_entity_decode($data['PREV_LINK']);
+            $data['PREV_LINK'] = "$url_prefix&amp;n=" . urlencode($prev_name);
+            $prev_link = $data['PREV_LINK'];
             if (!in_array($mime_type, ["application/epub+zip",
                 "application/pdf", 'video/mp4', 'video/m4v'])) {
                 $data['SCRIPT'] .= 'leftSwipe(document, function(evt) {'.
@@ -3643,9 +3644,9 @@ EOD;
             }
         }
         if (!empty($next_name)) {
-            $data['NEXT_LINK'] = "$url_prefix&amp;n=$next_name";
+            $data['NEXT_LINK'] = "$url_prefix&amp;n=" . urlencode($next_name);
             $data['NEXT_INDEX'] = $i+1;
-            $next_link = html_entity_decode($data['NEXT_LINK']);
+            $next_link = $data['NEXT_LINK'];
             if (!in_array($mime_type,["application/epub+zip",
                 "application/pdf", 'video/mp4', 'video/m4v'])) {
                 $data['SCRIPT'] .= 'rightSwipe(document, function(evt) {'.
@@ -3660,9 +3661,15 @@ EOD;
             $page_string .= "((resource:$media_name|$file_name))";
         }
         $page_string .= "</div>";
+        $include_charts_and_spreadsheets = ($mime_type == 'text/csv') ?
+            true : false;
         $data["PAGE"] = $group_model->insertResourcesParsePage(
             $group_id, $page_id, $data['CURRENT_LOCALE_TAG'],
-            $page_string, $csrf_token, $data['CONTROLLER']);
+            $page_string, $csrf_token, $data['CONTROLLER'],
+            $include_charts_and_spreadsheets);
+        if (substr($mime_type, 0, 4) == 'text') {
+            $this->parent->recordViewSession($page_id, $sub_path, $media_name);
+        }
         if ($mime_type == "application/epub+zip") {
             $this->addEpubMediaScripts($file_name, $data);
         } else if ($mime_type == "application/pdf") {
diff --git a/src/executables/Fetcher.php b/src/executables/Fetcher.php
index 98cf7dc8d..fbfa588a5 100755
--- a/src/executables/Fetcher.php
+++ b/src/executables/Fetcher.php
@@ -1112,6 +1112,11 @@ class Fetcher implements CrawlConstants
             }
         }
         L\crawlLog("End Name Server Check");
+        if ($time_change) {
+            L\crawlLog("Crawl time has changed!");
+        } else {
+            L\crawlLog("Crawl time stayed same!");
+        }
         return $time_change;
     }
     /**
diff --git a/src/models/CrawlModel.php b/src/models/CrawlModel.php
index b51447876..a9e7058fb 100755
--- a/src/models/CrawlModel.php
+++ b/src/models/CrawlModel.php
@@ -825,7 +825,7 @@ EOT;
             $info['DESCRIPTION'] = $mix['NAME'];
             $info['IS_MIX'] = true;
         } else {
-            if ($machine_urls != null &&
+            if ($machine_urls != null && is_array($machine_urls) &&
                 !$this->isSingleLocalhost($machine_urls, $timestamp)) {
                 $cache_file = C\CRAWL_DIR . "/cache/" . self::network_base_name.
                     $timestamp . ".txt";
diff --git a/src/models/GroupModel.php b/src/models/GroupModel.php
index 4db52978e..b9fdd1b0f 100644
--- a/src/models/GroupModel.php
+++ b/src/models/GroupModel.php
@@ -1876,7 +1876,6 @@ class GroupModel extends Model implements MediaConstants
                     data uri's*/
             } else {
                 $current_folder  = realpath($current_folder);
-                $resource_name = html_entity_decode($resource_name, ENT_QUOTES);
                 $file_name = (empty($sub_path)) ?
                     "$current_folder/$resource_name"
                     : "$current_folder/$sub_path/$resource_name";
diff --git a/src/models/ParallelModel.php b/src/models/ParallelModel.php
index 41eb34dba..f2db25f44 100755
--- a/src/models/ParallelModel.php
+++ b/src/models/ParallelModel.php
@@ -457,7 +457,10 @@ class ParallelModel extends Model
     public function execMachines($command, $machine_urls, $arg = null,
         $num_machines = 0, $send_specs = false)
     {
-        if ($num_machines == 0) {
+        if (empty($machine_urls) || !is_array($machine_urls)) {
+            return [];
+        }
+        if ($num_machines == 0 && is_array($machine_urls)) {
             $num_machines = count($machine_urls);
         }
         $time = time();
ViewGit