ソースを参照

check for already added applications in default settings

Tim Fry 1 年間 前
コミット
85416eb501
4 ファイル変更107 行追加45 行削除
  1. 3 0
      app_config.php
  2. 48 0
      app_languages.php
  3. 24 21
      maintenance.php
  4. 32 24
      resources/classes/maintenance.php

+ 3 - 0
app_config.php

@@ -60,6 +60,9 @@
 	$apps[$x]['permissions'][$y]['name'] = 'maintenance_view';
 	$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
 	$y++;
+	$apps[$x]['permissions'][$y]['name'] = 'maintenance_register';
+	$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
+	$y++;
 	$apps[$x]['permissions'][$y]['name'] = 'maintenance_log_view';
 	$apps[$x]['permissions'][$y]['groups'][] = 'superadmin';
 	$y++;

+ 48 - 0
app_languages.php

@@ -50,6 +50,54 @@ $text['title-maintenance']['zh-cn'] = '';
 $text['title-maintenance']['ja-jp'] = '';
 $text['title-maintenance']['ko-kr'] = '';
 
+$text['message-register_failed']['en-us'] = 'Register Failed';
+$text['message-register_failed']['en-gb'] = 'Register Failed';
+$text['message-register_failed']['ar-eg'] = '';
+$text['message-register_failed']['de-at'] = '';
+$text['message-register_failed']['de-ch'] = '';
+$text['message-register_failed']['de-de'] = '';
+$text['message-register_failed']['es-cl'] = '';
+$text['message-register_failed']['es-mx'] = '';
+$text['message-register_failed']['fr-ca'] = '';
+$text['message-register_failed']['fr-fr'] = '';
+$text['message-register_failed']['he-il'] = '';
+$text['message-register_failed']['it-it'] = '';
+$text['message-register_failed']['nl-nl'] = '';
+$text['message-register_failed']['pl-pl'] = '';
+$text['message-register_failed']['pt-br'] = '';
+$text['message-register_failed']['pt-pt'] = '';
+$text['message-register_failed']['ro-ro'] = '';
+$text['message-register_failed']['ru-ru'] = '';
+$text['message-register_failed']['sv-se'] = '';
+$text['message-register_failed']['uk-ua'] = '';
+$text['message-register_failed']['zh-cn'] = '';
+$text['message-register_failed']['ja-jp'] = '';
+$text['message-register_failed']['ko-kr'] = '';
+
+$text['message-action_prohibited']['en-us'] = 'Action Prohibited';
+$text['message-action_prohibited']['en-gb'] = 'Action Prohibited';
+$text['message-action_prohibited']['ar-eg'] = '';
+$text['message-action_prohibited']['de-at'] = '';
+$text['message-action_prohibited']['de-ch'] = '';
+$text['message-action_prohibited']['de-de'] = '';
+$text['message-action_prohibited']['es-cl'] = '';
+$text['message-action_prohibited']['es-mx'] = '';
+$text['message-action_prohibited']['fr-ca'] = '';
+$text['message-action_prohibited']['fr-fr'] = '';
+$text['message-action_prohibited']['he-il'] = '';
+$text['message-action_prohibited']['it-it'] = '';
+$text['message-action_prohibited']['nl-nl'] = '';
+$text['message-action_prohibited']['pl-pl'] = '';
+$text['message-action_prohibited']['pt-br'] = '';
+$text['message-action_prohibited']['pt-pt'] = '';
+$text['message-action_prohibited']['ro-ro'] = '';
+$text['message-action_prohibited']['ru-ru'] = '';
+$text['message-action_prohibited']['sv-se'] = '';
+$text['message-action_prohibited']['uk-ua'] = '';
+$text['message-action_prohibited']['zh-cn'] = '';
+$text['message-action_prohibited']['ja-jp'] = '';
+$text['message-action_prohibited']['ko-kr'] = '';
+
 $text['message-no_records']['en-us'] = 'No records to process';
 $text['message-no_records']['en-gb'] = 'No records to process';
 $text['message-no_records']['ar-eg'] = '';

+ 24 - 21
maintenance.php

@@ -64,8 +64,14 @@ if (!empty($_REQUEST['action'])) {
 	$checked_apps = $_REQUEST['maintenance_apps'] ?? [];
 	switch($action) {
 		case 'toggle':
-			if (maintenance::register_applications($database, $checked_apps)) {
-				message::add($text['message-toggle']);
+			if (permission_exists('maintenance_register')) {
+				if (maintenance::register_applications($database, $checked_apps)) {
+					message::add($text['message-toggle']);
+				} else {
+					message::add($text['message-register_failed'], 'negative');
+				}
+			} else {
+				message::add($text['message-action_prohibited'], 'negative');
 			}
 			break;
 	}
@@ -104,18 +110,16 @@ $document['title'] = $text['title-maintenance'];
 	echo "<div class='action_bar' id='action_bar'>";
 	echo "<div class='heading'><b>Maintenance (" . count($maintenance_classes) . ")</b></div>";
 	echo "<div class='actions'>";
-		//echo "<form method='post' id='frm'>";
-			//logs button
-			echo button::create(['type'=>'button','label'=>$text['button-logs'],'icon'=>'fas fa-scroll fa-fw','id'=>'btn_logs', 'link'=>'maintenance_logs.php']);
-			//register button
-			echo button_toggle::create(['label'=>$text['button-register'],'icon'=>'fas fa-registered fa-fw']);
-			//search input box
-			echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
-			//search button
-			echo button_search::create(empty($search));
-			//reset button
-			echo button_reset::create(empty($search));
-		//echo "</form>";
+		//logs button
+		echo button::create(['type'=>'button','label'=>$text['button-logs'],'icon'=>'fas fa-scroll fa-fw','id'=>'btn_logs', 'link'=>'maintenance_logs.php']);
+		//register button
+		echo button_toggle::create(['label'=>$text['button-register'],'icon'=>'fas fa-registered fa-fw']);
+		//search input box
+		echo "<input type='text' class='txt list-search' name='search' id='search' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
+		//search button
+		echo button_search::create(empty($search));
+		//reset button
+		echo button_reset::create(empty($search));
 	echo "</div>";
 
 	//javascript modal boxes
@@ -123,15 +127,15 @@ $document['title'] = $text['title-maintenance'];
 	echo modal_delete::create('form_list');
 	echo modal_toggle::create('form_list');
 
-	echo "<div style='clear: both;'></div>\n";
+	echo "<div style='clear: both;'></div>";
 	echo "<br/><br/>";
 	echo "<form id='form_list' method='post'>";
-		echo "<input type='hidden' id='action' name='action' value=''>\n";
-		echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
+		echo "<input type='hidden' id='action' name='action' value=''>";
+		echo "<input type='hidden' name='search' value=\"".escape($search)."\">";
 		echo "<table class='list'>";
 			echo "<tr class='list-header'>";
 				echo "<th class='checkbox'>";
-					echo "<input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".(empty($maintenance_classes) ? "style='visibility: hidden;'" : null).">\n";
+					echo "<input type='checkbox' id='checkbox_all' name='checkbox_all' onclick='list_all_toggle(); checkbox_on_change(this);' ".(empty($maintenance_classes) ? "style='visibility: hidden;'" : null).">";
 				echo "</th>";
 				echo "<th>Name</th>";
 				echo "<th>Registered</th>";
@@ -159,7 +163,7 @@ $document['title'] = $text['title-maintenance'];
 
 				echo "<tr class='list-row' style=''>";
 					echo "<td class='checkbox'>";
-						echo "<input type='checkbox' name='maintenance_apps[$class]' id='checkbox_$x' value='$class' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">\n";
+						echo "<input type='checkbox' name='maintenance_apps[$class]' id='checkbox_$x' value='$class' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all').checked = false; }\">";
 					echo "</td>";
 					echo "<td>$class</td>";
 					echo "<td ". ($installed=='No' ? "style=' background-color: var(--warning);'" : 'style=" background-color: none;"') .">$installed</td>";
@@ -170,9 +174,8 @@ $document['title'] = $text['title-maintenance'];
 				echo "</tr>";
 			}
 		echo "</table>";
-		echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
+		echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>";
 	echo "</form>";
 echo "</div>";
 
-
 require_once dirname(__DIR__, 2) . '/resources/footer.php';

+ 32 - 24
resources/classes/maintenance.php

@@ -119,20 +119,6 @@ class maintenance {
 			}
 		}
 
-		//get the already registered applications from the global default settings table
-		$sql = "select default_setting_value"
-			. " from v_default_settings"
-			. " where default_setting_category = 'maintenance'"
-			. " and default_setting_subcategory = 'application'";
-
-		$result = $database->select($sql);
-		if (!empty($result)) {
-			$registered_applications = array_map(function ($row) { return $row['default_setting_value']; }, $result);
-		}
-		else {
-			$registered_applications = [];
-		}
-
 		//load all classes in the project
 		$class_files = glob(dirname(__DIR__, 2) . '/*/*/resources/classes/*.php');
 		foreach ($class_files as $file) {
@@ -162,6 +148,23 @@ class maintenance {
 
 	}
 
+	public static function get_registered_applications(database $database): array {
+		//get the already registered applications from the global default settings table
+		$sql = "select default_setting_value"
+			. " from v_default_settings"
+			. " where default_setting_category = 'maintenance'"
+			. " and default_setting_subcategory = 'application'";
+
+		$result = $database->select($sql);
+		if (!empty($result)) {
+			$registered_applications = array_map(function ($row) { return $row['default_setting_value']; }, $result);
+		}
+		else {
+			$registered_applications = [];
+		}
+		return $registered_applications;
+	}
+
 	/**
 	 * Registers the list of applications given in the $maintenance_apps array to the global default settings
 	 * @param database $database
@@ -174,12 +177,15 @@ class maintenance {
 			return false;
 		}
 
+		//query the database for the already registered applications
+		$registered_apps = self::get_registered_applications($database);
+
 		//register each app
 		$array = [];
 		$index = 0;
 		foreach ($maintenance_apps as $application) {
 			//format the array for what the database object needs for saving data in the global default settings
-			self::add_maintenance_app_to_array($application, $array, $index);
+			self::add_maintenance_app_to_array($registered_apps, $application, $array, $index);
 
 			//get the application settings from the class for database maintenance
 			self::add_database_maintenance_to_array($database, $application, $array, $index);
@@ -197,15 +203,17 @@ class maintenance {
 	}
 
 	//updates the array with a maintenance app using a format the database object save method can use
-	private static function add_maintenance_app_to_array($application, &$array, &$index) {
-		$array['default_settings'][$index]['default_setting_uuid'] = uuid();
-		$array['default_settings'][$index]['default_setting_category'] = 'maintenance';
-		$array['default_settings'][$index]['default_setting_subcategory'] = 'application';
-		$array['default_settings'][$index]['default_setting_name'] = 'array';
-		$array['default_settings'][$index]['default_setting_value'] = $application;
-		$array['default_settings'][$index]['default_setting_enabled'] = 'true';
-		$array['default_settings'][$index]['default_setting_description'] = '';
-		$index++;
+	private static function add_maintenance_app_to_array(&$registered_applications, $application, &$array, &$index) {
+		if (!in_array($application, $registered_applications)) {
+			$array['default_settings'][$index]['default_setting_uuid'] = uuid();
+			$array['default_settings'][$index]['default_setting_category'] = 'maintenance';
+			$array['default_settings'][$index]['default_setting_subcategory'] = 'application';
+			$array['default_settings'][$index]['default_setting_name'] = 'array';
+			$array['default_settings'][$index]['default_setting_value'] = $application;
+			$array['default_settings'][$index]['default_setting_enabled'] = 'true';
+			$array['default_settings'][$index]['default_setting_description'] = '';
+			$index++;
+		}
 	}
 
 	//updates the array with a database maintenance app using a format the database object save method can use