CauseFX 4 лет назад
Родитель
Сommit
ba3f10b0e4
49 измененных файлов с 128 добавлено и 74 удалено
  1. 6 0
      .gitignore
  2. 55 55
      api/classes/organizr.class.php
  3. 8 3
      api/functions.php
  4. 33 2
      api/functions/upgrade-functions.php
  5. 0 0
      api/plugins/bookmark/api.php
  6. 0 0
      api/plugins/bookmark/bookmark.css
  7. 0 0
      api/plugins/bookmark/config.php
  8. BIN
      api/plugins/bookmark/logo.png
  9. 1 1
      api/plugins/bookmark/plugin.php
  10. 0 0
      api/plugins/bookmark/settings.js
  11. 0 0
      api/plugins/chat/api.php
  12. 0 0
      api/plugins/chat/config.php
  13. BIN
      api/plugins/chat/logo.png
  14. 0 0
      api/plugins/chat/main.js
  15. 2 2
      api/plugins/chat/plugin.php
  16. 0 0
      api/plugins/healthChecks/api.php
  17. 0 0
      api/plugins/healthChecks/config.php
  18. BIN
      api/plugins/healthChecks/logo.png
  19. 0 0
      api/plugins/healthChecks/main.js
  20. 4 4
      api/plugins/healthChecks/plugin.php
  21. 0 0
      api/plugins/healthChecks/settings.js
  22. 0 0
      api/plugins/invites/api.php
  23. 0 0
      api/plugins/invites/config.php
  24. BIN
      api/plugins/invites/logo.png
  25. 0 0
      api/plugins/invites/main.js
  26. 1 1
      api/plugins/invites/plugin.php
  27. 0 0
      api/plugins/php-mailer/api.php
  28. 0 0
      api/plugins/php-mailer/config.php
  29. BIN
      api/plugins/php-mailer/logo.png
  30. 0 0
      api/plugins/php-mailer/main.js
  31. 0 0
      api/plugins/php-mailer/misc/emailTemplates/dark.php
  32. 0 0
      api/plugins/php-mailer/misc/emailTemplates/default.php
  33. 0 0
      api/plugins/php-mailer/misc/emailTemplates/gray.php
  34. 0 0
      api/plugins/php-mailer/misc/emailTemplates/light.php
  35. 0 0
      api/plugins/php-mailer/misc/emailTemplates/plehex.php
  36. 2 2
      api/plugins/php-mailer/plugin.php
  37. 0 0
      api/plugins/speedTest/api.php
  38. 0 0
      api/plugins/speedTest/config.php
  39. BIN
      api/plugins/speedTest/logo.png
  40. 1 1
      api/plugins/speedTest/main.js
  41. 0 0
      api/plugins/speedTest/misc/empty.php
  42. 0 0
      api/plugins/speedTest/misc/garbage.php
  43. 0 0
      api/plugins/speedTest/misc/getIP.php
  44. 0 0
      api/plugins/speedTest/misc/speedtest_worker.min.js
  45. 0 0
      api/plugins/speedTest/misc/telemetry.php
  46. 0 0
      api/plugins/speedTest/misc/telemetry_settings.php
  47. 1 1
      api/plugins/speedTest/plugin.php
  48. 7 2
      api/v2/index.php
  49. 7 0
      js/version.json

+ 6 - 0
.gitignore

@@ -162,6 +162,12 @@ api/plugins/*
 !api/plugins/config/bookmark.php
 !api/plugins/js/bookmark-settings.js
 !api/plugins/css/bookmark.css
+!api/plugins/bookmark/
+!api/plugins/chat/
+!api/plugins/healthChecks/
+!api/plugins/invites/
+!api/plugins/php-mailer/
+!api/plugins/speedTest/
 
 # =========================
 # Custom files

+ 55 - 55
api/classes/organizr.class.php

@@ -60,7 +60,7 @@ class Organizr
 	
 	// ===================================
 	// Organizr Version
-	public $version = '2.1.333';
+	public $version = '2.1.400';
 	// ===================================
 	// Quick php Version check
 	public $minimumPHP = '7.3';
@@ -303,6 +303,7 @@ class Organizr
 					}
 				}
 			}
+			asort($pluginList);
 			return $pluginList;
 		}
 		return false;
@@ -396,71 +397,57 @@ class Organizr
 		return ($encode) ? json_encode($files) : $files;
 	}
 	
-	/* Old function
-	public function pluginFiles($type)
-	{
-		$files = '';
-		switch ($type) {
-			case 'js':
-				foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . "*.js") as $filename) {
-					$files .= '<script src="api/plugins/js/' . basename($filename) . '?v=' . $this->fileHash . '" defer="true"></script>';
-				}
-				break;
-			case 'css':
-				foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . "*.css") as $filename) {
-					$files .= '<link href="api/plugins/css/' . basename($filename) . '?v=' . $this->fileHash . '" rel="stylesheet">';
-				}
-				break;
-			default:
-				break;
-		}
-		return $files;
-	}
-	*/
 	public function pluginFiles($type, $settings = false)
 	{
 		$files = '';
+		$folder = dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins';
+		$directoryIterator = new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS);
+		$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
 		switch ($type) {
 			case 'js':
-				foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . '*.js') as $filename) {
-					$pluginEnabled = false;
-					$keyOriginal = strtoupper(basename($filename, '.js'));
-					$key = str_replace('-SETTINGS', '', $keyOriginal);
-					$continue = false;
-					if ($settings) {
-						if (stripos($keyOriginal, '-SETTINGS') !== false) {
-							$continue = true;
+				foreach ($iteratorIterator as $info) {
+					if (pathinfo($info->getPathname(), PATHINFO_EXTENSION) == 'js') {
+						$pluginEnabled = false;
+						$keyOriginal = strtoupper(basename(dirname($info->getPathname())));
+						$key = str_replace('-SETTINGS', '', $keyOriginal);
+						$continue = false;
+						if ($settings) {
+							if ($info->getFilename() == 'settings.js') {
+								$continue = true;
+							}
+						} else {
+							if ($info->getFilename() !== 'settings.js') {
+								$continue = true;
+							}
 						}
-					} else {
-						if (stripos($keyOriginal, '-SETTINGS') == false) {
-							$continue = true;
+						switch ($key) {
+							case 'PHP-MAILER':
+								$key = 'PHPMAILER';
+								break;
+							case 'NGXC':
+								$key = 'ngxc';
+								break;
+							default:
+								$key = $key;
 						}
-					}
-					switch ($key) {
-						case 'PHP-MAILER':
-							$key = 'PHPMAILER';
-							break;
-						case 'NGXC':
-							$key = 'ngxc';
-							break;
-						default:
-							$key = $key;
-					}
-					if (isset($this->config[$key . '-enabled'])) {
-						if ($this->config[$key . '-enabled']) {
-							$pluginEnabled = true;
+						if (isset($this->config[$key . '-enabled'])) {
+							if ($this->config[$key . '-enabled']) {
+								$pluginEnabled = true;
+							}
 						}
-					}
-					if ($pluginEnabled || $settings) {
-						if ($continue) {
-							$files .= '<script src="api/plugins/js/' . basename($filename) . '?v=' . $this->fileHash . '" defer="true"></script>';
+						if ($pluginEnabled || $settings) {
+							if ($continue) {
+								$files .= '<script src="api/plugins/' . basename(dirname($info->getPathname())) . '/' . basename($info->getFilename()) . '?v=' . $this->fileHash . '" defer="true"></script>';
+							}
 						}
 					}
 				}
 				break;
 			case 'css':
-				foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . '*.css') as $filename) {
-					$files .= '<link href="api/plugins/css/' . basename($filename) . '?v=' . $this->fileHash . '" rel="stylesheet">';
+				foreach ($iteratorIterator as $info) {
+					if (pathinfo($info->getPathname(), PATHINFO_EXTENSION) == 'css') {
+						$files .= '<link href="api/plugins/' . basename(dirname($info->getPathname())) . '/' . basename($info->getFilename()) . '?v=' . $this->fileHash . '" rel="stylesheet">';
+					}
 				}
 				break;
 			default:
@@ -542,6 +529,14 @@ class Organizr
 				$this->upgradeToVersion($versionCheck);
 			}
 			// End Upgrade check start for version above
+			// Upgrade check start for version below
+			$versionCheck = '2.1.400';
+			if ($compare->lessThan($oldVer, $versionCheck)) {
+				$updateDB = false;
+				$oldVer = $versionCheck;
+				$this->upgradeToVersion($versionCheck);
+			}
+			// End Upgrade check start for version above
 			if ($updateDB == true) {
 				//return 'Upgraded Needed - Current Version '.$oldVer.' - New Version: '.$versionCheck;
 				// Upgrade database to latest version
@@ -741,8 +736,13 @@ class Organizr
 			$loadedDefaults = $path;
 		}
 		// Include all plugin config files
-		foreach (glob(dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
-			$loadedDefaults = array_merge($loadedDefaults, $this->loadConfig($filename));
+		$folder = dirname(__DIR__, 1) . DIRECTORY_SEPARATOR . 'plugins';
+		$directoryIterator = new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS);
+		$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
+		foreach ($iteratorIterator as $info) {
+			if ($info->getFilename() == 'config.php') {
+				$loadedDefaults = array_merge($loadedDefaults, $this->loadConfig($info->getPathname()));
+			}
 		}
 		return (is_array($loadedDefaults) ? $this->fillDefaultConfig_recurse($array, $loadedDefaults) : false);
 	}

+ 8 - 3
api/functions.php

@@ -23,6 +23,11 @@ foreach (glob(__DIR__ . DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR . 'c
 	require_once $filename;
 }
 // Include all plugin files
-foreach (glob(__DIR__ . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
-	require_once $filename;
-}
+$folder = __DIR__ . DIRECTORY_SEPARATOR . 'plugins';
+$directoryIterator = new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS);
+$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
+foreach ($iteratorIterator as $info) {
+	if ($info->getFilename() == 'plugin.php') {
+		require_once $info->getPathname();
+	}
+}

+ 33 - 2
api/functions/upgrade-functions.php

@@ -8,9 +8,10 @@ trait UpgradeFunctions
 			case '2.1.0':
 				$this->upgradeSettingsTabURL();
 				$this->upgradeHomepageTabURL();
-				$this->setAPIResponse('success', 'Ran update function for version: ' . $version, 200);
-				return true;
+			case '2.1.400':
+				$this->removeOldPluginDirectoriesAndFiles();
 			default:
+				$this->setAPIResponse('success', 'Ran update function for version: ' . $version, 200);
 				return true;
 		}
 	}
@@ -46,4 +47,34 @@ trait UpgradeFunctions
 		];
 		return $this->processQueries($response);
 	}
+	
+	public function removeOldPluginDirectoriesAndFiles()
+	{
+		$folders = [
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'api',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'config',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'css',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'js',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'misc',
+		];
+		$files = [
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'bookmark.php',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'chat.php',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'healthChecks.php',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'invites.php',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'php-mailer.php',
+			$this->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'speedTest.php',
+		];
+		foreach ($files as $file) {
+			if (file_exists($file)) {
+				@unlink($file);
+			}
+		}
+		foreach ($folders as $folder) {
+			if (file_exists($folder)) {
+				@$this->rrmdir($folder);
+			}
+		}
+		return true;
+	}
 }

+ 0 - 0
api/plugins/api/bookmark.php → api/plugins/bookmark/api.php


+ 0 - 0
api/plugins/css/bookmark.css → api/plugins/bookmark/bookmark.css


+ 0 - 0
api/plugins/config/bookmark.php → api/plugins/bookmark/config.php


BIN
api/plugins/bookmark/logo.png


+ 1 - 1
api/plugins/bookmark.php → api/plugins/bookmark/plugin.php

@@ -10,7 +10,7 @@ $GLOBALS['plugins'][]['Bookmark'] = array( // Plugin Name
 	'configPrefix' => 'BOOKMARK', // config file prefix for array items without the hypen
 	'dbPrefix' => 'BOOKMARK', // db prefix
 	'version' => '0.1.0', // SemVer of plugin
-	'image' => 'plugins/images/bookmark.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/bookmark/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => true, // use default bind to make settings page - true or false
 	'api' => 'api/v2/plugins/bookmark/settings', // api route for settings page

+ 0 - 0
api/plugins/js/bookmark-settings.js → api/plugins/bookmark/settings.js


+ 0 - 0
api/plugins/api/chat.php → api/plugins/chat/api.php


+ 0 - 0
api/plugins/config/chat.php → api/plugins/chat/config.php


BIN
api/plugins/chat/logo.png


+ 0 - 0
api/plugins/js/chat.js → api/plugins/chat/main.js


+ 2 - 2
api/plugins/chat.php → api/plugins/chat/plugin.php

@@ -2,7 +2,7 @@
 // PLUGIN INFORMATION
 use Pusher\PusherException;
 
-$GLOBALS['plugins'][]['chat'] = array( // Plugin Name
+$GLOBALS['plugins'][]['Chat'] = array( // Plugin Name
 	'name' => 'Chat', // Plugin Name
 	'author' => 'CauseFX', // Who wrote the plugin
 	'category' => 'Utilities', // One to Two Word Description
@@ -11,7 +11,7 @@ $GLOBALS['plugins'][]['chat'] = array( // Plugin Name
 	'idPrefix' => 'CHAT', // html element id prefix
 	'configPrefix' => 'CHAT', // config file prefix for array items without the hypen
 	'version' => '1.0.0', // SemVer of plugin
-	'image' => 'plugins/images/chat.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/chat/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => true, // use default bind to make settings page - true or false
 	'api' => 'api/v2/plugins/chat/settings', // api route for settings page

+ 0 - 0
api/plugins/api/healthChecks.php → api/plugins/healthChecks/api.php


+ 0 - 0
api/plugins/config/healthChecks.php → api/plugins/healthChecks/config.php


BIN
api/plugins/healthChecks/logo.png


+ 0 - 0
api/plugins/js/healthChecks.js → api/plugins/healthChecks/main.js


+ 4 - 4
api/plugins/healthChecks.php → api/plugins/healthChecks/plugin.php

@@ -1,6 +1,6 @@
 <?php
 // PLUGIN INFORMATION
-$GLOBALS['plugins'][]['healthChecks'] = array( // Plugin Name
+$GLOBALS['plugins'][]['HealthChecks'] = array( // Plugin Name
 	'name' => 'HealthChecks', // Plugin Name
 	'author' => 'CauseFX', // Who wrote the plugin
 	'category' => 'Utilities', // One to Two Word Description
@@ -9,7 +9,7 @@ $GLOBALS['plugins'][]['healthChecks'] = array( // Plugin Name
 	'idPrefix' => 'HEALTHCHECKS', // html element id prefix
 	'configPrefix' => 'HEALTHCHECKS', // config file prefix for array items without the hyphen
 	'version' => '1.0.0', // SemVer of plugin
-	'image' => 'plugins/images/healthchecksio.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/healthChecks/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => false, // use default bind to make settings page - true or false
 	'api' => false, // api route for settings page
@@ -137,7 +137,7 @@ class HealthChecks extends Organizr
 				}
 			}
 			$limit = 30;
-			if (!empty($allItems)){
+			if (!empty($allItems)) {
 				$limit = count($allItems) * 20;
 			}
 			set_time_limit($limit);
@@ -176,4 +176,4 @@ class HealthChecks extends Organizr
 			$this->setAPIResponse('error', 'User does not have access', 401);
 		}
 	}
-}
+}

+ 0 - 0
api/plugins/js/healthChecks-settings.js → api/plugins/healthChecks/settings.js


+ 0 - 0
api/plugins/api/invites.php → api/plugins/invites/api.php


+ 0 - 0
api/plugins/config/invites.php → api/plugins/invites/config.php


BIN
api/plugins/invites/logo.png


+ 0 - 0
api/plugins/js/invites.js → api/plugins/invites/main.js


+ 1 - 1
api/plugins/invites.php → api/plugins/invites/plugin.php

@@ -9,7 +9,7 @@ $GLOBALS['plugins'][]['Invites'] = array( // Plugin Name
 	'idPrefix' => 'INVITES', // html element id prefix
 	'configPrefix' => 'INVITES', // config file prefix for array items without the hypen
 	'version' => '1.0.0', // SemVer of plugin
-	'image' => 'plugins/images/invites.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/invites/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => true, // use default bind to make settings page - true or false
 	'api' => 'api/v2/plugins/invites/settings', // api route for settings page

+ 0 - 0
api/plugins/api/php-mailer.php → api/plugins/php-mailer/api.php


+ 0 - 0
api/plugins/config/php-mailer.php → api/plugins/php-mailer/config.php


BIN
api/plugins/php-mailer/logo.png


+ 0 - 0
api/plugins/js/php-mailer.js → api/plugins/php-mailer/main.js


+ 0 - 0
api/plugins/misc/emailTemplates/dark.php → api/plugins/php-mailer/misc/emailTemplates/dark.php


+ 0 - 0
api/plugins/misc/emailTemplates/default.php → api/plugins/php-mailer/misc/emailTemplates/default.php


+ 0 - 0
api/plugins/misc/emailTemplates/gray.php → api/plugins/php-mailer/misc/emailTemplates/gray.php


+ 0 - 0
api/plugins/misc/emailTemplates/light.php → api/plugins/php-mailer/misc/emailTemplates/light.php


+ 0 - 0
api/plugins/misc/emailTemplates/plehex.php → api/plugins/php-mailer/misc/emailTemplates/plehex.php


+ 2 - 2
api/plugins/php-mailer.php → api/plugins/php-mailer/plugin.php

@@ -9,7 +9,7 @@ $GLOBALS['plugins'][]['PHP Mailer'] = array( // Plugin Name
 	'idPrefix' => 'PHPMAILER', // html element id prefix
 	'configPrefix' => 'PHPMAILER', // config file prefix for array items without the hyphen
 	'version' => '1.0.0', // SemVer of plugin
-	'image' => 'plugins/images/php-mailer.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/php-mailer/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => true, // use default bind to make settings page - true or false
 	'api' => 'api/v2/plugins/php-mailer/settings', // api route for settings page
@@ -50,7 +50,7 @@ class PhpMailer extends Organizr
 	
 	public function _phpMailerPluginGetTemplates()
 	{
-		foreach (glob(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'misc' . DIRECTORY_SEPARATOR . 'emailTemplates' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
+		foreach (glob(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'php-mailer' . DIRECTORY_SEPARATOR . 'misc' . DIRECTORY_SEPARATOR . 'emailTemplates' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
 			$templates[] = array(
 				'name' => preg_replace('/\\.[^.\\s]{3,4}$/', '', basename($filename)),
 				'value' => preg_replace('/\\.[^.\\s]{3,4}$/', '', basename($filename))

+ 0 - 0
api/plugins/api/speedTest.php → api/plugins/speedTest/api.php


+ 0 - 0
api/plugins/config/speedTest.php → api/plugins/speedTest/config.php


BIN
api/plugins/speedTest/logo.png


+ 1 - 1
api/plugins/js/speedTest.js → api/plugins/speedTest/main.js

@@ -16,7 +16,7 @@ function startStop(){
 		initUI();
 	}else{
 		//test is not running, begin
-		w=new Worker('api/plugins/misc/speedTest/speedtest_worker.min.js');
+		w=new Worker('api/plugins/speedTest/misc/speedtest_worker.min.js');
 		w.postMessage('start'); //Add optional parameters as a JSON object to this command
 		$('#speedTestButtonText').text('Running');
 		w.onmessage=function(e){

+ 0 - 0
api/plugins/misc/speedTest/empty.php → api/plugins/speedTest/misc/empty.php


+ 0 - 0
api/plugins/misc/speedTest/garbage.php → api/plugins/speedTest/misc/garbage.php


+ 0 - 0
api/plugins/misc/speedTest/getIP.php → api/plugins/speedTest/misc/getIP.php


+ 0 - 0
api/plugins/misc/speedTest/speedtest_worker.min.js → api/plugins/speedTest/misc/speedtest_worker.min.js


+ 0 - 0
api/plugins/misc/speedTest/telemetry.php → api/plugins/speedTest/misc/telemetry.php


+ 0 - 0
api/plugins/misc/speedTest/telemetry_settings.php → api/plugins/speedTest/misc/telemetry_settings.php


+ 1 - 1
api/plugins/speedTest.php → api/plugins/speedTest/plugin.php

@@ -9,7 +9,7 @@ $GLOBALS['plugins'][]['SpeedTest'] = array( // Plugin Name
 	'idPrefix' => 'SPEEDTEST', // html element id prefix
 	'configPrefix' => 'SPEEDTEST', // config file prefix for array items without the hypen
 	'version' => '1.0.0', // SemVer of plugin
-	'image' => 'plugins/images/speedtest.png', // 1:1 non transparent image for plugin
+	'image' => 'api/plugins/speedTest/logo.png', // 1:1 non transparent image for plugin
 	'settings' => true, // does plugin need a settings modal?
 	'bind' => true, // use default bind to make settings page - true or false
 	'api' => 'api/v2/plugins/speedtest/settings', // api route for settings page

+ 7 - 2
api/v2/index.php

@@ -105,8 +105,13 @@ foreach (glob(__DIR__ . DIRECTORY_SEPARATOR . 'routes' . DIRECTORY_SEPARATOR . '
 /*
  * Include all Plugin routes
  */
-foreach (glob(dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . "*.php") as $filename) {
-	require_once $filename;
+$folder = dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins';
+$directoryIterator = new RecursiveDirectoryIterator($folder, FilesystemIterator::SKIP_DOTS);
+$iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
+foreach ($iteratorIterator as $info) {
+	if ($info->getFilename() == 'api.php') {
+		require_once $info->getPathname();
+	}
 }
 /*
  *

+ 7 - 0
js/version.json

@@ -376,5 +376,12 @@
     "new": "tautulli socks|X-Forwarded-For to SSO functions|allow clipboard|new sanbox options to iframe|unify socks function and list|note about cron url for healthchecks api",
     "fixed": "options array for requests|sabnzbd auth for socks|Transmission home page module hangs on PHP 8 (#1648)|Ombi Search Box Error (#1651)|Redirects on healthchecks plugin|panel-blue css|Tautulli cmd change",
     "notes": "update rmccue\\requests framework|update guzzlehttp/psr7|add if stmt to stale workflow to ignore issues that have bypass-activity"
+  },
+  "2.1.400": {
+    "date": "2021-06-14 16:00",
+    "title": "Code changes to plugins",
+    "new": "Refactored the way plugins are stored so it is cleaner|Updated healthChecks plugin|option to Auto-collapse categories (FR#150933)|option to disable auto expand of navbar FR#150876",
+    "fixed": "SSO failing due to timeout error white getting tokens (#1665)|force Radarr to use v3 endpoint now (#1663)|plex error not catching|update downloader refresh times to be independent",
+    "notes": ""
   }
 }