protected void SetUpStudents() { if (Request.IsMobileDevice()) { mfbIlOfflineEndorsements.Columns = 1; } mfuOfflineEndorsements.Class = MyFlightbook.Image.MFBImageInfo.ImageClass.OfflineEndorsement; mfbIlOfflineEndorsements.Key = Page.User.Identity.Name; mfbIlOfflineEndorsements.Refresh(); byte[] rgbDefaultScribble = CFIStudentMap.DefaultScribbleForInstructor(m_pf); mvDefaultSig.SetActiveView(vwCurrentSig); if (rgbDefaultScribble == null || rgbDefaultScribble.Length == 0) { lnkEditDefaultSig.Text = Resources.LocalizedText.StudentSigningDefaultScribbleAdd; imgCurrSig.Src = string.Empty; } else { imgCurrSig.Src = ScribbleImage.DataLinkForByteArray(rgbDefaultScribble); } Profile pf = Profile.GetUser(Page.User.Identity.Name); pnlCertificate.Visible = String.IsNullOrEmpty(pf.Certificate); txtCertificate.Text = pf.Certificate; mfbTypeInDateCFIExpiration.Date = pf.CertificateExpiration; mfbScribbleSignature.WatermarkRef = ResolveClientUrl("~/images/rubberstamp.png"); }
protected void btnSaveDefaultSig_Click(object sender, EventArgs e) { byte[] rgbSig = mfbScribbleSignature.Base64Data(); CFIStudentMap.SetDefaultScribbleForInstructor(m_pf, rgbSig); imgCurrSig.Src = ScribbleImage.DataLinkForByteArray(rgbSig); imgCurrSig.Visible = (rgbSig.Length != 0); lnkEditDefaultSig.Text = (rgbSig.Length == 0) ? Resources.LocalizedText.StudentSigningDefaultScribbleAdd : Resources.LocalizedText.StudentSigningDefaultScribbleEdit; mvDefaultSig.SetActiveView(vwCurrentSig); }
protected void Page_Load(object sender, EventArgs e) { Master.SelectedTab = tabID.tabTraining; if (!IsPostBack) { hdnStudent.Value = Page.User.Identity.Name; //default string szStudent = util.GetStringParam(Request, "student"); CFIStudentMap sm = new CFIStudentMap(Page.User.Identity.Name); InstructorStudent student = CFIStudentMap.GetInstructorStudent(sm.Students, szStudent); if (student == null) { lblErr.Text = Resources.SignOff.ViewStudentNoSuchStudent; } else { if (!student.CanViewLogbook) { lblErr.Text = Master.Title = Resources.SignOff.ViewStudentLogbookUnauthorized; } else { // If we're here, we are authorized lblHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.SignOff.ViewStudentLogbookHeader, HttpUtility.HtmlEncode(student.UserFullName)); hdnStudent.Value = student.UserName; Restriction = new FlightQuery(student.UserName); if (mfbLogbook1.CanResignValidFlights = student.CanAddLogbook) { mfbEditFlight.FlightUser = student.UserName; mfbEditFlight.SetUpNewOrEdit(LogbookEntryBase.idFlightNew); } else { apcNewFlight.Container.Style["display"] = "none"; } if (!String.IsNullOrEmpty(hdnStudent.Value)) { UpdateForUser(hdnStudent.Value); } mfbSearchForm.Username = student.UserName; ResolvePrintLink(); } } pnlLogbook.Visible = (lblErr.Text.Length == 0); } if (pnlLogbook.Visible && mfbChartTotals.Visible) { mfbChartTotals.HistogramManager = LogbookEntryDisplay.GetHistogramManager(mfbLogbook1.Data, hdnStudent.Value); // do this every time, since charttotals doesn't persist its data. } }
/// <summary> /// Checks to see if the viewer is an instructor of the owner of the flight; throws an exception if not. /// </summary> /// <param name="szFlightOwner">The owner of the flight</param> protected static void CheckCanViewFlight(string szFlightOwner, string szViewer) { if (szFlightOwner == null) { throw new ArgumentNullException(nameof(szFlightOwner)); } if (szViewer == null) { throw new ArgumentNullException(nameof(szViewer)); } MyFlightbook.Instruction.CFIStudentMap sm = new MyFlightbook.Instruction.CFIStudentMap(szViewer); InstructorStudent student = MyFlightbook.Instruction.CFIStudentMap.GetInstructorStudent(sm.Students, szFlightOwner); if (student == null || !student.CanViewLogbook) { throw new MyFlightbookException(Resources.SignOff.ViewStudentLogbookUnauthorized); } }
protected void SetUpInstructorList(string szBestGuessInstructor) { CFIStudentMap sm = new CFIStudentMap(User.Identity.Name); cmbInstructors.DataSource = sm.Instructors; cmbInstructors.DataBind(); if (!String.IsNullOrEmpty(szBestGuessInstructor)) { foreach (ListItem li in cmbInstructors.Items) { if (li.Text.CompareCurrentCultureIgnoreCase(szBestGuessInstructor) == 0) { cmbInstructors.SelectedValue = li.Value; rowEmail.Visible = valBadEmail.Enabled = valEmailRequired.Enabled = false; break; } } } }
protected Endorsement(MySqlDataReader dr) { if (dr == null) { throw new ArgumentNullException(nameof(dr)); } CFICertificate = dr["CFINum"].ToString(); StudentName = dr["Student"].ToString(); StudentType = (StudentTypes)Convert.ToInt16(dr["StudentType"], CultureInfo.InvariantCulture); ID = Convert.ToInt32(dr["id"], CultureInfo.InvariantCulture); InstructorName = dr["CFI"].ToString(); Date = Convert.ToDateTime(dr["Date"], CultureInfo.InvariantCulture); CreationDate = Convert.ToDateTime(util.ReadNullableField(dr, "DateCreated", DateTime.MinValue), CultureInfo.InvariantCulture); CFIExpirationDate = Convert.ToDateTime(dr["CFIExpiration"], CultureInfo.InvariantCulture); EndorsementText = dr["Endorsement"].ToString(); Title = dr["Title"].ToString(); FARReference = dr["FARRef"].ToString(); CFICachedName = util.ReadNullableString(dr, "CFIFullName"); byte[] rgb; if (!(dr["FileSize"] is DBNull)) { int FileSize = Convert.ToInt32(dr["FileSize"], CultureInfo.InvariantCulture); rgb = new byte[FileSize]; dr.GetBytes(dr.GetOrdinal("DigitizedSignature"), 0, rgb, 0, FileSize); } else { rgb = CFIStudentMap.DefaultScribbleForInstructor(InstructorName); } if (rgb != null && rgb.Length == 0) { rgb = null; } SetDigitizedSig(rgb); }
protected void Page_Load(object sender, EventArgs e) { m_pf = MyFlightbook.Profile.GetUser(User.Identity.Name); if (!Request.IsSecureConnection && !Request.IsLocal) { Response.Redirect(Request.Url.AbsoluteUri.Replace("http://", "https://")); } lblName.Text = String.Format(CultureInfo.CurrentCulture, Resources.Profile.TrainingHeader, HttpUtility.HtmlEncode(m_pf.UserFullName)); this.Master.Title = String.Format(CultureInfo.CurrentCulture, Resources.LocalizedText.TitleTraining, Branding.CurrentBrand.AppName); // sidebar doesn't store it's state, so just set the currenttab each time. tabID sidebarTab = tabID.tabUnknown; string szPrefPath = String.IsNullOrWhiteSpace(Request.PathInfo) ? string.Empty : Request.PathInfo.Substring(1); string[] rgPrefPath = szPrefPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (rgPrefPath.Length > 0 && !String.IsNullOrEmpty(rgPrefPath[0]) && Enum.TryParse <tabID>(rgPrefPath[0], out tabID tabid)) { sidebarTab = tabid; } if (sidebarTab == tabID.tabUnknown) { sidebarTab = tabID.instInstructors; } this.Master.SelectedTab = sidebarTab; switch (sidebarTab) { case tabID.instEndorsements: mvProfile.SetActiveView(vwEndorsements); break; case tabID.instSignFlights: mvProfile.SetActiveView(vwSignFlights); break; case tabID.instStudents: mvProfile.SetActiveView(vwStudents); break; case tabID.instInstructors: mvProfile.SetActiveView(vwInstructors); break; } if (!IsPostBack) { switch (sidebarTab) { case tabID.instEndorsements: if (Request.IsMobileDevice()) { mfbIlEndorsements.Columns = 1; } mfbIlEndorsements.Key = User.Identity.Name; mfbIlEndorsements.Refresh(); mfbEndorsementList1.Student = Page.User.Identity.Name; mfbEndorsementList1.RefreshEndorsements(); if (!Request.IsMobileDeviceOrTablet()) { mfbMultiFileUpload1.Mode = mfbMultiFileUpload.UploadMode.Ajax; } lnkPrintFriendly.NavigateUrl = String.Format(CultureInfo.InvariantCulture, "{0}?naked=1&print=1", Request.Url.AbsolutePath); if (util.GetIntParam(Request, "print", 0) != 0) { lnkPrintFriendly.Visible = mfbIlEndorsements.Visible = mfbMultiFileUpload1.Visible = false; List <MyFlightbook.Image.MFBImageInfo> lstInlineImages = new List <MyFlightbook.Image.MFBImageInfo>(mfbIlEndorsements.Images.ImageArray); lstInlineImages.RemoveAll(mfbii => mfbii.ImageType != MyFlightbook.Image.MFBImageInfo.ImageFileType.JPEG); rptEndorsementImages.DataSource = lstInlineImages; rptEndorsementImages.DataBind(); } break; case tabID.instSignFlights: RefreshFlightsToBeSigned(); break; case tabID.instStudents: SetUpStudents(); break; } } // Need to do these on every page load to recreate links, etc. switch (sidebarTab) { case tabID.instSignFlights: case tabID.instStudents: case tabID.instInstructors: case tabID.instEndorsements: this.Master.ShowSponsoredAd = false; m_sm = new CFIStudentMap(User.Identity.Name); RefreshStudentsAndInstructors(); break; } }
protected void wzRequestSigs_FinishButtonClick(object sender, WizardNavigationEventArgs e) { IEnumerable <LogbookEntry> lstFlights = SelectedFlights; string szCFIUsername = String.Empty; string szCFIEmail = String.Empty; MyFlightbook.Profile pfCFI = null; bool fIsNewCFI = String.IsNullOrEmpty(cmbInstructors.SelectedValue); // Check In case the named email is already an instructor. CFIStudentMap sm = new CFIStudentMap(User.Identity.Name); if (fIsNewCFI && sm.IsStudentOf(txtCFIEmail.Text)) { fIsNewCFI = false; foreach (InstructorStudent inst in sm.Instructors) { if (String.Compare(inst.Email, txtCFIEmail.Text, StringComparison.CurrentCultureIgnoreCase) == 0) { pfCFI = inst; break; } } } else { pfCFI = MyFlightbook.Profile.GetUser(cmbInstructors.SelectedValue); } if (fIsNewCFI) { szCFIEmail = txtCFIEmail.Text; } else { szCFIUsername = pfCFI.UserName; } // check if we already know the email foreach (LogbookEntry le in lstFlights) { le.RequestSignature(szCFIUsername, szCFIEmail); } // Now send the email if (fIsNewCFI) { CFIStudentMapRequest smr = sm.GetRequest(CFIStudentMapRequest.RoleType.RoleCFI, szCFIEmail); smr.Send(); } else { Profile pf = MyFlightbook.Profile.GetUser(User.Identity.Name); using (MailMessage msg = new MailMessage()) { msg.From = new MailAddress(Branding.CurrentBrand.EmailAddress, String.Format(System.Globalization.CultureInfo.CurrentCulture, Resources.SignOff.EmailSenderAddress, Branding.CurrentBrand.AppName, pf.UserFullName)); msg.ReplyToList.Add(new MailAddress(pf.Email, pf.UserFullName)); msg.To.Add(new MailAddress(pfCFI.Email, pfCFI.UserFullName)); msg.Subject = String.Format(System.Globalization.CultureInfo.CurrentCulture, Resources.SignOff.SignRequestSubject, pf.UserFullName, Branding.CurrentBrand.AppName); string szURL = String.Format(System.Globalization.CultureInfo.InvariantCulture, "https://{0}{1}/{2}", Request.Url.Host, ResolveUrl("~/Member/Training.aspx"), tabID.instStudents.ToString()); msg.Body = Branding.ReBrand(Resources.SignOff.SignInvitationExisting).Replace("<% SignPendingFlightsLink %>", szURL).Replace("<% Requestor %>", pf.UserFullName); util.SendMessage(msg); } } Response.Redirect(String.Format(System.Globalization.CultureInfo.InvariantCulture, "~/Member/Training.aspx/{0}", tabID.instSignFlights)); }
protected void Page_Load(object sender, EventArgs e) { Master.SelectedTab = tabID.tabTraining; Title = String.Format(CultureInfo.CurrentCulture, Resources.LocalizedText.TitleProfile, Branding.CurrentBrand.AppName); pnlError.Visible = false; if (!IsPostBack) { try { if (Request.PathInfo.Length > 0) { m_szTargetUser = Request.PathInfo.Substring(1); } bool fMemberEndorsement = util.GetIntParam(Request, "extern", 0) == 0; if (m_szTargetUser.Length == 0 && fMemberEndorsement) { pnlEndorsement.Visible = false; // hide the new endorsement panel - just show all endorsements given } else { mfbEditEndorsement1.StudentType = fMemberEndorsement ? Endorsement.StudentTypes.Member : Endorsement.StudentTypes.External; if (fMemberEndorsement) { CFIStudentMap sm = new CFIStudentMap(Page.User.Identity.Name); if (!sm.IsInstructorOf(m_szTargetUser)) { throw new MyFlightbookValidationException(Resources.Profile.errNotAuthorizedToEndorse); } InstructorStudent student = CFIStudentMap.GetInstructorStudent(sm.Students, m_szTargetUser); if (student.CanViewLogbook) { pnlNonOwnedEndorsements.Visible = true; mfbNonOwnedEndorsements.Student = m_szTargetUser; mfbNonOwnedEndorsements.ExcludeInstructor = Page.User.Identity.Name; mfbNonOwnedEndorsements.RefreshEndorsements(); mfbIlNonOwnedEndorsementScans.ImageClass = Image.MFBImageInfoBase.ImageClass.Endorsement; mfbIlNonOwnedEndorsementScans.Key = m_szTargetUser; mfbIlNonOwnedEndorsementScans.Refresh(); // show unowned and uploaded endorsements as well if (student.CanAddLogbook) { // allow for upload of additional scanned endorsements. mfbMultiFileUpload.Visible = true; mfbMultiFileUpload.ImageKey = m_szTargetUser; } } Profile pfTarget = Profile.GetUser(m_szTargetUser); string szTargetUser = pfTarget.UserFullName; string szEncodedUser = HttpUtility.HtmlEncode(szTargetUser); lblPageHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.Profile.EndorsementsHeader, szEncodedUser); lblNewEndorsementHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.Profile.EndorsementsNewEndorsementHeader, szEncodedUser); lblExistingEndorsementHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.Profile.EndorsementsExistingEndorsementHeader, szEncodedUser); lblNonOwnedHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.Profile.EndorsementsNotOwnedEndorsementHeader, szEncodedUser); mfbEditEndorsement1.TargetUser = pfTarget; mfbEditEndorsement1.Mode = EndorsementMode.InstructorPushAuthenticated; } else { mfbEditEndorsement1.Mode = EndorsementMode.InstructorOfflineStudent; } Profile pf = Profile.GetUser(User.Identity.Name); if (pf.Certificate.Length == 0) { throw new MyFlightbookValidationException(Resources.Profile.errNoCFICertificate); } mfbEditEndorsement1.SourceUser = pf; RefreshTemplateList(); ViewState[keyTargetUser] = m_szTargetUser; } } catch (MyFlightbookValidationException ex) { lblError.Text = ex.Message; pnlError.Visible = true; pnlEndorsement.Visible = false; pnlExistingEndorsements.Visible = false; } } else { m_szTargetUser = (string)ViewState[keyTargetUser]; } // need to reconstitute the form from the template every time to ensure postback works. if (!pnlError.Visible && pnlEndorsement.Visible) { mfbEditEndorsement1.EndorsementID = Convert.ToInt32(hdnLastTemplate.Value, CultureInfo.InvariantCulture); } mfbEndorsementList1.Instructor = Page.User.Identity.Name; mfbEndorsementList1.Student = m_szTargetUser; mfbEndorsementList1.RefreshEndorsements(); if (mfbMultiFileUpload.Visible) { mfbMultiFileUpload.ProcessUploadedImages(); if (mfbIlNonOwnedEndorsementScans.Visible) { mfbIlNonOwnedEndorsementScans.Refresh(); } } }
protected void Page_Load(object sender, EventArgs e) { Master.SelectedTab = tabID.tabUnknown; if (!IsPostBack) { lblErr.Text = String.Empty; string szAuthToken = util.GetStringParam(Request, "auth"); if (!String.IsNullOrEmpty(szAuthToken)) { Username = MFBWebService.GetEncryptedUser(szAuthToken); } bool fIsLocalOrSecure = MFBWebService.CheckSecurity(Request); // If no valid auth token, fall back to the authenticated name. if (String.IsNullOrEmpty(Username) && Page.User.Identity.IsAuthenticated && fIsLocalOrSecure) { Username = Page.User.Identity.Name; } // Require a secure connection for other than debugging. if (!fIsLocalOrSecure && !Request.IsSecureConnection) { Username = string.Empty; } try { if (String.IsNullOrEmpty(Username)) { throw new MyFlightbookException(Resources.SignOff.errSignNotAuthorized); } int idFlight = util.GetIntParam(Request, "idFlight", LogbookEntry.idFlightNew); if (idFlight == LogbookEntry.idFlightNew) { throw new MyFlightbookException(Resources.SignOff.errSignNotAuthorized); } LogbookEntry le = new LogbookEntry(); if (!le.FLoadFromDB(idFlight, Username)) { throw new MyFlightbookException(Resources.SignOff.errSignNotAuthorized); } mfbSignFlight.Flight = le; CFIStudentMap sm = new CFIStudentMap(Username); if (Username == null) { throw new MyFlightbookValidationException("No username for previously signed flights"); } Dictionary <string, LogbookEntry> d = PreviouslySignedAdhocFlights; // If no instructors, and no previously signed flights, assume ad-hoc and go straight to accept terms. if (!sm.Instructors.Any() && d.Keys.Count == 0) { mfbSignFlight.SigningMode = mfbSignFlight.SignMode.AdHoc; mfbSignFlight.CFIProfile = null; mvSignFlight.SetActiveView(vwAcceptTerms); } else { rptInstructors.DataSource = sm.Instructors; rptInstructors.DataBind(); List <string> lstKeys = new List <string>(d.Keys); lstKeys.Sort(); List <LogbookEntry> lstPrevInstructors = new List <LogbookEntry>(); foreach (string sz in lstKeys) { lstPrevInstructors.Add(d[sz]); } rptPriorInstructors.DataSource = lstPrevInstructors; rptPriorInstructors.DataBind(); mvSignFlight.SetActiveView(vwPickInstructor); } lblHeader.Text = String.Format(CultureInfo.CurrentCulture, Resources.SignOff.SignFlightHeader, MyFlightbook.Profile.GetUser(le.User).UserFullName); lblDisclaimerResponse.Text = Branding.ReBrand(Resources.SignOff.SignDisclaimerAgreement1); lblDisclaimerResponse2.Text = Branding.ReBrand(Resources.SignOff.SignDisclaimerAgreement2); } catch (MyFlightbookException ex) { lblErr.Text = ex.Message; mvSignFlight.Visible = false; } } }