From 21e046cf373d4b5db39047c133a4a1db74e9ca0d Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Wed, 19 Aug 2026 19:21:16 +0200 Subject: [PATCH] 0.9.6.27: manuellen NC-Abgleich registrieren --- include/tool_registry.inc.php | 55 ++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/include/tool_registry.inc.php b/include/tool_registry.inc.php index 97ae8de..312dc91 100644 --- a/include/tool_registry.inc.php +++ b/include/tool_registry.inc.php @@ -6,7 +6,7 @@ if (!defined('PHPWG_ROOT_PATH')) if (isset($GLOBALS['template']) && is_object($GLOBALS['template']) && method_exists($GLOBALS['template'], 'func_combine_script')) { - $script_version = function_exists('bratonien_tools_current_version') ? bratonien_tools_current_version() : '0.9.6.24'; + $script_version = function_exists('bratonien_tools_current_version') ? bratonien_tools_current_version() : '0.9.6.27'; $GLOBALS['template']->func_combine_script(array( 'id'=>'bratonien_nc_connector_edit_v2', 'path'=>BRATONIEN_TOOLS_PATH.'js/nc_connector_edit_v2.js', @@ -41,6 +41,58 @@ require_once(BRATONIEN_TOOLS_PATH . 'include/nc_connector_delete_safe.inc.php'); require_once(BRATONIEN_TOOLS_PATH . 'include/nc_connector_webdav.inc.php'); require_once(BRATONIEN_TOOLS_PATH . 'include/nc_connector_wizard_webdav_flow.inc.php'); require_once(BRATONIEN_TOOLS_PATH . 'include/nc_connector_edit.inc.php'); +require_once(BRATONIEN_TOOLS_PATH . 'include/nc_connector_system.inc.php'); + +function bratonien_tools_nc_connector_run_now() +{ + $service = 'bratonien-nc-connector.service'; + $active = bratonien_tools_nc_connector_systemctl_value(array('is-active', $service)); + if ($active === 'active' || $active === 'activating') + { + return array('message'=>'Der NC-Abgleich läuft bereits.'); + } + + if (!function_exists('proc_open')) + { + throw new RuntimeException('Der NC-Abgleich konnte nicht gestartet werden: proc_open ist nicht verfügbar.'); + } + + $commands = array( + array('/usr/bin/sudo', '-n', '/usr/bin/systemctl', 'start', '--no-block', $service), + array('/usr/bin/systemctl', 'start', '--no-block', $service), + ); + $last_error = ''; + + foreach ($commands as $command) + { + if (!is_executable($command[0])) + { + continue; + } + $spec = array( + 0=>array('file','/dev/null','r'), + 1=>array('pipe','w'), + 2=>array('pipe','w'), + ); + $process = @proc_open($command, $spec, $pipes, null, array_merge($_ENV, array('LC_ALL'=>'C','LANG'=>'C'))); + if (!is_resource($process)) + { + continue; + } + $stdout = trim((string)stream_get_contents($pipes[1])); + $stderr = trim((string)stream_get_contents($pipes[2])); + fclose($pipes[1]); + fclose($pipes[2]); + $exit = proc_close($process); + if ($exit === 0) + { + return array('message'=>'NC-Abgleich wurde gestartet.'); + } + $last_error = $stderr !== '' ? $stderr : $stdout; + } + + throw new RuntimeException('Der NC-Abgleich konnte nicht gestartet werden'.($last_error !== '' ? ': '.$last_error : '.')); +} function bratonien_tools_get_tools() { @@ -72,6 +124,7 @@ function bratonien_tools_get_tools() 'nc_connector_delete' => array('handler' => 'bratonien_tools_nc_connector_delete_safe'), 'nc_connector_update_name' => array('handler' => 'bratonien_tools_nc_connector_update_name'), 'nc_connector_update_technical' => array('handler' => 'bratonien_tools_nc_connector_update_technical'), + 'nc_connector_run_now' => array('handler' => 'bratonien_tools_nc_connector_run_now'), 'nc_connector_wizard_scan' => array('handler' => 'bratonien_tools_nc_wizard_scan_webdav_first'), 'nc_connector_wizard_save_technical' => array('handler' => 'bratonien_tools_nc_wizard_save_technical_flow'), 'nc_connector_wizard_directory_browse' => array('handler' => 'bratonien_tools_nc_wizard_directory_browse'),