Each PROSERVE ZIP can ship a _report/ subfolder alongside _migrations/.
After install + DB migration, the launcher copies _report/ to the local
XAMPP htdocs (default C:\xampp\htdocs\ProserveReport\) so the Reports
tab in the sidebar always serves the matching version.
Service (PSLauncher.Core/ReportTool)
- IReportToolDeployer + ReportToolDeployer.
- Atomic deploy: copy to {target}.new/ → rename current to .old/ →
rename .new → final → cleanup .old. Apache never sees a half-state.
- Skip silencieux si _report/ absent du ZIP (PROSERVE release qui ne
touche pas au Report).
- DeployStatus enum (SkippedNoSourceFolder, XamppNotFound, Failed,
Deployed) renvoyé pour gestion UI claire.
Config (LocalConfig)
- ReportToolConfig (HtdocsRoot, FolderName, AutoDeploy). Defaults
matchent l'install standard ASTERION (C:\xampp\htdocs\ProserveReport).
Install pipeline (MainViewModel)
- Étape 6 après extraction + migrations. Progress reporté via le footer
Library : « 📂 Déploiement Report : 47/120 — assets/main.js ».
XAMPP introuvable → dialog avec lien vers Settings → Avancés.
Settings UI (SettingsDialog → Avancés)
- Nouveau bloc « OUTIL REPORT (XAMPP htdocs) » : 2 champs path + checkbox
AutoDeploy + bouton « 📂 Re-déployer maintenant » qui rejoue le deploy
sur la dernière version installée. Utile après changement de chemin
htdocs ou si l'auto-deploy avait foiré (XAMPP éteint).
Versions bumped to 0.12.0 (App + Updater + installer .iss).
Côté release : tu ajoutes _report/ dans le source de PROSERVE, tu zippes,
tu uploades. Les clients récupèrent ZIP + migrations + Report en une
seule install.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
523 lines
32 KiB
XML
523 lines
32 KiB
XML
<Window x:Class="PSLauncher.App.Views.SettingsDialog"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="clr-namespace:PSLauncher.App.ViewModels"
|
|
xmlns:loc="clr-namespace:PSLauncher.Core.Localization;assembly=PSLauncher.Core"
|
|
Title="{x:Static loc:Strings.SettingsTitle}"
|
|
Icon="pack://application:,,,/Resources/favicon.ico"
|
|
Width="640" Height="720"
|
|
MinWidth="540" MinHeight="500"
|
|
WindowStartupLocation="CenterOwner"
|
|
Background="{StaticResource Brush.Bg.Window}"
|
|
d:DataContext="{d:DesignInstance Type=vm:SettingsViewModel}"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
mc:Ignorable="d"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
|
|
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Header -->
|
|
<Border Grid.Row="0" Padding="32,24,32,16">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsTitle}" FontSize="22" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Brush.Text.Primary}" />
|
|
</Border>
|
|
|
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="32,0,32,16">
|
|
<StackPanel>
|
|
|
|
<!-- License de mise à jour (en tête : c'est l'info la plus importante,
|
|
elle conditionne ce que l'utilisateur peut télécharger.
|
|
Bordure colorée selon l'état : vert/jaune/rouge). -->
|
|
<Border BorderThickness="2"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<Border.Style>
|
|
<Style TargetType="Border">
|
|
<Setter Property="Background" Value="#2A1414" />
|
|
<Setter Property="BorderBrush" Value="#EF4444" />
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding LicenseSeverity}" Value="Ok">
|
|
<Setter Property="Background" Value="{StaticResource Brush.Status.InstalledBg}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Brush.Status.Installed}" />
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding LicenseSeverity}" Value="Warning">
|
|
<Setter Property="Background" Value="{StaticResource Brush.Status.BusyBg}" />
|
|
<Setter Property="BorderBrush" Value="{StaticResource Brush.Status.Busy}" />
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</Border.Style>
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Icône -->
|
|
<TextBlock Grid.Row="0" Grid.RowSpan="2" Grid.Column="0"
|
|
Text="{Binding LicenseIcon}"
|
|
FontSize="36" FontWeight="Bold"
|
|
VerticalAlignment="Center"
|
|
Margin="0,0,16,0">
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="Foreground" Value="#EF4444" />
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding LicenseSeverity}" Value="Ok">
|
|
<Setter Property="Foreground" Value="{StaticResource Brush.Status.Installed}" />
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding LicenseSeverity}" Value="Warning">
|
|
<Setter Property="Foreground" Value="{StaticResource Brush.Status.Busy}" />
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
</TextBlock>
|
|
|
|
<!-- Header text -->
|
|
<TextBlock Grid.Row="0" Grid.Column="1"
|
|
Text="{x:Static loc:Strings.SettingsLicense}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}" />
|
|
<TextBlock Grid.Row="1" Grid.Column="1"
|
|
Text="{Binding LicenseInfo}"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
FontWeight="SemiBold" FontSize="14"
|
|
Margin="0,2,0,0"
|
|
TextWrapping="Wrap" />
|
|
|
|
<!-- Machine ID en dessous -->
|
|
<Grid Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,12,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsMachineId}"
|
|
FontSize="11"
|
|
Foreground="{StaticResource Brush.Text.Secondary}" />
|
|
<TextBlock Text="{Binding MachineId}"
|
|
FontFamily="Consolas" FontSize="11"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
Margin="0,2,0,0" TextTrimming="CharacterEllipsis" />
|
|
</StackPanel>
|
|
<Button Grid.Column="1"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsCopyMachineId}"
|
|
Command="{Binding CopyMachineIdCommand}" />
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- Langue de l'interface -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsLanguage}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<ComboBox ItemsSource="{Binding AvailableLanguages}"
|
|
DisplayMemberPath="Name"
|
|
SelectedValuePath="Code"
|
|
SelectedValue="{Binding Language, Mode=TwoWay}"
|
|
Background="#1A1A20"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}"
|
|
BorderThickness="1" Padding="8" />
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsLanguageHint}"
|
|
FontSize="11" Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontStyle="Italic" Margin="0,6,0,0" TextWrapping="Wrap" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!--
|
|
Section "À propos" : version + copyright. Visible (pas dans l'Expander),
|
|
placée entre Langue et les paramètres avancés repliés. C'est l'info que
|
|
le support demande en premier en cas de bug.
|
|
-->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsAbout}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<TextBlock FontSize="13"
|
|
Foreground="{StaticResource Brush.Text.Primary}">
|
|
<Run Text="{x:Static loc:Strings.SettingsLauncherVersion}" />
|
|
<Run Text=" " />
|
|
<Run Text="{Binding LauncherVersion, Mode=OneWay}" FontWeight="SemiBold" />
|
|
</TextBlock>
|
|
<TextBlock Text="{x:Static loc:Strings.Copyright}"
|
|
FontSize="12"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,4,0,0" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!--
|
|
Sections "techniques" : Server / Installation / Cache / Database / Logs
|
|
repliées par défaut sous un Expander pour ne pas noyer les sections
|
|
importantes (License, Langue, About) qui restent dépliées.
|
|
Placé en BAS de la fenêtre car ce sont des trucs de power-user / support.
|
|
-->
|
|
<Expander Header="{x:Static loc:Strings.SettingsAdvanced}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Background="Transparent" BorderThickness="0"
|
|
Margin="0,0,0,16" IsExpanded="False">
|
|
<StackPanel Margin="0,12,0,0">
|
|
|
|
<!-- Serveur -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsServer}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsApiUrl}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox Grid.Column="0"
|
|
Text="{Binding ServerBaseUrl, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}"
|
|
BorderThickness="1" Padding="8" />
|
|
<Button Grid.Column="1" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsTest}"
|
|
Command="{Binding TestConnectionCommand}"
|
|
IsEnabled="{Binding IsTestingConnection, Converter={StaticResource InverseBoolToBool}}" />
|
|
</Grid>
|
|
<TextBlock Text="{Binding ConnectionStatus}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,8,0,0" TextWrapping="Wrap" />
|
|
|
|
<!-- URLs des onglets latéraux Report / Documentation -->
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsReportUrl}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,16,0,4" />
|
|
<TextBox Text="{Binding ReportUrl, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDocsUrl}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,12,0,4" />
|
|
<TextBox Text="{Binding DocumentationUrl, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Installation -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsInstallation}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsInstallRoot}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox Grid.Column="0"
|
|
Text="{Binding InstallRoot, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}"
|
|
BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
<Button Grid.Column="1" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsBrowse}"
|
|
Command="{Binding BrowseInstallRootCommand}" />
|
|
</Grid>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Cache -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsCache}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0">
|
|
<TextBlock Text="{Binding CacheDirectory}"
|
|
FontFamily="Consolas" FontSize="11"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
TextTrimming="CharacterEllipsis" />
|
|
<TextBlock FontSize="12"
|
|
Foreground="{StaticResource Brush.Text.Secondary}">
|
|
<Run Text="{x:Static loc:Strings.SettingsCacheSize}" />
|
|
<Run Text=" " />
|
|
<Run Text="{Binding CacheSizeDisplay}" FontWeight="SemiBold" />
|
|
</TextBlock>
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="📁"
|
|
Command="{Binding OpenCacheFolderCommand}" />
|
|
<Button Grid.Column="2" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsClearCache}"
|
|
Command="{Binding ClearCacheCommand}" />
|
|
</Grid>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Base de données (XAMPP / MySQL) — config + test + replay -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDatabase}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="100" />
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0" Margin="0,0,8,0">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbHost}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<TextBox Text="{Binding DbHost, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="1">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbPort}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<TextBox Text="{Binding DbPort, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0" Margin="0,0,8,0">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbUser}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<TextBox Text="{Binding DbUser, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="1">
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbPassword}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<TextBox Text="{Binding DbPassword, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbName}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBox Grid.Column="0"
|
|
Text="{Binding DbName, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
<Button Grid.Column="1" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsTest}"
|
|
Command="{Binding TestDbCommand}"
|
|
IsEnabled="{Binding IsTestingDb, Converter={StaticResource InverseBoolToBool}}" />
|
|
</Grid>
|
|
<TextBlock Text="{Binding DbConnectionStatus}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,8,0,0" TextWrapping="Wrap" />
|
|
|
|
<CheckBox IsChecked="{Binding DbAutoApplyMigrations}"
|
|
Margin="0,12,0,0"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
Content="{x:Static loc:Strings.SettingsDbAutoMigrate}" />
|
|
|
|
<Grid Margin="0,12,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0"
|
|
Text="{Binding MigrationsReplayStatus}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" VerticalAlignment="Center"
|
|
TextWrapping="Wrap" />
|
|
<Button Grid.Column="1"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsDbReplay}"
|
|
Command="{Binding ReplayMigrationsCommand}"
|
|
IsEnabled="{Binding IsReplayingMigrations, Converter={StaticResource InverseBoolToBool}}" />
|
|
</Grid>
|
|
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsDbHint}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontStyle="Italic" FontSize="11" Margin="0,8,0,0"
|
|
TextWrapping="Wrap" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Outil Report (XAMPP htdocs deploy) -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsReportTool}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsReportHtdocs}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,0,0,4" />
|
|
<TextBox Text="{Binding ReportHtdocsRoot, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsReportFolder}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" Margin="0,12,0,4" />
|
|
<TextBox Text="{Binding ReportFolderName, UpdateSourceTrigger=PropertyChanged}"
|
|
Background="#1A1A20" Foreground="{StaticResource Brush.Text.Primary}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1" Padding="8"
|
|
FontFamily="Consolas" />
|
|
|
|
<CheckBox IsChecked="{Binding ReportAutoDeploy}"
|
|
Margin="0,12,0,0"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
Content="{x:Static loc:Strings.SettingsReportAutoDeploy}" />
|
|
|
|
<Grid Margin="0,12,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0"
|
|
Text="{Binding ReportDeployStatus}"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
FontSize="12" VerticalAlignment="Center"
|
|
TextWrapping="Wrap" />
|
|
<Button Grid.Column="1"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.SettingsReportRedeploy}"
|
|
Command="{Binding RedeployReportCommand}"
|
|
IsEnabled="{Binding IsDeployingReport, Converter={StaticResource InverseBoolToBool}}" />
|
|
</Grid>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Logs (path + open button) -->
|
|
<Border Background="{StaticResource Brush.Bg.Card}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="20" Margin="0,0,0,16">
|
|
<StackPanel>
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsLogs}"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,0,0,8" />
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="Auto" />
|
|
</Grid.ColumnDefinitions>
|
|
<StackPanel Grid.Column="0">
|
|
<TextBlock Text="{Binding LogsDirectory}"
|
|
FontFamily="Consolas" FontSize="11"
|
|
Foreground="{StaticResource Brush.Text.Primary}"
|
|
TextTrimming="CharacterEllipsis" />
|
|
<TextBlock Text="{x:Static loc:Strings.SettingsCacheRotation}"
|
|
FontSize="12"
|
|
Foreground="{StaticResource Brush.Text.Secondary}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
<Button Grid.Column="1" Margin="8,0,0,0"
|
|
Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.OpenButton}"
|
|
Command="{Binding OpenLogsFolderCommand}" />
|
|
</Grid>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
</StackPanel>
|
|
</Expander>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
<!-- Footer -->
|
|
<Border Grid.Row="2" Background="{StaticResource Brush.Bg.Footer}"
|
|
BorderBrush="{StaticResource Brush.Border}" BorderThickness="0,1,0,0"
|
|
Padding="20,12">
|
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
|
<Button Style="{StaticResource SecondaryButton}"
|
|
Content="{x:Static loc:Strings.ActionCancel}"
|
|
IsCancel="True"
|
|
Margin="0,0,12,0"
|
|
Click="OnCancel" />
|
|
<Button Style="{StaticResource AccentButton}"
|
|
Content="{x:Static loc:Strings.ActionSave}"
|
|
Padding="32,8"
|
|
IsDefault="True"
|
|
Click="OnSave" />
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
</Window>
|