using Sarand.BusinessMgr.Net.Core.Web.App; using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Security; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Dbas.Data; using System; using System.Collections.Generic; using System.Text; namespace Sarand.BusinessMgr.Net.Core.Web.Helpers { //======================================================================= // Session Context utility functions. //======================================================================= public static class SbmSessionContextHelper_Web { //------------------------------------------------------------------- // Data members. private static String className = typeof(SbmSessionContextHelper_Web).Name; //------------------------------------------------------------------- // Session Contexts. //------------------------------------------------------------------- public static SbmSessionContext GetSessionContext (ushort idx) { SbmApplication_Web app = SbmGlobals_Web.Application; return app.GetSessionContext(idx); } //------------------------------------------------------------------- // Session Contexts for User Email Address //------------------------------------------------------------------- /// /// Identify the session context that corresponds with the BusinessMgr /// database for the specified user by email address. /// public static List GetSessionContextIdxsForUsersBusMgrDatabase(String emailAddress) { String fn = className + ".GetSessionContextIdxForUsersBusMgrDatabase"; String alias_SecurityItem = "SecItm"; String alias_Affiliate = "Affil"; List sessionContextIdxs = new List(); if (StringUtil.IsEmpty(emailAddress)) return sessionContextIdxs; // Get the session context indices defined by the application. SbmApplication_Web app = SbmGlobals_Web.Application; foreach (ushort sessionContextIdx in app.GetSessionContextIdxs()) { // Retrieve the session context. SbmSessionContext sessionContext = app.GetSessionContext(sessionContextIdx); if (sessionContext == null) { SaLogger.Warn(fn + " Failed to retrieve SessionContext for idx: " + sessionContextIdx); continue; } // Retrieve the BusinessMgr database. ISacsDatabase db = app.GetBusMgrDatabase(sessionContext); if (db == null) { SaLogger.Warn(fn + " Failed to retrieve SessionContext for idx: " + sessionContextIdx); continue; } // Query to check for Security Item matching the email with associated Affiliate. // NB This is done independently for each database in case there are different // DBMSs involved with different value formatting or syntax rules. DbQuery qry = new DbQuery(db.DbmsType); qry.Tables.Add(SaSecurityDbDfn.GetTableName(SaSecurityDbDfn.TableIdx.SaSecItem), alias_SecurityItem); qry.Columns.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem)); qry.Filters.Add(SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_EmailAddress, alias_SecurityItem) + "='" + DbQuery.FormatForCondition(emailAddress) + "'"); // Join to the Affiliate table. DbQueryJoin joinAffiliate = new DbQueryJoin(DbJoinType.FullOuter); joinAffiliate.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), alias_Affiliate); joinAffiliate.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_UserId, alias_Affiliate) + "=" + SaSecurityDbDfn.GetColumnNameQual(SaSecurityDbDfn.ColumnIdx.SaSecItem_Id, alias_SecurityItem)); // Execute query. using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.BuildQuery())) { if (resultSet != null && resultSet.NextRecord()) sessionContextIdxs.Add(sessionContextIdx); } } return sessionContextIdxs; } //------------------------------------------------------------------- } //======================================================================= }