1461 lines
69 KiB
C#
1461 lines
69 KiB
C#
using Dapper;
|
|
using Serilog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using webapi.Infractructure.Model;
|
|
using webapi.Domain.Model;
|
|
|
|
//[assembly: NeutralResourcesLanguageAttribute("en")]
|
|
namespace webapi.Infractructure.Services
|
|
{
|
|
public class RepositoryContextFactory //: IDisposable
|
|
{
|
|
//readonly readonly IDbConnection _connection;
|
|
readonly string _connectionString;
|
|
|
|
public RepositoryContextFactory(string connectionString) {
|
|
//_connection = new SqlConnection(connectionString);
|
|
_connectionString = connectionString;
|
|
}
|
|
|
|
//public T CreateDbContext<T>(string connectionString) where T : IDbConnection
|
|
//{
|
|
// var optionsBuilder = new DbContextOptionsBuilder<RepositoryContext>();
|
|
// optionsBuilder.UseNpgsql(connectionString);
|
|
// return (T)Activator.CreateInstance(typeof(T), optionsBuilder.Options);
|
|
//}
|
|
|
|
public IDbConnection GetDbContext() => new SqlConnection(_connectionString);
|
|
|
|
|
|
//#region IDisposable Support
|
|
//private bool disposedValue = false; // To detect redundant calls
|
|
|
|
//protected virtual void Dispose(bool disposing)
|
|
//{
|
|
// if (!disposedValue)
|
|
// {
|
|
// if (disposing)
|
|
// {
|
|
// // TODO: dispose managed state (managed objects).
|
|
// }
|
|
|
|
// if (_connection != null)
|
|
// {
|
|
// _connection.Close();
|
|
// }
|
|
// // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
|
|
// // TODO: set large fields to null.
|
|
|
|
// disposedValue = true;
|
|
// }
|
|
//}
|
|
|
|
//// TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
|
|
//// ~RepositoryContextFactory()
|
|
//// {
|
|
//// // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
|
//// Dispose(false);
|
|
//// }
|
|
|
|
//// This code added to correctly implement the disposable pattern.
|
|
//public void Dispose()
|
|
//{
|
|
// // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
|
// Dispose(true);
|
|
// // TODO: uncomment the following line if the finalizer is overridden above.
|
|
// // GC.SuppressFinalize(this);
|
|
//}
|
|
//#endregion
|
|
}
|
|
|
|
public class SPService: ISPService
|
|
{
|
|
#region Members
|
|
readonly RepositoryContextFactory _contextFactory;
|
|
readonly ILogger _log;
|
|
#endregion
|
|
|
|
//public SPService(string connectionString):
|
|
// this(Serilog.Log.ForContext<SPService>(), new RepositoryContextFactory(connectionString))
|
|
//{
|
|
// //_contextFactory = ;
|
|
// //_log = ;
|
|
// //_emailService = emailService;
|
|
//}
|
|
|
|
public SPService(ILogger log, RepositoryContextFactory contextFactory)
|
|
{
|
|
_contextFactory = contextFactory;
|
|
_log = log;
|
|
//_emailService = emailService;
|
|
}
|
|
|
|
//async Task<UserAuth> GetUser(string email, string displayName) {
|
|
// var sql = @"SELECT * FROM [dbo].[aspnet_Users] u
|
|
// LEFT JOIN [dbo].[mdb_RightsRedirect_aspnet_UserCondos] c ON c.UserId = u.UserId";
|
|
// using (var connection = _contextFactory.CreateDbContext())
|
|
// {
|
|
// return (await connection.QueryAsync<UserAuth>(sql, new { email = email, displayName = displayName }))?.FirstOrDefault();
|
|
// }
|
|
//}
|
|
|
|
//async Task<bool> CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved)
|
|
//{
|
|
// var salt = CreateSalt(new byte[128]);
|
|
// //var salt = Encoding.Unicode.GetString(storeSalt);
|
|
// _log.Information($"salt: {salt}, password: {password}");
|
|
// var passwordEncoded = EncodePassword(password, salt);
|
|
// var newUserId = Guid.NewGuid();
|
|
|
|
// var sql = @"
|
|
// INSERT INTO [dbo].[aspnet_Users] (
|
|
// [ApplicationId],
|
|
// [UserId],
|
|
// [UserName],
|
|
// [LoweredUserName],
|
|
// --[MobileAlias] --NULL,
|
|
// --[IsAnonymous] --0,
|
|
// [LastActivityDate])
|
|
// SELECT TOP 1
|
|
// a.ApplicationId,
|
|
// @UserId,
|
|
// @UserName,
|
|
// LOWER(@UserName),
|
|
// @LastActivityDate
|
|
// FROM [dbo].[aspnet_Applications];
|
|
|
|
// INSERT INTO [dbo].[aspnet_Membership] (
|
|
// [ApplicationId],
|
|
// [UserId],
|
|
// [Password],
|
|
// [PasswordFormat],
|
|
// [PasswordSalt],
|
|
// [PasswordQuestion],
|
|
// [PasswordAnswer],
|
|
// [Email],
|
|
// [LoweredEmail],
|
|
// [IsApproved],
|
|
// [IsLockedOut],
|
|
// [CreateDate],
|
|
// [LastLoginDate],
|
|
// [LastPasswordChangedDate],
|
|
// [LastLockoutDate],
|
|
// [FailedPasswordAttemptCount],
|
|
// [FailedPasswordAttemptWindowStart],
|
|
// [FailedPasswordAnswerAttemptCount],
|
|
// [FailedPasswordAnswerAttemptWindowStart],
|
|
// [Comment])
|
|
// SELECT TOP 1
|
|
// a.ApplicationId,
|
|
// @UserId,
|
|
// @Password,
|
|
// 1, --PasswordFormat
|
|
// @PasswordSalt,
|
|
// @PasswordQuestion,
|
|
// @PasswordAnswer,
|
|
// @Email,
|
|
// LOWER(@Email),
|
|
// @IsApproved
|
|
// 0, -- IsLockedOut
|
|
// @CreateDate,
|
|
// @CreateDate,
|
|
// @CreateDate,
|
|
// @MinDate, --1754-01-01 00:00:00.000,
|
|
// 0,
|
|
// @MinDate,
|
|
// 0,
|
|
// @MinDate,
|
|
// NULL
|
|
// FROM [dbo].[aspnet_Applications];
|
|
// ";
|
|
|
|
// try
|
|
// {
|
|
// using (var connection = _contextFactory.CreateDbContext())
|
|
// {
|
|
// using (var transactionScope = new TransactionScope())
|
|
// {
|
|
// await connection.ExecuteAsync(sql, new
|
|
// {
|
|
// UserId = newUserId,
|
|
// UserName = username,
|
|
// Password = passwordEncoded,
|
|
// PasswordSalt = salt,
|
|
// PasswordQuestion = passwordQuestion,
|
|
// PasswordAnswer = passwordAnswer,
|
|
// Email = email,
|
|
// IsApproved = isApproved,
|
|
// CreateDate = DateTime.UtcNow,
|
|
// MinDate = new DateTime(1754, 1, 1),
|
|
// LastActivityDate = DateTime.UtcNow
|
|
// });
|
|
// transactionScope.Complete();
|
|
// return true;
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"CreateUser error. {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// return false;
|
|
// //string sql = "select c.Title, uc.DisplayName " +
|
|
// // "from mdb_RightsRedirect_aspnet_UserCondos uc " +
|
|
// // "join aspnet_Users u on uc.UserId = u.UserId " +
|
|
// // "join mdb_RightsRedirect_aspnet_Condos c on uc.SiteId = c.SiteId " +
|
|
// // "where u.LoweredUserName = @username and lower(c.Url) = @condopath";
|
|
// //using (var cmd = Connection.CreateCommand())
|
|
// //{
|
|
// // cmd.CommandText = sql;
|
|
// // cmd.Parameters.AddWithValue("@username", displayName);
|
|
// // cmd.Parameters.AddWithValue("@condopath", email);
|
|
// // using (var reader = cmd.ExecuteReader())
|
|
// // {
|
|
// // if (!reader.Read())
|
|
// // {
|
|
// // //fullname = condoname = string.Empty;
|
|
// // //return false;
|
|
// // }
|
|
|
|
// // //fullname = reader["DisplayName"].ToString();
|
|
// // //condoname = reader["Title"].ToString();
|
|
// // //return true;
|
|
// // }
|
|
// //}
|
|
//}
|
|
|
|
//private string EncodePassword(string pass, byte[] salt)
|
|
//{
|
|
// byte[] bytes = Encoding.Unicode.GetBytes(pass);
|
|
// //byte[] src = Encoding.Unicode.GetBytes(salt); Corrected 5/15/2013
|
|
// //byte[] src = Convert.FromBase64String(salt);
|
|
// byte[] dst = new byte[salt.Length + bytes.Length];
|
|
// Buffer.BlockCopy(salt, 0, dst, 0, salt.Length);
|
|
// Buffer.BlockCopy(bytes, 0, dst, salt.Length, bytes.Length);
|
|
// HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
|
|
// byte[] inArray = algorithm.ComputeHash(dst);
|
|
// return Convert.ToBase64String(inArray);
|
|
//}
|
|
|
|
//private byte[] CreateSalt(byte[] saltSize)
|
|
//{
|
|
// byte[] saltBytes = saltSize;
|
|
|
|
// RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
|
|
// rng.GetNonZeroBytes(saltBytes);
|
|
|
|
// return saltBytes;
|
|
//}
|
|
|
|
//async Task UpdateUser(Guid userId, string email)
|
|
//{
|
|
// var sql = @"UPDATE [dbo].[aspnet_Users] SET Email = @Email
|
|
// WHERE u.UserId = @UserId
|
|
// ";
|
|
// using (var connection = _contextFactory.CreateDbContext())
|
|
// {
|
|
// await connection.ExecuteAsync(sql, new { Email = email, UserId = userId });
|
|
// }
|
|
//}
|
|
|
|
public async Task<string> GetUserEmail(Guid taloyhtioUserId) {
|
|
var sql = $@"SELECT m.Email FROM
|
|
[dbo].[aspnet_Membership] m
|
|
WHERE m.UserId = '{taloyhtioUserId}'
|
|
";
|
|
|
|
//if (_contextFactory._connection.State == ConnectionState.Closed)
|
|
//{
|
|
// _contextFactory._connection.Open();
|
|
//}
|
|
//var rezult = await _contextFactory._connection.QueryAsync<string>(sql);
|
|
//_contextFactory._connection.Close();
|
|
//return rezult.FirstOrDefault();
|
|
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
return (await db.QueryAsync<string>(sql)).FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
public async Task<string> GetUserName(Guid taloyhtioUserId)
|
|
{
|
|
var sql = $@"SELECT m.UserName FROM
|
|
[dbo].[aspnet_Users] m
|
|
WHERE m.UserId = '{taloyhtioUserId}'
|
|
";
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
return (await db.QueryAsync<string>(sql)).FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
public async Task<IEnumerable<UserPmc>> GetUserCondos(Guid userId)
|
|
{
|
|
var sql = $@"SELECT UserCondo.PmcId, UserCondo.SiteId, UserCondo.Url as PmcName, UserCondo.Title as CondoName FROM
|
|
[dbo].[mdb_RightsRedirect_aspnet_UserCondos] uc
|
|
LEFT JOIN [dbo].mdb_RightsRedirect_aspnet_Condos UserCondo ON UserCondo.SiteId = uc.SiteId
|
|
WHERE uc.UserId = '{userId}'
|
|
";
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
//var lookup = new Dictionary<Guid, UserPmc>();
|
|
var result = (await db.QueryAsync<UserPmc, UserCondo, UserPmc>(
|
|
sql, (pmc, condo) =>
|
|
{
|
|
//if (!lookup.TryGetValue(pmc.PmcId, out var userPmc))
|
|
// lookup.Add(pmc.PmcId, userPmc = pmc);
|
|
//if (userPmc.Condos == null)
|
|
// userPmc.Condos = new List<UserCondo>();
|
|
//userPmc.Condos.Add(condo);
|
|
//return userPmc;
|
|
pmc.Condos = pmc.Condos ?? new List<UserCondo>();
|
|
pmc.Condos.Add(condo);
|
|
return pmc;
|
|
}, splitOn: "PmcId,SiteId"))
|
|
.GroupBy(x => new { x.PmcId, x.PmcName});
|
|
; //.AsQueryable();
|
|
//return lookup.Values;
|
|
|
|
//_log.Information($"{SPSecurity.AuthenticationMode}");
|
|
//RunSecured(() =>
|
|
//{
|
|
// try
|
|
// {
|
|
// foreach (var pmc in result)
|
|
// {
|
|
// //_log.Information($"WWWWWWWWWW: {pmc?.PmcId}");
|
|
// pmc.PmcName = GetPMCTitle(pmc.PmcId);
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetPMCTitle error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
//});
|
|
return result.Select(x =>
|
|
new UserPmc() {
|
|
PmcId = x.Key.PmcId,
|
|
PmcName = x.Key.PmcName,
|
|
Condos = x.SelectMany(c => c.Condos)
|
|
.GroupBy(c => c.SiteId)
|
|
.Select(c=> c.FirstOrDefault())
|
|
.ToList()
|
|
});
|
|
}
|
|
}
|
|
|
|
public async Task AddUserToCondo(Guid pmcId, string condoUrl, Guid? userId, int groupId, string groupName, string displayName)
|
|
{
|
|
var sql = $@"INSERT INTO [dbo].[mdb_RightsRedirect_aspnet_UserCondos](UserId, SiteId, PmcId, IsPMCLevelGroup, GroupId,GroupName, DisplayName)
|
|
SELECT '{userId}', SiteId, '{pmcId}', 0, {groupId}, '{groupName}', '{displayName}'
|
|
FROM [dbo].[mdb_RightsRedirect_aspnet_Condos]
|
|
WHERE Url='{condoUrl}' AND pmcId = '{pmcId}' AND NOT EXISTS(SELECT 1
|
|
FROM [dbo].[mdb_RightsRedirect_aspnet_UserCondos] uc
|
|
INNER JOIN [dbo].[mdb_RightsRedirect_aspnet_Condos] c ON c.SiteId = uc.SiteId AND c.PmcId = uc.PmcId
|
|
WHERE uc.UserId='{userId}' AND c.Url='{condoUrl}' AND uc.PmcId='{pmcId}')";
|
|
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
var result = await db.ExecuteAsync(sql);
|
|
}
|
|
}
|
|
|
|
public async Task<IEnumerable<Guid>> GetPMCUserList(Guid pmcId, Guid condoId)
|
|
{
|
|
var sql = $@"SELECT uc.UserId FROM
|
|
[dbo].[mdb_RightsRedirect_aspnet_UserCondos] uc
|
|
WHERE uc.PmcId = '{pmcId}' AND uc.SiteId = '{condoId}'
|
|
";
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
return await db.QueryAsync<Guid>(sql);
|
|
}
|
|
}
|
|
|
|
public async Task<bool> CheckUserPMCAccess(Guid userId, Guid pmcId)
|
|
{
|
|
var sql = $@"SELECT 1 FROM
|
|
[dbo].[mdb_RightsRedirect_aspnet_UserCondos] uc
|
|
WHERE uc.PmcId = '{pmcId}' AND uc.UserId = '{userId}'
|
|
"; //AND uc.SiteId = '{condoId}
|
|
|
|
//comment
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
return (await db.QueryAsync<bool>(sql)).FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
public Guid GetUserByEmail(string username)
|
|
{
|
|
var sql = $@"select UserID from [dbo].[aspnet_Users] where [LoweredUserName] = '{username}'";
|
|
|
|
using (var db = _contextFactory.GetDbContext())
|
|
{
|
|
return db.Query<Guid>(sql).FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
//public Guid RegisterUser(string fbaCurrentUserName, Guid pmcId, Guid webId, string webUrl,
|
|
// string email, string displayName, out string password)
|
|
//{
|
|
// if (string.IsNullOrEmpty(email)) throw new ArgumentNullException(nameof(email));
|
|
// if (string.IsNullOrEmpty(displayName)) throw new ArgumentNullException(nameof(displayName));
|
|
|
|
// var registeredUserId = Guid.Empty;
|
|
// string newPassword = string.Empty;
|
|
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// // it is important to get current user before creating new SPSite under elevated privileges
|
|
// // (after creating new SPSite SPWeb.CurrentUser will return system account)
|
|
// //var web = SPContext.Current.Web;
|
|
// //user = web.CurrentUser;
|
|
// _log.Information($"Open PMC site: {pmcId}");
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// _log.Information($"PMC site: {site.HostName}");
|
|
|
|
// _log.Information($"Open web: {webId}");
|
|
// using (var spWeb = site.OpenWeb(webUrl, false))
|
|
// {
|
|
// #region Validation
|
|
// _log.Information($"Web: {spWeb.Url}");
|
|
|
|
// spWeb.AllowUnsafeUpdates = true;
|
|
|
|
// var membershipProviderName = SecurityHelper.GetMembershipProvider(spWeb.Site);
|
|
// _log.Information($"{nameof(membershipProviderName)}: {membershipProviderName}");
|
|
|
|
// var userLogin = SecurityHelper.GetFBALoginName(membershipProviderName.ToLower(), fbaCurrentUserName);
|
|
// _log.Information($"Get current user: {userLogin}");
|
|
// var spUser = spWeb.EnsureUser(userLogin);
|
|
|
|
// //_log.Information($"User: {spUser.Name}");
|
|
// //var user = _spRepository.GetUserById(currUserId).GetAwaiter().GetResult();
|
|
// //if (user == null)
|
|
// //{
|
|
// // //this.Visible = false;
|
|
// // return;
|
|
// //}
|
|
|
|
// //bool isFrontPage = this.Request.Url.AbsoluteUri.ToLower().EndsWith("default.aspx") ||
|
|
// //this.Request.Url.AbsoluteUri.ToLower().EndsWith("etusivu.aspx");
|
|
// //if (!WebHelper.IsCondo(spWeb) || !isFrontPage)
|
|
// //{
|
|
// // //this.Visible = false;
|
|
// // return;
|
|
// //}
|
|
|
|
// var isGeneralTenant = string.Compare(spUser.Name, GetGeneralTentantUserName(spWeb), true) == 0 ||
|
|
// (string.Compare(spUser.Email, webapi.Infrastructure.Common.Constants.Security.GENERAL_USER_EMAIL, true) == 0 && spUser.Groups.Cast<SPGroup>().Any(g => g.Name.Equals(SecurityHelper.GetTenantsGroupName(spWeb))));
|
|
// var isGeneralLandlord = string.Compare(spUser.Name, GetGeneralLandlordUserName(spWeb), true) == 0 ||
|
|
// (string.Compare(spUser.Email, webapi.Infrastructure.Common.Constants.Security.GENERAL_USER_EMAIL, true) == 0 && spUser.Groups.Cast<SPGroup>().Any(g => g.Name.Equals(SecurityHelper.GetLandlordsGroupName(spWeb))));
|
|
|
|
// var bmGroupName = SecurityHelper.GetBoardMembersGroupName(spWeb);
|
|
// var isBoardMemberWithoutEmail = string.IsNullOrEmpty(spUser.Email); // && SecurityHelper.IsUserInGroup(spWeb, user.LoginName, bmGroupName);
|
|
|
|
// //if (isBoardMemberWithoutEmail)
|
|
// //{
|
|
// // //this.BtnSubmit.Text = Resources.TaloyhtioCondoAutomation.RegisterBox_BoardMembers_ButtonText;
|
|
// //}
|
|
// //else if (!isGeneralTenant && !isGeneralLandlord)
|
|
// //{
|
|
// // //this.Visible = false;
|
|
// //}
|
|
|
|
// _log.Information($"isGeneralTenant {isGeneralTenant}, \nisGeneralLandlord {isGeneralLandlord}, \nisBoardMemberWithoutEmail {isBoardMemberWithoutEmail}");
|
|
// #endregion
|
|
|
|
// var membershipProvider = Membership.Providers[membershipProviderName];
|
|
// if (membershipProvider == null)
|
|
// {
|
|
// _log.Warning(string.Format("Membership provider is null web site {0}", spWeb.Url));
|
|
// return;
|
|
// }
|
|
|
|
// //int num = 0;
|
|
// var users = membershipProvider.FindUsersByName(fbaCurrentUserName, 0, 100, out var num)
|
|
// .Cast<MembershipUser>().ToArray();
|
|
|
|
// if (num == 0)
|
|
// {
|
|
// // think it's impossible but let's handle it
|
|
// _log.Error("FBA User is not found.");
|
|
// return;
|
|
// }
|
|
// var fbaUser = users.FirstOrDefault();
|
|
// if (fbaUser == null)
|
|
// {
|
|
// _log.Error("FBA User is not found.");
|
|
// return;
|
|
// }
|
|
|
|
// registeredUserId = (Guid)fbaUser.ProviderUserKey;
|
|
|
|
// if (isBoardMemberWithoutEmail)
|
|
// {
|
|
// //var username = user.LoginName.Split('|').Last();
|
|
// //var fbaUser = _spRepository.GetUserByUserName(fbaUserName).GetAwaiter().GetResult();
|
|
// //if (fbaUser == null)
|
|
// //{
|
|
// // _log.Error($"FBA User is not found UserName: {fbaUserName}");
|
|
// // return;
|
|
// //}
|
|
// //var users = membershipProvider.FindUsersByName(fbaUserName, 0, 100, out num).Cast<MembershipUser>().ToList();
|
|
// //if (num == 0)
|
|
// //{
|
|
// // // think it's impossible but let's handle it
|
|
// // _log.Error("FBA User is not found.");
|
|
// // return;
|
|
// //}
|
|
// //var fbaUser = users.FirstOrDefault();
|
|
// //if (fbaUser == null)
|
|
// //{
|
|
// // _log.Error("FBA User is not found.");
|
|
// // return;
|
|
// //}
|
|
// fbaUser.Email = email;
|
|
// membershipProvider.UpdateUser(fbaUser);
|
|
// //_spRepository.UpdateUser(fbaUser.UserId, email).GetAwaiter().GetResult();
|
|
// _log.Information("FBA User has been updated");
|
|
// // update both emails and display name in Sharepoint
|
|
// try
|
|
// {
|
|
// //var spUser = spWeb.EnsureUser(user.LoginName);
|
|
// spUser.Email = email;
|
|
// spUser.Name = displayName;
|
|
// spUser.Update();
|
|
|
|
// _log.Information("SP User has been updated");
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"RegisterUser error. isBoardMemberWithoutEmail. Update user: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// }
|
|
// else if (isGeneralLandlord || isGeneralTenant)
|
|
// {
|
|
// _log.Information($"membershipProvider.FindUsersByName: {email}");
|
|
// membershipProvider.FindUsersByName(email, 0, 100, out num)
|
|
// .Cast<MembershipUser>()
|
|
// .ToArray();
|
|
|
|
// //bool newUser = false;
|
|
|
|
// if (num == 0)
|
|
// {
|
|
// //newUser = true;
|
|
// // create new user to database
|
|
// newPassword = SecurityHelper.GetRandomPassword().ToString();
|
|
// string question = Guid.NewGuid().ToString();
|
|
// string answer = Guid.NewGuid().ToString();
|
|
|
|
// //MembershipCreateStatus status;
|
|
|
|
// _log.Information("Create FBA user");
|
|
// var newFBAUser = membershipProvider.CreateUser(email, newPassword, email, question, answer, true, null, out var status);
|
|
// if (!status.Equals(MembershipCreateStatus.Success))
|
|
// {
|
|
// //if (!_spRepository.CreateUser(email, password, email, question, answer, true).GetAwaiter().GetResult())
|
|
// //{
|
|
// // // //serversideError.Text = Resources.TaloyhtioCondoAutomation.RegisterBox_CreateError;
|
|
// // // //serversideError.Visible = true;
|
|
// _log.Error("FBA user is not created");
|
|
// return;
|
|
// }
|
|
|
|
// _log.Information($"FBA user Id({newFBAUser.ProviderUserKey}) password for Debug only: \"{email}\" \"{newPassword}\"");
|
|
|
|
// registeredUserId = (Guid)newFBAUser.ProviderUserKey;
|
|
// }
|
|
|
|
// // 2018-05-14; now it should be possible also to ersiter existing users to new condos. So if user already exists
|
|
// // only add him to appropriate group and send email
|
|
// string fbaLogin = SecurityHelper.GetFBALoginName(membershipProviderName, email);
|
|
// // update display name in Sharepoint
|
|
// try
|
|
// {
|
|
// _log.Information("Create SP user");
|
|
// var spNewUser = spWeb.EnsureUser(fbaLogin);
|
|
// spNewUser.Name = displayName;
|
|
// spNewUser.Update();
|
|
// _log.Information("SP user created");
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"RegisterUser error. Create user: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
|
|
// // add user to appropriate group
|
|
// string groupName = isGeneralLandlord ? SecurityHelper.GetRegisteredLandlordsGroupName(spWeb) : SecurityHelper.GetRegisteredTenantsGroupName(spWeb);
|
|
// spWeb.AllowUnsafeUpdates = true;
|
|
// _log.Information($"Add user to group. fbaLogin: {fbaLogin}, email: {email}, groupName: {groupName}");
|
|
// SecurityHelper.AddUserToGroup(spWeb, fbaLogin, email, email, groupName);
|
|
|
|
// //_log.Information($"strongAuth2: {JsonConvert.SerializeObject(registeredUser)}");
|
|
|
|
// //_log.Information("Send email");
|
|
// //_log.Information($"Send email1: {_emailService == null}");
|
|
// //_log.Information($"Send email2: {SPAdministrationWebApplication.Local == null}");
|
|
// //_log.Information($"Send email2: {SPAdministrationWebApplication.Local.OutboundMailServiceInstance == null}");
|
|
// //_log.Information($"Send email3: {SPAdministrationWebApplication.Local.OutboundMailSenderAddress}");
|
|
// //if (SPAdministrationWebApplication.Local.OutboundMailServiceInstance != null)
|
|
// //{
|
|
// // if (newUser)
|
|
// // {
|
|
// // _emailService.SendRegisterNewEmail(
|
|
// // SPAdministrationWebApplication.Local.OutboundMailServiceInstance.Server.Address,
|
|
// // SPAdministrationWebApplication.Local.OutboundMailSenderAddress,
|
|
// // email, password, email);
|
|
|
|
// // // login as new user
|
|
// // //Microsoft.SharePoint.IdentityModel.SPClaimsUtility.AuthenticateFormsUser(new Uri(web.Url), email, password);
|
|
// // }
|
|
// // else
|
|
// // {
|
|
// // _emailService.SendRegisterExistingEmail(
|
|
// // SPAdministrationWebApplication.Local.OutboundMailServiceInstance.Server.Address,
|
|
// // SPAdministrationWebApplication.Local.OutboundMailSenderAddress,
|
|
// // email, email);
|
|
// // }
|
|
// //}
|
|
// //else
|
|
// //{
|
|
// // _log.Error(@"SPAdministrationWebApplication.Local.OutboundMailServiceInstance is not set up.");
|
|
// //}
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"RegisterUser error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
|
|
// password = newPassword;
|
|
// return registeredUserId;
|
|
//}
|
|
|
|
//public void CreateFlatFolders(string taloyhtioCondoUrl, Flat flat)
|
|
//{
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// _log.Information($"Open PMS site: {taloyhtioCondoUrl}");
|
|
// //request.WebId = Guid.Parse("{ADDBF886-C3F0-4114-BD30-3F41E18C1ADF}");
|
|
// //request.PMCId = Guid.Parse("{AFB9E282-E66A-4A1D-8248-BF8E90DEAA27}");
|
|
// //request.CurrentUserName = "april16";
|
|
// //request.WebUrl = "/complete_eng/april16";
|
|
// using (var site = new SPSite(taloyhtioCondoUrl))
|
|
// {
|
|
// _log.Information($"PMC site: {site.HostName}");
|
|
|
|
// _log.Information($"Open web");
|
|
// using (var spWeb = site.OpenWeb()) // "/complete_eng/april16"))
|
|
// {
|
|
// // add user to appropriate group
|
|
// string groupName = SecurityHelper.GetRegisteredFlatGroupName(spWeb, flat.FlatTitle);
|
|
|
|
// spWeb.AllowUnsafeUpdates = true;
|
|
|
|
// _log.Information($"Add group. groupName: {groupName}");
|
|
// var spGroup = SecurityHelper.EnsureSiteGroup(spWeb, groupName);
|
|
|
|
// //Spec: Subfolder name will be the same as flat title: A1, A2, etc.
|
|
// _log.Information($"Create folder: {flat.FlatTitle} to list {webapi.Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE}");
|
|
// CreateFlatFolderToList(spWeb, spGroup, flat.FlatTitle, webapi.Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE);
|
|
|
|
// _log.Information($"Create folder: {flat.FlatTitle} to list {webapi.Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE}");
|
|
// CreateFlatFolderToList(spWeb, spGroup, flat.FlatTitle, webapi.Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE);
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"CreateFlatGroup error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
//}
|
|
|
|
//public IEnumerable<FlatDocsFolder> GetFlatDocsFoldersList(Guid pmcId, Guid condoId, IEnumerable<string> userFlats, string rootFlatFolderTitle, IEnumerable<int> folderIds)
|
|
//{
|
|
// var result = new List<FlatDocsFolder>();
|
|
// GetFoldersList<FlatDocsFolder>(pmcId, condoId, userFlats, rootFlatFolderTitle, folderIds, Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE,
|
|
// (id, title, date, isFolder, count, url) => {
|
|
// result.Add(new FlatDocsFolder()
|
|
// {
|
|
// Id = id,
|
|
// Title = title,
|
|
// Date = date,
|
|
// IsFolder = isFolder,
|
|
// DocsCount = count,
|
|
// ItemViewUrl = url
|
|
// });
|
|
// });
|
|
// return result.AsEnumerable();
|
|
|
|
// //var result = new List<FlatDocsFolder>();
|
|
// //if (userFlats?.Any() ?? false)
|
|
// //{
|
|
// // RunSecured(() =>
|
|
// // {
|
|
// // try
|
|
// // {
|
|
// // _log.Information($"Open PMS site: {pmcId}");
|
|
// // using (var site = new SPSite(pmcId))
|
|
// // {
|
|
// // _log.Information($"Open web");
|
|
// // using (var spWeb = site.OpenWeb(condoId))
|
|
// // {
|
|
// // //Find SP List
|
|
// // var list = GetListByTitleSafely(spWeb, Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE);
|
|
// // if (list == null)
|
|
// // {
|
|
// // _log.Error(string.Format("List '{0}' not found on web '{1}'. Folder for parsed data won't be created.",
|
|
// // webapi.Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE, spWeb.Url));
|
|
// // return;
|
|
// // }
|
|
|
|
// // //Add root folder
|
|
// // if (!folderIds?.Any() ?? true)
|
|
// // {
|
|
// // foreach (SPFolder item in list.RootFolder.SubFolders)
|
|
// // {
|
|
// // //_log.Information($"WWWWWWWWWWWWWWWWWWWWWWWWWWW: {item.Name}{rootFlatFolderTitle} {(item.Name?.Equals(rootFlatFolderTitle) ?? false)}");
|
|
// // if (item.Name?.Equals(rootFlatFolderTitle) ?? false)
|
|
// // {
|
|
// // folderIds = new[] { item.Item.ID };
|
|
// // break;
|
|
// // }
|
|
// // }
|
|
// // }
|
|
|
|
// // SPFolder parentFolder = FindFolder(list.RootFolder, folderIds.ToList());
|
|
// // if (parentFolder != null) return;
|
|
|
|
// // if (parentFolder.SubFolders?.Count > 0)
|
|
// // {
|
|
// // foreach (SPFolder folder in parentFolder.SubFolders)
|
|
// // {
|
|
// // var title = folder.Name;
|
|
|
|
// // if ((string.IsNullOrEmpty(title)) ||
|
|
// // (title.Equals("Attachments") || title.Equals("Item")) ||
|
|
// // ((!folderIds?.Any() ?? true) && (!userFlats?.Contains(title) ?? true)))
|
|
// // continue;
|
|
|
|
// // result.Add(new FlatDocsFolder()
|
|
// // {
|
|
// // Id = folder.Item.ID,
|
|
// // Title = title,
|
|
// // Date = DateTime.UtcNow,
|
|
// // IsFolder = true,
|
|
// // DocsCount = folder.ItemCount
|
|
// // });
|
|
// // }
|
|
// // }
|
|
|
|
// // _log.Information($"parentFolder {parentFolder == null}");
|
|
// // var items = list.GetItems(new SPQuery { Folder = parentFolder });
|
|
// // _log.Information($"Items Count: {items.Count}");
|
|
// // foreach (SPListItem item in items)
|
|
// // {
|
|
// // if (item.Folder != null) continue;
|
|
|
|
// // _log.Information($"Doc {item.Name} {item.DisplayName} {item.Title}");
|
|
// // result.Add(new FlatDocsFolder()
|
|
// // {
|
|
// // Id = item.ID,
|
|
// // Title = item.Title,
|
|
// // Date = DateTime.UtcNow,
|
|
// // IsFolder = false,
|
|
// // ItemViewUrl = $"Lists/{Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE}"
|
|
// // });
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// // catch (Exception ex)
|
|
// // {
|
|
// // _log.Error($"GetFlatDocsFoldersList error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// // }
|
|
// // });
|
|
// //}
|
|
// //return result.AsEnumerable();
|
|
//}
|
|
|
|
//public IEnumerable<MaterialRepairHistory> GetMaterialRepairHistoryList(Guid pmcId, Guid condoId, IEnumerable<string> userFlats, string rootFlatFolderTitle, IEnumerable<int> folderIds)
|
|
//{
|
|
// var result = new List<MaterialRepairHistory>();
|
|
// GetFoldersList<MaterialRepairHistory>(pmcId, condoId, userFlats, rootFlatFolderTitle, folderIds, Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE,
|
|
// (id, title, date, isFolder, count, url) => {
|
|
// result.Add(new MaterialRepairHistory()
|
|
// {
|
|
// Id = id,
|
|
// Title = title,
|
|
// Date = date,
|
|
// IsFolder = isFolder,
|
|
// DocsCount = count,
|
|
// ItemViewUrl = url
|
|
// });
|
|
// });
|
|
// return result.AsEnumerable();
|
|
|
|
// //var result = new List<MaterialRepairHistory>();
|
|
// //RunSecured(() =>
|
|
// //{
|
|
// // try
|
|
// // {
|
|
// // //_log.Information($"Open PMS site: {pmcId}");
|
|
// // using (var site = new SPSite(pmcId))
|
|
// // {
|
|
// // //_log.Information($"Open web");
|
|
// // using (var spWeb = site.OpenWeb(condoId))
|
|
// // {
|
|
// // var list = GetListByTitleSafely(spWeb, Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE);
|
|
// // if (list == null)
|
|
// // {
|
|
// // _log.Error(string.Format("List '{0}' not found on web '{1}'. Folder for parsed data won't be created.",
|
|
// // webapi.Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE, spWeb.Url));
|
|
// // return;
|
|
// // }
|
|
|
|
// // SPFolderCollection subFolders = null;
|
|
// // SPFolder parentFolder = list.RootFolder;
|
|
|
|
// // if (folderIds?.Any() ?? false)
|
|
// // {
|
|
// // parentFolder = FindFolder(parentFolder, folderIds.ToList(), 0);
|
|
// // }
|
|
|
|
// // if (parentFolder != null)
|
|
// // {
|
|
// // subFolders = parentFolder.SubFolders;
|
|
// // }
|
|
|
|
// // if (subFolders?.Count > 0)
|
|
// // {
|
|
// // foreach (SPFolder folder in subFolders)
|
|
// // {
|
|
// // var title = folder.Name; if (string.IsNullOrEmpty(title))
|
|
// // continue;
|
|
|
|
// // if (title.Equals("Attachments") || title.Equals("Item"))
|
|
// // continue;
|
|
|
|
// // if ((!folderIds?.Any() ?? true && !title.Equals(rootFlatFolderTitle, StringComparison.InvariantCultureIgnoreCase)) &&
|
|
// // (!userFlats?.Contains(title) ?? true))
|
|
// // continue;
|
|
|
|
// // var subFolder = new MaterialRepairHistory() {
|
|
// // Id = folder.Item.ID, Title = title, Date = DateTime.UtcNow, IsFolder = true,
|
|
// // DocsCount = folder.ItemCount
|
|
// // };
|
|
// // result.Add(subFolder);
|
|
// // }
|
|
// // }
|
|
|
|
// // if (folderIds?.Any() ?? false)
|
|
// // {
|
|
// // _log.Information($"parentFolder {parentFolder == null}");
|
|
// // var items = list.GetItems(new SPQuery { Folder = parentFolder });
|
|
// // _log.Information($"Items Count: {items.Count}");
|
|
// // foreach (SPListItem item in items)
|
|
// // {
|
|
// // if (item.Folder != null) continue;
|
|
|
|
// // _log.Information($"Doc {item.Name} {item.DisplayName} {item.Title}");
|
|
// // var docItem = new MaterialRepairHistory()
|
|
// // {
|
|
// // Id = item.ID,
|
|
// // Title = item.Title,
|
|
// // Date = DateTime.UtcNow,
|
|
// // IsFolder = false,
|
|
// // ItemViewUrl = $"Lists/{Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE}"
|
|
// // };
|
|
// // result.Add(docItem);
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// // catch (Exception ex)
|
|
// // {
|
|
// // _log.Error($"GetFlatDocsFoldersList error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// // }
|
|
// //});
|
|
// //return result.AsEnumerable();
|
|
//}
|
|
|
|
//public void GetIdsByCondoUrl(string taloyhtioCondoUrl, out Guid PMCId, out Guid PMCCondoId)
|
|
//{
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// // it is important to get current user before creating new SPSite under elevated privileges
|
|
// // (after creating new SPSite SPWeb.CurrentUser will return system account)
|
|
// //var web = SPContext.Current.Web;
|
|
// //user = web.CurrentUser;
|
|
|
|
|
|
// //request.WebId = Guid.Parse("{ADDBF886-C3F0-4114-BD30-3F41E18C1ADF}");
|
|
// //request.PMCId = Guid.Parse("{AFB9E282-E66A-4A1D-8248-BF8E90DEAA27}");
|
|
// //request.CurrentUserName = "april16";
|
|
// //request.WebUrl = "/complete_eng/april16";
|
|
|
|
// _log.Information($"Open PMC site: {taloyhtioCondoUrl}");
|
|
// using (var site = new SPSite(taloyhtioCondoUrl))
|
|
// {
|
|
// _log.Information($"PMC site: {site.HostName}");
|
|
|
|
// _log.Information($"Open web");
|
|
// using (var spWeb = site.OpenWeb()) // "/complete_eng/april16"))
|
|
// {
|
|
// _pmcId = site.ID;
|
|
// _pmcCondoId = spWeb.ID;
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetIdsByCondoUrl error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// throw new SPCustomException("CreateFlatFolders error", ex);
|
|
// }
|
|
// });
|
|
|
|
// PMCId = _pmcId;
|
|
// PMCCondoId = _pmcCondoId;
|
|
//}
|
|
|
|
//public IEmailSettings GetEmailSettings() {
|
|
// EmailSettings result = null;
|
|
// try
|
|
// {
|
|
// RunSecured(() =>
|
|
// {
|
|
// if (SPAdministrationWebApplication.Local?.OutboundMailServiceInstance != null)
|
|
// {
|
|
// result = new EmailSettings()
|
|
// {
|
|
// SmtpServer = SPAdministrationWebApplication.Local.OutboundMailServiceInstance.Server.Address,
|
|
// FromAddress = SPAdministrationWebApplication.Local.OutboundMailSenderAddress
|
|
// };
|
|
// }
|
|
// });
|
|
// }
|
|
// catch (Exception) { }
|
|
// return result;
|
|
//}
|
|
|
|
//public IEnumerable<string> GetApprovers(Guid pmcId)
|
|
//{
|
|
// var result = new List<string>();
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// using (SPWeb web = site.RootWeb)
|
|
// {
|
|
// Thread.CurrentThread.CurrentCulture = new CultureInfo((int)web.Language);
|
|
// Thread.CurrentThread.CurrentUICulture = new CultureInfo((int)web.Language);
|
|
|
|
// var list = GetListByTitleSafely(web, TaloyhtioCondoSites.List_Approvers);
|
|
// if (list == null)
|
|
// {
|
|
// _log.Error($"List '{TaloyhtioCondoSites.List_Approvers}' not found on web '{web.Url}'. Folder for parsed data won't be created.");
|
|
// return;
|
|
// }
|
|
|
|
// var userField = list.Fields.Cast<SPField>()
|
|
// .FirstOrDefault(f => f.Title == TaloyhtioCondoSites.List_Approvers_User);
|
|
|
|
// if (userField == null || userField.Type != SPFieldType.User)// || item[TaloyhtioCondoSites.List_Sivustot_Responsible_User] == null)
|
|
// {
|
|
// _log.Information("User field is null or it's type is not User or it's value is null. Action won't be performed");
|
|
// return;
|
|
// }
|
|
|
|
// foreach (SPListItem item in list.Items)
|
|
// {
|
|
// _log.Information("User field found: fieldId = '{0}'. Item value: '{1}'", userField.Id, item[TaloyhtioCondoSites.List_Approvers_User].ToString());
|
|
// if (!(userField.GetFieldValue(item[TaloyhtioCondoSites.List_Approvers_User].ToString()) is SPFieldUserValue fieldValue))
|
|
// {
|
|
// _log.Information("User field value is null. Action won't be performed");
|
|
// return;
|
|
// }
|
|
// var user = fieldValue.User;
|
|
// if (user == null)
|
|
// {
|
|
// _log.Information("User from field value is null. Action won't be performed");
|
|
// return;
|
|
// }
|
|
// result.Add(user.Email);
|
|
// _log.Information("User if found: '{0}'", user.Email);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public IEnumerable<Tuple<Guid, string>> GetTaylohtioCondoNames(IEnumerable<Guid> taylohtioCondoIds, Guid pmcId)
|
|
//{
|
|
// var result = new List<Tuple<Guid, string>>();
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// taylohtioCondoIds.ToList().ForEach(x =>
|
|
// result.Add(new Tuple<Guid, string>(x, GetCondoTitle(pmcId, x))));
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public IEnumerable<Tuple<Guid, string>> GetCondos(Guid pmcId)
|
|
//{
|
|
// var result = new List<Tuple<Guid, string>>();
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// foreach (SPWeb web in site.RootWeb.Webs) {
|
|
// //if(condo.WebTemplateId == Common.Constants.SiteTemplates.CONDO_SITE_WEB_TEMPLATE_ID)
|
|
// if (WebHelper.IsCondo(web))
|
|
// result.Add(new Tuple<Guid, string>(web.ID, web.Title));
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public string GetPMCLang(Guid pmcId) {
|
|
// var result = Thread.CurrentThread.CurrentCulture.Name;
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// result = new CultureInfo((int)site.RootWeb.Language).Name;
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public string GetTaylohtioPMCUrl(Guid pmcId)
|
|
//{
|
|
// var result = string.Empty;
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId, SPUrlZone.Extranet))
|
|
// {
|
|
// result = site.Url;
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public string GetTaylohtioPMCTitle(Guid pmcId)
|
|
//{
|
|
// var result = string.Empty;
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// result = site.RootWeb.Title;
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public string GetTaylohtioPMCCondoTitle(Guid pmcId, Guid condoId)
|
|
//{
|
|
// var result = string.Empty;
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// result = GetCondoTitle(pmcId, condoId);
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public IEnumerable<KeyValuePair<Guid, string>> GetPMCList(Guid pmcId)
|
|
//{
|
|
// var result = new List<KeyValuePair<Guid, string>>();
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// var webApp = site.WebApplication;
|
|
// foreach (SPSite pmc in webApp.Sites)
|
|
// {
|
|
// if (WebHelper.IsPmc(pmc.RootWeb) && (pmc.ID != webApp.Sites[0].ID))
|
|
// result.Add(new KeyValuePair<Guid, string>(pmc.ID, pmc.RootWeb.Title));
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetTaylohtioCondoNames error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// return result;
|
|
//}
|
|
|
|
//public void ResolveFolderPath(Guid pmcId, Guid condoId, ListType listType, IEnumerable<int> folderIds, out string listUrl, out string folderPath)
|
|
//{
|
|
// var result = string.Empty;
|
|
// var listTitle = listType == ListType.FlatMaterial ?
|
|
// Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE :
|
|
// Infrastructure.Common.Constants.FLATS_REPAIR_HISTORY_LIST_TITLE;
|
|
|
|
// var resultListUrl = $"Lists/{listTitle}";
|
|
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// _log.Information($"Open PMS site: {pmcId}");
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// _log.Information($"Open web");
|
|
// using (var spWeb = site.OpenWeb(condoId))
|
|
// {
|
|
// var list = GetListByTitleSafely(spWeb, listTitle);
|
|
// if (list == null)
|
|
// {
|
|
// _log.Error($"List '{listTitle}' not found on web '{spWeb.Url}'. Folder for parsed data won't be created.");
|
|
// return;
|
|
// }
|
|
|
|
// SPFolder parentFolder = list.RootFolder;
|
|
// result = GetFolderPath(parentFolder, folderIds.ToList(), 0);
|
|
// //_log.Information($"SSSSSSSSSSSSSSSSSS{result}");
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetFlatDocsFoldersList error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// folderPath = result;
|
|
// listUrl = resultListUrl;
|
|
//}
|
|
|
|
#region general
|
|
//private void GetFoldersList<T>(Guid pmcId, Guid condoId, IEnumerable<string> userFlats, string rootFlatFolderTitle, IEnumerable<int> folderIds,
|
|
// string listTitle, Action<int, string, DateTime, bool, int, string> func)
|
|
//{
|
|
|
|
// //var result = new List<T>();
|
|
// if (userFlats?.Any() ?? false)
|
|
// {
|
|
// RunSecured(() =>
|
|
// {
|
|
// try
|
|
// {
|
|
// _log.Information($"Open PMS site: {pmcId}");
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// _log.Information($"Open web");
|
|
// using (var spWeb = site.OpenWeb(condoId))
|
|
// {
|
|
// //Find SP List
|
|
// var list = GetListByTitleSafely(spWeb, listTitle);
|
|
// if (list == null)
|
|
// {
|
|
// _log.Error($"List '{listTitle}' not found on web '{spWeb.Url}'. Folder for parsed data won't be created.");
|
|
// return;
|
|
// }
|
|
|
|
// //Add root folder
|
|
// if (!folderIds?.Any() ?? true)
|
|
// {
|
|
// foreach (SPFolder item in list.RootFolder.SubFolders)
|
|
// {
|
|
// //_log.Information($"WWWWWWWWWWWWWWWWWWWWWWWWWWW: {item.Name}{rootFlatFolderTitle} {(item.Name?.Equals(rootFlatFolderTitle) ?? false)}");
|
|
// if (item.Name?.Equals(rootFlatFolderTitle) ?? false)
|
|
// {
|
|
// folderIds = new[] { item.Item.ID };
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// SPFolder parentFolder = FindFolder(list.RootFolder, folderIds.ToList());
|
|
// if (parentFolder != null) return;
|
|
|
|
// if (parentFolder.SubFolders?.Count > 0)
|
|
// {
|
|
// foreach (SPFolder folder in parentFolder.SubFolders)
|
|
// {
|
|
// var title = folder.Name;
|
|
|
|
// if ((string.IsNullOrEmpty(title)) ||
|
|
// (title.Equals("Attachments") || title.Equals("Item")) ||
|
|
// ((!folderIds?.Any() ?? true) && (!userFlats?.Contains(title) ?? true)))
|
|
// continue;
|
|
|
|
// func(folder.Item.ID, title, DateTime.UtcNow, true, folder.ItemCount, null);
|
|
// //result.Add(
|
|
// // new FlatDocsFolder()
|
|
// //{
|
|
// // Id = folder.Item.ID,
|
|
// // Title = title,
|
|
// // Date = DateTime.UtcNow,
|
|
// // IsFolder = true,
|
|
// // DocsCount = folder.ItemCount
|
|
// //}); ;
|
|
// }
|
|
// }
|
|
|
|
// _log.Information($"parentFolder {parentFolder == null}");
|
|
// var items = list.GetItems(new SPQuery { Folder = parentFolder });
|
|
// _log.Information($"Items Count: {items.Count}");
|
|
// foreach (SPListItem item in items)
|
|
// {
|
|
// if (item.Folder != null) continue;
|
|
|
|
// _log.Information($"Doc {item.Name} {item.DisplayName} {item.Title}");
|
|
// func(item.ID, item.Title, DateTime.UtcNow, false, 0, $"Lists/{listTitle}");
|
|
// //result.Add(
|
|
// //new FlatDocsFolder()
|
|
// //{
|
|
// // Id = item.ID,
|
|
// // Title = item.Title,
|
|
// // Date = DateTime.UtcNow,
|
|
// // IsFolder = false,
|
|
// // ItemViewUrl = $"Lists/{Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE}"
|
|
// //});
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// _log.Error($"GetFlatDocsFoldersList error: {ex.Message} {ex.StackTrace} {ex.InnerException}", ex);
|
|
// }
|
|
// });
|
|
// }
|
|
// //return result.AsEnumerable();
|
|
//}
|
|
|
|
//private void RunSecured(CodeToRunElevated secureCode)
|
|
//{
|
|
// var ctx = HttpContext.Current;
|
|
// try
|
|
// {
|
|
// HttpContext.Current = null;
|
|
// SPSecurity.RunWithElevatedPrivileges(secureCode);
|
|
// }
|
|
// finally
|
|
// {
|
|
// HttpContext.Current = null;
|
|
// }
|
|
//}
|
|
|
|
//private SPFolder FindFolder(SPFolder folder, List<int> folderIds, int idx = 0)
|
|
//{
|
|
// //if (subFolders == null) return null;
|
|
// var folderId = folderIds[idx];
|
|
// _log.Information($"{folder == null} {folder.SubFolders == null} {folder?.SubFolders?.Count} {folderId}");
|
|
|
|
// foreach (var subFolder in folder.SubFolders)
|
|
// {
|
|
// var f = subFolder as SPFolder;
|
|
// _log.Information($"f: {f == null}");
|
|
// if (folderId.Equals(f?.Item?.ID))
|
|
// {
|
|
// if (f?.SubFolders != null && folderIds.Count() > ++idx)
|
|
// return FindFolder(f, folderIds, idx);
|
|
// else
|
|
// return f;
|
|
// }
|
|
// }
|
|
// return null;
|
|
//}
|
|
|
|
//private string GetFolderPath(SPFolder folder, List<int> folderIds, int idx)
|
|
//{
|
|
// //if (subFolders == null) return null;
|
|
// var folderId = folderIds[idx];
|
|
// //_log.Information($"{folder == null} {folder.SubFolders == null} {folder?.SubFolders?.Count} {folderId}");
|
|
// foreach (var subFolder in folder.SubFolders)
|
|
// {
|
|
// SPFolder f = subFolder as SPFolder;
|
|
// if (folderId.Equals(f?.Item?.ID))
|
|
// {
|
|
// _log.Information($"ЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙЙ{f.Name}");
|
|
// if (f?.SubFolders != null && folderIds.Count() > ++idx)
|
|
// return $"{f.Name}/{GetFolderPath(f, folderIds, idx)}";
|
|
// else
|
|
// return f.Name;
|
|
// }
|
|
// }
|
|
// return string.Empty;
|
|
//}
|
|
|
|
//private string GetPMCTitle(Guid pmcId)
|
|
//{
|
|
// //_log.Information($"WWWWWWWWWWWWWW {pmcId}");
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// //_log.Information($"QQQQQQQQQQQQQQQ {site==null} {site?.RootWeb?.Title}");
|
|
// return site.RootWeb.Title;
|
|
// }
|
|
//}
|
|
|
|
//private string GetCondoTitle(Guid pmcId, Guid condoId)
|
|
//{
|
|
// using (var site = new SPSite(pmcId))
|
|
// {
|
|
// using (var spWeb = site.OpenWeb(condoId))
|
|
// {
|
|
// return spWeb.Title;
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
//private string GetCondoShortName(SPWeb web) //, SPUser user)
|
|
//{
|
|
// if (web.AllProperties.ContainsKey(KEY_CONDO_SHORT_NAME))
|
|
// {
|
|
// return web.AllProperties[KEY_CONDO_SHORT_NAME] as string;
|
|
// }
|
|
// if (web.Title.ToLower().StartsWith(CONDO_PREFIX.ToLower()))
|
|
// {
|
|
// return web.Title.Substring(CONDO_PREFIX.Length);
|
|
// }
|
|
// return string.Empty;
|
|
//}
|
|
|
|
//private string GetGeneralTentantUserName(SPWeb web) //, SPUser condoWeb)
|
|
//{
|
|
// string shortName = GetCondoShortName(web); //, condoWeb);
|
|
// return shortName.Trim();
|
|
//}
|
|
|
|
//private string GetGeneralLandlordUserName(SPWeb web) //, SPUser user)
|
|
//{
|
|
// string shortName = GetCondoShortName(web); //, user);
|
|
// return string.Format(GENERAL_LANDLORD_NAME_TEMPLATE, shortName.Trim());
|
|
//}
|
|
|
|
//private SPList GetListByTitleSafely(SPWeb web, string listTitle)
|
|
//{
|
|
// if (web == null)
|
|
// {
|
|
// return null;
|
|
// }
|
|
|
|
// return web.Lists.Cast<SPList>().FirstOrDefault(l =>
|
|
// string.Equals(l.Title, listTitle, StringComparison.InvariantCultureIgnoreCase));
|
|
//}
|
|
|
|
//private SPFolder CreateFlatFolderToList(SPWeb web, SPGroup group, string folderName, string listName)
|
|
//{
|
|
// try
|
|
// {
|
|
// #region Validation
|
|
// if (string.IsNullOrEmpty(folderName))
|
|
// {
|
|
// _log.Error("Folder name is empty. It won't be created for users parsing.");
|
|
// return null;
|
|
// }
|
|
|
|
// //if (group == null) throw new ArgumentNullException(nameof(group));
|
|
|
|
// var list = GetListByTitleSafely(web, listName);
|
|
// if (list == null)
|
|
// {
|
|
// _log.Error(string.Format("List '{0}' not found on web '{1}'. Folder for parsed data won't be created.",
|
|
// Constants.FLATS_MATERIALS_LIST_TITLE, web.Url));
|
|
// return null;
|
|
// }
|
|
|
|
// var folder = web.GetFolder($"{list.RootFolder?.Url}/{folderName}");
|
|
// if (folder.Exists)
|
|
// {
|
|
// _log.Warning(string.Format("Folder '{0}' already exists on list '{1}' on web '{2}'. Something is wrong, can't continue.",
|
|
// folderName, list.Title, web.Url));
|
|
// return null;
|
|
// }
|
|
// #endregion
|
|
|
|
// _log.Information($"Add folder {folderName} to list {listName}");
|
|
// var newFolder = list.Items.Add("", SPFileSystemObjectType.Folder, folderName);
|
|
// newFolder.Update();
|
|
|
|
// _log.Information($"AssignGroupRoleToSecurableObject to list {webapi.Infrastructure.Common.Constants.FLATS_MATERIALS_LIST_TITLE}");
|
|
// SecurityHelper.AssignGroupRoleToSecurableObject(web, list, SPRoleType.Editor, group, false);
|
|
|
|
// return newFolder.Folder;
|
|
// }
|
|
// catch (Exception x)
|
|
// {
|
|
// _log.Error($"CreateFlatFolderToList error {x.Message} {x.StackTrace} {x.InnerException}");
|
|
// throw new SPCustomException("CreateFlatFolderToList error", x);
|
|
// }
|
|
//}
|
|
#endregion
|
|
}
|
|
} |