Added ASC.Projects

This commit is contained in:
pavelbannov 2021-01-26 12:32:31 +03:00
parent f0e227731f
commit 69922e7c48
18 changed files with 1082 additions and 1 deletions

View File

@ -75,7 +75,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASC.Data.Encryption", "common\ASC.Data.Encryption\ASC.Data.Encryption.csproj", "{C4DF1A63-C9EB-4D8F-A4E5-4FD9249A5089}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ASC.Data.Encryption", "common\ASC.Data.Encryption\ASC.Data.Encryption.csproj", "{C4DF1A63-C9EB-4D8F-A4E5-4FD9249A5089}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ASC.Projects", "products\ASC.Projects\Server\ASC.Projects.csproj", "{D1A33923-5680-4B86-A7DA-41E78350D997}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -215,6 +217,10 @@ Global
{C4DF1A63-C9EB-4D8F-A4E5-4FD9249A5089}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4DF1A63-C9EB-4D8F-A4E5-4FD9249A5089}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4DF1A63-C9EB-4D8F-A4E5-4FD9249A5089}.Release|Any CPU.Build.0 = Release|Any CPU
{D1A33923-5680-4B86-A7DA-41E78350D997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1A33923-5680-4B86-A7DA-41E78350D997}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1A33923-5680-4B86-A7DA-41E78350D997}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1A33923-5680-4B86-A7DA-41E78350D997}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -0,0 +1,2 @@
echo "RUN ASC.Projects"
call dotnet run --project ..\..\products\ASC.Projects\Server\ASC.Projects.csproj --no-build --$STORAGE_ROOT=..\..\..\Data --log__dir=..\..\..\Logs --log__name=projects

View File

@ -17,6 +17,15 @@
}
],
"instanceScope": "InstancePerLifetimeScope"
},
{
"type": "ASC.Projects.Configuration.ProductEntryPoint, ASC.Projects",
"services": [
{
"type": "ASC.Web.Core.IWebItem, ASC.Web.Core"
}
],
"instanceScope": "InstancePerLifetimeScope"
}
]
}

View File

@ -0,0 +1,45 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\common\ASC.Api.Core\ASC.Api.Core.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Resources\ProjectsCommonResource.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Resources\ProjectsCommonResource.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>ProjectsCommonResource.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Resources\ProjectsCommonResource.ru.resx">
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="Resources\ProjectsCommonResource.de.resx">
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="Resources\ProjectsCommonResource.es.resx">
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="Resources\ProjectsCommonResource.fr.resx">
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Update="Resources\ProjectsCommonResource.it.resx">
<DependentUpon>ProjectsCommonResource.resx</DependentUpon>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -0,0 +1,77 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using System;
using ASC.Common;
using ASC.Core.Common;
namespace ASC.Web.Projects.Classes
{
[Scope]
public class PathProvider
{
public string BaseVirtualPath { get; private set; }
public string BaseAbsolutePath { get; private set; }
public PathProvider(BaseCommonLinkUtility commonLinkUtility)
{
BaseVirtualPath = "~/Products/Projects/";
try
{
BaseAbsolutePath = commonLinkUtility.ToAbsolute(BaseVirtualPath);
}
catch (Exception)
{
BaseAbsolutePath = BaseVirtualPath;
}
}
//public static string GetFileStaticRelativePath(String fileName)
//{
// var ext = FileUtility.GetFileExtension(fileName);
// switch (ext)
// {
// case ".js":
// return VirtualPathUtility.ToAbsolute("~/Products/Projects/js/" + fileName);
// case ".png":
// return WebPath.GetPath("/Products/Projects/App_Themes/Default/images/" + fileName);
// case ".ascx":
// return CommonLinkUtility.ToAbsolute("~/Products/Projects/Controls/" + fileName);
// case ".css":
// case ".less":
// return VirtualPathUtility.ToAbsolute("~/Products/Projects/App_Themes/default/css/" + fileName);
// }
// return fileName;
//}
//public static string GetVirtualPath(string physicalPath)
//{
// var rootpath = HttpContext.Current.Server.MapPath("~/");
// return "~/" + physicalPath.Replace(rootpath, string.Empty).Replace("\\", "/");
//}
}
}

View File

@ -0,0 +1,168 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using System;
using System.Linq;
using ASC.Common;
using ASC.Core;
using ASC.Projects.Resources;
using ASC.Web.Core;
using ASC.Web.Projects.Classes;
namespace ASC.Projects.Configuration
{
[Scope]
public class ProductEntryPoint : Product
{
private ProductContext context;
//internal static IMapper Mapper { get; set; }
//public static readonly Guid ID = EngineFactory.ProductId;
public static readonly Guid ID = WebItemManager.ProjectsProductID;
public static readonly Guid MilestoneModuleID = new Guid("{AF4AFD50-5553-47f3-8F91-651057BC930B}");
public static readonly Guid TasksModuleID = new Guid("{04339423-70E6-4b81-A2DF-3C31C723BD90}");
public static readonly Guid GanttChartModuleID = new Guid("{23CD2123-3C4C-4868-B927-A26BB49CA458}");
public static readonly Guid MessagesModuleID = new Guid("{9FF0FADE-6CFA-44ee-901F-6185593E4594}");
public static readonly Guid DocumentsModuleID = new Guid("{81402440-557D-401d-9EE1-D570748F426D}");
public static readonly Guid TimeTrackingModuleID = new Guid("{57E87DA0-D59B-443d-99D1-D9ABCAB31084}");
public static readonly Guid ProjectTeamModuleID = new Guid("{C42F993E-5D22-497e-AC26-1E9592515898}");
public static readonly Guid ContactsModuleID = new Guid("{ec12f0ba-14cb-413c-b5e5-65f6ddd5fc19}");
private AuthContext AuthContext { get; }
private UserManager UserManager { get; }
private PathProvider PathProvider { get; }
public ProductEntryPoint(
AuthContext authContext,
UserManager userManager,
PathProvider pathProvider)
{
AuthContext = authContext;
UserManager = userManager;
PathProvider = pathProvider;
}
public override Guid ProductID
{
get { return ID; }
}
public override string Name
{
get { return ProjectsCommonResource.ProductName; }
}
public override string Description
{
get
{
var id = AuthContext.CurrentAccount.ID;
if (UserManager.IsUserInGroup(id, ASC.Core.Users.Constants.GroupVisitor.ID))
return ProjectsCommonResource.ProductDescriptionShort;
if (UserManager.IsUserInGroup(id, ASC.Core.Users.Constants.GroupAdmin.ID) || UserManager.IsUserInGroup(id, ID))
return ProjectsCommonResource.ProductDescriptionEx;
return ProjectsCommonResource.ProductDescription;
}
}
public override string StartURL
{
get { return PathProvider.BaseAbsolutePath; }
}
public override string HelpURL
{
get { return string.Concat(PathProvider.BaseVirtualPath, "Help.aspx"); }
}
public override string ProductClassName
{
get { return "projects"; }
}
public override bool Visible { get { return true; } }
public override ProductContext Context
{
get { return context; }
}
public override string ApiURL => "api/2.0/projects/info.json";
public override void Init()
{
context = new ProductContext
{
//MasterPageFile = String.Concat(PathProvider.BaseVirtualPath, "Masters/BasicTemplate.Master"),
DisabledIconFileName = "product_disabled_logo.png",
IconFileName = "product_logo.png",
LargeIconFileName = "product_logolarge.svg",
//SubscriptionManager = new ProductSubscriptionManager(),
DefaultSortOrder = 20,
//SpaceUsageStatManager = new ProjectsSpaceUsageStatManager(),
AdminOpportunities = () => ProjectsCommonResource.ProductAdminOpportunities.Split('|').ToList(),
UserOpportunities = () => ProjectsCommonResource.ProductUserOpportunities.Split('|').ToList(),
HasComplexHierarchyOfAccessRights = true,
};
//FileEngine.RegisterFileSecurityProvider();
//SearchHandlerManager.Registry(new SearchHandler());
//NotifyClient.RegisterSecurityInterceptor();
//ClientScriptLocalization = new ClientLocalizationResources();
//DIHelper.Register();
//var configuration = new MapperConfiguration(cfg =>
//{
// cfg.CreateMap<Task, TasksWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant()));
// cfg.CreateMap<Message, DiscussionsWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant()));
// cfg.CreateMap<Milestone, MilestonesWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant()));
// cfg.CreateMap<Project, ProjectsWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant()));
// cfg.CreateMap<Subtask, SubtasksWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant()));
// cfg.CreateMap<Comment, CommentsWrapper>().ForMember(r => r.TenantId, opt => opt.MapFrom(r => GetCurrentTenant())).ForMember(r => r.LastModifiedOn, opt => opt.Ignore());
//});
//configuration.AssertConfigurationIsValid();
//Mapper = configuration.CreateMapper();
}
//private int GetCurrentTenant()
//{
// return CoreContext.TenantManager.GetCurrentTenant().TenantId;
//}
//public override void Shutdown()
//{
// NotifyClient.UnregisterSendMethods();
//}
//public static void RegisterSendMethods()
//{
// NotifyClient.RegisterSendMethods();
//}
}
}

View File

@ -0,0 +1,54 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2018
*
* This program is freeware. You can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html).
* In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that
* Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights.
*
* THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR
* FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html
*
* You can contact Ascensio System SIA by email at sales@onlyoffice.com
*
* The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display
* Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3.
*
* Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains
* relevant author attributions when distributing the software. If the display of the logo in its graphic
* form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE"
* in every copy of the program you distribute.
* Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks.
*
*/
using ASC.Api.Core;
using ASC.Common;
using ASC.Projects.Configuration;
using ASC.Web.Api.Routing;
using Microsoft.AspNetCore.Mvc;
namespace ASC.Projects.Controllers
{
[Scope]
[DefaultRoute]
[ApiController]
public class ProjectController : ControllerBase
{
private ProductEntryPoint ProductEntryPoint { get; }
public ProjectController(ProductEntryPoint productEntryPoint)
{
ProductEntryPoint = productEntryPoint;
}
[Read("info")]
public Module GetModule()
{
ProductEntryPoint.Init();
return new Module(ProductEntryPoint);
}
}
}

View File

@ -0,0 +1,51 @@
using System.Collections.Generic;
using System.IO;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
namespace ASC.Projects
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
var buided = config.Build();
var path = buided["pathToConf"];
if (!Path.IsPathRooted(path))
{
path = Path.GetFullPath(Path.Combine(hostingContext.HostingEnvironment.ContentRootPath, path));
}
config.SetBasePath(path);
config
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true)
.AddJsonFile("storage.json")
.AddJsonFile("kafka.json")
.AddJsonFile($"kafka.{hostingContext.HostingEnvironment.EnvironmentName}.json", true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddInMemoryCollection(new Dictionary<string, string>
{
{"pathToConf", path}
});
});
}
}

View File

@ -0,0 +1,31 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:5020",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
"$STORAGE_ROOT": "../../../Data",
"log__dir": "../../../Logs",
"log__name": "projects",
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"ASC.Project": {
"commandName": "Project",
"environmentVariables": {
"$STORAGE_ROOT": "../../../Data",
"log__dir": "../../../Logs",
"log__name": "projects",
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5020"
}
}
}

View File

@ -0,0 +1,117 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASC.Projects.Resources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class ProjectsCommonResource {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal ProjectsCommonResource() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ASC.Projects.Resources.ProjectsCommonResource", typeof(ProjectsCommonResource).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Do the same as project manager|Appoint project manager|Create and edit, delete any project|Create/edit templates.
/// </summary>
internal static string ProductAdminOpportunities {
get {
return ResourceManager.GetString("ProductAdminOpportunities", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Build teams and assign tasks. Schedule project milestones, track project activity and generate reports..
/// </summary>
internal static string ProductDescription {
get {
return ResourceManager.GetString("ProductDescription", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Build teams and assign tasks. Schedule project milestones, track project activity and generate reports..
/// </summary>
internal static string ProductDescriptionEx {
get {
return ResourceManager.GetString("ProductDescriptionEx", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Build teams and assign tasks. Schedule project milestones, track project activity and generate reports..
/// </summary>
internal static string ProductDescriptionShort {
get {
return ResourceManager.GetString("ProductDescriptionShort", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Projects.
/// </summary>
internal static string ProductName {
get {
return ResourceManager.GetString("ProductName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to View projects and take part in discussions|Create and edit milestones, tasks, discussions, documents|Track time for tasks, generate reports|Form a project team and set access rights.
/// </summary>
internal static string ProductUserOpportunities {
get {
return ResourceManager.GetString("ProductUserOpportunities", resourceCulture);
}
}
}
}

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>dieselben Operationen wie Projektleiter ausführen|Projektleiter ernennen|Projekte erstellen und bearbeiten, löschen|Vorlagen erstellen/bearbeiten</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Bilden Sie Teams und verteilen Sie Aufgaben. Planen Sie die Meilensteine Ihrer Projekte, verfolgen Sie die Aktivität und generieren Sie Berichte.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Bilden Sie Teams und weisen Sie Aufgaben zu. Planen Sie die Meilensteine des Projekts, verfolgen Sie die Aktivität innerhalb des Projekts und erstellen Sie Berichte.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Bilden Sie Teams und verteilen Sie Aufgaben. Planen Sie die Meilensteine Ihrer Projekte, verfolgen Sie die Aktivität und generieren Sie Berichte.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Projekte</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>Projekte durchsehen und an Diskussionen teilnehmen|Meilensteine, Aufgaben, Diskussionen, Dokumente erstellen und bearbeiten|Für Aufgaben aufgewandte Zeit verfolgen und Berichte erstellen|Projektteam bilden und Zugriffsrechte bestimmen</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>Hacer los mismo que el gerente del proyecto|Nombrar el gerente del proyecto|Crear, editar y eliminar cualquier proyecto|Crear/editar plantillas</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Cree equipos y asigne tareas. Programe los hitos del proyecto, siga la actividad del proyecto y genere informes.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Cree equipos y asigne tareas. Programe los hitos del proyecto, siga de la actividad de proyecto y genere informes.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Cree equipos y asigne tareas. Programe los hitos del proyecto, siga la actividad del proyecto y genere informes.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Proyectos</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>Ver proyectos y tomar parte en discusiones|Crear y editar hitos, tareas, debates, documentos|Controlar el tiempo para tareas, generar informes|Formar el equipo del proyecto y establecer los derechos de acceso</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>Faire la même chose que le chef de projet|Nommer le chef de projet|Créer et modifier, supprimer des projets|Créer/modifier des modèles</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Constituez les équipes et assignez les tâches. Planifiez les jalons de projets, suivez l'activité à travers les projets et générez les rapports.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Constituez les équipes, assignez les tâches. Planifiez les jalons des projets, suivez l'activité à travers les projets, générez les rapports.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Constituez les équipes et assignez les tâches. Planifiez les jalons de projets, suivez l'activité à travers les projets et générez les rapports.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Projets</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>Voir des projets et participer aux discussions|Créer et modifier des jalons, des tâches, des discussions, des documents|Suivre le temps des tâches, générer des rapports|Former l'équipe de projet et définir les droits d'accès</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>Effettuare le stesse attività che un responsabile progetto|Nominare responsabile progetto|Creare e modificare, eliminare qualsiasi progetto|Creare/modificare modelli</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Crea il tuo team ed assegna le attività. Pianifica le milestone, segui tutte le attività e genera i rapporti.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Crea il tuo team ed assegna le attività. Pianifica le milestone, segui tutte le attività e genera i rapporti.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Crea il tuo team ed assegna le attività. Pianifica le milestone, segui tutte le attività e genera i rapporti.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Progetti</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>Visualizzare progetti e partecipare alle discussioni|Creare e modificare milestone, attività, discussioni, documenti|Tenere traccia del tempo spento, generare rapporti|Creare team di progetto ed impostare i diritti di accesso</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>Do the same as project manager|Appoint project manager|Create and edit, delete any project|Create/edit templates</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Build teams and assign tasks. Schedule project milestones, track project activity and generate reports.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Build teams and assign tasks. Schedule project milestones, track project activity and generate reports.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Build teams and assign tasks. Schedule project milestones, track project activity and generate reports.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Projects</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>View projects and take part in discussions|Create and edit milestones, tasks, discussions, documents|Track time for tasks, generate reports|Form a project team and set access rights</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ProductAdminOpportunities" xml:space="preserve">
<value>Делать то же самое, что и менеджер проекта|Назначать менеджера проекта|Создавать и редактировать, удалять любой проект|Создавать/редактировать шаблоны</value>
</data>
<data name="ProductDescription" xml:space="preserve">
<value>Формируйте команды и ставьте задачи. Планируйте вехи проектов, отслеживайте активность в рамках проекта и генерируйте отчеты.</value>
</data>
<data name="ProductDescriptionEx" xml:space="preserve">
<value>Формируйте команды и ставьте задачи. Планируйте вехи проектов, отслеживайте активность в рамках проекта и генерируйте отчеты.</value>
</data>
<data name="ProductDescriptionShort" xml:space="preserve">
<value>Формируйте команды и ставьте задачи. Планируйте вехи проектов, отслеживайте активность в рамках проекта и генерируйте отчеты.</value>
</data>
<data name="ProductName" xml:space="preserve">
<value>Проекты</value>
</data>
<data name="ProductUserOpportunities" xml:space="preserve">
<value>Просматривать проекты и участвовать в обсуждениях|Создавать и редактировать вехи, задачи, обсуждения, документы|Учитывать время выполнения задач, генерировать отчеты|Формировать команду проекта и устанавливать права доступа</value>
</data>
</root>

View File

@ -0,0 +1,44 @@
using System.Text;
using ASC.Api.Core;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace ASC.Projects
{
public class Startup : BaseStartup
{
public override string[] LogParams { get => new string[] { "ASC.Files" }; }
public Startup(IConfiguration configuration, IHostEnvironment hostEnvironment)
: base(configuration, hostEnvironment)
{
}
public override void ConfigureServices(IServiceCollection services)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
services.AddMemoryCache();
base.ConfigureServices(services);
}
public override void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCors(builder =>
builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
base.Configure(app, env);
}
}
}

View File

@ -0,0 +1,3 @@
{
"pathToConf": "..\\..\\..\\config"
}