public static string ValidateIDs(string[] arrID, bool bQuoted) { if (arrID.Length == 0) { return(String.Empty); } if (arrID.Length > 200) { L10N L10n = HttpContext.Current.Items["L10n"] as L10N; throw(new Exception(L10n.Term(".LBL_TOO_MANY_RECORDS"))); } foreach (string sID in arrID) { Guid gID = Sql.ToGuid(sID); if (Sql.IsEmptyGuid(gID)) { // 05/02/2006 Paul. Provide a more descriptive error message by including the ID. throw(new Exception("Invalid ID: " + sID)); } } string sIDs = String.Empty; if (bQuoted) { sIDs = "'" + String.Join("','", arrID) + "'"; } else { sIDs = String.Join(",", arrID); } return(sIDs); }
public static Stack FilterByACL_Stack(string sMODULE_NAME, string sACCESS_TYPE, string[] arrID, string sTABLE_NAME) { Stack stk = new Stack(); StringBuilder sb = new StringBuilder(); int nACLACCESS = Security.GetUserAccess(sMODULE_NAME, sACCESS_TYPE); if (nACLACCESS >= 0 && arrID.Length > 0) { if (nACLACCESS == ACL_ACCESS.OWNER) { DbProviderFactory dbf = DbProviderFactories.GetFactory(); using (IDbConnection con = dbf.CreateConnection()) { // 09/26/2006 Paul. The connection needed to be opened. con.Open(); string sSQL; sSQL = "select ID " + ControlChars.CrLf + " from vw" + sTABLE_NAME + ControlChars.CrLf + " where 1 = 1 " + ControlChars.CrLf; using (IDbCommand cmd = con.CreateCommand()) { cmd.CommandText = sSQL; Sql.AppendGuids(cmd, arrID, "ID"); Sql.AppendParameter(cmd, Security.USER_ID, "ASSIGNED_USER_ID", false); using (IDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { stk.Push(Sql.ToString(rdr["ID"])); } } } } if (stk.Count == 0) { L10N L10n = HttpContext.Current.Items["L10n"] as L10N; throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } } else { foreach (string sID in arrID) { if (sID.Length > 0) { stk.Push(sID); } } } } return(stk); }
public static string FilterByACL(string sMODULE_NAME, string sACCESS_TYPE, string[] arrID, string sTABLE_NAME) { StringBuilder sb = new StringBuilder(); int nACLACCESS = Security.GetUserAccess(sMODULE_NAME, sACCESS_TYPE); if (nACLACCESS >= 0 && arrID.Length > 0) { if (nACLACCESS == ACL_ACCESS.OWNER) { DbProviderFactory dbf = DbProviderFactories.GetFactory(); using (IDbConnection con = dbf.CreateConnection()) { string sSQL; sSQL = "select ID " + ControlChars.CrLf + " from vw" + sTABLE_NAME + ControlChars.CrLf + " where 1 = 1 " + ControlChars.CrLf; using (IDbCommand cmd = con.CreateCommand()) { cmd.CommandText = sSQL; Sql.AppendGuids(cmd, arrID, "ID"); Sql.AppendParameter(cmd, Security.USER_ID, "ASSIGNED_USER_ID", false); using (IDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow)) { while (rdr.Read()) { if (sb.Length > 0) { sb.Append(","); } sb.Append(Sql.ToString(rdr["ID"])); } } } } if (sb.Length == 0) { L10N L10n = HttpContext.Current.Items["L10n"] as L10N; throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } } else { return(String.Join(",", arrID)); } } return(sb.ToString()); }
public static string TableColumnName(L10N L10n, string sModule, string sDISPLAY_NAME) { // 07/04/2006 Paul. Some columns have global terms. // 06/05/2007 Paul. Add Team global term. if (sDISPLAY_NAME == "DATE_ENTERED" || sDISPLAY_NAME == "DATE_MODIFIED" || sDISPLAY_NAME == "ASSIGNED_TO" || sDISPLAY_NAME == "CREATED_BY" || sDISPLAY_NAME == "MODIFIED_BY" || sDISPLAY_NAME == "TEAM_NAME") { sDISPLAY_NAME = L10n.Term(".LBL_" + sDISPLAY_NAME).Replace(":", ""); } else { // 07/04/2006 Paul. Column names are aliased so that we don't have to redefine terms. sDISPLAY_NAME = L10n.AliasedTerm(sModule + ".LBL_" + sDISPLAY_NAME).Replace(":", ""); } return(sDISPLAY_NAME); }
public get_entry_result get_entry(string session, string module_name, string id, string[] select_fields) { Guid gUSER_ID = GetSessionUserID(session); string sTABLE_NAME = VerifyModuleName(module_name); int nACLACCESS = Security.GetUserAccess(module_name, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } get_entry_result results = new get_entry_result(); DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select *" + ControlChars.CrLf + " from " + sTABLE_NAME + ControlChars.CrLf + " where ID = @ID" + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@ID", id); if ( nACLACCESS == ACL_ACCESS.OWNER ) { // 09/01/2006 Paul. Notes do not have an ASSIGNED_USER_ID. if ( sTABLE_NAME != "NOTES" ) Sql.AppendParameter(cmd, gUSER_ID, "ASSIGNED_USER_ID"); } try { using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { // 02/20/2006 Paul. First initialize the array. results.field_list = new field [select_fields.Length]; results.entry_list = new entry_value[select_fields.Length]; DataRow row = dt.Rows[0]; for ( int i=0; i < select_fields.Length; i++ ) { string sColumnName = select_fields[i]; DataColumn col = dt.Columns[sColumnName]; // 02/20/2006 Paul. Then initialize each element in the array. // varchar, bool, datetime, int, text, blob results.field_list[i] = new field(sColumnName.ToLower(), col.DataType.ToString(), sColumnName, 0); // 02/20/2006 Paul. Then initialize each element in the array. results.entry_list[i] = new entry_value(id, module_name, sColumnName, Sql.ToString(row[sColumnName])); } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed contact_by_email", ex)); } } } return results; }
/// <summary> /// CronDescription /// </summary> public static string CronDescription(L10N L10n, string sCRON) { StringBuilder sb = new StringBuilder(); sCRON = sCRON.Replace(" ", ""); if (sCRON == "*::*::*::*::*") { return(L10n.Term("Schedulers.LBL_OFTEN")); } CultureInfo culture = CultureInfo.CreateSpecificCulture(L10n.NAME); string sCRON_MONTH = "*"; string sCRON_DAYOFMONTH = "*"; string sCRON_DAYOFWEEK = "*"; string sCRON_HOUR = "*"; string sCRON_MINUTE = "*"; string[] arrCRON = sCRON.Replace("::", "|").Split('|'); string[] arrCRON_TEMP = new string[] {}; string[] arrCRON_VALUE = new string[] {}; string[] arrDaySuffixes = new string[32]; int nCRON_VALUE = 0; int nCRON_VALUE_START = 0; int nCRON_VALUE_END = 0; int nON_THE_MINUTE = -1; for (int n = 0; n < arrDaySuffixes.Length; n++) { arrDaySuffixes[n] = "th"; } arrDaySuffixes[0] = ""; arrDaySuffixes[1] = "st"; arrDaySuffixes[2] = "nd"; arrDaySuffixes[3] = "rd"; // minute hour dayOfMonth month dayOfWeek if (arrCRON.Length > 0) { sCRON_MINUTE = arrCRON[0]; } if (arrCRON.Length > 1) { sCRON_HOUR = arrCRON[1]; } if (arrCRON.Length > 2) { sCRON_DAYOFMONTH = arrCRON[2]; } if (arrCRON.Length > 3) { sCRON_MONTH = arrCRON[3]; } if (arrCRON.Length > 4) { sCRON_DAYOFWEEK = arrCRON[4]; } if (sCRON_MINUTE != "*") { arrCRON_TEMP = sCRON_MINUTE.Split(','); // 12/31/2007 Paul. Check for either comma or dash. if (sCRON_MINUTE.Split(",-".ToCharArray()).Length == 1) { nON_THE_MINUTE = Sql.ToInteger(sCRON_MINUTE); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if (nON_THE_MINUTE == 0) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nON_THE_MINUTE.ToString("00")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } } else { for (int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++) { if (arrCRON_TEMP[i].IndexOf('-') >= 0) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if (arrCRON_VALUE.Length >= 2) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if (nCRON_VALUE_START >= 0 && nCRON_VALUE_START <= 23 && nCRON_VALUE_END >= 0 && nCRON_VALUE_END <= 23) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if (nCRON_VALUE_START == 0) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nCRON_VALUE_START.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); sb.Append(nCRON_VALUE_END.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if (nCRON_VALUE >= 0 && nCRON_VALUE <= 23) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if (nCRON_VALUE == 0) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nCRON_VALUE.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } nCronEntries++; } } } } } if (sCRON_HOUR != "*") { if (sb.Length > 0) { sb.Append("; "); } arrCRON_TEMP = sCRON_HOUR.Split(','); for (int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++) { if (arrCRON_TEMP[i].IndexOf('-') >= 0) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if (arrCRON_VALUE.Length >= 2) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if (nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 31 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 31) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(arrCRON_VALUE[0]); if (nON_THE_MINUTE >= 0) { sb.Append(":" + nON_THE_MINUTE.ToString("00")); } sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(arrCRON_VALUE[1]); if (nON_THE_MINUTE >= 0) { sb.Append(":" + nON_THE_MINUTE.ToString("00")); } nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if (nCRON_VALUE >= 1 && nCRON_VALUE <= 31) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(arrCRON_TEMP[i]); if (nON_THE_MINUTE >= 0) { sb.Append(":" + nON_THE_MINUTE.ToString("00")); } nCronEntries++; } } } } if (sCRON_DAYOFMONTH != "*") { if (sb.Length > 0) { sb.Append("; "); } arrCRON_TEMP = sCRON_DAYOFMONTH.Split(','); for (int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++) { if (arrCRON_TEMP[i].IndexOf('-') >= 0) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if (arrCRON_VALUE.Length >= 2) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if (nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 31 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 31) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(nCRON_VALUE_START.ToString() + arrDaySuffixes[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(nCRON_VALUE_END.ToString() + arrDaySuffixes[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if (nCRON_VALUE >= 1 && nCRON_VALUE <= 31) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(nCRON_VALUE.ToString() + arrDaySuffixes[nCRON_VALUE]); nCronEntries++; } } } } if (sCRON_MONTH != "*") { if (sb.Length > 0) { sb.Append("; "); } arrCRON_TEMP = sCRON_MONTH.Split(','); for (int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++) { if (arrCRON_TEMP[i].IndexOf('-') >= 0) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if (arrCRON_VALUE.Length >= 2) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if (nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 12 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 12) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if (nCRON_VALUE >= 1 && nCRON_VALUE <= 12) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE]); nCronEntries++; } } } } if (sCRON_DAYOFWEEK != "*") { if (sb.Length > 0) { sb.Append("; "); } arrCRON_TEMP = sCRON_DAYOFWEEK.Split(','); for (int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++) { if (arrCRON_TEMP[i].IndexOf('-') >= 0) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if (arrCRON_VALUE.Length >= 2) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if (nCRON_VALUE_START >= 0 && nCRON_VALUE_START <= 6 && nCRON_VALUE_END >= 0 && nCRON_VALUE_END <= 6) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if (nCRON_VALUE >= 0 && nCRON_VALUE <= 6) { if (nCronEntries > 0) { sb.Append(L10n.Term("Schedulers.LBL_AND")); } sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE]); nCronEntries++; } } } } return(sb.ToString()); }
public user_detail[] user_list(string user_name, string password) { // 03/12/2007 Paul. If using NTLM, then user_name will be updated with value from Identity object. Guid gUSER_ID = LoginUser(ref user_name, password); if ( !IsAdmin(gUSER_ID) ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } user_detail[] results = new user_detail[0]; DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select * " + ControlChars.CrLf + " from vwSOAP_User_List" + ControlChars.CrLf + " where 1 = 1 " + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; try { using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { // 02/20/2006 Paul. First initialize the array. results = new user_detail[dt.Rows.Count]; for ( int i=0; i < dt.Rows.Count ; i++ ) { // 02/20/2006 Paul. Then initialize each element in the array. results[i] = new user_detail(); results[i].email_address = Sql.ToString(dt.Rows[i]["EMAIL_ADDRESS"]); results[i].user_name = Sql.ToString(dt.Rows[i]["USER_NAME" ]); results[i].first_name = Sql.ToString(dt.Rows[i]["FIRST_NAME" ]); results[i].last_name = Sql.ToString(dt.Rows[i]["LAST_NAME" ]); results[i].department = Sql.ToString(dt.Rows[i]["DEPARTMENT" ]); results[i].id = Sql.ToString(dt.Rows[i]["ID" ]); results[i].title = Sql.ToString(dt.Rows[i]["TITLE" ]); } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed user_list", ex)); } } } return results; }
public string create_opportunity(string user_name, string password, string name, string amount) { // 03/12/2007 Paul. If using NTLM, then user_name will be updated with value from Identity object. Guid gUSER_ID = LoginUser(ref user_name, password); int nACLACCESS = Security.GetUserAccess("Opportunities", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spOPPORTUNITIES_New(ref gID, Guid.Empty, name, Sql.ToDecimal(amount), Guid.Empty, DateTime.MinValue, String.Empty); return "1"; }
public set_entry_result set_note_attachment(string session, note_attachment note) { Guid gUSER_ID = GetSessionUserID(session); Guid gNOTE_ID = Sql.ToGuid(note.id); string sFILENAME = Path.GetFileName (note.filename); string sFILE_EXT = Path.GetExtension(sFILENAME); string sFILE_MIME_TYPE = "application/octet-stream"; int nACLACCESS = Security.GetUserAccess("Notes", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } set_entry_result result = new set_entry_result(); byte[] byData = Convert.FromBase64String(note.file); // 02/20/2006 Paul. Try and reduce the memory requirements by releasing the original data as soon as possible. note.file = null; using ( MemoryStream stm = new System.IO.MemoryStream(byData) ) { DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); Guid gASSIGNED_USER_ID = Guid.Empty; /* // 09/01/2006 Paul. Notes do not have an ASSIGNED_USER_ID. string sSQL = String.Empty; sSQL = "select * " + ControlChars.CrLf + " from vwNOTES_Edit" + ControlChars.CrLf + " where ID = @ID " + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@ID", gNOTE_ID); using ( IDataReader rdr = cmd.ExecuteReader() ) { if ( rdr.Read() ) { gASSIGNED_USER_ID = Sql.ToGuid(rdr["ASSIGNED_USER_ID"]); } } } */ if ( nACLACCESS != ACL_ACCESS.OWNER || (nACLACCESS == ACL_ACCESS.OWNER && gASSIGNED_USER_ID == gUSER_ID) ) { using ( IDbTransaction trn = con.BeginTransaction() ) { try { Guid gAttachmentID = Guid.Empty; SqlProcs.spNOTE_ATTACHMENTS_Insert(ref gAttachmentID, gNOTE_ID, note.filename, sFILENAME, sFILE_EXT, sFILE_MIME_TYPE, trn); SplendidCRM.Notes.EditView.LoadFile(gAttachmentID, stm, trn); trn.Commit(); } catch(Exception ex) { trn.Rollback(); SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw ( new Exception(ex.Message) ); } } } } } byData = null; return result; }
public set_relationship_list_result set_relationships(string session, set_relationship_value[] set_relationship_list) { Guid gUSER_ID = GetSessionUserID(session); set_relationship_list_result results = new set_relationship_list_result(); results.created = 0; results.failed = 0; for ( int i=0; i < set_relationship_list.Length; i ++ ) { int nACLACCESS = Security.GetUserAccess(set_relationship_list[i].module1, "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } SetRelationship(set_relationship_list[i].module1, set_relationship_list[i].module1_id, set_relationship_list[i].module2, set_relationship_list[i].module2_id); results.created++ ; } return results; }
public string create_account(string user_name, string password, string name, string phone, string website) { Guid gUSER_ID = LoginUser(user_name, password); int nACLACCESS = Security.GetUserAccess("Accounts", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spACCOUNTS_New(ref gID, name, phone, website); return "1"; }
public string create_account(string user_name, string password, string name, string phone, string website) { // 03/12/2007 Paul. If using NTLM, then user_name will be updated with value from Identity object. Guid gUSER_ID = LoginUser(ref user_name, password); int nACLACCESS = Security.GetUserAccess("Accounts", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spACCOUNTS_New(ref gID, name, phone, website); return "1"; }
public static void AppendDetailViewFields(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command, bool bLayoutMode) { HtmlTableRow tr = null; // 11/28/2005 Paul. Start row index using the existing count so that headers can be specified. int nRowIndex = tbl.Rows.Count - 1; int nColIndex = 0; // 01/07/2006 Paul. Show table borders in layout mode. This will help distinguish blank lines from wrapped lines. if ( bLayoutMode ) tbl.Border = 1; HttpSessionState Session = HttpContext.Current.Session; foreach(DataRowView row in dvFields) { Guid gID = Sql.ToGuid (row["ID" ]); int nFIELD_INDEX = Sql.ToInteger(row["FIELD_INDEX"]); string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_LABEL = Sql.ToString (row["DATA_LABEL" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDATA_FORMAT = Sql.ToString (row["DATA_FORMAT"]); string sLIST_NAME = Sql.ToString (row["LIST_NAME" ]); int nCOLSPAN = Sql.ToInteger(row["COLSPAN" ]); string sLABEL_WIDTH = Sql.ToString (row["LABEL_WIDTH"]); string sFIELD_WIDTH = Sql.ToString (row["FIELD_WIDTH"]); if ( nColIndex == 0 ) { // 11/25/2005 Paul. Don't pre-create a row as we don't want a blank // row at the bottom. Add rows just before they are needed. nRowIndex++; tr = new HtmlTableRow(); tbl.Rows.Insert(nRowIndex, tr); } if ( bLayoutMode ) { HtmlTableCell tdAction = new HtmlTableCell(); tr.Cells.Add(tdAction); tdAction.Attributes.Add("class", "tabDetailViewDL"); tdAction.NoWrap = true; Literal litIndex = new Literal(); tdAction.Controls.Add(litIndex); litIndex.Text = " " + nFIELD_INDEX.ToString() + " "; ImageButton btnMoveUp = CreateLayoutImageButton(gID, "Layout.MoveUp" , nFIELD_INDEX, L10n.Term(".LNK_UP" ), Sql.ToString(Session["themeURL"]) + "images/uparrow_inline.gif" , Page_Command); ImageButton btnMoveDown = CreateLayoutImageButton(gID, "Layout.MoveDown", nFIELD_INDEX, L10n.Term(".LNK_DOWN" ), Sql.ToString(Session["themeURL"]) + "images/downarrow_inline.gif", Page_Command); ImageButton btnInsert = CreateLayoutImageButton(gID, "Layout.Insert" , nFIELD_INDEX, L10n.Term(".LNK_INS" ), Sql.ToString(Session["themeURL"]) + "images/plus_inline.gif" , Page_Command); ImageButton btnEdit = CreateLayoutImageButton(gID, "Layout.Edit" , nFIELD_INDEX, L10n.Term(".LNK_EDIT" ), Sql.ToString(Session["themeURL"]) + "images/edit_inline.gif" , Page_Command); ImageButton btnDelete = CreateLayoutImageButton(gID, "Layout.Delete" , nFIELD_INDEX, L10n.Term(".LNK_DELETE"), Sql.ToString(Session["themeURL"]) + "images/delete_inline.gif" , Page_Command); tdAction.Controls.Add(btnMoveUp ); tdAction.Controls.Add(btnMoveDown); tdAction.Controls.Add(btnInsert ); tdAction.Controls.Add(btnEdit ); tdAction.Controls.Add(btnDelete ); } HtmlTableCell tdLabel = new HtmlTableCell(); HtmlTableCell tdField = new HtmlTableCell(); tr.Cells.Add(tdLabel); tr.Cells.Add(tdField); if ( nCOLSPAN > 0 ) { tdField.ColSpan = nCOLSPAN; if ( bLayoutMode ) tdField.ColSpan++; } tdLabel.Attributes.Add("class", "tabDetailViewDL"); tdLabel.VAlign = "top"; tdLabel.Width = sLABEL_WIDTH; tdField.Attributes.Add("class", "tabDetailViewDF"); tdField.VAlign = "top"; // 11/28/2005 Paul. Don't use the field width if COLSPAN is specified as we want it to take the rest of the table. The label width will be sufficient. if ( nCOLSPAN == 0 ) tdField.Width = sFIELD_WIDTH; Literal litLabel = new Literal(); HyperLink lnkField = null; tdLabel.Controls.Add(litLabel); //litLabel.Text = nFIELD_INDEX.ToString() + " (" + nRowIndex.ToString() + "," + nColIndex.ToString() + ")"; try { if ( bLayoutMode ) litLabel.Text = sDATA_LABEL; else if ( sDATA_LABEL.IndexOf(".") >= 0 ) litLabel.Text = L10n.Term(sDATA_LABEL); else if ( !Sql.IsEmptyString(sDATA_LABEL) && rdr != null ) litLabel.Text = Sql.ToString(rdr[sDATA_LABEL]) + L10n.Term("Calls.LBL_COLON"); // 07/15/2006 Paul. Always put something for the label so that table borders will look right. else litLabel.Text = " "; } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); litLabel.Text = ex.Message; } if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) { Literal litField = new Literal(); tdField.Controls.Add(litField); if ( bLayoutMode ) { litLabel.Text = "*** BLANK ***"; litField.Text = "*** BLANK ***"; } else { litField.Text = " "; } } else if ( String.Compare(sFIELD_TYPE, "Line", true) == 0 ) { if ( bLayoutMode ) { Literal litField = new Literal(); tdField.Controls.Add(litField); litLabel.Text = "*** LINE ***"; litField.Text = "*** LINE ***"; } else { tr.Cells.Clear(); } } else if ( String.Compare(sFIELD_TYPE, "String", true) == 0 ) { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/06/2005 Paul. Wrap all string fields in a SPAN tag to simplify regression testing. HtmlGenericControl spnField = new HtmlGenericControl("span"); tdField.Controls.Add(spnField); spnField.ID = sDATA_FIELD; Literal litField = new Literal(); spnField.Controls.Add(litField); try { string[] arrLIST_NAME = sLIST_NAME .Split(' '); string[] arrDATA_FIELD = sDATA_FIELD.Split(' '); object[] objDATA_FIELD = new object[arrDATA_FIELD.Length]; for ( int i=0 ; i < arrDATA_FIELD.Length; i++ ) { if ( arrDATA_FIELD[i].IndexOf(".") >= 0 ) { objDATA_FIELD[i] = L10n.Term(arrDATA_FIELD[i]); } else if ( !Sql.IsEmptyString(sLIST_NAME) ) { if ( arrLIST_NAME.Length == arrDATA_FIELD.Length ) { if ( rdr != null ) objDATA_FIELD[i] = L10n.Term("." + arrLIST_NAME[i] + ".", rdr[arrDATA_FIELD[i]]); else objDATA_FIELD[i] = String.Empty; } } else if ( !Sql.IsEmptyString(arrDATA_FIELD[i]) ) { if ( rdr != null && rdr[arrDATA_FIELD[i]] != DBNull.Value) { // 12/05/2005 Paul. If the data is a DateTime field, then make sure to perform the timezone conversion. if ( rdr[arrDATA_FIELD[i]].GetType() == Type.GetType("System.DateTime") ) objDATA_FIELD[i] = T10n.FromServerTime(rdr[arrDATA_FIELD[i]]); else objDATA_FIELD[i] = rdr[arrDATA_FIELD[i]]; } else objDATA_FIELD[i] = String.Empty; } } if ( rdr != null ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) { for ( int i=0; i < arrDATA_FIELD.Length; i++ ) arrDATA_FIELD[i] = Sql.ToString(objDATA_FIELD[i]); litField.Text = String.Join(" ", arrDATA_FIELD); } else litField.Text = String.Format(sDATA_FORMAT, objDATA_FIELD); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); litField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "CheckBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { CheckBox chkField = new CheckBox(); tdField.Controls.Add(chkField); chkField.Enabled = false ; chkField.CssClass = "checkbox"; // 03/16/2006 Paul. Give the checkbox a name so that it can be validated with SplendidTest. chkField.ID = sDATA_FIELD; try { if ( rdr != null ) chkField.Checked = Sql.ToBoolean(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "Button", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Button btnField = new Button(); tdField.Controls.Add(btnField); btnField.CssClass = "button"; // 03/16/2006 Paul. Give the button a name so that it can be validated with SplendidTest. btnField.ID = sDATA_FIELD; if ( Page_Command != null ) { btnField.Command += Page_Command; btnField.CommandName = sDATA_FORMAT ; } try { if ( bLayoutMode ) { btnField.Text = sDATA_FIELD; btnField.Enabled = false ; } else if ( sDATA_FIELD.IndexOf(".") >= 0 ) { btnField.Text = L10n.Term(sDATA_FIELD); } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { btnField.Text = Sql.ToString(rdr[sDATA_FIELD]); } btnField.Attributes.Add("title", btnField.Text); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); btnField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "Textbox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { TextBox txtField = new TextBox(); tdField.Controls.Add(txtField); txtField.ReadOnly = true; txtField.TextMode = TextBoxMode.MultiLine; // 03/16/2006 Paul. Give the textbox a name so that it can be validated with SplendidTest. txtField.ID = sDATA_FIELD; try { string[] arrDATA_FORMAT = sDATA_FORMAT.Split(','); if ( arrDATA_FORMAT.Length == 2 ) { txtField.Rows = Sql.ToInteger(arrDATA_FORMAT[0]); txtField.Columns = Sql.ToInteger(arrDATA_FORMAT[1]); } if ( bLayoutMode ) { txtField.Text = sDATA_FIELD; } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { txtField.Text = Sql.ToString(rdr[sDATA_FIELD]); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); txtField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "HyperLink", true) == 0 ) { string sURL_FIELD = Sql.ToString (row["URL_FIELD"]); if ( !Sql.IsEmptyString(sDATA_FIELD) && !Sql.IsEmptyString(sURL_FIELD) ) { string sURL_FORMAT = Sql.ToString (row["URL_FORMAT"]); string sURL_TARGET = Sql.ToString (row["URL_TARGET"]); lnkField = new HyperLink(); tdField.Controls.Add(lnkField); lnkField.Target = sURL_TARGET; lnkField.CssClass = "tabDetailViewDFLink"; // 03/16/2006 Paul. Give the hyperlink a name so that it can be validated with SplendidTest. lnkField.ID = sDATA_FIELD; try { if ( bLayoutMode ) { lnkField.Text = sDATA_FIELD; lnkField.Enabled = false ; } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) lnkField.Text = Sql.ToString(rdr[sDATA_FIELD]); else lnkField.Text = String.Format(sDATA_FORMAT, Sql.ToString(rdr[sDATA_FIELD])); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); lnkField.Text = ex.Message; } try { if ( bLayoutMode ) { lnkField.NavigateUrl = sURL_FIELD; } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sURL_FIELD]) ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) lnkField.NavigateUrl = Sql.ToString(rdr[sURL_FIELD]); else lnkField.NavigateUrl = String.Format(sURL_FORMAT, Sql.ToString(rdr[sURL_FIELD])); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); lnkField.NavigateUrl = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "Image", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Image imgField = new Image(); // 04/13/2006 Paul. Give the image a name so that it can be validated with SplendidTest. imgField.ID = sDATA_FIELD; try { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { imgField.ImageUrl = "~/Images/Image.aspx?ID=" + Sql.ToString(rdr[sDATA_FIELD]); // 04/13/2006 Paul. Only add the image if it exists. tdField.Controls.Add(imgField); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); lnkField.Text = ex.Message; } } } else { Literal litField = new Literal(); tdField.Controls.Add(litField); litField.Text = "Unknown field type " + sFIELD_TYPE; // 01/07/2006 Paul. Don't report the error in layout mode. if ( !bLayoutMode ) SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "Unknown field type " + sFIELD_TYPE); } if ( nCOLSPAN > 0 ) nColIndex = 0; else { nColIndex++; if ( nColIndex > 1 ) nColIndex = 0; } } }
public static string FillTrackers(string sBODY_HTML, DataTable dtTrackers, string sSiteURL, Guid gTARGET_TRACKER_KEY, L10N L10n) { bool bHAS_OPTOUT_LINKS = false; foreach ( DataRow row in dtTrackers.Rows ) { Guid gTRACKER_ID = Sql.ToGuid (row["ID" ]); string sTRACKER_NAME = Sql.ToString (row["TRACKER_NAME"]); string sTRACKER_URL = Sql.ToString (row["TRACKER_URL" ]); bool bIS_OPTOUT = Sql.ToBoolean(row["IS_OPTOUT" ]); string sTrackerPath = String.Empty; if ( bIS_OPTOUT ) { bHAS_OPTOUT_LINKS = true; sTrackerPath += "RemoveMe.aspx?identifier=" + gTARGET_TRACKER_KEY.ToString(); } else { sTrackerPath += "campaign_trackerv2.aspx?identifier=" + gTARGET_TRACKER_KEY.ToString(); sTrackerPath += "&track=" + gTRACKER_ID.ToString(); } sBODY_HTML = sBODY_HTML.Replace("{" + sTRACKER_NAME + "}", sSiteURL + sTrackerPath); } if ( !bHAS_OPTOUT_LINKS ) sBODY_HTML += "<br><font size='2'>" + HttpUtility.HtmlEncode(L10n.Term("EmailMan.TXT_REMOVE_ME")) + "<a href='" + sSiteURL + "RemoveMe.aspx?identifier=" + gTARGET_TRACKER_KEY.ToString() + "'>" + HttpUtility.HtmlEncode(L10n.Term("EmailMan.TXT_REMOVE_ME_CLICK")) + "</a></font>"; sBODY_HTML += "<br><img height='1' width='1' src='" + sSiteURL + "image.aspx?identifier=" + gTARGET_TRACKER_KEY.ToString() + "'>"; return sBODY_HTML; }
/* // 01/16/2006 Paul. If we disable the validator, it will hide it's error message. // The solution may be to always require server-side validation (disable EnableClientScript). public static void DisableValidationEditViewFields(string sEDIT_NAME, Control parent) { DataTable dtFields = SplendidCache.EditViewFields(sEDIT_NAME); DataView dvFields = new DataView(dtFields); dvFields.RowFilter = "UI_REQUIRED = 1"; foreach(DataRowView row in dvFields) { string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); bool bUI_REQUIRED = Sql.ToBoolean(row["UI_REQUIRED" ]); if ( bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { if ( String.Compare(sFIELD_TYPE, "DatePicker", true) == 0 ) { DatePicker ctlDate = parent.FindControl(sDATA_FIELD) as DatePicker; if ( ctlDate != null ) ctlDate.DisableValidation(); } else if ( String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0 ) { DateTimePicker ctlDate = parent.FindControl(sDATA_FIELD) as DateTimePicker; if ( ctlDate != null ) ctlDate.DisableValidation(); } else if ( String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0 ) { DateTimeEdit ctlDate = parent.FindControl(sDATA_FIELD) as DateTimeEdit; if ( ctlDate != null ) ctlDate.DisableValidation(); } else { BaseValidator req = parent.FindControl(sDATA_FIELD + "_REQUIRED") as BaseValidator; if ( req != null ) { // 01/16/2006 Paul. Enable validator before validating page. // If we leave the validator control enabled, then it may block an alternate action, like Cancel. req.Enabled = false; } } } } } */ public static void AppendEditViewFields(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command, bool bLayoutMode) { HtmlTableRow tr = null; // 11/28/2005 Paul. Start row index using the existing count so that headers can be specified. int nRowIndex = tbl.Rows.Count - 1; int nColIndex = 0; HtmlTableCell tdLabel = null; HtmlTableCell tdField = null; // 01/07/2006 Paul. Show table borders in layout mode. This will help distinguish blank lines from wrapped lines. if ( bLayoutMode ) tbl.Border = 1; HttpSessionState Session = HttpContext.Current.Session; foreach(DataRowView row in dvFields) { Guid gID = Sql.ToGuid (row["ID" ]); int nFIELD_INDEX = Sql.ToInteger(row["FIELD_INDEX" ]); string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_LABEL = Sql.ToString (row["DATA_LABEL" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDISPLAY_FIELD = Sql.ToString (row["DISPLAY_FIELD" ]); string sCACHE_NAME = Sql.ToString (row["CACHE_NAME" ]); bool bDATA_REQUIRED = Sql.ToBoolean(row["DATA_REQUIRED" ]); bool bUI_REQUIRED = Sql.ToBoolean(row["UI_REQUIRED" ]); string sONCLICK_SCRIPT = Sql.ToString (row["ONCLICK_SCRIPT" ]); string sFORMAT_SCRIPT = Sql.ToString (row["FORMAT_SCRIPT" ]); short nFORMAT_TAB_INDEX = Sql.ToShort (row["FORMAT_TAB_INDEX" ]); int nFORMAT_MAX_LENGTH = Sql.ToInteger(row["FORMAT_MAX_LENGTH"]); int nFORMAT_SIZE = Sql.ToInteger(row["FORMAT_SIZE" ]); int nFORMAT_ROWS = Sql.ToInteger(row["FORMAT_ROWS" ]); int nFORMAT_COLUMNS = Sql.ToInteger(row["FORMAT_COLUMNS" ]); int nCOLSPAN = Sql.ToInteger(row["COLSPAN" ]); int nROWSPAN = Sql.ToInteger(row["ROWSPAN" ]); string sLABEL_WIDTH = Sql.ToString (row["LABEL_WIDTH" ]); string sFIELD_WIDTH = Sql.ToString (row["FIELD_WIDTH" ]); // 12/02/2005 Paul. COLSPAN == -1 means that a new column should not be created. if ( (nCOLSPAN >= 0 && nColIndex == 0) || tr == null ) { // 11/25/2005 Paul. Don't pre-create a row as we don't want a blank // row at the bottom. Add rows just before they are needed. nRowIndex++; tr = new HtmlTableRow(); tbl.Rows.Insert(nRowIndex, tr); } if ( bLayoutMode ) { HtmlTableCell tdAction = new HtmlTableCell(); tr.Cells.Add(tdAction); tdAction.Attributes.Add("class", "tabDetailViewDL"); tdAction.NoWrap = true; Literal litIndex = new Literal(); tdAction.Controls.Add(litIndex); litIndex.Text = " " + nFIELD_INDEX.ToString() + " "; ImageButton btnMoveUp = CreateLayoutImageButton(gID, "Layout.MoveUp" , nFIELD_INDEX, L10n.Term(".LNK_UP" ), Sql.ToString(Session["themeURL"]) + "images/uparrow_inline.gif" , Page_Command); ImageButton btnMoveDown = CreateLayoutImageButton(gID, "Layout.MoveDown", nFIELD_INDEX, L10n.Term(".LNK_DOWN" ), Sql.ToString(Session["themeURL"]) + "images/downarrow_inline.gif", Page_Command); ImageButton btnInsert = CreateLayoutImageButton(gID, "Layout.Insert" , nFIELD_INDEX, L10n.Term(".LNK_INS" ), Sql.ToString(Session["themeURL"]) + "images/plus_inline.gif" , Page_Command); ImageButton btnEdit = CreateLayoutImageButton(gID, "Layout.Edit" , nFIELD_INDEX, L10n.Term(".LNK_EDIT" ), Sql.ToString(Session["themeURL"]) + "images/edit_inline.gif" , Page_Command); ImageButton btnDelete = CreateLayoutImageButton(gID, "Layout.Delete" , nFIELD_INDEX, L10n.Term(".LNK_DELETE"), Sql.ToString(Session["themeURL"]) + "images/delete_inline.gif" , Page_Command); tdAction.Controls.Add(btnMoveUp ); tdAction.Controls.Add(btnMoveDown); tdAction.Controls.Add(btnInsert ); tdAction.Controls.Add(btnEdit ); tdAction.Controls.Add(btnDelete ); } if ( nCOLSPAN >= 0 || tdLabel == null || tdField == null ) { tdLabel = new HtmlTableCell(); tdField = new HtmlTableCell(); tr.Cells.Add(tdLabel); tr.Cells.Add(tdField); if ( nCOLSPAN > 0 ) { tdField.ColSpan = nCOLSPAN; if ( bLayoutMode ) tdField.ColSpan++; } tdLabel.Attributes.Add("class", "dataLabel"); tdLabel.VAlign = "top"; tdLabel.Width = sLABEL_WIDTH; tdField.Attributes.Add("class", "dataField"); tdField.VAlign = "top"; // 11/28/2005 Paul. Don't use the field width if COLSPAN is specified as we want it to take the rest of the table. The label width will be sufficient. if ( nCOLSPAN == 0 ) tdField.Width = sFIELD_WIDTH; Literal litLabel = new Literal(); tdLabel.Controls.Add(litLabel); //litLabel.Text = nFIELD_INDEX.ToString() + " (" + nRowIndex.ToString() + "," + nColIndex.ToString() + ")"; try { if ( bLayoutMode ) { if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) litLabel.Text = "*** BLANK ***"; else litLabel.Text = sDATA_LABEL; } else if ( sDATA_LABEL.IndexOf(".") >= 0 ) litLabel.Text = L10n.Term(sDATA_LABEL); else if ( !Sql.IsEmptyString(sDATA_LABEL) && rdr != null ) litLabel.Text = Sql.ToString(rdr[sDATA_LABEL]) + L10n.Term("Calls.LBL_COLON"); // 07/15/2006 Paul. Always put something for the label so that table borders will look right. else litLabel.Text = " "; } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); litLabel.Text = ex.Message; } if ( !bLayoutMode && bUI_REQUIRED ) { Label lblRequired = new Label(); tdLabel.Controls.Add(lblRequired); lblRequired.CssClass = "required"; lblRequired.Text = L10n.Term(".LBL_REQUIRED_SYMBOL"); } } if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) { Literal litField = new Literal(); tdField.Controls.Add(litField); if ( bLayoutMode ) litField.Text = "*** BLANK ***"; else litField.Text = " "; } else if ( String.Compare(sFIELD_TYPE, "Label", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Literal litField = new Literal(); tdField.Controls.Add(litField); // 07/25/2006 Paul. Align label values to the middle so the line-up with the label. tdField.VAlign = "middle"; // 07/24/2006 Paul. Set the ID so that the literal control can be accessed. litField.ID = sDATA_FIELD; try { if ( bLayoutMode ) litField.Text = sDATA_FIELD; else if ( sDATA_FIELD.IndexOf(".") >= 0 ) litField.Text = L10n.Term(sDATA_FIELD); else if ( rdr != null ) litField.Text = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); litField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "ListBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { DropDownList lstField = new DropDownList(); tdField.Controls.Add(lstField); lstField.ID = sDATA_FIELD; lstField.TabIndex = nFORMAT_TAB_INDEX; try { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/04/2005 Paul. Don't populate list if this is a post back. if ( !Sql.IsEmptyString(sCACHE_NAME) && (bLayoutMode || !tbl.Page.IsPostBack) ) { switch ( sCACHE_NAME ) { case "AssignedUser": lstField.DataValueField = "ID" ; lstField.DataTextField = "USER_NAME"; lstField.DataSource = SplendidCache.AssignedUser(); break; case "Currencies": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME_SYMBOL"; lstField.DataSource = SplendidCache.Currencies(); break; case "Release": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.Release(); break; case "Manufacturers": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.Manufacturers(); break; case "Shippers": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.Shippers(); break; case "ProductTypes": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.ProductTypes(); break; case "ProductCategories": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.ProductCategories(); break; case "ContractTypes": lstField.DataValueField = "ID" ; lstField.DataTextField = "NAME"; lstField.DataSource = SplendidCache.ContractTypes(); break; default: lstField.DataValueField = "NAME" ; lstField.DataTextField = "DISPLAY_NAME"; lstField.DataSource = SplendidCache.List(sCACHE_NAME); break; } lstField.DataBind(); // 08/08/2006 Paul. Allow onchange code to be stored in the database. // ListBoxes do not have a useful onclick event, so there should be no problem overloading this field. if ( !Sql.IsEmptyString(sONCLICK_SCRIPT) ) lstField.Attributes.Add("onchange" , sONCLICK_SCRIPT); // 02/21/2006 Paul. Move the NONE item inside the !IsPostBack code. if ( !bUI_REQUIRED ) lstField.Items.Insert(0, new ListItem(L10n.Term(".LBL_NONE"), "")); } if ( rdr != null ) { try { // 02/21/2006 Paul. All the DropDownLists in the Calls and Meetings edit views were not getting set. // The problem was a Page.DataBind in the SchedulingGrid and in the InviteesView. Both binds needed to be removed. lstField.SelectedValue = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } } // 12/04/2005 Paul. Assigned To field will always default to the current user. else if ( rdr == null && !tbl.Page.IsPostBack && sCACHE_NAME == "AssignedUser") { try { lstField.SelectedValue = Security.USER_ID.ToString(); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "CheckBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { CheckBox chkField = new CheckBox(); tdField.Controls.Add(chkField); chkField.ID = sDATA_FIELD; chkField.CssClass = "checkbox"; chkField.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) chkField.Checked = Sql.ToBoolean(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); chkField.Enabled = false ; } } } else if ( String.Compare(sFIELD_TYPE, "ChangeButton", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/04/2005 Paul. If the label is PARENT_TYPE, then change the label to a DropDownList. if ( sDATA_LABEL == "PARENT_TYPE" ) { tdLabel.Controls.Clear(); DropDownList lstField = new DropDownList(); tdLabel.Controls.Add(lstField); lstField.ID = sDATA_LABEL; lstField.TabIndex = nFORMAT_TAB_INDEX; lstField.Attributes.Add("onChange", "ChangeParentType();"); if ( bLayoutMode || !tbl.Page.IsPostBack ) { // 07/29/2005 Paul. SugarCRM 3.0 does not allow the NONE option. lstField.DataValueField = "NAME" ; lstField.DataTextField = "DISPLAY_NAME"; lstField.DataSource = SplendidCache.List("record_type_display"); lstField.DataBind(); if ( rdr != null ) { try { lstField.SelectedValue = Sql.ToString(rdr[sDATA_LABEL]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } } } } TextBox txtNAME = new TextBox(); tdField.Controls.Add(txtNAME); txtNAME.ID = sDISPLAY_FIELD; txtNAME.ReadOnly = true; txtNAME.TabIndex = nFORMAT_TAB_INDEX; try { if ( bLayoutMode ) { txtNAME.Text = sDISPLAY_FIELD; txtNAME.Enabled = false ; } else if ( !Sql.IsEmptyString(sDISPLAY_FIELD) && rdr != null ) txtNAME.Text = Sql.ToString(rdr[sDISPLAY_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); txtNAME.Text = ex.Message; } HtmlInputHidden hidID = new HtmlInputHidden(); tdField.Controls.Add(hidID); hidID.ID = sDATA_FIELD; try { if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) hidID.Value = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); txtNAME.Text = ex.Message; } Literal litNBSP = new Literal(); tdField.Controls.Add(litNBSP); litNBSP.Text = " "; HtmlInputButton btnChange = new HtmlInputButton("button"); tdField.Controls.Add(btnChange); // 05/07/2006 Paul. Specify a name for the check button so that it can be referenced by SplendidTest. btnChange.ID = sDATA_FIELD + "_btnChange"; btnChange.Attributes.Add("class", "button"); if ( !Sql.IsEmptyString(sONCLICK_SCRIPT) ) btnChange.Attributes.Add("onclick" , sONCLICK_SCRIPT); btnChange.Attributes.Add("title" , L10n.Term(".LBL_CHANGE_BUTTON_TITLE")); // 07/31/2006 Paul. Stop using VisualBasic library to increase compatibility with Mono. btnChange.Attributes.Add("accessKey", L10n.Term(".LBL_CHANGE_BUTTON_KEY").Substring(0, 1)); btnChange.Value = L10n.Term(".LBL_CHANGE_BUTTON_LABEL"); if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { RequiredFieldValidatorForHiddenInputs reqID = new RequiredFieldValidatorForHiddenInputs(); reqID.ID = sDATA_FIELD + "_REQUIRED"; reqID.ControlToValidate = hidID.ID; reqID.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqID.CssClass = "required"; reqID.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqID.EnableClientScript = false; reqID.Enabled = false; tdField.Controls.Add(reqID); } } } else if ( String.Compare(sFIELD_TYPE, "TextBox", true) == 0 || String.Compare(sFIELD_TYPE, "Password", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { TextBox txtField = new TextBox(); tdField.Controls.Add(txtField); txtField.ID = sDATA_FIELD; txtField.TabIndex = nFORMAT_TAB_INDEX; try { if ( nFORMAT_ROWS > 0 && nFORMAT_COLUMNS > 0 ) { txtField.Rows = nFORMAT_ROWS ; txtField.Columns = nFORMAT_COLUMNS; txtField.TextMode = TextBoxMode.MultiLine; } else { txtField.MaxLength = nFORMAT_MAX_LENGTH ; txtField.Attributes.Add("size", nFORMAT_SIZE.ToString()); txtField.TextMode = TextBoxMode.SingleLine; } if ( bLayoutMode ) { txtField.Text = sDATA_FIELD; txtField.ReadOnly = true ; } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { int nOrdinal = rdr.GetOrdinal(sDATA_FIELD); string sTypeName = rdr.GetDataTypeName(nOrdinal); // 03/04/2006 Paul. Display currency in the proper format. // Only SQL Server is likely to return the money type, so also include the decimal type. if ( sTypeName == "money" || rdr[sDATA_FIELD].GetType() == typeof(System.Decimal) ) txtField.Text = Sql.ToDecimal(rdr[sDATA_FIELD]).ToString("#,##0.00"); else txtField.Text = Sql.ToString(rdr[sDATA_FIELD]); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); txtField.Text = ex.Message; } if ( String.Compare(sFIELD_TYPE, "Password", true) == 0 ) txtField.TextMode = TextBoxMode.Password; if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { RequiredFieldValidator reqNAME = new RequiredFieldValidator(); reqNAME.ID = sDATA_FIELD + "_REQUIRED"; reqNAME.ControlToValidate = txtField.ID; reqNAME.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqNAME.CssClass = "required"; reqNAME.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqNAME.EnableClientScript = false; reqNAME.Enabled = false; tdField.Controls.Add(reqNAME); } } } else if ( String.Compare(sFIELD_TYPE, "DatePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DatePicker ctlDate = tbl.Page.LoadControl("~/_controls/DatePicker.ascx") as DatePicker; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } // 01/16/2006 Paul. We validate elsewhere. /* if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { ctlDate.Required = true; } */ if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DateTimePicker ctlDate = tbl.Page.LoadControl("~/_controls/DateTimePicker.ascx") as DateTimePicker; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DateTimeEdit ctlDate = tbl.Page.LoadControl("~/_controls/DateTimeEdit.ascx") as DateTimeEdit; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); } if ( !bLayoutMode && bUI_REQUIRED ) { ctlDate.EnableNone = false; } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "File", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { HtmlInputFile ctlField = new HtmlInputFile(); tdField.Controls.Add(ctlField); ctlField.ID = sDATA_FIELD; ctlField.MaxLength = nFORMAT_MAX_LENGTH; ctlField.Size = nFORMAT_SIZE; ctlField.Attributes.Add("TabIndex", nFORMAT_TAB_INDEX.ToString()); if ( !bLayoutMode && bUI_REQUIRED ) { RequiredFieldValidator reqNAME = new RequiredFieldValidator(); reqNAME.ID = sDATA_FIELD + "_REQUIRED"; reqNAME.ControlToValidate = ctlField.ID; reqNAME.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqNAME.CssClass = "required"; reqNAME.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqNAME.EnableClientScript = false; reqNAME.Enabled = false; tdField.Controls.Add(reqNAME); } } } else if ( String.Compare(sFIELD_TYPE, "Image", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { HtmlInputHidden ctlHidden = new HtmlInputHidden(); if ( !bLayoutMode ) { tdField.Controls.Add(ctlHidden); ctlHidden.ID = sDATA_FIELD; HtmlInputFile ctlField = new HtmlInputFile(); tdField.Controls.Add(ctlField); // 04/17/2006 Paul. The image needs to reference the file control. ctlField.ID = sDATA_FIELD + "_File"; Literal litBR = new Literal(); litBR.Text = "<br />"; tdField.Controls.Add(litBR); } Image imgField = new Image(); // 04/13/2006 Paul. Give the image a name so that it can be validated with SplendidTest. imgField.ID = "img" + sDATA_FIELD; try { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { ctlHidden.Value = Sql.ToString(rdr[sDATA_FIELD]); imgField.ImageUrl = "~/Images/Image.aspx?ID=" + ctlHidden.Value; // 04/13/2006 Paul. Only add the image if it exists. tdField.Controls.Add(imgField); // 04/17/2006 Paul. Provide a clear button. Literal litClear = new Literal(); litClear.Text = "<br /><input type=\"button\" class=\"button\" onclick=\"form." + ctlHidden.ClientID + ".value='';form." + imgField.ClientID + ".src='';" + "\" value='" + " " + L10n.Term(".LBL_CLEAR_BUTTON_LABEL" ) + " " + "' title='" + L10n.Term(".LBL_CLEAR_BUTTON_TITLE" ) + "' />"; tdField.Controls.Add(litClear); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex.Message); Literal litField = new Literal(); litField.Text = ex.Message; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "AddressButtons", true) == 0 ) { tr.Cells.Remove(tdField); tdLabel.Width = "10%"; tdLabel.RowSpan = nROWSPAN; tdLabel.VAlign = "middle"; tdLabel.Align = "center"; tdLabel.Attributes.Remove("class"); tdLabel.Attributes.Add("class", "tabFormAddDel"); HtmlInputButton btnCopyRight = new HtmlInputButton("button"); Literal litSpacer = new Literal(); HtmlInputButton btnCopyLeft = new HtmlInputButton("button"); tdLabel.Controls.Add(btnCopyRight); tdLabel.Controls.Add(litSpacer ); tdLabel.Controls.Add(btnCopyLeft ); btnCopyRight.Attributes.Add("title" , L10n.Term("Accounts.NTC_COPY_BILLING_ADDRESS" )); btnCopyRight.Attributes.Add("onclick", "return copyAddressRight()"); btnCopyRight.Value = ">>"; litSpacer.Text = "<br><br>"; btnCopyLeft .Attributes.Add("title" , L10n.Term("Accounts.NTC_COPY_SHIPPING_ADDRESS" )); btnCopyLeft .Attributes.Add("onclick", "return copyAddressLeft()"); btnCopyLeft .Value = "<<"; nColIndex = 0; } else { Literal litField = new Literal(); tdField.Controls.Add(litField); litField.Text = "Unknown field type " + sFIELD_TYPE; SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "Unknown field type " + sFIELD_TYPE); } if ( nCOLSPAN > 0 ) nColIndex = 0; else if ( nCOLSPAN == 0 ) { nColIndex++; if ( nColIndex > 1 ) nColIndex = 0; } } }
public static void AppendGridColumns(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command) { if ( tbl == null ) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "HtmlTable is not defined"); return; } // 01/07/2006 Paul. Show table borders in layout mode. This will help distinguish blank lines from wrapped lines. tbl.Border = 1; HtmlTableRow trAction = new HtmlTableRow(); HtmlTableRow trHeader = new HtmlTableRow(); HtmlTableRow trField = new HtmlTableRow(); tbl.Rows.Insert(0, trAction); tbl.Rows.Insert(1, trHeader); tbl.Rows.Insert(2, trField ); trAction.Attributes.Add("class", "listViewThS1"); trHeader.Attributes.Add("class", "listViewThS1"); trField .Attributes.Add("class", "oddListRowS1"); HttpSessionState Session = HttpContext.Current.Session; foreach(DataRowView row in dvFields) { Guid gID = Sql.ToGuid (row["ID" ]); int nCOLUMN_INDEX = Sql.ToInteger(row["COLUMN_INDEX" ]); string sCOLUMN_TYPE = Sql.ToString (row["COLUMN_TYPE" ]); string sHEADER_TEXT = Sql.ToString (row["HEADER_TEXT" ]); string sSORT_EXPRESSION = Sql.ToString (row["SORT_EXPRESSION" ]); string sITEMSTYLE_WIDTH = Sql.ToString (row["ITEMSTYLE_WIDTH" ]); string sITEMSTYLE_CSSCLASS = Sql.ToString (row["ITEMSTYLE_CSSCLASS" ]); string sITEMSTYLE_HORIZONTAL_ALIGN = Sql.ToString (row["ITEMSTYLE_HORIZONTAL_ALIGN"]); string sITEMSTYLE_VERTICAL_ALIGN = Sql.ToString (row["ITEMSTYLE_VERTICAL_ALIGN" ]); bool bITEMSTYLE_WRAP = Sql.ToBoolean(row["ITEMSTYLE_WRAP" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDATA_FORMAT = Sql.ToString (row["DATA_FORMAT" ]); string sURL_FIELD = Sql.ToString (row["URL_FIELD" ]); string sURL_FORMAT = Sql.ToString (row["URL_FORMAT" ]); string sURL_TARGET = Sql.ToString (row["URL_TARGET" ]); string sLIST_NAME = Sql.ToString (row["LIST_NAME" ]); HtmlTableCell tdAction = new HtmlTableCell(); trAction.Cells.Add(tdAction); tdAction.NoWrap = true; Literal litIndex = new Literal(); tdAction.Controls.Add(litIndex); litIndex.Text = " " + nCOLUMN_INDEX.ToString() + " "; ImageButton btnMoveUp = CreateLayoutImageButton(gID, "Layout.MoveUp" , nCOLUMN_INDEX, L10n.Term(".LNK_LEFT" ), Sql.ToString(Session["themeURL"]) + "images/leftarrow.gif" , Page_Command); ImageButton btnMoveDown = CreateLayoutImageButton(gID, "Layout.MoveDown", nCOLUMN_INDEX, L10n.Term(".LNK_RIGHT" ), Sql.ToString(Session["themeURL"]) + "images/rightarrow.gif" , Page_Command); ImageButton btnInsert = CreateLayoutImageButton(gID, "Layout.Insert" , nCOLUMN_INDEX, L10n.Term(".LNK_INS" ), Sql.ToString(Session["themeURL"]) + "images/plus_inline.gif" , Page_Command); ImageButton btnEdit = CreateLayoutImageButton(gID, "Layout.Edit" , nCOLUMN_INDEX, L10n.Term(".LNK_EDIT" ), Sql.ToString(Session["themeURL"]) + "images/edit_inline.gif" , Page_Command); ImageButton btnDelete = CreateLayoutImageButton(gID, "Layout.Delete" , nCOLUMN_INDEX, L10n.Term(".LNK_DELETE"), Sql.ToString(Session["themeURL"]) + "images/delete_inline.gif", Page_Command); tdAction.Controls.Add(btnMoveUp ); tdAction.Controls.Add(btnMoveDown); tdAction.Controls.Add(btnInsert ); tdAction.Controls.Add(btnEdit ); tdAction.Controls.Add(btnDelete ); HtmlTableCell tdHeader = new HtmlTableCell(); trHeader.Cells.Add(tdHeader); tdHeader.NoWrap = true; HtmlTableCell tdField = new HtmlTableCell(); trField.Cells.Add(tdField); tdField.NoWrap = true; Literal litHeader = new Literal(); tdHeader.Controls.Add(litHeader); litHeader.Text = sHEADER_TEXT; Literal litField = new Literal(); tdField.Controls.Add(litField); litField.Text = sDATA_FIELD; } }
public static void Export(DataView vw, string sModuleName, string sExportFormat, string sExportRange, int nCurrentPage, int nPageSize, string[] arrID) { int nStartRecord = 0; int nEndRecord = vw.Count; switch (sExportRange) { case "Page": nStartRecord = nCurrentPage * nPageSize; nEndRecord = Math.Min(nStartRecord + nPageSize, vw.Count); break; case "Selected": { // 10/17/2006 Paul. There must be one selected record to continue. if (arrID == null) { L10N L10n = HttpContext.Current.Items["L10n"] as L10N; throw(new Exception(L10n.Term(".LBL_LISTVIEW_NO_SELECTED"))); } StringBuilder sbIDs = new StringBuilder(); int nCount = 0; foreach (string item in arrID) { if (nCount > 0) { sbIDs.Append(" or "); } sbIDs.Append("ID = \'" + item.Replace("\'", "\'\'") + "\'" + ControlChars.CrLf); nCount++; } //vw.RowFilter = "ID in (" + sbIDs.ToString() + ")"; // 11/03/2006 Paul. A filter might already exist, so make sure to maintain the existing filter. if (vw.RowFilter.Length > 0) { vw.RowFilter = " and (" + sbIDs.ToString() + ")"; } else { vw.RowFilter = sbIDs.ToString(); } nEndRecord = vw.Count; break; } } HttpResponse Response = HttpContext.Current.Response; StringBuilder sb = new StringBuilder(); switch (sExportFormat) { case "csv": Response.ContentType = "text/csv"; Response.AddHeader("Content-Disposition", "attachment;filename=" + sModuleName + ".csv"); ExportDelimited(Response.OutputStream, vw, sModuleName.ToLower(), nStartRecord, nEndRecord, ','); Response.End(); break; case "tab": Response.ContentType = "text/txt"; Response.AddHeader("Content-Disposition", "attachment;filename=" + sModuleName + ".txt"); ExportDelimited(Response.OutputStream, vw, sModuleName.ToLower(), nStartRecord, nEndRecord, '\t'); Response.End(); break; case "xml": Response.ContentType = "text/xml"; Response.AddHeader("Content-Disposition", "attachment;filename=" + sModuleName + ".xml"); ExportXml(Response.OutputStream, vw, sModuleName.ToLower(), nStartRecord, nEndRecord); Response.End(); break; //case "Excel": default: Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=" + sModuleName + ".xlb"); ExportExcel(Response.OutputStream, vw, sModuleName.ToLower(), nStartRecord, nEndRecord); Response.End(); break; } //vw.RowFilter = null; }
/// <summary> /// CronDescription /// </summary> public static string CronDescription(L10N L10n, string sCRON) { StringBuilder sb = new StringBuilder(); sCRON = sCRON.Replace(" ", ""); if ( sCRON == "*::*::*::*::*" ) return L10n.Term("Schedulers.LBL_OFTEN"); CultureInfo culture = CultureInfo.CreateSpecificCulture(L10n.NAME); string sCRON_MONTH = "*"; string sCRON_DAYOFMONTH = "*"; string sCRON_DAYOFWEEK = "*"; string sCRON_HOUR = "*"; string sCRON_MINUTE = "*"; string[] arrCRON = sCRON.Replace("::", "|").Split('|'); string[] arrCRON_TEMP = new string[] {}; string[] arrCRON_VALUE = new string[] {}; string[] arrDaySuffixes = new string[32]; int nCRON_VALUE = 0; int nCRON_VALUE_START = 0; int nCRON_VALUE_END = 0; int nON_THE_MINUTE = -1; for ( int n = 0; n < arrDaySuffixes.Length; n++ ) arrDaySuffixes[n] = "th"; arrDaySuffixes[0] = ""; arrDaySuffixes[1] = "st"; arrDaySuffixes[2] = "nd"; arrDaySuffixes[3] = "rd"; // minute hour dayOfMonth month dayOfWeek if ( arrCRON.Length > 0 ) sCRON_MINUTE = arrCRON[0]; if ( arrCRON.Length > 1 ) sCRON_HOUR = arrCRON[1]; if ( arrCRON.Length > 2 ) sCRON_DAYOFMONTH = arrCRON[2]; if ( arrCRON.Length > 3 ) sCRON_MONTH = arrCRON[3]; if ( arrCRON.Length > 4 ) sCRON_DAYOFWEEK = arrCRON[4]; if ( sCRON_MINUTE != "*" ) { arrCRON_TEMP = sCRON_MINUTE.Split(','); // 12/31/2007 Paul. Check for either comma or dash. if ( sCRON_MINUTE.Split(",-".ToCharArray()).Length == 1 ) { nON_THE_MINUTE = Sql.ToInteger(sCRON_MINUTE); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if ( nON_THE_MINUTE == 0 ) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nON_THE_MINUTE.ToString("00")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } } else { for ( int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++ ) { if ( arrCRON_TEMP[i].IndexOf('-') >= 0 ) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if ( arrCRON_VALUE.Length >= 2 ) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if ( nCRON_VALUE_START >= 0 && nCRON_VALUE_START <= 23 && nCRON_VALUE_END >= 0 && nCRON_VALUE_END <= 23 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if ( nCRON_VALUE_START == 0 ) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nCRON_VALUE_START.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); sb.Append(nCRON_VALUE_END.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if ( nCRON_VALUE >= 0 && nCRON_VALUE <= 23 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_ON_THE")); if ( nCRON_VALUE == 0 ) { sb.Append(L10n.Term("Schedulers.LBL_HOUR_SING")); } else { sb.Append(nCRON_VALUE.ToString("0")); sb.Append(L10n.Term("Schedulers.LBL_MIN_MARK")); } nCronEntries++; } } } } } if ( sCRON_HOUR != "*" ) { if ( sb.Length > 0 ) sb.Append("; "); arrCRON_TEMP = sCRON_HOUR.Split(','); for ( int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++ ) { if ( arrCRON_TEMP[i].IndexOf('-') >= 0 ) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if ( arrCRON_VALUE.Length >= 2 ) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if ( nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 31 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 31 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(arrCRON_VALUE[0]); if ( nON_THE_MINUTE >= 0 ) sb.Append(":" + nON_THE_MINUTE.ToString("00")); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(arrCRON_VALUE[1]); if ( nON_THE_MINUTE >= 0 ) sb.Append(":" + nON_THE_MINUTE.ToString("00")); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if ( nCRON_VALUE >= 1 && nCRON_VALUE <= 31 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(arrCRON_TEMP[i]); if ( nON_THE_MINUTE >= 0 ) sb.Append(":" + nON_THE_MINUTE.ToString("00")); nCronEntries++; } } } } if ( sCRON_DAYOFMONTH != "*" ) { if ( sb.Length > 0 ) sb.Append("; "); arrCRON_TEMP = sCRON_DAYOFMONTH.Split(','); for ( int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++ ) { if ( arrCRON_TEMP[i].IndexOf('-') >= 0 ) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if ( arrCRON_VALUE.Length >= 2 ) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if ( nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 31 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 31 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(nCRON_VALUE_START.ToString() + arrDaySuffixes[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(nCRON_VALUE_END.ToString() + arrDaySuffixes[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if ( nCRON_VALUE >= 1 && nCRON_VALUE <= 31 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(nCRON_VALUE.ToString() + arrDaySuffixes[nCRON_VALUE]); nCronEntries++; } } } } if ( sCRON_MONTH != "*" ) { if ( sb.Length > 0 ) sb.Append("; "); arrCRON_TEMP = sCRON_MONTH.Split(','); for ( int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++ ) { if ( arrCRON_TEMP[i].IndexOf('-') >= 0 ) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if ( arrCRON_VALUE.Length >= 2 ) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if ( nCRON_VALUE_START >= 1 && nCRON_VALUE_START <= 12 && nCRON_VALUE_END >= 1 && nCRON_VALUE_END <= 12 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if ( nCRON_VALUE >= 1 && nCRON_VALUE <= 12 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(culture.DateTimeFormat.MonthNames[nCRON_VALUE]); nCronEntries++; } } } } if ( sCRON_DAYOFWEEK != "*" ) { if ( sb.Length > 0 ) sb.Append("; "); arrCRON_TEMP = sCRON_DAYOFWEEK.Split(','); for ( int i = 0, nCronEntries = 0; i < arrCRON_TEMP.Length; i++ ) { if ( arrCRON_TEMP[i].IndexOf('-') >= 0 ) { arrCRON_VALUE = arrCRON_TEMP[i].Split('-'); if ( arrCRON_VALUE.Length >= 2 ) { nCRON_VALUE_START = Sql.ToInteger(arrCRON_VALUE[0]); nCRON_VALUE_END = Sql.ToInteger(arrCRON_VALUE[1]); if ( nCRON_VALUE_START >= 0 && nCRON_VALUE_START <= 6 && nCRON_VALUE_END >= 0 && nCRON_VALUE_END <= 6 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(L10n.Term("Schedulers.LBL_FROM")); sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE_START]); sb.Append(L10n.Term("Schedulers.LBL_RANGE")); sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE_END]); nCronEntries++; } } } else { nCRON_VALUE = Sql.ToInteger(arrCRON_TEMP[i]); if ( nCRON_VALUE >= 0 && nCRON_VALUE <= 6 ) { if ( nCronEntries > 0 ) sb.Append(L10n.Term("Schedulers.LBL_AND")); sb.Append(culture.DateTimeFormat.DayNames[nCRON_VALUE]); nCronEntries++; } } } } return sb.ToString(); }
public string create_case(string user_name, string password, string name) { Guid gUSER_ID = LoginUser(user_name, password); int nACLACCESS = Security.GetUserAccess("Cases", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spCASES_New(ref gID, name, String.Empty, Guid.Empty); return "1"; }
public error_value relate_note_to_module(string session, string note_id, string module_name, string module_id) { Guid gUSER_ID = GetSessionUserID(session); Guid gNOTE_ID = Sql.ToGuid(note_id); string sPARENT_TYPE = module_name; Guid gPARENT_ID = Guid.Empty; Guid gCONTACT_ID = Guid.Empty; if ( String.Compare(sPARENT_TYPE, "Contacts", true) == 0 ) gCONTACT_ID = Sql.ToGuid(module_id); else gPARENT_ID = Sql.ToGuid(module_id); int nACLACCESS = Security.GetUserAccess("Notes", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } error_value results = new error_value(); DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select * " + ControlChars.CrLf + " from vwNOTES_Edit" + ControlChars.CrLf + " where ID = @ID " + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@ID", gNOTE_ID); using ( IDataReader rdr = cmd.ExecuteReader() ) { if ( rdr.Read() ) { string sNAME = Sql.ToString(rdr["NAME" ]); string sDESCRIPTION = Sql.ToString(rdr["DESCRIPTION" ]); // 09/01/2006 Paul. Notes do not have an ASSIGNED_USER_ID. Guid gASSIGNED_USER_ID = Guid.Empty; // Sql.ToGuid (rdr["ASSIGNED_USER_ID"]); if ( nACLACCESS != ACL_ACCESS.OWNER || (nACLACCESS == ACL_ACCESS.OWNER && gASSIGNED_USER_ID == gUSER_ID) ) { SqlProcs.spNOTES_Update ( ref gNOTE_ID , sNAME , sPARENT_TYPE , gPARENT_ID , gCONTACT_ID , sDESCRIPTION , Sql.ToGuid(rdr["TEAM_ID"]) ); } } } } } return results; }
public string create_lead(string user_name, string password, string first_name, string last_name, string email_address) { Guid gUSER_ID = LoginUser(user_name, password); int nACLACCESS = Security.GetUserAccess("Leads", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spLEADS_New(ref gID, first_name, last_name, String.Empty, email_address); return "1"; }
public set_entry_result set_entry(string session, string module_name, name_value[] name_value_list) { Guid gUSER_ID = GetSessionUserID(session); Guid gTIMEZONE = Sql.ToGuid(HttpContext.Current.Cache.Get("soap.user.timezone." + gUSER_ID.ToString())); TimeZone T10n = TimeZone.CreateTimeZone(gTIMEZONE); string sTABLE_NAME = VerifyModuleName(module_name); int nACLACCESS = Security.GetUserAccess(module_name, "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } set_entry_result results = new set_entry_result(); DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); // 02/21/2006 Paul. Delete operations come in as set_entry with deleted = 1. if ( DeleteEntry(name_value_list) ) { IDbCommand cmdDelete = SqlProcs.Factory(con, "sp" + sTABLE_NAME + "_Delete"); // 10/10/2006 Paul. Use IDbDataParameter to be consistent. foreach(IDbDataParameter par in cmdDelete.Parameters) { par.Value = DBNull.Value; } Sql.SetParameter(cmdDelete, "@MODIFIED_USER_ID", gUSER_ID.ToString()); Guid gID = FindID(name_value_list); if ( gID != Guid.Empty ) { Sql.SetParameter(cmdDelete, "@ID", gID.ToString()); cmdDelete.ExecuteNonQuery(); } } else { IDbCommand cmdUpdate = SqlProcs.Factory(con, "sp" + sTABLE_NAME + "_Update"); IDbDataParameter parID = Sql.FindParameter(cmdUpdate, "@ID"); // 10/10/2006 Paul. Use IDbDataParameter to be consistent. foreach(IDbDataParameter par in cmdUpdate.Parameters) { par.Value = DBNull.Value; } // 08/31/2006 Paul. We need to initialize the values of any fields not provided. // The stored procedure always updates all fields, so we need to make sure not to clear fields that are not provided. // This problem was first noticed when the Outlook Plug-in kept clearing the ASSIGNED_USER_ID field. Guid gID = FindID(name_value_list); if ( gID != Guid.Empty ) { // 08/31/2006 Paul. If the ID is not found, then this must be a new InitializeParameters(con, sTABLE_NAME, gID, cmdUpdate); } Sql.SetParameter(cmdUpdate, "@MODIFIED_USER_ID", gUSER_ID.ToString()); for ( int j = 0; j < name_value_list.Length; j++ ) { // 04/04/2006 Paul. DATE_START & TIME_START need to be combined into DATE_TIME. if ( name_value_list[j].name.ToUpper() == "TIME_START" ) { // 04/04/2006 Paul. Modules that have a TIME_START field are MEETINGS, CALLS, TASKS, EMAILS, EMAIL_MARKETING, PROJECT_TASK string sDateTime = EntryDateTime(name_value_list, "DATE_START", "TIME_START"); if ( sTABLE_NAME == "TASKS" || sTABLE_NAME == "PROJECT_TASK" ) { Sql.SetParameter(cmdUpdate, "@DATE_TIME_START", T10n.ToServerTimeFromUniversalTime(sDateTime)); } else { Sql.SetParameter(cmdUpdate, "@DATE_TIME", T10n.ToServerTimeFromUniversalTime(sDateTime)); } } // 04/04/2006 Paul. DATE_DUE & TIME_DUE need to be combined into DATE_TIME_DUE. else if ( name_value_list[j].name.ToUpper() == "TIME_DUE" ) { // 04/04/2006 Paul. Modules that have a TIME_DUE field are TASKS, PROJECT_TASK string sDateTime = EntryDateTime(name_value_list, "DATE_DUE", "TIME_DUE"); Sql.SetParameter(cmdUpdate, "@DATE_TIME_DUE", T10n.ToServerTimeFromUniversalTime(sDateTime)); } else { Sql.SetParameter(cmdUpdate, "@" + name_value_list[j].name, name_value_list[j].value); } } cmdUpdate.ExecuteNonQuery(); if ( parID != null ) { results.id = Sql.ToString(parID.Value); } } } return results; }
protected void OnItemCreated(object sender, DataGridItemEventArgs e) { // 08/21/2006 Lawrence Zamorano. Add the record count to the pager control. // 08/21/2006 Paul. Enhance to include page range. if (e.Item.ItemType == ListItemType.Pager) { TableCell pgr = e.Item.Controls[0] as TableCell; DataView vw = this.DataSource as DataView; if (vw != null && vw.Count > 0) { // 08/21/2006 Paul. Grab references to the Prev and Next controls while we know their indexes. // 08/21/2006 Paul. The previous and next controls will either be a LinkButton if active, or a Label if inactive. LinkButton lnkPrev = pgr.Controls[0] as LinkButton; LinkButton lnkNext = pgr.Controls[2] as LinkButton; Label lblPrev = pgr.Controls[0] as Label; Label lblNext = pgr.Controls[2] as Label; L10N L10n = HttpContext.Current.Items["L10n"] as L10N; string sOf = L10n.Term(".LBL_LIST_OF"); int nPageStart = this.CurrentPageIndex * this.PageSize + 1; int nPageEnd = Math.Min((this.CurrentPageIndex + 1) * this.PageSize, vw.Count); LiteralControl litPageRange = new LiteralControl(); litPageRange.Text = String.Format(" <span class=\"pageNumbers\">({0} - {1} {2} {3})</span> ", nPageStart, nPageEnd, sOf, vw.Count); pgr.Controls.AddAt(1, litPageRange); string sThemeURL = Sql.ToString(HttpContext.Current.Session["themeURL"]); if (lblPrev != null) { lblPrev.Text = "<img src=\"" + sThemeURL + "images/previous_off.gif" + "\" border=\"0\" height=\"10\" width=\"6\" /> " + lblPrev.Text; } if (lnkPrev != null) { lnkPrev.Text = "<img src=\"" + sThemeURL + "images/previous.gif" + "\" border=\"0\" height=\"10\" width=\"6\" /> " + lnkPrev.Text; //LinkButton lnkStart = new LinkButton(); //lnkStart.CommandArgument = "1"; //lnkStart.CommandName = "Page"; //lnkStart.Text = "<img src=\"" + sThemeURL + "images/start.gif" + "\" border=\"0\" height=\"10\" width=\"11\" /> " + L10n.Term(".LNK_LIST_START") + " "; //pgr.Controls.AddAt(0, lnkStart); } if (lblNext != null) { lblNext.Text = lblNext.Text + " <img src=\"" + sThemeURL + "images/next_off.gif" + "\" border=\"0\" height=\"10\" width=\"6\" />"; } if (lnkNext != null) { lnkNext.Text = lnkNext.Text + " <img src=\"" + sThemeURL + "images/next.gif" + "\" border=\"0\" height=\"10\" width=\"6\" />"; //LinkButton lnkEnd = new LinkButton(); //lnkEnd.CommandArgument = this.PageCount.ToString(); //lnkEnd.CommandName = "Page"; //lnkEnd.Text = " " + L10n.Term(".LNK_LIST_END") + " <img src=\"" + sThemeURL + "images/end.gif" + "\" border=\"0\" height=\"10\" width=\"11\" />"; //pgr.Controls.Add(lnkEnd); } } } else if (e.Item.ItemType == ListItemType.Header) { // 06/09/2006 Paul. Move the translation to overridden DataBind. //L10nTranslate(); // 11/21/2005 Paul. The header cells should never wrap, the background image was not designed to wrap. foreach (TableCell cell in e.Item.Cells) { cell.Wrap = false; } HttpSessionState Session = HttpContext.Current.Session; string sLastSortColumn = (string)ViewState["LastSortColumn"]; string sLastSortOrder = (string)ViewState["LastSortOrder"]; // 08/28/2006 Paul. We need to watch for overflow. This has occurred when a grid was created with no columns. for (int i = 0; i < e.Item.Controls.Count && i < this.Columns.Count; i++) { // 11/13/2005 Paul. If sorting is not enabled, this code will cause the header text to disappear. if (this.AllowSorting && !Sql.IsEmptyString(Columns[i].SortExpression)) { Image img = new Image(); img.Width = 8; img.Height = 10; if (Columns[i].SortExpression == sLastSortColumn) { if (sLastSortOrder == "asc") { img.ImageUrl = Session["themeURL"] + "images/arrow_down.gif"; } else { img.ImageUrl = Session["themeURL"] + "images/arrow_up.gif"; } } else { img.ImageUrl = Session["themeURL"] + "images/arrow.gif"; } Literal lit = new Literal(); lit.Text = " "; e.Item.Cells[i].Controls.Add(lit); e.Item.Cells[i].Controls.Add(img); } } } else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // 09/05/2005 Paul. Reducing viewstate data in a table can be done at the row level. // This will provide a major performance benefit while not loosing the ability to sort a grid. // http://authors.aspalliance.com/jimross/Articles/DatagridDietPartTwo.aspx // 10/13/2005 Paul. Can't disable the content otherwise the data is not retained during certain postback operations. //e.Item.EnableViewState = false; } }
public error_value set_relationship(string session, set_relationship_value set_relationship_value) { Guid gUSER_ID = GetSessionUserID(session); // 02/16/2006 Paul. Don't need to verify the modules as it will be done inside SetRelationship(); //VerifyModuleName(set_relationship_value.module1); //VerifyModuleName(set_relationship_value.module2); int nACLACCESS = Security.GetUserAccess(set_relationship_value.module1, "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } error_value results = new error_value(); SetRelationship(set_relationship_value.module1, set_relationship_value.module1_id, set_relationship_value.module2, set_relationship_value.module2_id); return results; }
public static void AppendEditViewFields(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command, bool bLayoutMode) { bool bIsMobile = false; SplendidPage Page = tbl.Page as SplendidPage; if ( Page != null ) bIsMobile = Page.IsMobile; HtmlTableRow tr = null; // 11/28/2005 Paul. Start row index using the existing count so that headers can be specified. int nRowIndex = tbl.Rows.Count - 1; int nColIndex = 0; HtmlTableCell tdLabel = null; HtmlTableCell tdField = null; // 01/07/2006 Paul. Show table borders in layout mode. This will help distinguish blank lines from wrapped lines. if ( bLayoutMode ) tbl.Border = 1; // 11/15/2007 Paul. If there are no fields in the detail view, then hide the entire table. // This allows us to hide the table by removing all detail view fields. if ( dvFields.Count == 0 && tbl.Rows.Count <= 1 ) tbl.Visible = false; // 01/27/2008 Paul. We need the schema table to determine if the data label is free-form text. DataTable tblSchema = null; if ( rdr != null ) tblSchema = rdr.GetSchemaTable(); // 01/01/2008 Paul. Pull config flag outside the loop. bool bEnableTeamManagement = Crm.Config.enable_team_management(); bool bRequireTeamManagement = Crm.Config.require_team_management(); // 01/01/2008 Paul. We need a quick way to require user assignments across the system. bool bRequireUserAssignment = Crm.Config.require_user_assignment(); HttpSessionState Session = HttpContext.Current.Session; foreach(DataRowView row in dvFields) { Guid gID = Sql.ToGuid (row["ID" ]); int nFIELD_INDEX = Sql.ToInteger(row["FIELD_INDEX" ]); string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_LABEL = Sql.ToString (row["DATA_LABEL" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDISPLAY_FIELD = Sql.ToString (row["DISPLAY_FIELD" ]); string sCACHE_NAME = Sql.ToString (row["CACHE_NAME" ]); bool bDATA_REQUIRED = Sql.ToBoolean(row["DATA_REQUIRED" ]); bool bUI_REQUIRED = Sql.ToBoolean(row["UI_REQUIRED" ]); string sONCLICK_SCRIPT = Sql.ToString (row["ONCLICK_SCRIPT" ]); string sFORMAT_SCRIPT = Sql.ToString (row["FORMAT_SCRIPT" ]); short nFORMAT_TAB_INDEX = Sql.ToShort (row["FORMAT_TAB_INDEX" ]); int nFORMAT_MAX_LENGTH = Sql.ToInteger(row["FORMAT_MAX_LENGTH"]); int nFORMAT_SIZE = Sql.ToInteger(row["FORMAT_SIZE" ]); int nFORMAT_ROWS = Sql.ToInteger(row["FORMAT_ROWS" ]); int nFORMAT_COLUMNS = Sql.ToInteger(row["FORMAT_COLUMNS" ]); int nCOLSPAN = Sql.ToInteger(row["COLSPAN" ]); int nROWSPAN = Sql.ToInteger(row["ROWSPAN" ]); string sLABEL_WIDTH = Sql.ToString (row["LABEL_WIDTH" ]); string sFIELD_WIDTH = Sql.ToString (row["FIELD_WIDTH" ]); int nDATA_COLUMNS = Sql.ToInteger(row["DATA_COLUMNS" ]); // 12/02/2007 Paul. Each view can now have its own number of data columns. // This was needed so that search forms can have 4 data columns. The default is 2 columns. if ( nDATA_COLUMNS == 0 ) nDATA_COLUMNS = 2; // 11/25/2006 Paul. If Team Management has been disabled, then convert the field to a blank. // Keep the field, but treat it as blank so that field indexes will still be valid. // 12/03/2006 Paul. Allow the team field to be visible during layout. if ( !bLayoutMode && sDATA_FIELD == "TEAM_ID" ) { if ( !bEnableTeamManagement ) { sFIELD_TYPE = "Blank"; bUI_REQUIRED = false; } else { // 11/25/2006 Paul. Override the required flag with the system value. // 01/01/2008 Paul. If Team Management is not required, then let the admin decide. if ( bRequireTeamManagement ) bUI_REQUIRED = true; } } if ( !bLayoutMode && sDATA_FIELD == "ASSIGNED_USER_ID" ) { // 01/01/2008 Paul. We need a quick way to require user assignments across the system. if ( bRequireUserAssignment ) bUI_REQUIRED = true; } if ( bIsMobile && String.Compare(sFIELD_TYPE, "AddressButtons", true) == 0 ) { // 11/17/2007 Paul. Skip the address buttons on a mobile device. continue; } // 11/17/2007 Paul. On a mobile device, each new field is on a new row. // 12/02/2005 Paul. COLSPAN == -1 means that a new column should not be created. if ( (nCOLSPAN >= 0 && nColIndex == 0) || tr == null || bIsMobile ) { // 11/25/2005 Paul. Don't pre-create a row as we don't want a blank // row at the bottom. Add rows just before they are needed. nRowIndex++; tr = new HtmlTableRow(); tbl.Rows.Insert(nRowIndex, tr); } if ( bLayoutMode ) { HtmlTableCell tdAction = new HtmlTableCell(); tr.Cells.Add(tdAction); tdAction.Attributes.Add("class", "tabDetailViewDL"); tdAction.NoWrap = true; Literal litIndex = new Literal(); tdAction.Controls.Add(litIndex); litIndex.Text = " " + nFIELD_INDEX.ToString() + " "; // 05/26/2007 Paul. Fix the terms. The are in the Dropdown module. ImageButton btnMoveUp = CreateLayoutImageButton(gID, "Layout.MoveUp" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_UP" ), Sql.ToString(Session["themeURL"]) + "images/uparrow_inline.gif" , Page_Command); ImageButton btnMoveDown = CreateLayoutImageButton(gID, "Layout.MoveDown", nFIELD_INDEX, L10n.Term("Dropdown.LNK_DOWN" ), Sql.ToString(Session["themeURL"]) + "images/downarrow_inline.gif", Page_Command); ImageButton btnInsert = CreateLayoutImageButton(gID, "Layout.Insert" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_INS" ), Sql.ToString(Session["themeURL"]) + "images/plus_inline.gif" , Page_Command); ImageButton btnEdit = CreateLayoutImageButton(gID, "Layout.Edit" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_EDIT" ), Sql.ToString(Session["themeURL"]) + "images/edit_inline.gif" , Page_Command); ImageButton btnDelete = CreateLayoutImageButton(gID, "Layout.Delete" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_DELETE"), Sql.ToString(Session["themeURL"]) + "images/delete_inline.gif" , Page_Command); tdAction.Controls.Add(btnMoveUp ); tdAction.Controls.Add(btnMoveDown); tdAction.Controls.Add(btnInsert ); tdAction.Controls.Add(btnEdit ); tdAction.Controls.Add(btnDelete ); } // 12/03/2006 Paul. Move literal label up so that it can be accessed when processing a blank. Literal litLabel = new Literal(); if ( nCOLSPAN >= 0 || tdLabel == null || tdField == null ) { tdLabel = new HtmlTableCell(); tdField = new HtmlTableCell(); tr.Cells.Add(tdLabel); tr.Cells.Add(tdField); if ( nCOLSPAN > 0 ) { tdField.ColSpan = nCOLSPAN; if ( bLayoutMode ) tdField.ColSpan++; } tdLabel.Attributes.Add("class", "dataLabel"); tdLabel.VAlign = "top"; tdLabel.Width = sLABEL_WIDTH; tdField.Attributes.Add("class", "dataField"); tdField.VAlign = "top"; // 11/28/2005 Paul. Don't use the field width if COLSPAN is specified as we want it to take the rest of the table. The label width will be sufficient. if ( nCOLSPAN == 0 ) tdField.Width = sFIELD_WIDTH; tdLabel.Controls.Add(litLabel); //litLabel.Text = nFIELD_INDEX.ToString() + " (" + nRowIndex.ToString() + "," + nColIndex.ToString() + ")"; try { // 12/03/2006 Paul. Move code to blank able in layout mode to blank section below. if ( bLayoutMode ) litLabel.Text = sDATA_LABEL; else if ( sDATA_LABEL.IndexOf(".") >= 0 ) litLabel.Text = L10n.Term(sDATA_LABEL); else if ( !Sql.IsEmptyString(sDATA_LABEL) && rdr != null ) { // 01/27/2008 Paul. If the data label is not in the schema table, then it must be free-form text. // It is not used often, but we allow the label to come from the result set. For example, // when the parent is stored in the record, we need to pull the module name from the record. if ( tblSchema != null && tblSchema.Columns.Contains(sDATA_LABEL) ) litLabel.Text = Sql.ToString(rdr[sDATA_LABEL]) + L10n.Term("Calls.LBL_COLON"); else litLabel.Text = sDATA_LABEL; } // 07/15/2006 Paul. Always put something for the label so that table borders will look right. // 07/20/2007 Vandalo. Skip the requirement to create a terminology entry and just so the label. else litLabel.Text = sDATA_LABEL; // " "; } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litLabel.Text = ex.Message; } if ( !bLayoutMode && bUI_REQUIRED ) { Label lblRequired = new Label(); tdLabel.Controls.Add(lblRequired); lblRequired.CssClass = "required"; lblRequired.Text = L10n.Term(".LBL_REQUIRED_SYMBOL"); } } if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) { Literal litField = new Literal(); tdField.Controls.Add(litField); if ( bLayoutMode ) { litLabel.Text = "*** BLANK ***"; litField.Text = "*** BLANK ***"; } else { // 12/03/2006 Paul. Make sure to clear the label. This is necessary to convert a TEAM to blank when disabled. litLabel.Text = " "; litField.Text = " "; } } else if ( String.Compare(sFIELD_TYPE, "Label", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Literal litField = new Literal(); tdField.Controls.Add(litField); // 07/25/2006 Paul. Align label values to the middle so the line-up with the label. tdField.VAlign = "middle"; // 07/24/2006 Paul. Set the ID so that the literal control can be accessed. litField.ID = sDATA_FIELD; try { if ( bLayoutMode ) litField.Text = sDATA_FIELD; else if ( sDATA_FIELD.IndexOf(".") >= 0 ) litField.Text = L10n.Term(sDATA_FIELD); else if ( rdr != null ) litField.Text = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "ListBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/02/2007 Paul. If format rows > 0 then this is a list box and not a drop down list. ListControl lstField = null; if ( nFORMAT_ROWS > 0 ) { ListBox lb = new ListBox(); lb.SelectionMode = ListSelectionMode.Multiple; lb.Rows = nFORMAT_ROWS; lstField = lb; } else { lstField = new DropDownList(); } tdField.Controls.Add(lstField); lstField.ID = sDATA_FIELD; lstField.TabIndex = nFORMAT_TAB_INDEX; try { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/04/2005 Paul. Don't populate list if this is a post back. if ( !Sql.IsEmptyString(sCACHE_NAME) && (bLayoutMode || !tbl.Page.IsPostBack) ) { // 12/24/2007 Paul. Use an array to define the custom caches so that list is in the Cache module. // This should reduce the number of times that we have to edit the SplendidDynamic module. bool bCustomCache = false; SplendidCacheReference[] arrCustomCaches = SplendidCache.CustomCaches; foreach ( SplendidCacheReference cache in arrCustomCaches ) { if ( cache.Name == sCACHE_NAME ) { lstField.DataValueField = cache.DataValueField; lstField.DataTextField = cache.DataTextField ; SplendidCacheCallback cbkDataSource = cache.DataSource; lstField.DataSource = cbkDataSource(); bCustomCache = true; } } if ( !bCustomCache ) { lstField.DataValueField = "NAME" ; lstField.DataTextField = "DISPLAY_NAME"; lstField.DataSource = SplendidCache.List(sCACHE_NAME); } lstField.DataBind(); // 08/08/2006 Paul. Allow onchange code to be stored in the database. // ListBoxes do not have a useful onclick event, so there should be no problem overloading this field. if ( !Sql.IsEmptyString(sONCLICK_SCRIPT) ) lstField.Attributes.Add("onchange" , sONCLICK_SCRIPT); // 02/21/2006 Paul. Move the NONE item inside the !IsPostBack code. // 12/02/2007 Paul. We don't need a NONE record when using multi-selection. // 12/03/2007 Paul. We do want the NONE record when using multi-selection. // This will allow searching of fields that are null instead of using the unassigned only checkbox. if ( !bUI_REQUIRED ) { lstField.Items.Insert(0, new ListItem(L10n.Term(".LBL_NONE"), "")); // 12/02/2007 Paul. AppendEditViewFields should be called inside Page_Load when not a postback, // and in InitializeComponent when it is a postback. If done wrong, // the page will bind after the list is populated, causing the list to populate again. // This event will cause the NONE entry to be cleared. Add a handler to catch this problem, // but the real solution is to call AppendEditViewFields at the appropriate times based on the postback event. lstField.DataBound += new EventHandler(ListControl_DataBound_AllowNull); } } if ( rdr != null ) { try { // 02/21/2006 Paul. All the DropDownLists in the Calls and Meetings edit views were not getting set. // The problem was a Page.DataBind in the SchedulingGrid and in the InviteesView. Both binds needed to be removed. // 12/30/2007 Paul. A customer needed the ability to save and restore the multiple selection. // 12/30/2007 Paul. Require the XML declaration in the data before trying to treat as XML. string sVALUE = Sql.ToString(rdr[sDATA_FIELD]); if ( nFORMAT_ROWS > 0 && sVALUE.StartsWith("<?xml") ) { XmlDocument xml = new XmlDocument(); xml.LoadXml(sVALUE); XmlNodeList nlValues = xml.DocumentElement.SelectNodes("Value"); foreach ( XmlNode xValue in nlValues ) { foreach ( ListItem item in lstField.Items ) { if ( item.Value == xValue.InnerText ) item.Selected = true; } } } else { lstField.SelectedValue = sVALUE; } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } // 12/04/2005 Paul. Assigned To field will always default to the current user. else if ( rdr == null && !tbl.Page.IsPostBack && sCACHE_NAME == "AssignedUser") { try { // 12/02/2007 Paul. We don't default the user when using multi-selection. // This is because this mode is typically used for searching. if ( nFORMAT_ROWS == 0 ) lstField.SelectedValue = Security.USER_ID.ToString(); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "CheckBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { CheckBox chkField = new CheckBox(); tdField.Controls.Add(chkField); chkField.ID = sDATA_FIELD; chkField.CssClass = "checkbox"; chkField.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) chkField.Checked = Sql.ToBoolean(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } // 07/11/2007 Paul. A checkbox can have a click event. if ( !Sql.IsEmptyString(sONCLICK_SCRIPT) ) chkField.Attributes.Add("onclick", sONCLICK_SCRIPT); if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); chkField.Enabled = false ; } } } else if ( String.Compare(sFIELD_TYPE, "ChangeButton", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/04/2005 Paul. If the label is PARENT_TYPE, then change the label to a DropDownList. if ( sDATA_LABEL == "PARENT_TYPE" ) { tdLabel.Controls.Clear(); DropDownList lstField = new DropDownList(); tdLabel.Controls.Add(lstField); lstField.ID = sDATA_LABEL; lstField.TabIndex = nFORMAT_TAB_INDEX; lstField.Attributes.Add("onChange", "ChangeParentType();"); if ( bLayoutMode || !tbl.Page.IsPostBack ) { // 07/29/2005 Paul. SugarCRM 3.0 does not allow the NONE option. lstField.DataValueField = "NAME" ; lstField.DataTextField = "DISPLAY_NAME"; lstField.DataSource = SplendidCache.List("record_type_display"); lstField.DataBind(); if ( rdr != null ) { try { lstField.SelectedValue = Sql.ToString(rdr[sDATA_LABEL]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } } TextBox txtNAME = new TextBox(); tdField.Controls.Add(txtNAME); txtNAME.ID = sDISPLAY_FIELD; txtNAME.ReadOnly = true; txtNAME.TabIndex = nFORMAT_TAB_INDEX; // 11/25/2006 Paul. Turn off viewstate so that we can fix the text on postback. txtNAME.EnableViewState = false; try { if ( bLayoutMode ) { txtNAME.Text = sDISPLAY_FIELD; txtNAME.Enabled = false ; } // 11/25/2006 Paul. The Change text field is losing its value during a postback error. else if ( tbl.Page.IsPostBack ) { // 11/25/2006 Paul. In order for this posback fix to work, viewstate must be disabled for this field. if ( tbl.Page.Request[txtNAME.UniqueID] != null ) txtNAME.Text = Sql.ToString(tbl.Page.Request[txtNAME.UniqueID]); } else if ( !Sql.IsEmptyString(sDISPLAY_FIELD) && rdr != null ) txtNAME.Text = Sql.ToString(rdr[sDISPLAY_FIELD]); // 11/25/2006 Paul. The team name should always default to the current user's private team. // Make sure not to overwrite the value if this is a postback. else if ( sDATA_FIELD == "TEAM_ID" && rdr == null && !tbl.Page.IsPostBack ) txtNAME.Text = Security.TEAM_NAME; // 01/15/2007 Paul. Assigned To field will always default to the current user. else if ( sDATA_FIELD == "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack ) txtNAME.Text = Security.USER_NAME; } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtNAME.Text = ex.Message; } HtmlInputHidden hidID = new HtmlInputHidden(); tdField.Controls.Add(hidID); hidID.ID = sDATA_FIELD; try { if ( !bLayoutMode ) { if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) hidID.Value = Sql.ToString(rdr[sDATA_FIELD]); // 11/25/2006 Paul. The team name should always default to the current user's private team. // Make sure not to overwrite the value if this is a postback. // The hidden field does not require the same viewstate fix as the txtNAME field. else if ( sDATA_FIELD == "TEAM_ID" && rdr == null && !tbl.Page.IsPostBack ) hidID.Value = Security.TEAM_ID.ToString(); // 01/15/2007 Paul. Assigned To field will always default to the current user. else if ( sDATA_FIELD == "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack ) hidID.Value = Security.USER_ID.ToString(); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtNAME.Text = ex.Message; } Literal litNBSP = new Literal(); tdField.Controls.Add(litNBSP); litNBSP.Text = " "; HtmlInputButton btnChange = new HtmlInputButton("button"); tdField.Controls.Add(btnChange); // 05/07/2006 Paul. Specify a name for the check button so that it can be referenced by SplendidTest. btnChange.ID = sDATA_FIELD + "_btnChange"; btnChange.Attributes.Add("class", "button"); if ( !Sql.IsEmptyString(sONCLICK_SCRIPT) ) btnChange.Attributes.Add("onclick" , sONCLICK_SCRIPT); // 03/31/2007 Paul. SugarCRM now uses Select instead of Change. btnChange.Attributes.Add("title" , L10n.Term(".LBL_SELECT_BUTTON_TITLE")); // 07/31/2006 Paul. Stop using VisualBasic library to increase compatibility with Mono. // 03/31/2007 Paul. Stop using AccessKey for change button. //btnChange.Attributes.Add("accessKey", L10n.Term(".LBL_SELECT_BUTTON_KEY").Substring(0, 1)); btnChange.Value = L10n.Term(".LBL_SELECT_BUTTON_LABEL"); // 12/03/2007 Paul. Also create a Clear button. if ( sONCLICK_SCRIPT.IndexOf("Popup();") > 0 ) { litNBSP = new Literal(); tdField.Controls.Add(litNBSP); litNBSP.Text = " "; HtmlInputButton btnClear = new HtmlInputButton("button"); tdField.Controls.Add(btnClear); btnClear.ID = sDATA_FIELD + "_btnClear"; btnClear.Attributes.Add("class", "button"); btnClear.Attributes.Add("onclick" , sONCLICK_SCRIPT.Replace("Popup();", "('', '');").Replace("return ", "return Change")); btnClear.Attributes.Add("title" , L10n.Term(".LBL_CLEAR_BUTTON_TITLE")); btnClear.Value = L10n.Term(".LBL_CLEAR_BUTTON_LABEL"); } if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { RequiredFieldValidatorForHiddenInputs reqID = new RequiredFieldValidatorForHiddenInputs(); reqID.ID = sDATA_FIELD + "_REQUIRED"; reqID.ControlToValidate = hidID.ID; reqID.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqID.CssClass = "required"; reqID.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqID.EnableClientScript = false; reqID.Enabled = false; tdField.Controls.Add(reqID); } } } else if ( String.Compare(sFIELD_TYPE, "TextBox", true) == 0 || String.Compare(sFIELD_TYPE, "Password", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { TextBox txtField = new TextBox(); tdField.Controls.Add(txtField); txtField.ID = sDATA_FIELD; txtField.TabIndex = nFORMAT_TAB_INDEX; try { if ( nFORMAT_ROWS > 0 && nFORMAT_COLUMNS > 0 ) { txtField.Rows = nFORMAT_ROWS ; txtField.Columns = nFORMAT_COLUMNS; txtField.TextMode = TextBoxMode.MultiLine; } else { txtField.MaxLength = nFORMAT_MAX_LENGTH ; txtField.Attributes.Add("size", nFORMAT_SIZE.ToString()); txtField.TextMode = TextBoxMode.SingleLine; } if ( bLayoutMode ) { txtField.Text = sDATA_FIELD; txtField.ReadOnly = true ; } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { int nOrdinal = rdr.GetOrdinal(sDATA_FIELD); string sTypeName = rdr.GetDataTypeName(nOrdinal); // 03/04/2006 Paul. Display currency in the proper format. // Only SQL Server is likely to return the money type, so also include the decimal type. if ( sTypeName == "money" || rdr[sDATA_FIELD].GetType() == typeof(System.Decimal) ) txtField.Text = Sql.ToDecimal(rdr[sDATA_FIELD]).ToString("#,##0.00"); else txtField.Text = Sql.ToString(rdr[sDATA_FIELD]); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtField.Text = ex.Message; } if ( String.Compare(sFIELD_TYPE, "Password", true) == 0 ) txtField.TextMode = TextBoxMode.Password; if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { RequiredFieldValidator reqNAME = new RequiredFieldValidator(); reqNAME.ID = sDATA_FIELD + "_REQUIRED"; reqNAME.ControlToValidate = txtField.ID; reqNAME.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqNAME.CssClass = "required"; reqNAME.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqNAME.EnableClientScript = false; reqNAME.Enabled = false; tdField.Controls.Add(reqNAME); } } } else if ( String.Compare(sFIELD_TYPE, "DatePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DatePicker ctlDate = tbl.Page.LoadControl("~/_controls/DatePicker.ascx") as DatePicker; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } // 01/16/2006 Paul. We validate elsewhere. /* if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { ctlDate.Required = true; } */ if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "DateRange", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/17/2007 Paul. Use table to align before and after labels. Table tblDateRange = new Table(); tdField.Controls.Add(tblDateRange); TableRow trAfter = new TableRow(); TableRow trBefore = new TableRow(); tblDateRange.Rows.Add(trAfter); tblDateRange.Rows.Add(trBefore); TableCell tdAfterLabel = new TableCell(); TableCell tdAfterData = new TableCell(); TableCell tdBeforeLabel = new TableCell(); TableCell tdBeforeData = new TableCell(); trAfter .Cells.Add(tdAfterLabel ); trAfter .Cells.Add(tdAfterData ); trBefore.Cells.Add(tdBeforeLabel); trBefore.Cells.Add(tdBeforeData ); // 12/03/2005 Paul. UserControls must be loaded. DatePicker ctlDateStart = tbl.Page.LoadControl("~/_controls/DatePicker.ascx") as DatePicker; DatePicker ctlDateEnd = tbl.Page.LoadControl("~/_controls/DatePicker.ascx") as DatePicker; Literal litAfterLabel = new Literal(); Literal litBeforeLabel = new Literal(); litAfterLabel .Text = L10n.Term("SavedSearch.LBL_SEARCH_AFTER" ); litBeforeLabel.Text = L10n.Term("SavedSearch.LBL_SEARCH_BEFORE"); //tdField.Controls.Add(litAfterLabel ); //tdField.Controls.Add(ctlDateStart ); //tdField.Controls.Add(litBeforeLabel); //tdField.Controls.Add(ctlDateEnd ); tdAfterLabel .Controls.Add(litAfterLabel ); tdAfterData .Controls.Add(ctlDateStart ); tdBeforeLabel.Controls.Add(litBeforeLabel); tdBeforeData .Controls.Add(ctlDateEnd ); ctlDateStart.ID = sDATA_FIELD + "_AFTER"; ctlDateEnd .ID = sDATA_FIELD + "_BEFORE"; // 05/10/2006 Paul. Set the tab index. ctlDateStart.TabIndex = nFORMAT_TAB_INDEX; ctlDateEnd .TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) { ctlDateStart.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); ctlDateEnd .Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } // 01/16/2006 Paul. We validate elsewhere. /* if ( !bLayoutMode && bUI_REQUIRED && !Sql.IsEmptyString(sDATA_FIELD) ) { ctlDateStart.Required = true; ctlDateEnd .Required = true; } */ if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DateTimePicker ctlDate = tbl.Page.LoadControl("~/_controls/DateTimePicker.ascx") as DateTimePicker; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/03/2005 Paul. UserControls must be loaded. DateTimeEdit ctlDate = tbl.Page.LoadControl("~/_controls/DateTimeEdit.ascx") as DateTimeEdit; tdField.Controls.Add(ctlDate); ctlDate.ID = sDATA_FIELD; // 05/10/2006 Paul. Set the tab index. ctlDate.TabIndex = nFORMAT_TAB_INDEX; try { if ( rdr != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } if ( !bLayoutMode && bUI_REQUIRED ) { ctlDate.EnableNone = false; } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "File", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { HtmlInputFile ctlField = new HtmlInputFile(); tdField.Controls.Add(ctlField); ctlField.ID = sDATA_FIELD; ctlField.MaxLength = nFORMAT_MAX_LENGTH; ctlField.Size = nFORMAT_SIZE; ctlField.Attributes.Add("TabIndex", nFORMAT_TAB_INDEX.ToString()); if ( !bLayoutMode && bUI_REQUIRED ) { RequiredFieldValidator reqNAME = new RequiredFieldValidator(); reqNAME.ID = sDATA_FIELD + "_REQUIRED"; reqNAME.ControlToValidate = ctlField.ID; reqNAME.ErrorMessage = L10n.Term(".ERR_REQUIRED_FIELD"); reqNAME.CssClass = "required"; reqNAME.EnableViewState = false; // 01/16/2006 Paul. We don't enable required fields until we attempt to save. // This is to allow unrelated form actions; the Cancel button is a good example. reqNAME.EnableClientScript = false; reqNAME.Enabled = false; tdField.Controls.Add(reqNAME); } } } else if ( String.Compare(sFIELD_TYPE, "Image", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { HtmlInputHidden ctlHidden = new HtmlInputHidden(); if ( !bLayoutMode ) { tdField.Controls.Add(ctlHidden); ctlHidden.ID = sDATA_FIELD; HtmlInputFile ctlField = new HtmlInputFile(); tdField.Controls.Add(ctlField); // 04/17/2006 Paul. The image needs to reference the file control. ctlField.ID = sDATA_FIELD + "_File"; Literal litBR = new Literal(); litBR.Text = "<br />"; tdField.Controls.Add(litBR); } Image imgField = new Image(); // 04/13/2006 Paul. Give the image a name so that it can be validated with SplendidTest. imgField.ID = "img" + sDATA_FIELD; try { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { ctlHidden.Value = Sql.ToString(rdr[sDATA_FIELD]); imgField.ImageUrl = "~/Images/Image.aspx?ID=" + ctlHidden.Value; // 04/13/2006 Paul. Only add the image if it exists. tdField.Controls.Add(imgField); // 04/17/2006 Paul. Provide a clear button. Literal litClear = new Literal(); litClear.Text = "<br /><input type=\"button\" class=\"button\" onclick=\"form." + ctlHidden.ClientID + ".value='';form." + imgField.ClientID + ".src='';" + "\" value='" + " " + L10n.Term(".LBL_CLEAR_BUTTON_LABEL" ) + " " + "' title='" + L10n.Term(".LBL_CLEAR_BUTTON_TITLE" ) + "' />"; tdField.Controls.Add(litClear); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); Literal litField = new Literal(); litField.Text = ex.Message; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "AddressButtons", true) == 0 ) { tr.Cells.Remove(tdField); tdLabel.Width = "10%"; tdLabel.RowSpan = nROWSPAN; tdLabel.VAlign = "middle"; tdLabel.Align = "center"; tdLabel.Attributes.Remove("class"); tdLabel.Attributes.Add("class", "tabFormAddDel"); HtmlInputButton btnCopyRight = new HtmlInputButton("button"); Literal litSpacer = new Literal(); HtmlInputButton btnCopyLeft = new HtmlInputButton("button"); tdLabel.Controls.Add(btnCopyRight); tdLabel.Controls.Add(litSpacer ); tdLabel.Controls.Add(btnCopyLeft ); btnCopyRight.Attributes.Add("title" , L10n.Term("Accounts.NTC_COPY_BILLING_ADDRESS" )); btnCopyRight.Attributes.Add("onclick", "return copyAddressRight()"); btnCopyRight.Value = ">>"; litSpacer.Text = "<br><br>"; btnCopyLeft .Attributes.Add("title" , L10n.Term("Accounts.NTC_COPY_SHIPPING_ADDRESS" )); btnCopyLeft .Attributes.Add("onclick", "return copyAddressLeft()"); btnCopyLeft .Value = "<<"; nColIndex = 0; } else { Literal litField = new Literal(); tdField.Controls.Add(litField); litField.Text = "Unknown field type " + sFIELD_TYPE; SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "Unknown field type " + sFIELD_TYPE); } // 12/02/2007 Paul. Each view can now have its own number of data columns. // This was needed so that search forms can have 4 data columns. The default is 2 columns. if ( nCOLSPAN > 0 ) nColIndex += nCOLSPAN; else if ( nCOLSPAN == 0 ) nColIndex++; if ( nColIndex >= nDATA_COLUMNS ) nColIndex = 0; } }
public get_entry_list_result_encoded sync_get_modified_relationships(string session, string module_name, string related_module, string from_date, string to_date, int offset, int max_results, int deleted, string module_id, string[] select_fields, string[] ids, string relationship_name, string deletion_date, int php_serialize) { Guid gUSER_ID = GetSessionUserID(session); Guid gTIMEZONE = Sql.ToGuid(HttpContext.Current.Cache.Get("soap.user.timezone." + gUSER_ID.ToString())); TimeZone T10n = TimeZone.CreateTimeZone(gTIMEZONE); string sTABLE_NAME = VerifyModuleName(module_name ); int nACLACCESS = Security.GetUserAccess(module_name, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } sTABLE_NAME = VerifyModuleName(related_module); nACLACCESS = Security.GetUserAccess(related_module, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } get_entry_list_result_encoded results = new get_entry_list_result_encoded(); results.error.name = "not supported"; results.error.number = "-1"; results.error.description = "sync_get_modified_relationships is not supported at this time"; return results; }
public contact_detail[] contact_by_email(string user_name, string password, string email_address) { // 03/12/2007 Paul. If using NTLM, then user_name will be updated with value from Identity object. Guid gUSER_ID = LoginUser(ref user_name, password); int nACLACCESS = Security.GetUserAccess("Contacts", "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } contact_detail[] results = new contact_detail[0]; DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select * " + ControlChars.CrLf + " from vwSOAP_Contact_By_Email" + ControlChars.CrLf + " where 1 = 0 " + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; // 12/29/2005 Paul. Allow multiple email addresses, separated by a semicolon. email_address = email_address.Replace(" ", ""); string[] aAddresses = email_address.Split(';'); // 02/20/2006 Paul. Need to use the IN clause. Sql.AppendParameter(cmd, aAddresses, "EMAIL1", true); Sql.AppendParameter(cmd, aAddresses, "EMAIL2", true); if ( nACLACCESS == ACL_ACCESS.OWNER ) { Sql.AppendParameter(cmd, gUSER_ID, "ASSIGNED_USER_ID"); } try { using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { // 02/20/2006 Paul. First initialize the array. results = new contact_detail[dt.Rows.Count]; for ( int i=0; i < dt.Rows.Count ; i++ ) { // 02/20/2006 Paul. Then initialize each element in the array. results[i] = new contact_detail(); results[i].email_address = Sql.ToString(dt.Rows[i]["EMAIL_ADDRESS"]); results[i].name1 = Sql.ToString(dt.Rows[i]["NAME1" ]); results[i].name2 = Sql.ToString(dt.Rows[i]["NAME2" ]); results[i].association = Sql.ToString(dt.Rows[i]["ASSOCIATION" ]); results[i].id = Sql.ToString(dt.Rows[i]["ID" ]); results[i].type = Sql.ToString(dt.Rows[i]["TYPE" ]); results[i].msi_id = (i+1).ToString(); } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed contact_by_email", ex)); } } } return results; }
public string create_lead(string user_name, string password, string first_name, string last_name, string email_address) { // 03/12/2007 Paul. If using NTLM, then user_name will be updated with value from Identity object. Guid gUSER_ID = LoginUser(ref user_name, password); int nACLACCESS = Security.GetUserAccess("Leads", "edit"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } Guid gID = Guid.Empty; SqlProcs.spLEADS_New(ref gID, first_name, last_name, String.Empty, email_address); return "1"; }
public static void AppendDetailViewFields(DataView dvFields, HtmlTable tbl, IDataReader rdr, L10N L10n, TimeZone T10n, CommandEventHandler Page_Command, bool bLayoutMode) { bool bIsMobile = false; SplendidPage Page = tbl.Page as SplendidPage; if ( Page != null ) bIsMobile = Page.IsMobile; HtmlTableRow tr = null; // 11/28/2005 Paul. Start row index using the existing count so that headers can be specified. int nRowIndex = tbl.Rows.Count - 1; int nColIndex = 0; // 01/07/2006 Paul. Show table borders in layout mode. This will help distinguish blank lines from wrapped lines. if ( bLayoutMode ) tbl.Border = 1; // 03/30/2007 Paul. Convert the currency values before displaying. // The UI culture should already be set to format the currency. Currency C10n = HttpContext.Current.Items["C10n"] as Currency; HttpSessionState Session = HttpContext.Current.Session; // 11/15/2007 Paul. If there are no fields in the detail view, then hide the entire table. // This allows us to hide the table by removing all detail view fields. if ( dvFields.Count == 0 && tbl.Rows.Count <= 1 ) tbl.Visible = false; // 01/27/2008 Paul. We need the schema table to determine if the data label is free-form text. DataTable tblSchema = null; if ( rdr != null ) tblSchema = rdr.GetSchemaTable(); // 01/01/2008 Paul. Pull config flag outside the loop. bool bEnableTeamManagement = Crm.Config.enable_team_management(); foreach(DataRowView row in dvFields) { Guid gID = Sql.ToGuid (row["ID" ]); int nFIELD_INDEX = Sql.ToInteger(row["FIELD_INDEX"]); string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_LABEL = Sql.ToString (row["DATA_LABEL" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDATA_FORMAT = Sql.ToString (row["DATA_FORMAT"]); string sLIST_NAME = Sql.ToString (row["LIST_NAME" ]); int nCOLSPAN = Sql.ToInteger(row["COLSPAN" ]); string sLABEL_WIDTH = Sql.ToString (row["LABEL_WIDTH"]); string sFIELD_WIDTH = Sql.ToString (row["FIELD_WIDTH"]); int nDATA_COLUMNS= Sql.ToInteger(row["DATA_COLUMNS"]); // 12/02/2007 Paul. Each view can now have its own number of data columns. // This was needed so that search forms can have 4 data columns. The default is 2 columns. if ( nDATA_COLUMNS == 0 ) nDATA_COLUMNS = 2; // 11/25/2006 Paul. If Team Management has been disabled, then convert the field to a blank. // Keep the field, but treat it as blank so that field indexes will still be valid. // 12/03/2006 Paul. Allow the team field to be visible during layout. // 12/03/2006 Paul. The correct field is TEAM_NAME. We don't use TEAM_ID in the detail view. if ( !bLayoutMode && sDATA_FIELD == "TEAM_NAME" && !bEnableTeamManagement ) { sFIELD_TYPE = "Blank"; } // 11/17/2007 Paul. On a mobile device, each new field is on a new row. if ( nColIndex == 0 || bIsMobile ) { // 11/25/2005 Paul. Don't pre-create a row as we don't want a blank // row at the bottom. Add rows just before they are needed. nRowIndex++; tr = new HtmlTableRow(); tbl.Rows.Insert(nRowIndex, tr); } if ( bLayoutMode ) { HtmlTableCell tdAction = new HtmlTableCell(); tr.Cells.Add(tdAction); tdAction.Attributes.Add("class", "tabDetailViewDL"); tdAction.NoWrap = true; Literal litIndex = new Literal(); tdAction.Controls.Add(litIndex); litIndex.Text = " " + nFIELD_INDEX.ToString() + " "; // 05/26/2007 Paul. Fix the terms. The are in the Dropdown module. ImageButton btnMoveUp = CreateLayoutImageButton(gID, "Layout.MoveUp" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_UP" ), Sql.ToString(Session["themeURL"]) + "images/uparrow_inline.gif" , Page_Command); ImageButton btnMoveDown = CreateLayoutImageButton(gID, "Layout.MoveDown", nFIELD_INDEX, L10n.Term("Dropdown.LNK_DOWN" ), Sql.ToString(Session["themeURL"]) + "images/downarrow_inline.gif", Page_Command); ImageButton btnInsert = CreateLayoutImageButton(gID, "Layout.Insert" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_INS" ), Sql.ToString(Session["themeURL"]) + "images/plus_inline.gif" , Page_Command); ImageButton btnEdit = CreateLayoutImageButton(gID, "Layout.Edit" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_EDIT" ), Sql.ToString(Session["themeURL"]) + "images/edit_inline.gif" , Page_Command); ImageButton btnDelete = CreateLayoutImageButton(gID, "Layout.Delete" , nFIELD_INDEX, L10n.Term("Dropdown.LNK_DELETE"), Sql.ToString(Session["themeURL"]) + "images/delete_inline.gif" , Page_Command); tdAction.Controls.Add(btnMoveUp ); tdAction.Controls.Add(btnMoveDown); tdAction.Controls.Add(btnInsert ); tdAction.Controls.Add(btnEdit ); tdAction.Controls.Add(btnDelete ); } HtmlTableCell tdLabel = new HtmlTableCell(); HtmlTableCell tdField = new HtmlTableCell(); tr.Cells.Add(tdLabel); tr.Cells.Add(tdField); if ( nCOLSPAN > 0 ) { tdField.ColSpan = nCOLSPAN; if ( bLayoutMode ) tdField.ColSpan++; } tdLabel.Attributes.Add("class", "tabDetailViewDL"); tdLabel.VAlign = "top"; tdLabel.Width = sLABEL_WIDTH; tdField.Attributes.Add("class", "tabDetailViewDF"); tdField.VAlign = "top"; // 11/28/2005 Paul. Don't use the field width if COLSPAN is specified as we want it to take the rest of the table. The label width will be sufficient. if ( nCOLSPAN == 0 ) tdField.Width = sFIELD_WIDTH; Literal litLabel = new Literal(); HyperLink lnkField = null; tdLabel.Controls.Add(litLabel); //litLabel.Text = nFIELD_INDEX.ToString() + " (" + nRowIndex.ToString() + "," + nColIndex.ToString() + ")"; try { if ( bLayoutMode ) litLabel.Text = sDATA_LABEL; else if ( sDATA_LABEL.IndexOf(".") >= 0 ) litLabel.Text = L10n.Term(sDATA_LABEL); else if ( !Sql.IsEmptyString(sDATA_LABEL) && rdr != null ) { // 01/27/2008 Paul. If the data label is not in the schema table, then it must be free-form text. // It is not used often, but we allow the label to come from the result set. For example, // when the parent is stored in the record, we need to pull the module name from the record. if ( tblSchema != null && tblSchema.Columns.Contains(sDATA_LABEL) ) litLabel.Text = Sql.ToString(rdr[sDATA_LABEL]) + L10n.Term("Calls.LBL_COLON"); else litLabel.Text = sDATA_LABEL; } // 07/15/2006 Paul. Always put something for the label so that table borders will look right. else litLabel.Text = " "; } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litLabel.Text = ex.Message; } if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) { Literal litField = new Literal(); tdField.Controls.Add(litField); if ( bLayoutMode ) { litLabel.Text = "*** BLANK ***"; litField.Text = "*** BLANK ***"; } else { // 12/03/2006 Paul. Make sure to clear the label. This is necessary to convert a TEAM to blank when disabled. litLabel.Text = " "; litField.Text = " "; } } else if ( String.Compare(sFIELD_TYPE, "Line", true) == 0 ) { if ( bLayoutMode ) { Literal litField = new Literal(); tdField.Controls.Add(litField); litLabel.Text = "*** LINE ***"; litField.Text = "*** LINE ***"; } else { tr.Cells.Clear(); } } else if ( String.Compare(sFIELD_TYPE, "String", true) == 0 ) { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/06/2005 Paul. Wrap all string fields in a SPAN tag to simplify regression testing. HtmlGenericControl spnField = new HtmlGenericControl("span"); tdField.Controls.Add(spnField); spnField.ID = sDATA_FIELD; Literal litField = new Literal(); spnField.Controls.Add(litField); try { string[] arrLIST_NAME = sLIST_NAME .Split(' '); string[] arrDATA_FIELD = sDATA_FIELD.Split(' '); object[] objDATA_FIELD = new object[arrDATA_FIELD.Length]; for ( int i=0 ; i < arrDATA_FIELD.Length; i++ ) { if ( arrDATA_FIELD[i].IndexOf(".") >= 0 ) { objDATA_FIELD[i] = L10n.Term(arrDATA_FIELD[i]); } else if ( !Sql.IsEmptyString(sLIST_NAME) ) { if ( arrLIST_NAME.Length == arrDATA_FIELD.Length ) { if ( rdr != null ) { // 01/18/2007 Paul. If AssignedUser list, then use the cached value to find the value. if ( sLIST_NAME == "AssignedUser" ) { objDATA_FIELD[i] = SplendidCache.AssignedUser(Sql.ToGuid(rdr[arrDATA_FIELD[i]])); } else { objDATA_FIELD[i] = L10n.Term("." + arrLIST_NAME[i] + ".", rdr[arrDATA_FIELD[i]]); } } else objDATA_FIELD[i] = String.Empty; } } else if ( !Sql.IsEmptyString(arrDATA_FIELD[i]) ) { if ( rdr != null && rdr[arrDATA_FIELD[i]] != DBNull.Value) { // 12/05/2005 Paul. If the data is a DateTime field, then make sure to perform the timezone conversion. if ( rdr[arrDATA_FIELD[i]].GetType() == Type.GetType("System.DateTime") ) objDATA_FIELD[i] = T10n.FromServerTime(rdr[arrDATA_FIELD[i]]); else objDATA_FIELD[i] = rdr[arrDATA_FIELD[i]]; } else objDATA_FIELD[i] = String.Empty; } } if ( rdr != null ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) { for ( int i=0; i < arrDATA_FIELD.Length; i++ ) arrDATA_FIELD[i] = Sql.ToString(objDATA_FIELD[i]); litField.Text = String.Join(" ", arrDATA_FIELD); } else if ( sDATA_FORMAT == "{0:c}" && C10n != null ) { // 03/30/2007 Paul. Convert DetailView currencies on the fly. // 05/05/2007 Paul. In an earlier step, we convert NULLs to empty strings. // Attempts to convert to decimal will generate an error: Input string was not in a correct format. if ( !(objDATA_FIELD[0] is string) ) { Decimal d = C10n.ToCurrency(Convert.ToDecimal(objDATA_FIELD[0])); litField.Text = d.ToString("c"); } } else litField.Text = String.Format(sDATA_FORMAT, objDATA_FIELD); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "CheckBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { CheckBox chkField = new CheckBox(); tdField.Controls.Add(chkField); chkField.Enabled = false ; chkField.CssClass = "checkbox"; // 03/16/2006 Paul. Give the checkbox a name so that it can be validated with SplendidTest. chkField.ID = sDATA_FIELD; try { if ( rdr != null ) chkField.Checked = Sql.ToBoolean(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } } } else if ( String.Compare(sFIELD_TYPE, "Button", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Button btnField = new Button(); tdField.Controls.Add(btnField); btnField.CssClass = "button"; // 03/16/2006 Paul. Give the button a name so that it can be validated with SplendidTest. btnField.ID = sDATA_FIELD; if ( Page_Command != null ) { btnField.Command += Page_Command; btnField.CommandName = sDATA_FORMAT ; } try { if ( bLayoutMode ) { btnField.Text = sDATA_FIELD; btnField.Enabled = false ; } else if ( sDATA_FIELD.IndexOf(".") >= 0 ) { btnField.Text = L10n.Term(sDATA_FIELD); } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { btnField.Text = Sql.ToString(rdr[sDATA_FIELD]); } btnField.Attributes.Add("title", btnField.Text); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); btnField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "Textbox", true) == 0 ) { /* if ( !Sql.IsEmptyString(sDATA_FIELD) ) { TextBox txtField = new TextBox(); tdField.Controls.Add(txtField); txtField.ReadOnly = true; txtField.TextMode = TextBoxMode.MultiLine; // 03/16/2006 Paul. Give the textbox a name so that it can be validated with SplendidTest. txtField.ID = sDATA_FIELD; try { string[] arrDATA_FORMAT = sDATA_FORMAT.Split(','); if ( arrDATA_FORMAT.Length == 2 ) { txtField.Rows = Sql.ToInteger(arrDATA_FORMAT[0]); txtField.Columns = Sql.ToInteger(arrDATA_FORMAT[1]); } if ( bLayoutMode ) { txtField.Text = sDATA_FIELD; } else if ( !Sql.IsEmptyString(sDATA_FIELD) && rdr != null ) { txtField.Text = Sql.ToString(rdr[sDATA_FIELD]); } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtField.Text = ex.Message; } } */ // 07/07/2007 Paul. Instead of using a real textbox, just replace new lines with <br />. // This will perserve a majority of the HTML formating if it exists. if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/06/2005 Paul. Wrap all string fields in a SPAN tag to simplify regression testing. HtmlGenericControl spnField = new HtmlGenericControl("span"); tdField.Controls.Add(spnField); spnField.ID = sDATA_FIELD; Literal litField = new Literal(); spnField.Controls.Add(litField); try { if ( rdr != null ) { string sDATA = Sql.ToString(rdr[sDATA_FIELD]); // 07/07/2007 Paul. Emails may not have the proper \r\n terminators, so perform a few extra steps to ensure clean data. sDATA = sDATA.Replace("\r\n", "\n"); sDATA = sDATA.Replace("\r" , "\n"); sDATA = sDATA.Replace("\n" , "<br />\r\n"); litField.Text = sDATA; } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litField.Text = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "HyperLink", true) == 0 ) { string sURL_FIELD = Sql.ToString (row["URL_FIELD"]); if ( !Sql.IsEmptyString(sDATA_FIELD) && !Sql.IsEmptyString(sURL_FIELD) ) { string sURL_FORMAT = Sql.ToString (row["URL_FORMAT"]); string sURL_TARGET = Sql.ToString (row["URL_TARGET"]); lnkField = new HyperLink(); tdField.Controls.Add(lnkField); lnkField.Target = sURL_TARGET; lnkField.CssClass = "tabDetailViewDFLink"; // 03/16/2006 Paul. Give the hyperlink a name so that it can be validated with SplendidTest. lnkField.ID = sDATA_FIELD; try { if ( bLayoutMode ) { lnkField.Text = sDATA_FIELD; lnkField.Enabled = false ; } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) lnkField.Text = Sql.ToString(rdr[sDATA_FIELD]); else lnkField.Text = String.Format(sDATA_FORMAT, Sql.ToString(rdr[sDATA_FIELD])); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); lnkField.Text = ex.Message; } try { if ( bLayoutMode ) { lnkField.NavigateUrl = sURL_FIELD; } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sURL_FIELD]) ) { // 01/09/2006 Paul. Allow DATA_FORMAT to be optional. If missing, write data directly. if ( sDATA_FORMAT == String.Empty ) lnkField.NavigateUrl = Sql.ToString(rdr[sURL_FIELD]); else lnkField.NavigateUrl = String.Format(sURL_FORMAT, Sql.ToString(rdr[sURL_FIELD])); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); lnkField.NavigateUrl = ex.Message; } } } else if ( String.Compare(sFIELD_TYPE, "Image", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Image imgField = new Image(); // 04/13/2006 Paul. Give the image a name so that it can be validated with SplendidTest. imgField.ID = sDATA_FIELD; try { if ( bLayoutMode ) { Literal litField = new Literal(); litField.Text = sDATA_FIELD; tdField.Controls.Add(litField); } else if ( rdr != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { imgField.ImageUrl = "~/Images/Image.aspx?ID=" + Sql.ToString(rdr[sDATA_FIELD]); // 04/13/2006 Paul. Only add the image if it exists. tdField.Controls.Add(imgField); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); lnkField.Text = ex.Message; } } } else { Literal litField = new Literal(); tdField.Controls.Add(litField); litField.Text = "Unknown field type " + sFIELD_TYPE; // 01/07/2006 Paul. Don't report the error in layout mode. if ( !bLayoutMode ) SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "Unknown field type " + sFIELD_TYPE); } // 12/02/2007 Paul. Each view can now have its own number of data columns. // This was needed so that search forms can have 4 data columns. The default is 2 columns. if ( nCOLSPAN > 0 ) nColIndex += nCOLSPAN; else if ( nCOLSPAN == 0 ) nColIndex++; if ( nColIndex >= nDATA_COLUMNS ) nColIndex = 0; } }
public get_entry_result get_entries(string session, string module_name, string[] ids, string[] select_fields) { Guid gUSER_ID = GetSessionUserID(session); Guid gTIMEZONE = Sql.ToGuid(HttpContext.Current.Cache.Get("soap.user.timezone." + gUSER_ID.ToString())); TimeZone T10n = TimeZone.CreateTimeZone(gTIMEZONE); string sTABLE_NAME = VerifyModuleName(module_name); int nACLACCESS = Security.GetUserAccess(module_name, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } get_entry_result results = new get_entry_result(); // 02/19/2006 Paul. Exit early if nothing to get. We need to prevent fetching all recods. if ( ids.Length == 0 ) return results; DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; // 02/16/2006 Paul. Convert the table name to a VIEW. We can do this because we don't want deleted records. // 02/18/2006 Paul. Use the Edit view as it will include description, content, etc. sSQL = "select *" + ControlChars.CrLf + " from vw" + sTABLE_NAME + "_Edit" + ControlChars.CrLf + " where 1 = 1" + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; // 02/19/2006 Paul. Need to filter by the IDs povided. Sql.AppendParameter(cmd, ids, "ID"); if ( nACLACCESS == ACL_ACCESS.OWNER ) { // 09/01/2006 Paul. Notes do not have an ASSIGNED_USER_ID. if ( sTABLE_NAME != "NOTES" ) Sql.AppendParameter(cmd, gUSER_ID, "ASSIGNED_USER_ID"); } try { CultureInfo ciEnglish = CultureInfo.CreateSpecificCulture("en-US"); using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { // 02/20/2006 Paul. First initialize the array. results.field_list = new field [select_fields.Length]; results.entry_list = new entry_value[dt.Rows.Count]; for ( int i=0; i < select_fields.Length; i++ ) { string sColumnName = select_fields[i]; DataColumn col = dt.Columns[sColumnName]; // 02/21/2006 Paul. Column may not exist. For example, we don't return a MEETINGS.TIME_START. if ( col != null ) { // 02/20/2006 Paul. Then initialize each element in the array. // 02/16/2006 Paul. We don't have a mapping for the labels, so just return the column name. // varchar, bool, datetime, int, text, blob results.field_list[i] = new field(sColumnName.ToLower(), col.DataType.ToString(), sColumnName, 0); } } // 02/16/2006 Paul. SugarCRM 3.5.1 returns all fields even though only a few were requested. We will do the same. int nItem = 0; foreach ( DataRow row in dt.Rows ) { // 02/20/2006 Paul. Then initialize each element in the array. results.entry_list[nItem] = new entry_value(); results.entry_list[nItem].id = Sql.ToGuid(row["ID"]).ToString(); results.entry_list[nItem].module_name = module_name; // 02/20/2006 Paul. First initialize the array. results.entry_list[nItem].name_value_list = new name_value[dt.Columns.Count]; int nColumn = 0; foreach ( DataColumn col in dt.Columns ) { // 02/20/2006 Paul. Then initialize each element in the array. // 08/17/2006 Paul. We need to convert all dates to UniversalTime. if ( Information.IsDate(row[col.ColumnName]) ) { // 08/17/2006 Paul. The time on the server and the time in the database are both considered ServerTime. DateTime dtServerTime = Sql.ToDateTime(row[col.ColumnName]); // 08/17/2006 Paul. We need a special function to convert to UniversalTime because it might already be in UniversalTime, based on m_bGMTStorage flag. DateTime dtUniversalTime = T10n.ToUniversalTimeFromServerTime(dtServerTime); results.entry_list[nItem].name_value_list[nColumn] = new name_value(col.ColumnName.ToLower(), dtUniversalTime.ToString(CalendarControl.SqlDateTimeFormat, ciEnglish.DateTimeFormat)); } else { results.entry_list[nItem].name_value_list[nColumn] = new name_value(col.ColumnName.ToLower(), Sql.ToString(row[col.ColumnName])); } nColumn++; } nItem++; } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed get_entries", ex)); } } } return results; }
public static DataTable ReportingModules() { System.Web.Caching.Cache Cache = HttpContext.Current.Cache; DataTable dt = Cache.Get("vwMODULES_Reporting_" + Security.USER_ID.ToString()) as DataTable; if ( dt == null ) { L10N L10n = new L10N(HttpContext.Current.Session["USER_SETTINGS/CULTURE"] as string); try { DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select MODULE_NAME " + ControlChars.CrLf + " , DISPLAY_NAME " + ControlChars.CrLf + " from vwMODULES_Reporting " + ControlChars.CrLf + " where USER_ID = @USER_ID " + ControlChars.CrLf + " or USER_ID is null " + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@USER_ID", Security.USER_ID); using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; dt = new DataTable(); da.Fill(dt); foreach(DataRow row in dt.Rows) { row["DISPLAY_NAME"] = L10n.Term(Sql.ToString(row["DISPLAY_NAME"])); } Cache.Insert("vwMODULES_Reporting_" + Security.USER_ID.ToString(), dt, null, DefaultCacheExpiration(), Cache.NoSlidingExpiration); } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex.Message); // 10/16/2005 Paul. Ignore list errors. } } return dt; }
public get_entry_list_result get_entry_list(string session, string module_name, string query, string order_by, int offset, string[] select_fields, int max_results, int deleted) { Guid gUSER_ID = GetSessionUserID(session); Guid gTIMEZONE = Sql.ToGuid(HttpContext.Current.Cache.Get("soap.user.timezone." + gUSER_ID.ToString())); TimeZone T10n = TimeZone.CreateTimeZone(gTIMEZONE); if ( offset < 0 ) throw(new Exception("offset must be a non-negative number")); if ( max_results <= 0 ) throw(new Exception("max_results must be a postive number")); string sTABLE_NAME = VerifyModuleName(module_name); query = query.ToUpper(); order_by = order_by.ToUpper(); query = query .Replace(sTABLE_NAME + ".", String.Empty); order_by = order_by.Replace(sTABLE_NAME + ".", String.Empty); int nACLACCESS = Security.GetUserAccess(module_name, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } get_entry_list_result results = new get_entry_list_result(); DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; sSQL = "select *" + ControlChars.CrLf + " from " + sTABLE_NAME + ControlChars.CrLf + " where DELETED = @DELETED" + ControlChars.CrLf; using ( IDbCommand cmd = con.CreateCommand() ) { if ( !Sql.IsEmptyString(query) ) { // 02/16/2006 Paul. As much as I dislike the idea of allowing a query string, // I don't have the time to parse this. // 03/08/2006 Paul. Prepend the AND clause. sSQL += " and " + query + ControlChars.CrLf; } cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@DELETED", Math.Min(deleted, 1)); if ( nACLACCESS == ACL_ACCESS.OWNER ) { // 09/01/2006 Paul. Notes do not have an ASSIGNED_USER_ID. if ( sTABLE_NAME != "NOTES" ) Sql.AppendParameter(cmd, gUSER_ID, "ASSIGNED_USER_ID"); } try { CultureInfo ciEnglish = CultureInfo.CreateSpecificCulture("en-US"); using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { // 02/16/2006 Paul. Don't sort in the database as it provides a hacker another attempt at SQL-Injection. // Bad sort values will just throw an exception here. DataView dv = new DataView(dt); dv.Sort = order_by; results.result_count = Math.Min(dt.Rows.Count - offset, max_results); results.next_offset = offset + results.result_count; // 02/20/2006 Paul. First initialize the array. results.field_list = new field [select_fields.Length]; results.entry_list = new entry_value[results.result_count]; for ( int i=0; i < select_fields.Length; i++ ) { string sColumnName = select_fields[i]; DataColumn col = dt.Columns[sColumnName]; // 02/20/2006 Paul. Then initialize each element in the array. // 02/16/2006 Paul. We don't have a mapping for the labels, so just return the column name. // varchar, bool, datetime, int, text, blob results.field_list[i] = new field(sColumnName.ToLower(), col.DataType.ToString(), sColumnName, 0); } // 02/16/2006 Paul. SugarCRM 3.5.1 returns all fields even though only a few were requested. We will do the same. int j = 0; foreach ( DataRowView row in dv ) { if ( j >= offset && j < offset + results.result_count ) { int nItem = j - offset; // 02/20/2006 Paul. Then initialize each element in the array. results.entry_list[nItem] = new entry_value(); results.entry_list[nItem].id = Sql.ToGuid(row["ID"]).ToString(); results.entry_list[nItem].module_name = module_name; // 02/20/2006 Paul. First initialize the array. results.entry_list[nItem].name_value_list = new name_value[dt.Columns.Count]; int nColumn = 0; foreach ( DataColumn col in dt.Columns ) { // 02/20/2006 Paul. Then initialize each element in the array. // 08/17/2006 Paul. We need to convert all dates to UniversalTime. if ( Information.IsDate(row[col.ColumnName]) ) { // 08/17/2006 Paul. The time on the server and the time in the database are both considered ServerTime. DateTime dtServerTime = Sql.ToDateTime(row[col.ColumnName]); // 08/17/2006 Paul. We need a special function to convert to UniversalTime because it might already be in UniversalTime, based on m_bGMTStorage flag. DateTime dtUniversalTime = T10n.ToUniversalTimeFromServerTime(dtServerTime); results.entry_list[nItem].name_value_list[nColumn] = new name_value(col.ColumnName.ToLower(), dtUniversalTime.ToString(CalendarControl.SqlDateTimeFormat, ciEnglish.DateTimeFormat)); } else { results.entry_list[nItem].name_value_list[nColumn] = new name_value(col.ColumnName.ToLower(), Sql.ToString(row[col.ColumnName])); } nColumn++; } } j++; } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed get_entry_list", ex)); } } } return results; }
public static string TableColumnName(L10N L10n, string sModule, string sDISPLAY_NAME) { // 07/04/2006 Paul. Some columns have global terms. // 06/05/2007 Paul. Add Team global term. if ( sDISPLAY_NAME == "DATE_ENTERED" || sDISPLAY_NAME == "DATE_MODIFIED" || sDISPLAY_NAME == "ASSIGNED_TO" || sDISPLAY_NAME == "CREATED_BY" || sDISPLAY_NAME == "MODIFIED_BY" || sDISPLAY_NAME == "TEAM_NAME" ) { sDISPLAY_NAME = L10n.Term(".LBL_" + sDISPLAY_NAME).Replace(":", ""); } else { // 07/04/2006 Paul. Column names are aliased so that we don't have to redefine terms. sDISPLAY_NAME = L10n.AliasedTerm(sModule + ".LBL_" + sDISPLAY_NAME).Replace(":", ""); } return sDISPLAY_NAME; }
public get_relationships_result get_relationships(string session, string module_name, string module_id, string related_module, string related_module_query, int deleted) { Guid gUSER_ID = GetSessionUserID(session); Guid gTIMEZONE = Sql.ToGuid(HttpContext.Current.Cache.Get("soap.user.timezone." + gUSER_ID.ToString())); TimeZone T10n = TimeZone.CreateTimeZone(gTIMEZONE); string sTABLE_NAME = VerifyModuleName(module_name ); int nACLACCESS = Security.GetUserAccess(module_name, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } sTABLE_NAME = VerifyModuleName(related_module); nACLACCESS = Security.GetUserAccess(related_module, "list"); if ( nACLACCESS < 0 ) { L10N L10n = new L10N("en-US"); throw(new Exception(L10n.Term("ACL.LBL_INSUFFICIENT_ACCESS"))); } get_relationships_result results = new get_relationships_result(); DbProviderFactory dbf = DbProviderFactories.GetFactory(); using ( IDbConnection con = dbf.CreateConnection() ) { con.Open(); string sSQL; // 02/16/2006 Paul. Providing a way to directly access tables is a hacker's dream. // We will not do that here. We will require that all relationships be defined in a SQL view. using ( IDbCommand cmd = con.CreateCommand() ) { switch ( module_name ) { case "Contacts": { switch ( related_module ) { case "Calls": { sSQL = "select * " + ControlChars.CrLf + " from vwCONTACTS_CALLS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Meetings": { sSQL = "select * " + ControlChars.CrLf + " from vwCONTACTS_MEETINGS_Soap" + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Users": { sSQL = "select * " + ControlChars.CrLf + " from vwCONTACTS_USERS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { throw(new Exception(String.Format("A related_module_query is not allowed at this time.", module_name, related_module))); } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } break; } case "Users": { switch ( related_module ) { case "Calls": { sSQL = "select * " + ControlChars.CrLf + " from vwUSERS_CALLS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Meetings": { sSQL = "select * " + ControlChars.CrLf + " from vwUSERS_MEETINGS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Contacts": { sSQL = "select * " + ControlChars.CrLf + " from vwUSERS_CONTACTS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { throw(new Exception(String.Format("A related_module_query is not allowed at this time.", module_name, related_module))); } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } break; } case "Meetings": { switch ( related_module ) { case "Contacts": { sSQL = "select * " + ControlChars.CrLf + " from vwMEETINGS_CONTACTS_Soap" + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Users": { sSQL = "select * " + ControlChars.CrLf + " from vwMEETINGS_USERS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } break; } case "Calls": { switch ( related_module ) { case "Contacts": { sSQL = "select * " + ControlChars.CrLf + " from vwCALLS_CONTACTS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } case "Users": { sSQL = "select * " + ControlChars.CrLf + " from vwCALLS_USERS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { DateTime dtBeginDate = DateTime.MinValue; DateTime dtEndDate = DateTime.MinValue; ParseDateRange(related_module_query, "DATE_START", T10n, ref dtBeginDate, ref dtEndDate); if ( dtBeginDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START > @BEGIN_DATE" + ControlChars.CrLf; Sql.AddParameter(cmd, "@BEGIN_DATE", dtBeginDate); } if ( dtEndDate != DateTime.MinValue ) { cmd.CommandText += " and DATE_START < @END_DATE " + ControlChars.CrLf; Sql.AddParameter(cmd, "@END_DATE" , dtEndDate ); } } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } break; } case "Accounts": { switch ( related_module ) { case "Contacts": { sSQL = "select * " + ControlChars.CrLf + " from vwACCOUNTS_CONTACTS_Soap" + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { throw(new Exception(String.Format("A related_module_query is not allowed at this time.", module_name, related_module))); } break; } case "Users": { sSQL = "select * " + ControlChars.CrLf + " from vwACCOUNTS_USERS_Soap " + ControlChars.CrLf + " where PRIMARY_ID = @PRIMARY_ID" + ControlChars.CrLf + " and DELETED = @DELETED " + ControlChars.CrLf; cmd.CommandText = sSQL; Sql.AddParameter(cmd, "@PRIMARY_ID", module_id ); Sql.AddParameter(cmd, "@DELETED" , Math.Min(deleted, 1)); if ( !Sql.IsEmptyString(related_module_query) ) { throw(new Exception(String.Format("A related_module_query is not allowed at this time.", module_name, related_module))); } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } break; } default: { throw(new Exception(String.Format("Relationship between {0} and {1} is not defined", module_name, related_module))); } } try { CultureInfo ciEnglish = CultureInfo.CreateSpecificCulture("en-US"); using ( DbDataAdapter da = dbf.CreateDataAdapter() ) { ((IDbDataAdapter)da).SelectCommand = cmd; using ( DataTable dt = new DataTable() ) { da.Fill(dt); if ( dt.Rows.Count > 0 ) { results.ids = new id_mod[dt.Rows.Count]; int i = 0; foreach ( DataRow row in dt.Rows ) { results.ids[i] = new id_mod(); results.ids[i].id = Sql.ToString (row["RELATED_ID" ]); results.ids[i].deleted = Sql.ToInteger (row["DELETED" ]); // 06/13/2006 Paul. Italian has a problem with the time separator. Use the value from the culture from CalendarControl.SqlDateTimeFormat. // 06/14/2006 Paul. The Italian problem was that it was using the culture separator, but DataView only supports the en-US format. // 08/17/2006 Paul. The time on the server and the time in the database are both considered ServerTime. DateTime dtDATE_MODIFIED_ServerTime = Sql.ToDateTime(row["DATE_MODIFIED"]); // 08/17/2006 Paul. We need a special function to convert to UniversalTime because it might already be in UniversalTime, based on m_bGMTStorage flag. DateTime dtDATE_MODIFIED_UniversalTime = T10n.ToUniversalTimeFromServerTime(dtDATE_MODIFIED_ServerTime); results.ids[i].date_modified = dtDATE_MODIFIED_UniversalTime.ToString(CalendarControl.SqlDateTimeFormat, ciEnglish.DateTimeFormat); i++; } } } } } catch(Exception ex) { SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex); throw(new Exception("SOAP: Failed get_relationships", ex)); } } } return results; }
// 05/26/2007 Paul. We need a way set the fields without creating the controls. public static void SetEditViewFields(System.Web.UI.UserControl Parent, string sEDIT_NAME, IDataReader rdr, L10N L10n, TimeZone T10n) { // 01/01/2008 Paul. Pull config flag outside the loop. bool bEnableTeamManagement = Crm.Config.enable_team_management(); DataTable dtFields = SplendidCache.EditViewFields(sEDIT_NAME); DataView dvFields = dtFields.DefaultView; foreach(DataRowView row in dvFields) { string sFIELD_TYPE = Sql.ToString (row["FIELD_TYPE" ]); string sDATA_LABEL = Sql.ToString (row["DATA_LABEL" ]); string sDATA_FIELD = Sql.ToString (row["DATA_FIELD" ]); string sDISPLAY_FIELD = Sql.ToString (row["DISPLAY_FIELD" ]); int nFORMAT_ROWS = Sql.ToInteger(row["FORMAT_ROWS" ]); if ( sDATA_FIELD == "TEAM_ID" ) { if ( !bEnableTeamManagement ) { sFIELD_TYPE = "Blank"; } } if ( String.Compare(sFIELD_TYPE, "Blank", true) == 0 ) { } else if ( String.Compare(sFIELD_TYPE, "Label", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { Literal litField = Parent.FindControl(sDATA_FIELD) as Literal; if ( litField != null ) { try { if ( sDATA_FIELD.IndexOf(".") >= 0 ) litField.Text = L10n.Term(sDATA_FIELD); else litField.Text = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); litField.Text = ex.Message; } } } } else if ( String.Compare(sFIELD_TYPE, "ListBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { if ( nFORMAT_ROWS > 0 ) { // 12/02/2007 Paul. If format rows > 0 then this is a list box and not a drop down list. ListBox lstField = Parent.FindControl(sDATA_FIELD) as ListBox; if ( lstField != null ) { lstField.SelectedValue = Sql.ToString(rdr[sDATA_FIELD]); } } else { DropDownList lstField = Parent.FindControl(sDATA_FIELD) as DropDownList; if ( lstField != null ) { lstField.SelectedValue = Sql.ToString(rdr[sDATA_FIELD]); } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } else if ( String.Compare(sFIELD_TYPE, "CheckBox", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { CheckBox chkField = Parent.FindControl(sDATA_FIELD) as CheckBox; if ( chkField != null ) chkField.Checked = Sql.ToBoolean(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } else if ( String.Compare(sFIELD_TYPE, "ChangeButton", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { // 12/04/2005 Paul. If the label is PARENT_TYPE, then change the label to a DropDownList. if ( sDATA_LABEL == "PARENT_TYPE" ) { DropDownList lstField = Parent.FindControl(sDATA_LABEL) as DropDownList; if ( lstField != null ) { try { lstField.SelectedValue = Sql.ToString(rdr[sDATA_LABEL]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } TextBox txtNAME = Parent.FindControl(sDISPLAY_FIELD) as TextBox; if ( txtNAME != null ) { try { if ( !Sql.IsEmptyString(sDISPLAY_FIELD) ) txtNAME.Text = Sql.ToString(rdr[sDISPLAY_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtNAME.Text = ex.Message; } HtmlInputHidden hidID = Parent.FindControl(sDATA_FIELD) as HtmlInputHidden; if ( hidID != null ) { try { hidID.Value = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtNAME.Text = ex.Message; } } } } } else if ( String.Compare(sFIELD_TYPE, "TextBox", true) == 0 || String.Compare(sFIELD_TYPE, "Password", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { TextBox txtField = Parent.FindControl(sDATA_FIELD) as TextBox; if ( txtField != null ) { try { int nOrdinal = rdr.GetOrdinal(sDATA_FIELD); string sTypeName = rdr.GetDataTypeName(nOrdinal); if ( sTypeName == "money" || rdr[sDATA_FIELD].GetType() == typeof(System.Decimal) ) txtField.Text = Sql.ToDecimal(rdr[sDATA_FIELD]).ToString("#,##0.00"); else txtField.Text = Sql.ToString(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); txtField.Text = ex.Message; } } } } else if ( String.Compare(sFIELD_TYPE, "DatePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { DatePicker ctlDate = Parent.FindControl(sDATA_FIELD) as DatePicker; if ( ctlDate != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { DateTimePicker ctlDate = Parent.FindControl(sDATA_FIELD) as DateTimePicker; if ( ctlDate != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } else if ( String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { DateTimeEdit ctlDate = Parent.FindControl(sDATA_FIELD) as DateTimeEdit; if ( ctlDate != null ) ctlDate.Value = T10n.FromServerTime(rdr[sDATA_FIELD]); } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } else if ( String.Compare(sFIELD_TYPE, "File", true) == 0 ) { } else if ( String.Compare(sFIELD_TYPE, "Image", true) == 0 ) { if ( !Sql.IsEmptyString(sDATA_FIELD) ) { try { HtmlInputHidden ctlHidden = Parent.FindControl(sDATA_FIELD) as HtmlInputHidden; Image imgField = Parent.FindControl("img" + sDATA_FIELD) as Image; if ( ctlHidden != null && imgField != null ) { if ( !Sql.IsEmptyString(rdr[sDATA_FIELD]) ) { ctlHidden.Value = Sql.ToString(rdr[sDATA_FIELD]); imgField.ImageUrl = "~/Images/Image.aspx?ID=" + ctlHidden.Value; } } } catch(Exception ex) { SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), ex); } } } } }