/// <summary> /// Fixed: /// </summary> private static Dictionary <string, ControlData> SelectableMembers() { var data = new Dictionary <string, ControlData>(); var searchText = Forms.Data("SearchMemberText"); if (!searchText.IsNullOrEmpty()) { var currentMembers = Forms.List("CurrentMembersAll"); Rds.ExecuteTable(statements: new SqlStatement[] { Rds.SelectDepts( column: Rds.DeptsColumn() .DeptId() .DeptCode() .Add("0 as [UserId]") .Add("'' as [UserCode]") .Add("0 as [IsUser]"), where : Rds.DeptsWhere() .TenantId(Sessions.TenantId()) .DeptId_In( currentMembers? .Where(o => o.StartsWith("Dept,")) .Select(o => o.Split_2nd().ToInt()), negative: true) .SqlWhereLike( name: "SearchText", searchText: searchText, clauseCollection: new List <string>() { Rds.Depts_DeptCode_WhereLike(), Rds.Depts_DeptName_WhereLike() })), Rds.SelectUsers( unionType: Sqls.UnionTypes.Union, column: Rds.UsersColumn() .Add("0 as [DeptId]") .Add("'' as [DeptCode]") .UserId() .UserCode() .Add("1 as [IsUser]"), join: Rds.UsersJoin() .Add(new SqlJoin( tableBracket: "[Depts]", joinType: SqlJoin.JoinTypes.LeftOuter, joinExpression: "[Users].[DeptId]=[Depts].[DeptId]")), where : Rds.UsersWhere() .TenantId(Sessions.TenantId()) .UserId_In( currentMembers? .Where(o => o.StartsWith("User,")) .Select(o => o.Split_2nd().ToInt()), negative: true) .SqlWhereLike( name: "SearchText", searchText: searchText, clauseCollection: new List <string>() { Rds.Users_LoginId_WhereLike(), Rds.Users_Name_WhereLike(), Rds.Users_UserCode_WhereLike(), Rds.Users_Body_WhereLike(), Rds.Depts_DeptCode_WhereLike(), Rds.Depts_DeptName_WhereLike(), Rds.Depts_Body_WhereLike() }) .Users_Disabled(0)) }) .AsEnumerable() .OrderBy(o => o["IsUser"]) .ThenBy(o => o["DeptCode"]) .ThenBy(o => o["DeptId"]) .ThenBy(o => o["UserCode"]) .ForEach(dataRow => data.AddMember(dataRow)); } return(data); }
public System.Text.StringBuilder Csv( Context context, SiteSettings ss, System.Text.StringBuilder csv, IEnumerable <ExportColumn> exportColumns) { var idColumn = Rds.IdColumn(ss.ReferenceType); DataRows.ForEach(dataRow => { var dataId = dataRow.Long(idColumn).ToString(); var data = new List <string>(); var tenants = new Dictionary <string, TenantModel>(); var depts = new Dictionary <string, DeptModel>(); var groups = new Dictionary <string, GroupModel>(); var registrations = new Dictionary <string, RegistrationModel>(); var users = new Dictionary <string, UserModel>(); var sites = new Dictionary <string, SiteModel>(); var issues = new Dictionary <string, IssueModel>(); var results = new Dictionary <string, ResultModel>(); var wikis = new Dictionary <string, WikiModel>(); exportColumns.ForEach(exportColumn => { var column = exportColumn.Column; var key = column.TableName(); switch (column.SiteSettings?.ReferenceType) { case "Users": if (!users.ContainsKey(key)) { users.Add(key, new UserModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } data.Add(users.Get(key).CsvData( context: context, ss: column.SiteSettings, column: column, exportColumn: exportColumn, mine: users.Get(key).Mine(context: context))); break; case "Issues": if (!issues.ContainsKey(key)) { issues.Add(key, new IssueModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } data.Add(issues.Get(key).CsvData( context: context, ss: column.SiteSettings, column: column, exportColumn: exportColumn, mine: issues.Get(key).Mine(context: context))); break; case "Results": if (!results.ContainsKey(key)) { results.Add(key, new ResultModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } data.Add(results.Get(key).CsvData( context: context, ss: column.SiteSettings, column: column, exportColumn: exportColumn, mine: results.Get(key).Mine(context: context))); break; } }); csv.Append(data.Join(","), "\n"); }); return(csv); }
public void TBody( HtmlBuilder hb, Context context, SiteSettings ss, IEnumerable <Column> columns, bool checkAll) { var idColumn = Rds.IdColumn(ss.ReferenceType); DataRows.ForEach(dataRow => { var dataId = dataRow.Long(idColumn).ToString(); hb.Tr( attributes: new HtmlAttributes() .Class("grid-row") .DataId(dataId), action: () => { hb.Td(action: () => hb .CheckBox( controlCss: "grid-check", _checked: checkAll, dataId: dataId)); var depts = new Dictionary <string, DeptModel>(); var groups = new Dictionary <string, GroupModel>(); var users = new Dictionary <string, UserModel>(); var sites = new Dictionary <string, SiteModel>(); var issues = new Dictionary <string, IssueModel>(); var results = new Dictionary <string, ResultModel>(); var wikis = new Dictionary <string, WikiModel>(); columns.ForEach(column => { var key = column.TableName(); switch (column.SiteSettings?.ReferenceType) { case "Depts": if (!depts.ContainsKey(key)) { depts.Add(key, new DeptModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, deptModel: depts.Get(key)); break; case "Groups": if (!groups.ContainsKey(key)) { groups.Add(key, new GroupModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, groupModel: groups.Get(key)); break; case "Users": if (!users.ContainsKey(key)) { users.Add(key, new UserModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, userModel: users.Get(key)); break; case "Sites": if (!sites.ContainsKey(key)) { sites.Add(key, new SiteModel( context: context, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, siteModel: sites.Get(key)); break; case "Issues": if (!issues.ContainsKey(key)) { issues.Add(key, new IssueModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, issueModel: issues.Get(key)); break; case "Results": if (!results.ContainsKey(key)) { results.Add(key, new ResultModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, resultModel: results.Get(key)); break; case "Wikis": if (!wikis.ContainsKey(key)) { wikis.Add(key, new WikiModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias)); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, wikiModel: wikis.Get(key)); break; } }); }); }); }
private static DataSet ResultContents(EnumerableRowCollection <DataRow> dataRows) { var statements = new List <SqlStatement>(); if (dataRows.Any(o => o["ReferenceType"].ToString() == "Sites")) { statements.Add(Rds.SelectSites( dataTableName: "Sites", column: Rds.SitesColumn() .ParentId(_as: "SiteId") .SiteId(_as: "Id") .Title() .Body(), where : Rds.SitesWhere() .TenantId(Sessions.TenantId()) .SiteId_In(dataRows .Where(o => o["ReferenceType"].ToString() == "Sites") .Select(o => o["ReferenceId"].ToLong())))); } if (dataRows.Any(o => o["ReferenceType"].ToString() == "Issues")) { statements.Add(Rds.SelectIssues( dataTableName: "Issues", column: Rds.IssuesColumn() .SiteId() .IssueId(_as: "Id") .Title() .Body(), where : Rds.IssuesWhere() .IssueId_In(dataRows .Where(o => o["ReferenceType"].ToString() == "Issues") .Select(o => o["ReferenceId"].ToLong())))); } if (dataRows.Any(o => o["ReferenceType"].ToString() == "Results")) { statements.Add(Rds.SelectResults( dataTableName: "Results", column: Rds.ResultsColumn() .SiteId() .ResultId(_as: "Id") .Title() .Body(), where : Rds.ResultsWhere() .ResultId_In(dataRows .Where(o => o["ReferenceType"].ToString() == "Results") .Select(o => o["ReferenceId"].ToLong())))); } if (dataRows.Any(o => o["ReferenceType"].ToString() == "Wikis")) { statements.Add(Rds.SelectWikis( dataTableName: "Wikis", column: Rds.WikisColumn() .SiteId() .WikiId(_as: "Id") .Title() .Body(), where : Rds.WikisWhere() .WikiId_In(dataRows .Where(o => o["ReferenceType"].ToString() == "Wikis") .Select(o => o["ReferenceId"].ToLong())))); } return(Rds.ExecuteDataSet(statements: statements.ToArray())); }
public ErrorData Update( Context context, SiteSettings ss, IEnumerable <string> permissions = null, bool permissionChanged = false, SqlParamCollection param = null, List <SqlStatement> additionalStatements = null, bool otherInitValue = false, bool setBySession = true, bool get = true) { if (setBySession) { SetBySession(context: context); } var statements = new List <SqlStatement>(); statements.AddRange(UpdateStatements( context: context, ss: ss, permissions: permissions, permissionChanged: permissionChanged, param: param, otherInitValue: otherInitValue, additionalStatements: additionalStatements)); var response = Rds.ExecuteScalar_response( context: context, transactional: true, statements: statements.ToArray()); if (response.Event == "Conflicted") { return(new ErrorData( type: Error.Types.UpdateConflicts, id: GroupId)); } if (get) { Get(context: context, ss: ss); } statements = new List <SqlStatement> { Rds.PhysicalDeleteGroupMembers( where : Rds.GroupMembersWhere() .GroupId(GroupId)) }; context.Forms.List("CurrentMembersAll").ForEach(data => { if (data.StartsWith("Dept,")) { statements.Add(Rds.InsertGroupMembers( param: Rds.GroupMembersParam() .GroupId(GroupId) .DeptId(data.Split_2nd().ToInt()) .Admin(data.Split_3rd().ToBool()))); } if (data.StartsWith("User,")) { statements.Add(Rds.InsertGroupMembers( param: Rds.GroupMembersParam() .GroupId(GroupId) .UserId(data.Split_2nd().ToInt()) .Admin(data.Split_3rd().ToBool()))); } }); Rds.ExecuteNonQuery( context: context, transactional: true, statements: statements.ToArray()); return(new ErrorData(type: Error.Types.None)); }
private static DataSet DataSet(Context context, SiteSettings ss, long id) { var statements = new List <SqlStatement>(); ss.Sources .Where(currentSs => currentSs.ReferenceType == "Issues") .ForEach(currentSs => statements.Add(SelectIssues( context: context, ss: currentSs, view: Views.GetBySession( context: context, ss: currentSs, dataTableName: DataTableName( ss: currentSs, direction: "Source")), id: id, direction: "Source"))); ss.Destinations .Where(currentSs => currentSs.ReferenceType == "Issues") .ForEach(currentSs => statements.Add(SelectIssues( context: context, ss: currentSs, view: Views.GetBySession( context: context, ss: currentSs, dataTableName: DataTableName( ss: currentSs, direction: "Destination")), id: id, direction: "Destination"))); ss.Sources .Where(currentSs => currentSs.ReferenceType == "Results") .ForEach(currentSs => statements.Add(SelectResults( context: context, ss: currentSs, view: Views.GetBySession( context: context, ss: currentSs, dataTableName: DataTableName( ss: currentSs, direction: "Source")), id: id, direction: "Source"))); ss.Destinations .Where(currentSs => currentSs.ReferenceType == "Results") .ForEach(currentSs => statements.Add(SelectResults( context: context, ss: currentSs, view: Views.GetBySession( context: context, ss: currentSs, dataTableName: DataTableName( ss: currentSs, direction: "Destination")), id: id, direction: "Destination"))); return(statements.Any() ? Rds.ExecuteDataSet( context: context, statements: statements.ToArray()) : null); }
/// <summary> /// Fixed: /// </summary> public static string Editor(Context context, string reference, long id) { var ss = SiteSettingsUtilities.GetByReference( context: context, reference: reference, referenceId: id); if (context.ContractSettings.Mail == false) { return(Error.Types.Restricted.MessageJson(context: context)); } if (MailAddressUtilities.Get( context: context, userId: context.UserId) == string.Empty) { return(new ResponseCollection() .CloseDialog() .Message(Messages.MailAddressHasNotSet(context: context)) .ToJson()); } var invalid = OutgoingMailValidators.OnEditing( context: context, ss: ss); switch (invalid) { case Error.Types.None: break; default: return(invalid.MessageJson(context: context)); } var outgoingMailModel = new OutgoingMailModel().Get( context: context, where : Rds.OutgoingMailsWhere().OutgoingMailId( context.Forms.Long("OutgoingMails_OutgoingMailId"))); var hb = new HtmlBuilder(); return(new ResponseCollection() .Html("#OutgoingMailDialog", hb .Div(id: "MailEditorTabsContainer", action: () => hb .Ul(id: "MailEditorTabs", action: () => hb .Li(action: () => hb .A( href: "#FieldSetMailEditor", text: Displays.Mail(context: context))) .Li(action: () => hb .A( href: "#FieldSetAddressBook", text: Displays.AddressBook(context: context)))) .FieldSet(id: "FieldSetMailEditor", action: () => hb .Form( attributes: new HtmlAttributes() .Id("OutgoingMailForm") .Action(Locations.Action( context: context, table: reference, id: id, controller: "OutgoingMails")), action: () => hb .Editor( context: context, ss: ss, outgoingMailModel: outgoingMailModel))) .FieldSet(id: "FieldSetAddressBook", action: () => hb .Form( attributes: new HtmlAttributes() .Id("OutgoingMailDestinationForm") .Action(Locations.Action( context: context, table: reference, id: id, controller: "OutgoingMails")), action: () => hb .Destinations(context: context, ss: ss))))) .Invoke("initOutgoingMailDialog") .Focus("#OutgoingMails_Body") .ToJson()); }
/// <summary> /// Fixed: /// </summary> public static SqlSelect Select( Context context, SiteSettings ss, string searchText, IEnumerable <long> siteIdList) { if (ss != null && ss.TableType != Sqls.TableTypes.Normal) { return(Select( ss: ss, searchText: searchText, siteIdList: siteIdList, like: Rds.Items_FullText_WhereLike( factory: context, forward: false))); } switch (ss?.SearchType) { case SiteSettings.SearchTypes.FullText: var words = context.SqlCommandText.CreateSearchTextWords( words: Words(searchText.SearchIndexes().Join(" ")), searchText: searchText.SearchIndexes().Join(" ")); if (words?.Any() != true) { return(null); } return(SelectByFullText( context: context, column: Rds.ItemsColumn().ReferenceId(), orderBy: null, siteIdList: siteIdList, words: words)); case SiteSettings.SearchTypes.MatchInFrontOfTitle: return(Select( ss: ss, searchText: searchText, siteIdList: siteIdList, like: Rds.Items_Title_WhereLike( factory: context, forward: true))); case SiteSettings.SearchTypes.BroadMatchOfTitle: return(Select( ss: ss, searchText: searchText, siteIdList: siteIdList, like: Rds.Items_Title_WhereLike( factory: context, forward: false))); case SiteSettings.SearchTypes.PartialMatch: default: return(Select( ss: ss, searchText: searchText.SearchIndexes().Join(" "), siteIdList: siteIdList, like: Rds.Items_FullText_WhereLike( factory: context, forward: false))); } }
private static DataSet ResultContents( Context context, EnumerableRowCollection <DataRow> dataRows) { var statements = new List <SqlStatement>(); if (dataRows.Any(o => o.String("ReferenceType") == "Sites")) { statements.Add(Rds.SelectSites( dataTableName: "Sites", column: Rds.SitesColumn() .ParentId(_as: "SiteId") .SiteId(_as: "Id") .Body() .Items_Title(), join: new SqlJoinCollection( new SqlJoin( tableBracket: "\"Items\"", joinType: SqlJoin.JoinTypes.Inner, joinExpression: "\"Items\".\"ReferenceId\"=\"Sites\".\"SiteId\"")), where : Rds.SitesWhere() .TenantId(context.TenantId) .SiteId_In(dataRows .Where(o => o.String("ReferenceType") == "Sites") .Select(o => o.Long("ReferenceId"))))); } if (dataRows.Any(o => o.String("ReferenceType") == "Issues")) { statements.Add(Rds.SelectIssues( dataTableName: "Issues", column: Rds.IssuesColumn() .SiteId() .IssueId(_as: "Id") .Body() .Items_Title(), join: new SqlJoinCollection( new SqlJoin( tableBracket: "\"Items\"", joinType: SqlJoin.JoinTypes.Inner, joinExpression: "\"Items\".\"ReferenceId\"=\"Issues\".\"IssueId\"")), where : Rds.IssuesWhere() .IssueId_In(dataRows .Where(o => o.String("ReferenceType") == "Issues") .Select(o => o.Long("ReferenceId"))))); } if (dataRows.Any(o => o.String("ReferenceType") == "Results")) { statements.Add(Rds.SelectResults( dataTableName: "Results", column: Rds.ResultsColumn() .SiteId() .ResultId(_as: "Id") .Body() .Items_Title(), join: new SqlJoinCollection( new SqlJoin( tableBracket: "\"Items\"", joinType: SqlJoin.JoinTypes.Inner, joinExpression: "\"Items\".\"ReferenceId\"=\"Results\".\"ResultId\"")), where : Rds.ResultsWhere() .ResultId_In(dataRows .Where(o => o.String("ReferenceType") == "Results") .Select(o => o.Long("ReferenceId"))))); } if (dataRows.Any(o => o.String("ReferenceType") == "Wikis")) { statements.Add(Rds.SelectWikis( dataTableName: "Wikis", column: Rds.WikisColumn() .SiteId() .WikiId(_as: "Id") .Body() .Items_Title(), join: new SqlJoinCollection( new SqlJoin( tableBracket: "\"Items\"", joinType: SqlJoin.JoinTypes.Inner, joinExpression: "\"Items\".\"ReferenceId\"=\"Wikis\".\"WikiId\"")), where : Rds.WikisWhere() .WikiId_In(dataRows .Where(o => o.String("ReferenceType") == "Wikis") .Select(o => o.Long("ReferenceId"))))); } return(Repository.ExecuteDataSet( context: context, statements: statements.ToArray())); }
/// <summary> /// Fixed: /// </summary> public static void RebuildSearchIndexes(Context context, long siteId = -1) { var hash = new Dictionary <long, SiteModel>(); Repository.ExecuteTable( context: context, statements: Rds.SelectItems( column: Rds.ItemsColumn() .ReferenceId() .SiteId() .UpdatedTime() .Users_TenantId() .Users_DeptId() .Users_UserId(), join: Rds.ItemsJoinDefault().Add(new SqlJoin( tableBracket: "\"Users\"", joinType: SqlJoin.JoinTypes.Inner, joinExpression: "\"Users\".\"UserId\"=\"Items\".\"Updator\"")), where : siteId > 0 ? Rds.ItemsWhere().SiteId(siteId) : Rds.ItemsWhere().Add(raw: new List <string>() { "\"Items\".\"SearchIndexCreatedTime\" is null", "\"Items\".\"SearchIndexCreatedTime\"<>\"Items\".\"UpdatedTime\"" }.Join(" or ")), top: siteId > 0 ? 0 : Parameters.BackgroundTask.CreateSearchIndexLot)) .AsEnumerable() .Select(o => new { ReferenceId = o["ReferenceId"].ToLong(), SiteId = o["SiteId"].ToLong(), UpdatedTime = o.Field <DateTime>("UpdatedTime") .ToString("yyyy/M/d H:m:s.fff"), TenantId = o.Int("TenantId"), DeptId = o.Int("DeptId"), UserId = o.Int("UserId") }) .ForEach(data => { var currentContext = context.CreateContext( tenantId: data.TenantId, deptId: data.DeptId, userId: data.UserId); var siteModel = hash.Get(data.SiteId) ?? new SiteModel().Get( context: currentContext, where : Rds.SitesWhere().SiteId(data.SiteId)); if (!hash.ContainsKey(data.SiteId)) { siteModel.SiteSettings = SiteSettingsUtilities.Get( context: currentContext, siteModel: siteModel, referenceId: siteModel.SiteId); hash.Add(data.SiteId, siteModel); } Create( context: currentContext, ss: siteModel.SiteSettings, id: data.ReferenceId, force: true); Repository.ExecuteNonQuery( context: currentContext, statements: Rds.UpdateItems( where : Rds.ItemsWhere() .ReferenceId(data.ReferenceId), param: Rds.ItemsParam() .SearchIndexCreatedTime(raw: "\"UpdatedTime\""), addUpdatorParam: false, addUpdatedTimeParam: false)); }); }
public static ResponseFile Csv(Context context, SiteSettings ss, Export export) { ss.SetExports(context: context); ss.JoinedSsHash.Values.ForEach(currentSs => currentSs .SetChoiceHash(context: context, all: true)); var data = new Dictionary <long, Dictionary <long, Dictionary <int, string> > >(); Dictionary <long, long> keys = null; var keyColumns = KeyColumns(export, ss.SiteId); var view = Views.GetBySession(context: context, ss: ss); switch (ss.ReferenceType) { case "Issues": keys = IssueData( context: context, ss: ss, data: data, where : view.Where( context: context, ss: ss), orderBy: view.OrderBy( context: context, ss: ss) .Issues_UpdatedTime(SqlOrderBy.Types.desc), export: export, keys: keys, keyColumns: keyColumns); break; case "Results": keys = ResultData( context: context, ss: ss, data: data, where : view.Where( context: context, ss: ss), orderBy: view.OrderBy( context: context, ss: ss) .Results_UpdatedTime(SqlOrderBy.Types.desc), export: export, keys: keys, keyColumns: keyColumns); break; } export.Join?.ForEach(link => { var currentSs = ss.JoinedSsHash.Get(link.SiteId); switch (currentSs.ReferenceType) { case "Issues": keys = IssueData( context: context, ss: currentSs, data: data, where : Rds.IssuesWhere().IssueId_In(keys.Values), orderBy: null, export: export, keys: keys, keyColumns: keyColumns); break; case "Results": keys = ResultData( context: context, ss: currentSs, data: data, where : Rds.ResultsWhere().ResultId_In(keys.Values), orderBy: null, export: export, keys: keys, keyColumns: keyColumns); break; } }); var csv = new System.Text.StringBuilder(); if (export.Header == true) { csv.Append(export.Columns.Select(column => "\"" + column.GetLabelText() + "\"").Join(","), "\n"); } data .FirstOrDefault(o => o.Key == ss.SiteId) .Value? .ForEach(dataRow => csv.Append(export.Columns.Select(column => data .Get(column.SiteId)? .Get(dataRow.Key)? .Get(column.Id) ?? string.Empty).Join(",") + "\n")); return(new ResponseFile( fileContent: csv.ToString(), fileDownloadName: FileName( context: context, ss: ss, name: export.Name))); }