Prechádzať zdrojové kódy

create a function to count trait classes

Tim Fry 1 rok pred
rodič
commit
bde0136d6c
3 zmenil súbory, kde vykonal 60 pridanie a 8 odobranie
  1. 12 7
      maintenance.php
  2. 1 1
      maintenance_logs.php
  3. 47 0
      resources/functions.php

+ 12 - 7
maintenance.php

@@ -55,8 +55,14 @@ $text = $language->get();
 //create a new settings object ignoring the current domain
 //create a new settings object ignoring the current domain
 $settings = new settings();
 $settings = new settings();
 
 
+//load all classes
+$class_files = glob(dirname(__DIR__, 2) . '/*/*/resources/classes/*');
+foreach ($class_files as $file) {
+	include_once $file;
+}
+
 //get the current list of all database and filesystem maintenance classes
 //get the current list of all database and filesystem maintenance classes
-$maintenance_classes = implementing_classes_arr('database_maintenance', 'filesystem_maintenance');
+$maintenance_classes = trait_classes_arr('database_maintenance', 'filesystem_maintenance');
 
 
 //get the list in the default settings
 //get the list in the default settings
 $default_settings_classes = $settings->get('maintenance', 'application', []);
 $default_settings_classes = $settings->get('maintenance', 'application', []);
@@ -70,7 +76,7 @@ require_once dirname(__DIR__, 2) . '/resources/header.php';
 
 
 
 
 	echo "<div class='action_bar' id='action_bar'>";
 	echo "<div class='action_bar' id='action_bar'>";
-	echo "<div class='heading'><b>Maintenance (<?= count($maintenance_classes) ?>)</b></div>";
+	echo "<div class='heading'><b>Maintenance (" . count($maintenance_classes) . ")</b></div>";
 	echo "<div class='actions'>";
 	echo "<div class='actions'>";
 		echo button::create(['type'=>'button','label'=>$text['button-logs'],'icon'=>'fas fa-scroll fa-fw','id'=>'btn_logs', 'link'=>'maintenance_logs.php']);
 		echo button::create(['type'=>'button','label'=>$text['button-logs'],'icon'=>'fas fa-scroll fa-fw','id'=>'btn_logs', 'link'=>'maintenance_logs.php']);
 		echo button::create(['type'=>'button','label'=>$text['button-register'],'icon'=>'fas fa-registered fa-fw','id'=>'btn_register']);
 		echo button::create(['type'=>'button','label'=>$text['button-register'],'icon'=>'fas fa-registered fa-fw','id'=>'btn_register']);
@@ -92,17 +98,16 @@ require_once dirname(__DIR__, 2) . '/resources/header.php';
 				echo "<th>Retention Days</th>";
 				echo "<th>Retention Days</th>";
 			echo "</tr>";
 			echo "</tr>";
 			foreach ($maintenance_classes as $x => $class) {
 			foreach ($maintenance_classes as $x => $class) {
-				$obj = new $class;
 				$installed = array_search($class, $difference) ? 'No' : 'Yes';
 				$installed = array_search($class, $difference) ? 'No' : 'Yes';
-				if ($obj instanceof database_maintenance) {
-					$database_maintenance_retention = $settings->get($obj::$database_retention_category, $obj::$database_retention_subcategory, '');
+				if (has_trait($class, 'database_maintenance')) {
+					$database_maintenance_retention = $settings->get($class::$database_retention_category, $class::$database_retention_subcategory, '');
 					$database_maintenance_enabled = empty($database_maintenance_retention) ? "No" : "Yes";
 					$database_maintenance_enabled = empty($database_maintenance_retention) ? "No" : "Yes";
 				} else {
 				} else {
 					$database_maintenance_enabled = "";
 					$database_maintenance_enabled = "";
 					$database_maintenance_retention = "";
 					$database_maintenance_retention = "";
 				}
 				}
-				if ($obj instanceof filesystem_maintenance) {
-					$filesystem_maintenance_retention = $settings->get($obj::$filesystem_retention_category, $obj::$filesystem_retention_subcategory, '');
+				if (has_trait($class, 'filesystem_maintenance') ) {
+					$filesystem_maintenance_retention = $settings->get($class::$filesystem_retention_category, $class::$filesystem_retention_subcategory, '');
 					$filesystem_maintenance_enabled = empty($filesystem_maintenance_retention) ? "No" : "Yes";
 					$filesystem_maintenance_enabled = empty($filesystem_maintenance_retention) ? "No" : "Yes";
 				} else {
 				} else {
 					$filesystem_maintenance_enabled = "";
 					$filesystem_maintenance_enabled = "";

+ 1 - 1
maintenance_logs.php

@@ -213,7 +213,7 @@ echo "<div class='action_bar' id='action_bar'>\n";
 					echo "<input type='hidden' name='show' value='all'>\n";
 					echo "<input type='hidden' name='show' value='all'>\n";
 				}
 				}
 				else {
 				else {
-					echo button_show_all::create(['link' => '/other.php']);
+					echo button_show_all::create();
 				}
 				}
 			}
 			}
 			echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown='list_search_reset();'>";
 			echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown='list_search_reset();'>";

+ 47 - 0
resources/functions.php

@@ -147,3 +147,50 @@
 			return $found_classes;
 			return $found_classes;
 		}
 		}
 	}
 	}
+
+	if (!function_exists('user_defined_classes')) {
+		function user_defined_classes () {
+			return array_filter(
+			   get_declared_classes(),
+			   function($className) {
+				   return !call_user_func(
+					   array(new ReflectionClass($className), 'isInternal')
+				   );
+			   }
+			);
+		}
+	}
+
+	if (!function_exists('trait_classes')) {
+		function trait_classes(string $trait) {
+			// get user defined classes
+			$user_classes = user_defined_classes();
+
+			// select only classes that use trait $trait
+			$trait_classes = array_filter(
+			   $user_classes,
+			   function($className) use($trait) {
+				 $traits = class_uses($className);
+				 return isset($traits[$trait]);
+			   }
+			);
+			return $trait_classes;
+		}
+	}
+
+	if (!function_exists('trait_classes_arr')) {
+		function trait_classes_arr(...$traits) {
+			// get user defined classes
+			$user_classes = user_defined_classes();
+
+			// select only classes that use trait $trait
+			$trait_classes = array_filter(
+			   $user_classes,
+			   function($classname) use($traits) {
+				 $trait_class = class_uses($classname);
+				 return count(array_intersect($trait_class, $traits)) > 0;
+			   }
+			);
+			return $trait_classes;
+		}
+	}