diff --git a/src/app/contact/contact-form/contact-form.component.html b/src/app/contact/contact-form/contact-form.component.html index fa2a0c07656..e1d2a57350a 100644 --- a/src/app/contact/contact-form/contact-form.component.html +++ b/src/app/contact/contact-form/contact-form.component.html @@ -6,136 +6,160 @@ -
-

Thank you for contacting WISE!

-

Your message has been sent. We will get back to you as soon as possible.

-
-
- Return to WISE Home + @if (complete) { +
+

Thank you for contacting WISE!

+

Your message has been sent. We will get back to you as soon as possible.

+
+
-
-
-

Contact WISE

-

- - Name - - Name required - -

-

- - Email - - Email required - Invalid Email - -

-

- - Teacher - - - {{ teacher.displayName }} - - - Teacher required - -

-

- - Issue Type - - - {{ issueType.value }} - - - Issue Type required - -

-

- - Project Name - - -

-

- - Summary - - Summary required - -

-

- - Description - - Description required - -

-

- This site is protected by reCAPTCHA and the Google - Privacy Policy and - Terms of Service apply. -

- -
 
-
- -

- Recaptcha failed. Please reload the page and try again! + } @else { + +

Contact WISE

+

+ + Name + + @if (contactFormGroup.controls['name'].hasError('required')) { + Name required + } + +

+ @if (!isStudent) { +

+ + Email + + @if (contactFormGroup.controls['email'].hasError('required')) { + Email required + } + @if (contactFormGroup.controls['email'].hasError('email')) { + Invalid Email + } + +

+ } @else { + @if (teachers.length > 0) { +

+ + Teacher + + @for (teacher of teachers; track teacher.username) { + + {{ teacher.displayName }} + + } + + @if (contactFormGroup.controls['teacher'].hasError('required')) { + Teacher required + } + +

+ } + } +

+ + Issue Type + + @for (issueType of issueTypes; track issueType.key) { + + {{ issueType.value }} + + } + + @if (contactFormGroup.controls['issueType'].hasError('required')) { + Issue Type required + } +

-
- -

- Sorry, there was a problem submitting the form. Please try again. + @if (projectName) { +

+ + Project Name + + +

+ } +

+ + Summary + + @if (contactFormGroup.controls['summary'].hasError('required')) { + Summary required + } + +

+

+ + Description + + @if (contactFormGroup.controls['description'].hasError('required')) { + Description required + } + +

+ @if (isRecaptchaEnabled) { +

+ This site is protected by reCAPTCHA and the Google + Privacy Policy and + Terms of Service apply. +

+ } + @if (isError) { + @if (isRecaptchaEnabled && isRecaptchaError) { +

+ Recaptcha failed. Please reload the page and try again! +

+ } @else { +

+ Sorry, there was a problem submitting the form. Please try again. +

+ } + } + @if (isPublishIssueType()) { +

+ By submitting, you will be sending your unit to be reviewed. If approved, it will be + added to the Community Built library. Make sure you have filled out all appropriate + fields in the Unit Info page in the authoring tool. We will be in touch if we require + any more information. +

+

Thank you!

+ } +

+

-
-

- -

-
+ + }
diff --git a/src/app/contact/contact-form/contact-form.component.ts b/src/app/contact/contact-form/contact-form.component.ts index 51eaa5cc8c6..d9edc70900f 100644 --- a/src/app/contact/contact-form/contact-form.component.ts +++ b/src/app/contact/contact-form/contact-form.component.ts @@ -1,42 +1,43 @@ +import { ActivatedRoute } from '@angular/router'; import { Component, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; -import { finalize } from 'rxjs/operators'; -import { UserService } from '../../services/user.service'; -import { Teacher } from '../../domain/teacher'; -import { Student } from '../../domain/student'; import { ConfigService } from '../../services/config.service'; -import { StudentService } from '../../student/student.service'; +import { finalize } from 'rxjs/operators'; +import { FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms'; import { LibraryService } from '../../services/library.service'; import { ReCaptchaV3Service } from 'ng-recaptcha-2'; +import { Student } from '../../domain/student'; +import { StudentService } from '../../student/student.service'; import { Subscription, lastValueFrom } from 'rxjs'; +import { Teacher } from '../../domain/teacher'; +import { UserService } from '../../services/user.service'; @Component({ - selector: 'app-contact-form', - templateUrl: './contact-form.component.html', - styleUrls: ['./contact-form.component.scss'], - encapsulation: ViewEncapsulation.None, - standalone: false + encapsulation: ViewEncapsulation.None, + selector: 'app-contact-form', + standalone: false, + styleUrls: ['./contact-form.component.scss'], + templateUrl: './contact-form.component.html' }) export class ContactFormComponent implements OnInit { - issueTypes: object[] = []; - contactFormGroup: FormGroup = this.fb.group({ + protected complete: boolean = false; + protected contactFormGroup: FormGroup = this.fb.group({ name: new FormControl('', [Validators.required]), issueType: new FormControl('', [Validators.required]), summary: new FormControl('', [Validators.required]), description: new FormControl('', [Validators.required]) }); - runId: number; - projectId: number; - projectName: string; - isError: boolean = false; - isStudent: boolean = false; - isSignedIn: boolean = false; - isSendingRequest: boolean = false; - isRecaptchaEnabled: boolean = false; - isRecaptchaError: boolean = false; - teachers: any[] = []; - complete: boolean = false; + protected isError: boolean = false; + protected isSendingRequest: boolean = false; + private isSignedIn: boolean = false; + protected isStudent: boolean = false; + protected issueTypes: object[] = []; + private isPublish: boolean = false; + protected isRecaptchaEnabled: boolean = false; + protected isRecaptchaError: boolean = false; + private projectId: number; + protected projectName: string; + private runId: number; + protected teachers: any[] = []; constructor( private fb: FormBuilder, @@ -45,11 +46,10 @@ export class ContactFormComponent implements OnInit { private studentService: StudentService, private libraryService: LibraryService, private recaptchaV3Service: ReCaptchaV3Service, - private route: ActivatedRoute, - private router: Router + private route: ActivatedRoute ) {} - ngOnInit() { + ngOnInit(): void { this.isSignedIn = this.userService.isSignedIn(); this.isStudent = this.userService.isStudent(); this.obtainRunIdOrProjectIdIfNecessary(); @@ -58,10 +58,12 @@ export class ContactFormComponent implements OnInit { this.isRecaptchaEnabled = this.configService.isRecaptchaEnabled(); this.populateFieldsIfSignedIn(); this.populateIssueTypes(); + this.setDefaultPublishSummary(); + this.setIsPublish(); this.setIssueTypeIfNecessary(); } - obtainRunIdOrProjectIdIfNecessary() { + private obtainRunIdOrProjectIdIfNecessary(): void { this.route.queryParams.subscribe((params) => { this.runId = params['runId']; this.projectId = params['projectId']; @@ -78,7 +80,7 @@ export class ContactFormComponent implements OnInit { }); } - obtainTeacherListIfNecessary() { + private obtainTeacherListIfNecessary(): void { if (this.isStudent && this.runId == null && this.projectId == null) { this.studentService.getTeacherList().subscribe((teacherList) => { this.teachers = teacherList; @@ -90,7 +92,7 @@ export class ContactFormComponent implements OnInit { } } - studentHasTeacher() { + private studentHasTeacher(): boolean { return this.teachers.length > 0; } @@ -105,7 +107,7 @@ export class ContactFormComponent implements OnInit { } } - populateFieldsIfSignedIn() { + private populateFieldsIfSignedIn(): void { if (this.isSignedIn) { if (this.isStudent) { const user = this.userService.getUser().getValue(); @@ -121,7 +123,7 @@ export class ContactFormComponent implements OnInit { } } - populateIssueTypes() { + private populateIssueTypes(): void { if (this.isStudent) { this.issueTypes = [ { key: 'TROUBLE_LOGGING_IN', value: $localize`Trouble Signing In` }, @@ -137,42 +139,51 @@ export class ContactFormComponent implements OnInit { { key: 'PROJECT_PROBLEMS', value: $localize`Problems with a WISE Unit` }, { key: 'STUDENT_MANAGEMENT', value: $localize`Student Management` }, { key: 'AUTHORING', value: $localize`Need Help with Authoring` }, + { key: 'PUBLISH', value: $localize`Publish Unit` }, { key: 'FEEDBACK', value: $localize`Feedback to WISE` }, { key: 'OTHER', value: $localize`Other` } ]; } } - setIssueTypeIfNecessary() { + private setDefaultPublishSummary(): void { + this.contactFormGroup.get('issueType').valueChanges.subscribe(() => { + if (this.getControlFieldValue('issueType') === 'PUBLISH') { + const summaryControl = this.contactFormGroup.get('summary'); + summaryControl.setValue($localize`Publish my unit to the WISE Community Built library`); + } + }); + } + + private setIssueTypeIfNecessary(): void { if (this.runId != null) { this.setControlFieldValue('issueType', 'PROJECT_PROBLEMS'); + } else if (this.isPublish) { + this.setControlFieldValue('issueType', 'PUBLISH'); } } + private setIsPublish(): void { + this.route.queryParams.subscribe((params) => { + this.isPublish = params['publish']; + }); + } + async submit(): Promise { this.isError = false; - const name = this.getName(); - const email = this.getEmail(); - const teacherUsername = this.getTeacherUsername(); - const issueType = this.getIssueType(); - const summary = this.getSummary(); - const description = this.getDescription(); - const runId = this.getRunId(); - const projectId = this.getProjectId(); - const userAgent = this.getUserAgent(); const recaptchaResponse = await this.getRecaptchaResponse(); this.setIsSendingRequest(true); return this.userService .sendContactMessage( - name, - email, - teacherUsername, - issueType, - summary, - description, - runId, - projectId, - userAgent, + this.getControlFieldValue('name'), + this.getControlFieldValueOrNull('email', !this.isStudent), + this.getControlFieldValueOrNull('teacher', this.isStudent && this.studentHasTeacher()), + this.getControlFieldValue('issueType'), + this.getControlFieldValue('summary'), + this.getControlFieldValue('description'), + this.runId, + this.projectId, + this.getUserAgent(), recaptchaResponse ) .pipe( @@ -185,7 +196,7 @@ export class ContactFormComponent implements OnInit { }); } - handleSendContactMessageResponse(response: any) { + private handleSendContactMessageResponse(response: any): void { if (response.status === 'success') { this.complete = true; } else if (response.status === 'error') { @@ -197,73 +208,37 @@ export class ContactFormComponent implements OnInit { this.setIsSendingRequest(false); } - setControlFieldValue(name: string, value: string) { + setControlFieldValue(name: string, value: string): void { this.contactFormGroup.controls[name].setValue(value); } - markControlFieldAsDisabled(name: string) { + private markControlFieldAsDisabled(name: string): void { this.contactFormGroup.controls[name].disable(); } - getControlFieldValue(fieldName) { + private getControlFieldValue(fieldName: string): any { return this.contactFormGroup.get(fieldName).value; } - getName() { - return this.getControlFieldValue('name'); + private getControlFieldValueOrNull(fieldName: string, condition: boolean): any { + return condition ? this.getControlFieldValue(fieldName) : null; } - getEmail() { - let email = null; - if (!this.isStudent) { - email = this.getControlFieldValue('email'); - } - return email; - } - - getIssueType() { - return this.getControlFieldValue('issueType'); - } - - getSummary() { - return this.getControlFieldValue('summary'); - } - - getDescription() { - return this.getControlFieldValue('description'); - } - - getRunId() { - return this.runId; - } - - getProjectId() { - return this.projectId; - } - - getTeacherUsername() { - if (this.isStudent && this.studentHasTeacher()) { - return this.getControlFieldValue('teacher'); - } else { - return null; - } - } - - getUserAgent() { + private getUserAgent(): string { return navigator.userAgent; } - routeToContactCompletePage() { - this.router.navigate(['contact/complete', {}]); - } - private async getRecaptchaResponse(): Promise { return this.configService.isRecaptchaEnabled() ? await lastValueFrom(this.recaptchaV3Service.execute('importantAction')) : ''; } - setIsSendingRequest(value: boolean) { + private setIsSendingRequest(value: boolean): void { this.isSendingRequest = value; } + + protected isPublishIssueType(): boolean { + return this.getControlFieldValue('issueType') === 'PUBLISH'; + } } diff --git a/src/app/modules/library/library-project-details/library-project-details.component.html b/src/app/modules/library/library-project-details/library-project-details.component.html index 88d40e74cdb..dbee909a7c0 100644 --- a/src/app/modules/library/library-project-details/library-project-details.component.html +++ b/src/app/modules/library/library-project-details/library-project-details.component.html @@ -53,7 +53,7 @@ @if (isTeacher && project.wiseVersion !== 4) { - + }
diff --git a/src/app/modules/library/library-project-details/library-project-details.component.spec.ts b/src/app/modules/library/library-project-details/library-project-details.component.spec.ts index 60fb5d20a58..7700f618866 100644 --- a/src/app/modules/library/library-project-details/library-project-details.component.spec.ts +++ b/src/app/modules/library/library-project-details/library-project-details.component.spec.ts @@ -42,6 +42,7 @@ describe('LibraryProjectDetailsComponent', () => { { provide: MAT_DIALOG_DATA, useValue: { project: project } } ] }); + spyOn(TestBed.inject(UserService), 'getUserId').and.returnValue(10); fixture = TestBed.createComponent(LibraryProjectDetailsComponent); component = fixture.componentInstance; diff --git a/src/app/modules/library/library-project-details/library-project-details.component.ts b/src/app/modules/library/library-project-details/library-project-details.component.ts index 03207f3b7a0..e0b2cfc13b5 100644 --- a/src/app/modules/library/library-project-details/library-project-details.component.ts +++ b/src/app/modules/library/library-project-details/library-project-details.component.ts @@ -39,6 +39,7 @@ export class LibraryProjectDetailsComponent implements OnInit { protected authorsString: string = ''; protected canPreview: boolean; protected isCopy: boolean; + protected isMyUnit: boolean; protected isTeacher: boolean; protected isRunProject: false; protected licenseInfo = $localize`License pertains to original content created by the author(s). Authors are responsible for the usage and attribution of any third-party content linked to or included in this work.`; @@ -78,6 +79,13 @@ export class LibraryProjectDetailsComponent implements OnInit { this.project.metadata.unitType === 'Other' && this.project.metadata.resources.length === 0 ); } + this.isMyUnit = this.userIsAuthor(); + } + + private userIsAuthor(): boolean { + return this.project.metadata.authors.some( + (author) => author.id === this.userService.getUserId() + ); } private setLicenseInfo(): void { diff --git a/src/app/modules/library/library-project-menu/library-project-menu.component.html b/src/app/modules/library/library-project-menu/library-project-menu.component.html index 8d58a75a13f..9d1fce40347 100644 --- a/src/app/modules/library/library-project-menu/library-project-menu.component.html +++ b/src/app/modules/library/library-project-menu/library-project-menu.component.html @@ -20,6 +20,11 @@ share Share } + @if (isMyUnit) { + + public Publish + + } @if (archived) { unarchive diff --git a/src/app/modules/library/library-project-menu/library-project-menu.component.ts b/src/app/modules/library/library-project-menu/library-project-menu.component.ts index 1e485f1d8a5..723cbd41343 100644 --- a/src/app/modules/library/library-project-menu/library-project-menu.component.ts +++ b/src/app/modules/library/library-project-menu/library-project-menu.component.ts @@ -24,8 +24,10 @@ export class LibraryProjectMenuComponent { protected canEdit: boolean; protected canShare: boolean; protected isChild: boolean; + @Input() isMyUnit: boolean; @Input() isRun: boolean; @Input() project: Project; + protected publishUnitUrl: string; constructor( private archiveProjectService: ArchiveProjectService, @@ -40,6 +42,7 @@ export class LibraryProjectMenuComponent { this.canShare = this.isOwner() && !this.isRun; this.isChild = this.project.isChild(); this.archived = this.project.hasTagWithText('archived'); + this.publishUnitUrl = `${this.configService.getContextPath()}/contact?projectId=${this.project.id}&publish=true`; } private isOwner(): boolean { diff --git a/src/app/modules/library/public-unit-type-selector/community-library-details.html b/src/app/modules/library/public-unit-type-selector/community-library-details.html index 5fac8738cc1..df94e953ea9 100644 --- a/src/app/modules/library/public-unit-type-selector/community-library-details.html +++ b/src/app/modules/library/public-unit-type-selector/community-library-details.html @@ -3,8 +3,8 @@

Community Built

"Community Built" units are designed and contributed by WISE community members. Want to - publicly share your custom unit? - Contact Us! + publicly share your custom unit? Select the Publish option in the unit details pop-up. Or open + your unit in the Authoring Tool, go to Unit Info, and tap Publish!

*Please note: While WISE staff have reviewed these units, we cannot specifically vouch for diff --git a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html index 8142226e355..d867b627f1c 100644 --- a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html +++ b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html @@ -1,3 +1,10 @@ +@if (isMyUnit) { + +}

Unit Icon diff --git a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.scss b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.scss index a785243aa16..3617af08b39 100644 --- a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.scss +++ b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.scss @@ -45,4 +45,8 @@ .input { width: 50%; +} + +.share-button { + float: right; } \ No newline at end of file diff --git a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.spec.ts b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.spec.ts index 82d8d58cb80..01004012520 100644 --- a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.spec.ts +++ b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.spec.ts @@ -7,6 +7,8 @@ import { ConfigService } from '../../services/configService'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { EditUnitResourcesComponent } from '../edit-unit-resources/edit-unit-resources.component'; import { EditUnitTypeComponent } from '../edit-unit-type/edit-unit-type.component'; +import { MockProvider } from 'ng-mocks'; +import { UserService } from '../../../../app/services/user.service'; describe('ProjectInfoAuthoringComponent', () => { let component: ProjectInfoAuthoringComponent; @@ -21,13 +23,17 @@ describe('ProjectInfoAuthoringComponent', () => { StudentTeacherCommonServicesModule ], providers: [ + MockProvider(UserService), TeacherProjectService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting() ] }).compileComponents(); - spyOn(TestBed.inject(TeacherProjectService), 'getProjectMetadata').and.returnValue({}); + spyOn(TestBed.inject(TeacherProjectService), 'getProjectMetadata').and.returnValue({ + authors: [] + }); spyOn(TestBed.inject(ConfigService), 'getConfigParam').and.returnValue('{ "fields": [] }'); + spyOn(TestBed.inject(UserService), 'getUserId').and.returnValue(1); fixture = TestBed.createComponent(ProjectInfoAuthoringComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.ts b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.ts index 1f2e49091da..f97080b5237 100644 --- a/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.ts +++ b/src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.ts @@ -4,6 +4,7 @@ import { TeacherProjectService } from '../../services/teacherProjectService'; import { MatDialog } from '@angular/material/dialog'; import { Subject, debounceTime } from 'rxjs'; import { AssetChooser } from '../project-asset-authoring/asset-chooser'; +import { UserService } from '../../../../app/services/user.service'; @Component({ selector: 'project-info-authoring', @@ -13,6 +14,7 @@ import { AssetChooser } from '../project-asset-authoring/asset-chooser'; }) export class ProjectInfoAuthoringComponent { isEditingProjectIcon: boolean = false; + protected isMyUnit: boolean; isShowProjectIcon: boolean = false; isShowProjectIconError: boolean = false; isShowProjectIconLoading: boolean = false; @@ -21,11 +23,13 @@ export class ProjectInfoAuthoringComponent { metadataChanged: Subject = new Subject(); projectIcon: string = ''; projectIcons: any = []; + protected publishUnitUrl; constructor( private configService: ConfigService, private dialog: MatDialog, - private projectService: TeacherProjectService + private projectService: TeacherProjectService, + private userService: UserService ) {} ngOnInit(): void { @@ -39,6 +43,10 @@ export class ProjectInfoAuthoringComponent { this.metadataAuthoring = JSON.parse( this.configService.getConfigParam('projectMetadataSettings') ); + this.isMyUnit = this.metadata.authors.some( + (author) => author.id === this.userService.getUserId() + ); + this.publishUnitUrl = `${this.configService.getContextPath()}/contact?projectId=${this.configService.getProjectId()}&publish=true`; this.loadProjectIcon(); this.processMetadata(); this.metadataChanged.pipe(debounceTime(1000)).subscribe(() => { diff --git a/src/messages.xlf b/src/messages.xlf index 9a3af762e7a..3f99b4c295f 100644 --- a/src/messages.xlf +++ b/src/messages.xlf @@ -1577,7 +1577,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/contact/contact-form/contact-form.component.html - 135,139 + 157,161 src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html @@ -1944,28 +1944,28 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Thank you for contacting WISE! src/app/contact/contact-form/contact-form.component.html - 10,11 + 11,12 Your message has been sent. We will get back to you as soon as possible. src/app/contact/contact-form/contact-form.component.html - 11,14 + 12,15 Return to WISE Home src/app/contact/contact-form/contact-form.component.html - 14,19 + 15,19 Contact WISE src/app/contact/contact-form/contact-form.component.html - 24,26 + 20,22 src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html @@ -2004,7 +2004,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Name src/app/contact/contact-form/contact-form.component.html - 27,28 + 23,24 src/app/modules/library/share-project-dialog/share-project-dialog.component.html @@ -2027,14 +2027,14 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Name required src/app/contact/contact-form/contact-form.component.html - 30,34 + 26,30 Email src/app/contact/contact-form/contact-form.component.html - 36,37 + 33,34 src/app/forgot/teacher/forgot-teacher-username/forgot-teacher-username.component.html @@ -2057,7 +2057,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Email required src/app/contact/contact-form/contact-form.component.html - 39,41 + 36,38 src/app/forgot/teacher/forgot-teacher-username/forgot-teacher-username.component.html @@ -2076,14 +2076,14 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Invalid Email src/app/contact/contact-form/contact-form.component.html - 42,46 + 39,42 Teacher src/app/contact/contact-form/contact-form.component.html - 48,50 + 47,49 src/app/forgot/forgot-home/forgot-home.component.html @@ -2102,35 +2102,35 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Teacher required src/app/contact/contact-form/contact-form.component.html - 55,59 + 56,59 Issue Type src/app/contact/contact-form/contact-form.component.html - 61,63 + 64,66 Issue Type required src/app/contact/contact-form/contact-form.component.html - 68,72 + 73,76 Project Name src/app/contact/contact-form/contact-form.component.html - 74,75 + 80,81 Summary src/app/contact/contact-form/contact-form.component.html - 80,81 + 87,88 src/assets/wise5/components/summary/SummaryInfo.ts @@ -2149,14 +2149,14 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Summary required src/app/contact/contact-form/contact-form.component.html - 83,87 + 90,94 Description src/app/contact/contact-form/contact-form.component.html - 89,92 + 96,99 src/assets/wise5/authoringTool/milestones-authoring/milestones-authoring.component.html @@ -2191,14 +2191,14 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Description required src/app/contact/contact-form/contact-form.component.html - 100,104 + 112,116 This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. src/app/contact/contact-form/contact-form.component.html - 105,109 + 118,121 src/app/forgot/student/forgot-student-password-security/forgot-student-password-security.component.html @@ -2225,69 +2225,90 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. Recaptcha failed. Please reload the page and try again! src/app/contact/contact-form/contact-form.component.html - 118,121 + 126,129 Sorry, there was a problem submitting the form. Please try again. src/app/contact/contact-form/contact-form.component.html - 123,127 + 130,134 + + + + By submitting, you will be sending your unit to be reviewed. If approved, it will be added to the Community Built library. Make sure you have filled out all appropriate fields in the Unit Info page in the authoring tool. We will be in touch if we require any more information. + + src/app/contact/contact-form/contact-form.component.html + 136,141 + + + + Thank you! + + src/app/contact/contact-form/contact-form.component.html + 141,145 + + + + Submit for Review + + src/app/contact/contact-form/contact-form.component.html + 155,157 Trouble Signing In src/app/contact/contact-form/contact-form.component.ts - 127 + 129 src/app/contact/contact-form/contact-form.component.ts - 135 + 137 Need Help Using WISE src/app/contact/contact-form/contact-form.component.ts - 128 + 130 src/app/contact/contact-form/contact-form.component.ts - 136 + 138 Problems with a WISE Unit src/app/contact/contact-form/contact-form.component.ts - 129 + 131 src/app/contact/contact-form/contact-form.component.ts - 137 + 139 Feedback to WISE src/app/contact/contact-form/contact-form.component.ts - 130 + 132 src/app/contact/contact-form/contact-form.component.ts - 140 + 143 Other src/app/contact/contact-form/contact-form.component.ts - 131 + 133 src/app/contact/contact-form/contact-form.component.ts - 141 + 144 src/app/domain/profile.constants.ts @@ -2298,7 +2319,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Student Management src/app/contact/contact-form/contact-form.component.ts - 138 + 140 src/app/help/faq/teacher-faq/teacher-faq.component.html @@ -2313,7 +2334,21 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Need Help with Authoring src/app/contact/contact-form/contact-form.component.ts - 139 + 141 + + + + Publish Unit + + src/app/contact/contact-form/contact-form.component.ts + 142 + + + + Publish my unit to the WISE Community Built library + + src/app/contact/contact-form/contact-form.component.ts + 153 @@ -5845,7 +5880,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/modules/library/library-project-details/library-project-details.component.ts - 52 + 53 @@ -5856,7 +5891,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/modules/library/library-project-details/library-project-details.component.ts - 50 + 51 @@ -5867,7 +5902,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/modules/library/library-project-details/library-project-details.component.ts - 51 + 52 @@ -6075,7 +6110,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.License pertains to original content created by the author(s). Authors are responsible for the usage and attribution of any third-party content linked to or included in this work. src/app/modules/library/library-project-details/library-project-details.component.ts - 44 + 45 @@ -6101,7 +6136,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 3,6 + 10,13 src/assets/wise5/classroomMonitor/classroomMonitorComponents/edit-component-annotations/edit-component-annotations.component.html @@ -6119,11 +6154,22 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.20,24 + + Publish + + src/app/modules/library/library-project-menu/library-project-menu.component.html + 25,29 + + + src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html + 4,8 + + Restore src/app/modules/library/library-project-menu/library-project-menu.component.html - 26,29 + 31,34 src/app/notebook/notebook-report/notebook-report.component.html @@ -6142,7 +6188,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Archive src/app/modules/library/library-project-menu/library-project-menu.component.html - 31,36 + 36,41 src/app/teacher/archive-projects-button/archive-projects-button.component.html @@ -6288,11 +6334,11 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.12,14 - - "Community Built" units are designed and contributed by WISE community members. Want to publicly share your custom unit? Contact Us! + + "Community Built" units are designed and contributed by WISE community members. Want to publicly share your custom unit? Select the Publish option in the unit details pop-up. Or open your unit in the Authoring Tool, go to Unit Info, and tap Publish! src/app/modules/library/public-unit-type-selector/community-library-details.html - 5,9 + 5,10 @@ -12991,35 +13037,35 @@ The branches will be removed but the steps will remain in the unit. Unit Icon src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 2,3 + 9,10 This unit does not have a unit icon. src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 10,12 + 17,19 Click the edit button to set one. src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 11,14 + 18,21 Choose a new Unit Icon by clicking on one below or upload your own custom icon. src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 20,22 + 27,29 Upload src/assets/wise5/authoringTool/project-info-authoring/project-info-authoring.component.html - 23,28 + 30,35