Implemented editing Email Subscribers
This commit is contained in:
		
							parent
							
								
									fdb0e1a40e
								
							
						
					
					
						commit
						66b14baee8
					
				
							
								
								
									
										2
									
								
								Wave.sln
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Wave.sln
									
									
									
									
									
								
							|  | @ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wave", "Wave\Wave.csproj", | |||
| EndProject | ||||
| Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FE5DA24A-8490-4DCE-BDFB-49C9CF656F8A}" | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wave.Tests", "Wave.Tests\Wave.Tests.csproj", "{54BFBF0E-5918-4830-BCDD-135BAD702529}" | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wave.Tests", "Wave.Tests\Wave.Tests.csproj", "{54BFBF0E-5918-4830-BCDD-135BAD702529}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
|  |  | |||
							
								
								
									
										103
									
								
								Wave/Components/Pages/EditSubscriber.razor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								Wave/Components/Pages/EditSubscriber.razor
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,103 @@ | |||
| @page "/Subscribers/edit/{id:guid}" | ||||
| @using Microsoft.EntityFrameworkCore | ||||
| @using Wave.Data | ||||
| @using Wave.Utilities | ||||
| 
 | ||||
| @attribute [Authorize(Roles = "Admin")] | ||||
| 
 | ||||
| @inject ILogger<EditSubscriber> Logger | ||||
| @inject IStringLocalizer<EditSubscriber> Localizer | ||||
| @inject IDbContextFactory<ApplicationDbContext> ContextFactory | ||||
| @inject IMessageDisplay Message | ||||
| @inject NavigationManager Navigation | ||||
| 
 | ||||
| <PageTitle>@(Localizer["Title"] + TitlePostfix)</PageTitle> | ||||
| 
 | ||||
| <BoardComponent CenterContent="true"> | ||||
| 	<BoardCardComponent> | ||||
| 		@if (Model is null) { | ||||
| 			<p>not found</p> | ||||
| 		} else { | ||||
| 			<EditForm FormName="EditSubscriber" Model="Model" method="post" OnValidSubmit="Submit"> | ||||
| 				<h1 class="text-3xl">@Localizer["Title"]</h1> | ||||
| 				<p class="text-xl my-3">@Email</p> | ||||
| 				<InputLabelComponent LabelText="@Localizer["Name_Label"]" For="() => Model.Name"> | ||||
| 					<InputText @bind-Value="Model.Name" class="input input-bordered w-full" autocomplete="off" | ||||
| 					           placeholder="@Localizer["Name_Placeholder"]"/> | ||||
| 				</InputLabelComponent> | ||||
| 				<div class="form-control w-full mb-3"> | ||||
| 					<label class="label cursor-pointer"> | ||||
| 						<span class="label-text">@Localizer["Subscribed_Label"]</span> | ||||
| 						<InputCheckbox @bind-Value="Model.Subscribed" class="checkbox"/> | ||||
| 					</label> | ||||
| 				</div> | ||||
| 
 | ||||
| 				<button type="submit" class="btn btn-primary w-full">@Localizer["Submit"]</button> | ||||
| 			</EditForm> | ||||
| 		} | ||||
| 	</BoardCardComponent> | ||||
| </BoardComponent> | ||||
| 
 | ||||
| @code { | ||||
| 	[CascadingParameter(Name = "TitlePostfix")] | ||||
| 	private string TitlePostfix { get; set; } = default!; | ||||
| 	[Parameter] | ||||
| 	public Guid Id { get; set; } | ||||
| 
 | ||||
| 	[SupplyParameterFromForm(FormName = "EditSubscriber")] | ||||
| 	private EditModel? Model { get; set; } | ||||
| 
 | ||||
| 	private string Email { get; set; } = string.Empty; | ||||
| 
 | ||||
| 	protected override async Task OnInitializedAsync() { | ||||
| 		await using var context = await ContextFactory.CreateDbContextAsync(); | ||||
| 		var subscriber = await context.Set<EmailSubscriber>() | ||||
| 			.IgnoreQueryFilters() | ||||
| 			.IgnoreAutoIncludes() | ||||
| 			.FirstOrDefaultAsync(s => s.Id == Id); | ||||
| 
 | ||||
| 		if (subscriber is null) { | ||||
| 			Message.ShowError(Localizer["Error_NotFound"]); | ||||
| 		} else if (Model is null) { | ||||
| 			Email = subscriber.Email; | ||||
| 			Model = new EditModel { | ||||
| 				Name = subscriber.Name ?? string.Empty, | ||||
| 				Subscribed = !subscriber.Unsubscribed | ||||
| 			}; | ||||
| 			await InvokeAsync(StateHasChanged); | ||||
| 		} | ||||
| 	} | ||||
| 	private async Task Submit() { | ||||
| 		if (Model is null) return; | ||||
| 
 | ||||
| 		try { | ||||
| 			await using var context = await ContextFactory.CreateDbContextAsync(); | ||||
| 			var subscriber = await context.Set<EmailSubscriber>() | ||||
| 				.IgnoreQueryFilters() | ||||
| 				.IgnoreAutoIncludes() | ||||
| 				.FirstOrDefaultAsync(s => s.Id == Id); | ||||
| 
 | ||||
| 			if (subscriber is null) { | ||||
| 				Message.ShowError(Localizer["Error_NotFound"]); | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| 			subscriber.Name = string.IsNullOrWhiteSpace(Model.Name) ? null : Model.Name; | ||||
| 			subscriber.Unsubscribed = !Model.Subscribed; | ||||
| 
 | ||||
| 			context.Update(subscriber); | ||||
| 			await context.SaveChangesAsync(); | ||||
| 		} catch (Exception ex) { | ||||
| 			Logger.LogError(ex, "Failed to save changes to Email Subscriber {Email}.", Email); | ||||
| 			Message.ShowError(Localizer["Submit_Error"]); | ||||
| 		} | ||||
| 		Message.ShowSuccess(Localizer["Submit_Success"]); | ||||
| 
 | ||||
| 		Navigation.NavigateTo("/subscribers"); | ||||
| 	} | ||||
| 
 | ||||
| 	private sealed class EditModel { | ||||
| 		public string Name { get; set; } = string.Empty; | ||||
| 		public bool Subscribed { get; set; } = false; | ||||
| 	} | ||||
| } | ||||
|  | @ -13,7 +13,6 @@ | |||
| @inject IDbContextFactory<ApplicationDbContext> ContextFactory | ||||
| @inject ILogger<Subscribers> Logger | ||||
| @inject IMessageDisplay Message | ||||
| @inject IOptions<Features> Features | ||||
| 
 | ||||
| <ModalComponent Id="@ModalId"> | ||||
| 	<ChildContent> | ||||
|  | @ -77,6 +76,7 @@ | |||
| 					<th class="bg-base-200 sticky top-0 text-center md:text-left w-24 max-md:hidden">@Localizer["Header_LastOpen"]</th> | ||||
| 					<th class="bg-base-200 sticky top-0 text-center md:text-left w-24 max-md:hidden">@Localizer["Header_UnsubscribeReason"]</th> | ||||
| 					<th class="bg-base-200 sticky top-0 text-center md:text-left md:w-8 z-10">@Localizer["Header_Subscribed"]</th> | ||||
| 					<td class="bg-base-200 sticky top-0 text-center md:text-left w-24"></td> | ||||
| 				</tr> | ||||
| 			</thead> | ||||
| 			<tbody class="divide-y"> | ||||
|  | @ -87,7 +87,14 @@ | |||
| 					<td class="max-md:hidden">@context.LastMailReceived?.ToString("g")</td> | ||||
| 					<td class="max-md:hidden">@context.LastMailOpened?.ToString("g")</td> | ||||
| 					<td class="max-md:hidden">@context.UnsubscribeReason</td> | ||||
| 					<td class="text-center md:text-left"><input type="checkbox" class="checkbox no-animation" checked="@(!context.Unsubscribed)" disabled /></td> | ||||
| 					<td class="text-center md:text-left"> | ||||
| 						<input type="checkbox" class="checkbox no-animation" checked="@(!context.Unsubscribed)" disabled/> | ||||
| 					</td> | ||||
| 					<td> | ||||
| 						<a class="btn btn-sm btn-info w-24" href="@($"/subscribers/edit/{context.Id}")"> | ||||
| 							@Localizer["Subscriber_Edit"] | ||||
| 						</a> | ||||
| 					</td> | ||||
| 				</tr> | ||||
| 			</PageComponent> | ||||
| 			</tbody> | ||||
|  | @ -142,7 +149,6 @@ | |||
| 	[SupplyParameterFromQuery] | ||||
| 	public int Items { get; set; } | ||||
| 
 | ||||
| 	private const int ItemsPerPage = 10; | ||||
| 	private int TotalPages { get; set; } | ||||
| 
 | ||||
| 	[SupplyParameterFromForm(FormName = "AddSubscribers")] | ||||
|  |  | |||
							
								
								
									
										125
									
								
								Wave/Resources/Components/Pages/EditSubscriber.de-DE.resx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								Wave/Resources/Components/Pages/EditSubscriber.de-DE.resx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,125 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <root> | ||||
| 	<!--  | ||||
| 		Microsoft ResX Schema | ||||
| 
 | ||||
| 		Version 1.3 | ||||
| 
 | ||||
| 		The primary goals of this format is to allow a simple XML format  | ||||
| 		that is mostly human readable. The generation and parsing of the  | ||||
| 		various data types are done through the TypeConverter classes  | ||||
| 		associated with the data types. | ||||
| 
 | ||||
| 		Example: | ||||
| 
 | ||||
| 		... ado.net/XML headers & schema ... | ||||
| 		<resheader name="resmimetype">text/microsoft-resx</resheader> | ||||
| 		<resheader name="version">1.3</resheader> | ||||
| 		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||
| 		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||
| 		<data name="Name1">this is my long string</data> | ||||
| 		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||
| 		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||
| 			[base64 mime encoded serialized .NET Framework object] | ||||
| 		</data> | ||||
| 		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||
| 			[base64 mime encoded string representing a byte array form of the .NET Framework object] | ||||
| 		</data> | ||||
| 
 | ||||
| 		There are any number of "resheader" rows that contain simple  | ||||
| 		name/value pairs. | ||||
| 
 | ||||
| 		Each data row contains a name, and value. The row also contains a  | ||||
| 		type or mimetype. Type corresponds to a .NET class that support  | ||||
| 		text/value conversion through the TypeConverter architecture.  | ||||
| 		Classes that don't support this are serialized and stored with the  | ||||
| 		mimetype set. | ||||
| 
 | ||||
| 		The mimetype is used for serialized objects, and tells the  | ||||
| 		ResXResourceReader how to depersist the object. This is currently not  | ||||
| 		extensible. For a given mimetype the value must be set accordingly: | ||||
| 
 | ||||
| 		Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||
| 		that the ResXResourceWriter will generate, however the reader can  | ||||
| 		read any of the formats listed below. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.binary.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Serialization.Formatters.Binary.BinaryFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.soap.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||
| 		value   : The object must be serialized into a byte array  | ||||
| 			: using a System.ComponentModel.TypeConverter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 	--> | ||||
| 	 | ||||
| 	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||
| 		<xsd:element name="root" msdata:IsDataSet="true"> | ||||
| 			<xsd:complexType> | ||||
| 				<xsd:choice maxOccurs="unbounded"> | ||||
| 					<xsd:element name="data"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | ||||
| 							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||
| 							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 					<xsd:element name="resheader"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" use="required" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 				</xsd:choice> | ||||
| 			</xsd:complexType> | ||||
| 		</xsd:element> | ||||
| 	</xsd:schema> | ||||
| 	<resheader name="resmimetype"> | ||||
| 		<value>text/microsoft-resx</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="version"> | ||||
| 		<value>1.3</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="reader"> | ||||
| 		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="writer"> | ||||
| 		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
|     <data name="Title" xml:space="preserve"> | ||||
|         <value>Abonnent Bearbeiten</value> | ||||
|     </data> | ||||
|     <data name="Name_Placeholder" xml:space="preserve"> | ||||
|         <value>Anna Muster</value> | ||||
|     </data> | ||||
|     <data name="Name_Label" xml:space="preserve"> | ||||
|         <value>Name (Optional)</value> | ||||
|     </data> | ||||
|     <data name="Subscribed_Label" xml:space="preserve"> | ||||
|         <value>Aktiv (erhält E-Mails)</value> | ||||
|     </data> | ||||
|     <data name="Submit" xml:space="preserve"> | ||||
|         <value>Speichern</value> | ||||
|     </data> | ||||
|     <data name="Error_NotFound" xml:space="preserve"> | ||||
|         <value>Abonnent nicht gefunden (Vielleicht wurde dieser gelöscht?)</value> | ||||
|     </data> | ||||
|     <data name="Submit_Error" xml:space="preserve"> | ||||
|         <value>Unbekannter Fehler beim Speichern ihrer Änderungen.</value> | ||||
|     </data> | ||||
|     <data name="Submit_Success" xml:space="preserve"> | ||||
|         <value>Ihre Änderungen wurden erfolgreich gespeichert</value> | ||||
|     </data> | ||||
| </root> | ||||
							
								
								
									
										101
									
								
								Wave/Resources/Components/Pages/EditSubscriber.en-GB.resx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								Wave/Resources/Components/Pages/EditSubscriber.en-GB.resx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,101 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <root> | ||||
| 	<!--  | ||||
| 		Microsoft ResX Schema | ||||
| 
 | ||||
| 		Version 1.3 | ||||
| 
 | ||||
| 		The primary goals of this format is to allow a simple XML format  | ||||
| 		that is mostly human readable. The generation and parsing of the  | ||||
| 		various data types are done through the TypeConverter classes  | ||||
| 		associated with the data types. | ||||
| 
 | ||||
| 		Example: | ||||
| 
 | ||||
| 		... ado.net/XML headers & schema ... | ||||
| 		<resheader name="resmimetype">text/microsoft-resx</resheader> | ||||
| 		<resheader name="version">1.3</resheader> | ||||
| 		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||
| 		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||
| 		<data name="Name1">this is my long string</data> | ||||
| 		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||
| 		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||
| 			[base64 mime encoded serialized .NET Framework object] | ||||
| 		</data> | ||||
| 		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||
| 			[base64 mime encoded string representing a byte array form of the .NET Framework object] | ||||
| 		</data> | ||||
| 
 | ||||
| 		There are any number of "resheader" rows that contain simple  | ||||
| 		name/value pairs. | ||||
| 
 | ||||
| 		Each data row contains a name, and value. The row also contains a  | ||||
| 		type or mimetype. Type corresponds to a .NET class that support  | ||||
| 		text/value conversion through the TypeConverter architecture.  | ||||
| 		Classes that don't support this are serialized and stored with the  | ||||
| 		mimetype set. | ||||
| 
 | ||||
| 		The mimetype is used for serialized objects, and tells the  | ||||
| 		ResXResourceReader how to depersist the object. This is currently not  | ||||
| 		extensible. For a given mimetype the value must be set accordingly: | ||||
| 
 | ||||
| 		Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||
| 		that the ResXResourceWriter will generate, however the reader can  | ||||
| 		read any of the formats listed below. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.binary.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Serialization.Formatters.Binary.BinaryFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.soap.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||
| 		value   : The object must be serialized into a byte array  | ||||
| 			: using a System.ComponentModel.TypeConverter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 	--> | ||||
| 	 | ||||
| 	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||
| 		<xsd:element name="root" msdata:IsDataSet="true"> | ||||
| 			<xsd:complexType> | ||||
| 				<xsd:choice maxOccurs="unbounded"> | ||||
| 					<xsd:element name="data"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | ||||
| 							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||
| 							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 					<xsd:element name="resheader"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" use="required" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 				</xsd:choice> | ||||
| 			</xsd:complexType> | ||||
| 		</xsd:element> | ||||
| 	</xsd:schema> | ||||
| 	<resheader name="resmimetype"> | ||||
| 		<value>text/microsoft-resx</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="version"> | ||||
| 		<value>1.3</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="reader"> | ||||
| 		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="writer"> | ||||
| 		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
| </root> | ||||
							
								
								
									
										125
									
								
								Wave/Resources/Components/Pages/EditSubscriber.resx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								Wave/Resources/Components/Pages/EditSubscriber.resx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,125 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <root> | ||||
| 	<!--  | ||||
| 		Microsoft ResX Schema | ||||
| 
 | ||||
| 		Version 1.3 | ||||
| 
 | ||||
| 		The primary goals of this format is to allow a simple XML format  | ||||
| 		that is mostly human readable. The generation and parsing of the  | ||||
| 		various data types are done through the TypeConverter classes  | ||||
| 		associated with the data types. | ||||
| 
 | ||||
| 		Example: | ||||
| 
 | ||||
| 		... ado.net/XML headers & schema ... | ||||
| 		<resheader name="resmimetype">text/microsoft-resx</resheader> | ||||
| 		<resheader name="version">1.3</resheader> | ||||
| 		<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||
| 		<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||
| 		<data name="Name1">this is my long string</data> | ||||
| 		<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||
| 		<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||
| 			[base64 mime encoded serialized .NET Framework object] | ||||
| 		</data> | ||||
| 		<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||
| 			[base64 mime encoded string representing a byte array form of the .NET Framework object] | ||||
| 		</data> | ||||
| 
 | ||||
| 		There are any number of "resheader" rows that contain simple  | ||||
| 		name/value pairs. | ||||
| 
 | ||||
| 		Each data row contains a name, and value. The row also contains a  | ||||
| 		type or mimetype. Type corresponds to a .NET class that support  | ||||
| 		text/value conversion through the TypeConverter architecture.  | ||||
| 		Classes that don't support this are serialized and stored with the  | ||||
| 		mimetype set. | ||||
| 
 | ||||
| 		The mimetype is used for serialized objects, and tells the  | ||||
| 		ResXResourceReader how to depersist the object. This is currently not  | ||||
| 		extensible. For a given mimetype the value must be set accordingly: | ||||
| 
 | ||||
| 		Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||
| 		that the ResXResourceWriter will generate, however the reader can  | ||||
| 		read any of the formats listed below. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.binary.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Serialization.Formatters.Binary.BinaryFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.soap.base64 | ||||
| 		value   : The object must be serialized with  | ||||
| 			: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 
 | ||||
| 		mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||
| 		value   : The object must be serialized into a byte array  | ||||
| 			: using a System.ComponentModel.TypeConverter | ||||
| 			: and then encoded with base64 encoding. | ||||
| 	--> | ||||
| 	 | ||||
| 	<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||
| 		<xsd:element name="root" msdata:IsDataSet="true"> | ||||
| 			<xsd:complexType> | ||||
| 				<xsd:choice maxOccurs="unbounded"> | ||||
| 					<xsd:element name="data"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 								<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | ||||
| 							<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||
| 							<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 					<xsd:element name="resheader"> | ||||
| 						<xsd:complexType> | ||||
| 							<xsd:sequence> | ||||
| 								<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||
| 							</xsd:sequence> | ||||
| 							<xsd:attribute name="name" type="xsd:string" use="required" /> | ||||
| 						</xsd:complexType> | ||||
| 					</xsd:element> | ||||
| 				</xsd:choice> | ||||
| 			</xsd:complexType> | ||||
| 		</xsd:element> | ||||
| 	</xsd:schema> | ||||
| 	<resheader name="resmimetype"> | ||||
| 		<value>text/microsoft-resx</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="version"> | ||||
| 		<value>1.3</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="reader"> | ||||
| 		<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
| 	<resheader name="writer"> | ||||
| 		<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||
| 	</resheader> | ||||
|     <data name="Title" xml:space="preserve"> | ||||
|         <value>Edit Subscriber</value> | ||||
|     </data> | ||||
|     <data name="Name_Label" xml:space="preserve"> | ||||
|         <value>Name (optional)</value> | ||||
|     </data> | ||||
|     <data name="Name_Placeholder" xml:space="preserve"> | ||||
|         <value>John Smith</value> | ||||
|     </data> | ||||
|     <data name="Subscribed_Label" xml:space="preserve"> | ||||
|         <value>Active (receives Emails)</value> | ||||
|     </data> | ||||
|     <data name="Submit" xml:space="preserve"> | ||||
|         <value>Save</value> | ||||
|     </data> | ||||
|     <data name="Error_NotFound" xml:space="preserve"> | ||||
|         <value>Subscriber not Found (maybe it has been deleted?)</value> | ||||
|     </data> | ||||
|     <data name="Submit_Error" xml:space="preserve"> | ||||
|         <value>Unexpected Error trying to save your changes.</value> | ||||
|     </data> | ||||
|     <data name="Submit_Success" xml:space="preserve"> | ||||
|         <value>Changes saved Successfully</value> | ||||
|     </data> | ||||
| </root> | ||||
|  | @ -147,4 +147,7 @@ | |||
|         <value>anna.muster@example.de; Anna Muster; Spam; | ||||
| peter.muster@example.de;;;</value> | ||||
|     </data> | ||||
|     <data name="Subscriber_Edit" xml:space="preserve"> | ||||
|         <value>Bearbeiten</value> | ||||
|     </data> | ||||
| </root> | ||||
|  | @ -150,4 +150,7 @@ | |||
|         <value>john.smith@example.com; John Smith; Spam; | ||||
| jay.smith@example.com;;;</value> | ||||
|     </data> | ||||
|     <data name="Subscriber_Edit" xml:space="preserve"> | ||||
|         <value>Edit</value> | ||||
|     </data> | ||||
| </root> | ||||
		Loading…
	
		Reference in a new issue