diff --git a/src/app/client/package.json b/src/app/client/package.json index edf4564d67e2b9646c0fc6c0037d03f068c8b272..69a1fe8d95635e142d5fdbdc17f241e65eea1bce 100644 --- a/src/app/client/package.json +++ b/src/app/client/package.json @@ -48,7 +48,7 @@ "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^6.0.0", "@project-sunbird/ckeditor-build-font": "^1.0.8", - "@project-sunbird/client-services": "~3.2.4", + "@project-sunbird/client-services": "3.3.10", "@project-sunbird/common-consumption": "3.2.14", "@project-sunbird/sb-styles": "0.0.6", "@project-sunbird/telemetry-sdk": "^0.0.26", diff --git a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.data.spec.ts b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.data.spec.ts index c8c9f80a813af5d4e6277e8f01cd92612397acd1..dc9c32bbf763eb50649a18299ed7c4dc17cb01c0 100644 --- a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.data.spec.ts +++ b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.data.spec.ts @@ -16,5 +16,112 @@ export const activitySearchMockData = { 'defaultCourseFramework': 'TPD', 'status': 'Live', 'defaultFramework': 'NCFCOPY' + }, + + eventDataForResource: { + data: { + 'name': '.TestContent!23.', + 'image': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'rating': '0', + 'orgDetails': {}, + 'gradeLevel': '', + 'contentType': 'Resource', + 'topic': '', + 'subTopic': '', + 'metaData': { + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.ecml-archive', + 'contentType': 'Resource' + }, + 'completionPercentage': 0, + 'mimeTypesCount': 0, + 'cardImg': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'board': '', + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.ecml-archive', + 'action': { + 'onImage': { + 'eventName': 'onImage' + } + }, + 'ribbon': { + 'left': {}, + 'right': { + 'name': 'Resource' + } + } + } + }, + + eventDataForCourse: { + data: { + 'name': '.TestContent!23.', + 'image': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'rating': '0', + 'orgDetails': {}, + 'trackable': { + 'enabled': 'yes' + }, + 'gradeLevel': '', + 'contentType': 'Course', + 'topic': '', + 'subTopic': '', + 'metaData': { + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.ecml-archive', + 'contentType': 'Resource' + }, + 'completionPercentage': 0, + 'mimeTypesCount': 0, + 'cardImg': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'board': '', + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.content-collection', + 'action': { + 'onImage': { + 'eventName': 'onImage' + } + }, + 'ribbon': { + 'left': {}, + 'right': { + 'name': 'Resource' + } + } + } + }, + eventDataForTextbook: { + data: { + 'name': '.TestContent!23.', + 'image': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'rating': '0', + 'orgDetails': {}, + 'gradeLevel': '', + 'contentType': 'TextBook', + 'topic': '', + 'subTopic': '', + 'metaData': { + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.ecml-archive', + 'contentType': 'Resource' + }, + 'completionPercentage': 0, + 'mimeTypesCount': 0, + 'cardImg': 'https://ekstep-public-dev.s3-ap-south-1.amazonaws.com/content/lp_ft_9158412/artifact/jpegimage_1538045901746.thumb.jpeg', + 'board': '', + 'identifier': 'LP_FT_9158412', + 'mimeType': 'application/vnd.ekstep.content-collection', + 'action': { + 'onImage': { + 'eventName': 'onImage' + } + }, + 'ribbon': { + 'left': {}, + 'right': { + 'name': 'Resource' + } + } + } } }; diff --git a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.html b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.html index a55928b70631a38513db63b61ca3ab39163cb2be..6df3f6b44959aa1f55e1ff037719f6a480b1d9d8 100644 --- a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.html +++ b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.html @@ -30,10 +30,8 @@ </div> </div> <div *ngIf="showFilters"> - <app-data-driven-filter [enrichFilters]="facetsList" [pageId]="'activity-search'" *ngIf="initFilters" - [ignoreQuery]="['key']" [filterEnv]="filterType" [accordionDefaultOpen]="true" [isShowFilterLabel]="false" - [formAction]="'filter'" [frameworkName]="frameWorkName" (dataDrivenFilter)="getFilters($event)"> - </app-data-driven-filter> + <app-global-search-filter *ngIf="initFilters && allTabData" [layoutConfiguration]="layoutConfiguration" [facets]="facets" [isOpen]='true' (filterChange)="getFilters($event)"> + </app-global-search-filter> </div> <div class="ui container"> <div class="mt-24"> @@ -56,9 +54,13 @@ <div *ngIf="!showLoader && contentList?.length" class="sb-card-grid"> <div class="sb-card-grid--item" *ngFor="let content of contentList;"> - <sb-course-card (cardClick)="addActivity($event)" [course]="content" [section]="null" + <!-- <sb-course-card (cardClick)="addActivity($event)" [course]="content" [section]="null" [cardImg]="content?.image || './assets/images/book.png'"> - </sb-course-card> + </sb-course-card> --> + + <sb-library-card [indexToDisplay]="i" [layoutConfig]="layoutConfiguration" (cardClick)="addActivity($event)" [content]="content" + [cardImg]="content?.image || 'assets/images/book.png'"> + </sb-library-card> </div> </div> diff --git a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.spec.ts b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.spec.ts index 20d2ac9e02a736d8ffd0f810035d3ae572916e04..b9d8c0bcef19a3e45d8843f9d0b9a457e66ef1d1 100644 --- a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.spec.ts +++ b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.spec.ts @@ -12,6 +12,7 @@ import { activitySearchMockData } from './activity-search.component.data.spec'; import { ActivatedRoute, Router } from '@angular/router'; import { configureTestSuite } from '@sunbird/test-util'; import { GroupsService } from '../../../services/groups/groups.service'; +import { CourseConsumptionService } from '@sunbird/learn'; describe('ActivitySearchComponent', () => { let component: ActivitySearchComponent; @@ -132,7 +133,7 @@ describe('ActivitySearchComponent', () => { component.showLoader = true; component.frameworkId = 'abcd1234cd'; const searchService = TestBed.get(SearchService); - spyOn(searchService, 'courseSearch').and.returnValue(of({ result: { content: [] } })); + spyOn(searchService, 'contentSearch').and.returnValue(of({ result: { content: [] } })); component['fetchContents'](); expect(component.showLoader).toBe(false); expect(component.contentList).toEqual([]); @@ -141,7 +142,7 @@ describe('ActivitySearchComponent', () => { it('should fetch Contents on error', () => { component.showLoader = true; const searchService = TestBed.get(SearchService); - spyOn(searchService, 'courseSearch').and.returnValue(throwError({})); + spyOn(searchService, 'contentSearch').and.returnValue(throwError({})); component['fetchContents'](); expect(component.showLoader).toBe(false); expect(component.contentList).toEqual([]); @@ -200,14 +201,35 @@ describe('ActivitySearchComponent', () => { expect(router.navigate).toHaveBeenCalled(); }); - it('should call addActivity', () => { + it('should navigate to resource page if contentType is non-trackable and mime type is not collection', () => { spyOn(component, 'addTelemetry'); const router = TestBed.get(Router); - const event = { data: { identifier: 'do_234324446565' } }; + const event = activitySearchMockData.eventDataForResource; component.groupData = { id: 'adfddf-sdsds-wewew-sds' }; component.addActivity(event); expect(component.addTelemetry).toHaveBeenCalled(); - expect(router.navigate).toHaveBeenCalledWith(['/learn/course', 'do_234324446565'], - { queryParams: { groupId: 'adfddf-sdsds-wewew-sds' } }); + expect(router.navigate).toHaveBeenCalledWith(['/resources/play/content', event.data.identifier]); + }); + + it('should navigate to resource page if contentType is trackable and mime type is collection', () => { + spyOn(component, 'addTelemetry'); + const router = TestBed.get(Router); + const event = activitySearchMockData.eventDataForCourse; + component.groupData = { id: 'adfddf-sdsds-wewew-sds' }; + component.addActivity(event); + expect(component.addTelemetry).toHaveBeenCalled(); + expect(router.navigate).toHaveBeenCalledWith(['/learn/course', event.data.identifier], {queryParams: { + groupId: component.groupData.id + }}); + }); + + it('should navigate to resource page if contentType is non-trackable and mime type is collection', () => { + spyOn(component, 'addTelemetry'); + const router = TestBed.get(Router); + const event = activitySearchMockData.eventDataForTextbook; + component.groupData = { id: 'adfddf-sdsds-wewew-sds' }; + component.addActivity(event); + expect(component.addTelemetry).toHaveBeenCalled(); + expect(router.navigate).toHaveBeenCalledWith(['/resources/play/collection', event.data.identifier]); }); }); diff --git a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.ts b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.ts index 320c5374e6b5bfc8e9b102d7b93471e293ecf9c5..e51f7e888676f8ea8593f91054139261ec17d133 100644 --- a/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.ts +++ b/src/app/client/src/app/modules/groups/components/activity/activity-search/activity-search.component.ts @@ -1,3 +1,4 @@ +import { CourseConsumptionService } from '@sunbird/learn'; import { Component, OnInit, EventEmitter, OnDestroy } from '@angular/core'; import { FrameworkService, SearchService, FormService, UserService } from '@sunbird/core'; import { @@ -16,6 +17,7 @@ import { IPagination } from '../../../../shared/interfaces/index'; import { CacheService } from 'ng2-cache-service'; import { GroupsService } from '../../../services/groups/groups.service'; import { IImpressionEventInput } from '@sunbird/telemetry'; +import { CsGroupAddableBloc } from '@project-sunbird/client-services/blocs'; @Component({ selector: 'app-activity-search', @@ -45,6 +47,10 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { groupId: string; telemetryImpression: IImpressionEventInput; layoutConfiguration: any; + groupAddableBlocData: any; + public globalSearchFacets: Array<string>; + public allTabData; + public selectedFilters; public slugForProminentFilter = (<HTMLInputElement>document.getElementById('slugForProminentFilter')) ? (<HTMLInputElement>document.getElementById('slugForProminentFilter')).value : null; @@ -63,10 +69,20 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { private cacheService: CacheService, private router: Router, private groupsService: GroupsService, - public layoutService: LayoutService + public layoutService: LayoutService, + public courseConsumptionService: CourseConsumptionService ) { } ngOnInit() { + CsGroupAddableBloc.instance.state$.pipe(takeUntil(this.unsubscribe$)).subscribe(data => { + this.groupAddableBlocData = data; + }); + this.searchService.getContentTypes().pipe(takeUntil(this.unsubscribe$)).subscribe(formData => { + this.allTabData = _.find(formData, (o) => o.title === 'frmelmnts.tab.all'); + this.globalSearchFacets = _.get(this.allTabData, 'search.facets'); + }, error => { + this.toasterService.error(this.resourceService.frmelmnts.lbl.fetchingContentFailed); + }); this.initLayout(); this.filterType = this.configService.appConfig.courses.filterType; this.groupData = this.groupsService.groupData; @@ -139,7 +155,7 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { } public getFilters(filters) { - this.facets = filters.map(element => element.code); + this.selectedFilters = filters.filters; const defaultFilters = _.reduce(filters, (collector: any, element) => { /* istanbul ignore else */ @@ -179,11 +195,13 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { private fetchContents() { let filters = _.pickBy(this.queryParams, (value: Array<string> | string) => value && value.length); filters = _.omit(filters, ['key', 'sort_by', 'sortType', 'appliedFilters']); + filters.contentType = [_.get(this.groupAddableBlocData, 'params.contentType')]; const option: any = { filters: filters, + fields: _.get(this.allTabData, 'search.fields'), limit: this.configService.appConfig.SEARCH.PAGE_LIMIT, pageNumber: this.paginationDetails.currentPage, - facets: this.facets, + facets: this.globalSearchFacets, params: this.configService.appConfig.Course.contentApiQueryParams }; @@ -200,14 +218,15 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { if (this.frameWorkName) { option.params.framework = this.frameWorkName; } - this.searchService.courseSearch(option) + this.searchService.contentSearch(option) .subscribe(data => { this.showLoader = false; + this.facets = this.searchService.updateFacetsData(_.get(data, 'result.facets')); this.facetsList = this.searchService.processFilterData(_.get(data, 'result.facets')); this.paginationDetails = this.paginationService.getPager(data.result.count, this.paginationDetails.currentPage, this.configService.appConfig.SEARCH.PAGE_LIMIT); const { constantData, metaData, dynamicFields } = this.configService.appConfig.CoursePageSection.course; - this.contentList = _.map(data.result.course, (content: any) => + this.contentList = _.map(data.result.content, (content: any) => this.utilService.processContent(content, constantData, dynamicFields, metaData)); }, err => { this.showLoader = false; @@ -239,9 +258,22 @@ export class ActivitySearchComponent implements OnInit, OnDestroy { } addActivity(event) { - const cdata = [{id: _.get(event, 'data.identifier'), type: 'Course'}]; + const cdata = [{ id: _.get(event, 'data.identifier'), type: _.get(event, 'data.contentType') }]; this.addTelemetry('activity-course-card', cdata); - this.router.navigate(['/learn/course', _.get(event, 'data.identifier')], { queryParams: { groupId: _.get(this.groupData, 'id') } }); + const isTrackable = this.courseConsumptionService.isTrackableCollection(event.data); + const contentMimeType = _.get(event, 'data.mimeType'); + + if (contentMimeType === 'application/vnd.ekstep.content-collection' && isTrackable) { + + this.router.navigate(['/learn/course', _.get(event, 'data.identifier')], { queryParams: { groupId: _.get(this.groupData, 'id') } }); + + } else if (contentMimeType === 'application/vnd.ekstep.content-collection' && !isTrackable) { + + this.router.navigate(['/resources/play/collection', _.get(event, 'data.identifier')]); + + } else { + this.router.navigate(['/resources/play/content', _.get(event, 'data.identifier')]); + } } addTelemetry(id, cdata, extra?) { diff --git a/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.html b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.html new file mode 100644 index 0000000000000000000000000000000000000000..d3ccfedc39f9e8b3d5f8f4328b13cce438679c5c --- /dev/null +++ b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.html @@ -0,0 +1,20 @@ +<app-back-button></app-back-button> +<div class="content-header"> + <div class="ui container py-16"> + <div class="d-flex flex-ai-center flex-jc-space-between flex-w-wrap"> + <div class="flex-basis-1 mr-32"> + <div class="content-header__title font-weight-bold sb__ellipsis sb__ellipsis--one d-flex"> + <div>{{groupName}}</div> + </div> + <div class="d-flex flex-ai-center content-header__info"> + <div>{{resourceService?.frmelmnts?.lbl?.groupCreatedBy | interpolate:'{name}': groupCreator}}</div> + </div> + </div> + </div> + </div> +</div> +<div class="sb-card-grid"> + <div class="add-activity-content" *ngFor="let activity of supportedActivityList; let i = index;"> + <sb-course-curiculum-card (click)="onCardClick(activity)" [isActivityTypeCard]="true" [cardData]="activity" [index]="i"></sb-course-curiculum-card> + </div> +</div> \ No newline at end of file diff --git a/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.scss b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.spec.ts b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..de49d7aa2605d8eb985bcf6f4c3ce0622651370b --- /dev/null +++ b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.spec.ts @@ -0,0 +1,232 @@ +import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; +import { AddActivityContentTypesComponent } from './add-activity-content-types.component'; +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { SharedModule, ToasterService, ResourceService, ConfigService, BrowserCacheTtlService, NavigationHelperService } from '@sunbird/shared'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { APP_BASE_HREF } from '@angular/common'; +import { TelemetryService } from '@sunbird/telemetry'; +import { Router, ActivatedRoute } from '@angular/router'; +import { of as observableOf, throwError } from 'rxjs'; +import { CsGroupAddableBloc } from '@project-sunbird/client-services/blocs'; +import { GroupsService } from '../../../services'; +import { AddActivityContentTypesData } from './add-activity-content-types.spec.data'; +import * as _ from 'lodash-es'; + + +describe('AddActivityContentTypesComponent', () => { + let component: AddActivityContentTypesComponent; + let fixture: ComponentFixture<AddActivityContentTypesComponent>; + + class RouterStub { + navigate = jasmine.createSpy('navigate'); + public url = '/add-activity-to-group'; + } + + const resourceBundle = { + frmelmnts: { + lbl: { + ACTIVITY_COURSE_TITLE: 'Courses', + ACTIVITY_TEXTBOOK_TITLE: 'Textbooks', + ACTIVITY_EXPLANATION_CONTENT_TITLE: 'Explanation content', + ACTIVITY_PRACTICE_RESOURCE_TITLE: 'Practice resource', + ACTIVITY_PRACTICE_QUESTION_SET_TITLE: 'Practice question set', + ACTIVITY_COLLECTION_TITLE: 'Collection', + ACTIVITY_RESOURCE_TITLE: 'Resource' + } + }, + messages: { + emsg: { + m0005: 'Something went wrong, try again later' + } + } + }; + + const fakeActivatedRoute = { + snapshot: { + data: { + telemetry: { + env: 'groups', + pageid: 'add-activity-to-group', + type: 'view', + subtype: 'paginate', + ver: '1.0' + } + } + }, + queryParams: observableOf({ + groupName: 'SOME_GROUP_NAME', + createdBy: 'SOME_GROUP_CREATOR', + groupId: '123456' + }) + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule, SharedModule.forRoot()], + declarations: [AddActivityContentTypesComponent], + providers: [ + TelemetryService, + ResourceService, + ConfigService, + BrowserCacheTtlService, + NavigationHelperService, + CsGroupAddableBloc, + GroupsService, + ToasterService, + { provide: Router, useClass: RouterStub }, + { provide: ActivatedRoute, useValue: fakeActivatedRoute }, + { provide: APP_BASE_HREF, useValue: '/' }, + { provide: ResourceService, useValue: resourceBundle } + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddActivityContentTypesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should set the necessary group data from query params', () => { + /** Arrange */ + const navigationHelperService = TestBed.get(NavigationHelperService); + spyOn(navigationHelperService, 'setNavigationUrl').and.stub(); + spyOn(component, 'fetchActivityList').and.stub(); + + /** Act */ + component.ngOnInit(); + + /** Assert */ + expect(navigationHelperService.setNavigationUrl).toHaveBeenCalled(); + expect(component.groupName).toEqual('SOME_GROUP_NAME'); + expect(component.groupCreator).toEqual('SOME_GROUP_CREATOR'); + expect(component.fetchActivityList).toHaveBeenCalled(); + }); + + it('should trigger impression event', () => { + /** Arrange */ + spyOn(component, 'setTelemetryImpressionData').and.stub(); + + /** Act */ + component.ngAfterViewInit(); + + /** Assert */ + expect(component.setTelemetryImpressionData).toHaveBeenCalled(); + + }); + + it('Should fetch all the supported activities', () => { + /** Arrange */ + const groupService = TestBed.get(GroupsService); + spyOn(groupService, 'getSupportedActivityList').and.returnValue(observableOf(AddActivityContentTypesData.listData)); + + /** Act */ + component.fetchActivityList(); + + /** Assert */ + expect(component.supportedActivityList).toEqual(AddActivityContentTypesData.processedActivityList.data.fields); + }); + + it('should show error toast message if fetch activity list api fails', () => { + /** Arrange */ + const groupService = TestBed.get(GroupsService); + const toasterService = TestBed.get(ToasterService); + spyOn(groupService, 'getSupportedActivityList').and.callFake(() => throwError({})); + spyOn(toasterService, 'error'); + + /** Act */ + component.fetchActivityList(); + + /** Assert */ + expect(toasterService.error).toHaveBeenCalledWith('Something went wrong, try again later'); + + }); + + it('should navigate to result page on click of any activity card', () => { + /** Arrange */ + const cardData = AddActivityContentTypesData.mockCardData; + const csGroupAddableBloc = CsGroupAddableBloc.instance; + const router = TestBed.get(Router); + const groupService = TestBed.get(GroupsService); + spyOn(csGroupAddableBloc, 'updateState'); + spyOnProperty(groupService, 'groupData').and.returnValue(AddActivityContentTypesData.groupData); + /** Act */ + component.onCardClick(cardData); + + /** Assert */ + expect(csGroupAddableBloc.updateState).toHaveBeenCalledWith({ + pageIds: ['course'], + groupId: AddActivityContentTypesData.groupData.id, + params: { + searchQuery: cardData.searchQuery, + groupData: AddActivityContentTypesData.groupData, + contentType: cardData.activityType + } + }); + expect(router.navigate).toHaveBeenCalledWith(['add-activity-to-group', 'Course', 1], { relativeTo: fakeActivatedRoute }); + }); + + it('should trigger interact event', () => { + /** Arrange */ + const groupService = TestBed.get(GroupsService); + const telemetryService = TestBed.get(TelemetryService); + spyOnProperty(groupService, 'groupData').and.returnValue(AddActivityContentTypesData.groupData); + const interactData = { + context: { + env: fakeActivatedRoute.snapshot.data.telemetry.env, + cdata: [{ + type: 'Group', + id: _.get(groupService, 'groupData.id') + }] + }, + edata: { + id: 'textbook-card', + type: 'CLICK', + pageid: fakeActivatedRoute.snapshot.data.telemetry.pageid + } + }; + spyOn(telemetryService, 'interact'); + + /** Act */ + component.sendInteractData({id: 'textbook-card'}); + + /** Assert */ + expect(telemetryService.interact).toHaveBeenCalledWith(interactData); + + }); + + it('should trigger impression event', () => { + /** Arrange */ + const groupService = TestBed.get(GroupsService); + const navigationHelperService = TestBed.get(NavigationHelperService); + const telemetryService = TestBed.get(TelemetryService); + spyOnProperty(groupService, 'groupData').and.returnValue(AddActivityContentTypesData.groupData); + spyOn(navigationHelperService, 'getPageLoadTime').and.returnValue(10); + spyOn(telemetryService, 'impression').and.stub(); + + const telemetryImpressionData = { + context: { + env: fakeActivatedRoute.snapshot.data.telemetry.env, + cdata: [{ + type: 'Group', + id: _.get(groupService, 'groupData.id') + }] + }, + edata: { + type: fakeActivatedRoute.snapshot.data.telemetry.type, + subtype: fakeActivatedRoute.snapshot.data.telemetry.subtype, + pageid: fakeActivatedRoute.snapshot.data.telemetry.pageid, + uri: '/add-activity-to-group', + duration: 10 + } + }; + + /** Act */ + component.setTelemetryImpressionData(); + + /** Assert */ + expect(telemetryService.impression).toHaveBeenCalledWith(telemetryImpressionData); + }); +}); diff --git a/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.ts b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..28f9fed5492a536d25752fa2d7d30e263bebe809 --- /dev/null +++ b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.component.ts @@ -0,0 +1,117 @@ +import { Component, OnInit, AfterViewInit } from '@angular/core'; +import { GroupsService } from '../../../services'; +import { ResourceService, ToasterService, NavigationHelperService } from '@sunbird/shared'; +import * as _ from 'lodash-es'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ADD_ACTIVITY_TO_GROUP } from '../../../interfaces'; +import { CsGroupAddableBloc } from '@project-sunbird/client-services/blocs'; +import { CsGroupSupportedActivitiesFormField } from '@project-sunbird/client-services/services/group/interface'; +import { TelemetryService, IImpressionEventInput } from '@sunbird/telemetry'; + + +@Component({ + selector: 'app-add-activity-content-types', + templateUrl: './add-activity-content-types.component.html', + styleUrls: ['./add-activity-content-types.component.scss'] +}) +export class AddActivityContentTypesComponent implements OnInit, AfterViewInit { + + public supportedActivityList; + public groupName: string; + public groupCreator: string; + private csGroupAddableBloc: CsGroupAddableBloc; + telemetryImpression: IImpressionEventInput; + + constructor( + public groupService: GroupsService, + public resourceService: ResourceService, + public toasterService: ToasterService, + public activatedRoute: ActivatedRoute, + public router: Router, + public navigationHelperService: NavigationHelperService, + private telemetryService: TelemetryService + ) { + this.csGroupAddableBloc = CsGroupAddableBloc.instance; + } + + ngOnInit() { + this.navigationHelperService.setNavigationUrl(); + if (!this.csGroupAddableBloc.initialised) { + this.csGroupAddableBloc.init(); + } + this.activatedRoute.queryParams.subscribe((params) => { + this.groupName = _.get(params, 'groupName'); + this.groupCreator = _.get(params, 'createdBy'); + }); + this.fetchActivityList(); + } + + ngAfterViewInit() { + this.setTelemetryImpressionData(); + } + + fetchActivityList() { + this.groupService.getSupportedActivityList().subscribe( data => { + this.supportedActivityList = _.get(data, 'data.fields'); + this.supportedActivityList.forEach(activity => { + activity['title'] = this.resourceService.frmelmnts.lbl[activity['title']]; + }); + }, error => { + this.toasterService.error(this.resourceService.messages.emsg.m0005); + }); + } + + onCardClick(cardData: CsGroupSupportedActivitiesFormField) { + this.csGroupAddableBloc.updateState({ + pageIds: [cardData.activityType.toLowerCase()], + groupId: _.get(this.groupService, 'groupData.id'), + params: { + searchQuery: cardData.searchQuery, + groupData: _.get(this.groupService, 'groupData'), + contentType: cardData.activityType + } + }); + this.sendInteractData({id: `${cardData.activityType}-card`}); + this.router.navigate([`${ADD_ACTIVITY_TO_GROUP}`, cardData.activityType , 1], { relativeTo: this.activatedRoute }); + } + + sendInteractData(interactData) { + const data = { + context: { + env: this.activatedRoute.snapshot.data.telemetry.env, + cdata: [{ + type: 'Group', + id: _.get(this.groupService, 'groupData.id') + }] + }, + edata: { + id: _.get(interactData, 'id'), + type: 'CLICK', + pageid: this.activatedRoute.snapshot.data.telemetry.pageid + } + }; + + this.telemetryService.interact(data); + } + + setTelemetryImpressionData() { + this.telemetryImpression = { + context: { + env: this.activatedRoute.snapshot.data.telemetry.env, + cdata: [{ + type: 'Group', + id: _.get(this.groupService, 'groupData.id') + }] + }, + edata: { + type: this.activatedRoute.snapshot.data.telemetry.type, + subtype: this.activatedRoute.snapshot.data.telemetry.subtype, + pageid: this.activatedRoute.snapshot.data.telemetry.pageid, + uri: this.router.url, + duration: this.navigationHelperService.getPageLoadTime() + } + }; + this.telemetryService.impression(this.telemetryImpression); + } + +} diff --git a/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.spec.data.ts b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.spec.data.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d9988d5dcc434c802022db190106d5bd88a875d --- /dev/null +++ b/src/app/client/src/app/modules/groups/components/activity/add-activity-content-types/add-activity-content-types.spec.data.ts @@ -0,0 +1,136 @@ +export const AddActivityContentTypesData = { + listData: { + 'data': { + 'fields': [ + { + 'index': 0, + 'title': 'ACTIVITY_COURSE_TITLE', + 'activityType': 'Course' + }, + { + 'index': 1, + 'title': 'ACTIVITY_TEXTBOOK_TITLE', + 'activityType': 'TextBook', + }, + { + 'index': 2, + 'title': 'ACTIVITY_EXPLANATION_CONTENT_TITLE', + 'activityType': 'ExplanationContent', + }, + { + 'index': 3, + 'title': 'ACTIVITY_PRACTICE_RESOURCE_TITLE', + 'activityType': 'PracticeResource', + }, + { + 'index': 4, + 'title': 'ACTIVITY_PRACTICE_QUESTION_SET_TITLE', + 'activityType': 'PracticeQuestionSet', + }, + { + 'index': 5, + 'title': 'ACTIVITY_COLLECTION_TITLE', + 'activityType': 'Collection', + }, + { + 'index': 6, + 'title': 'ACTIVITY_RESOURCE_TITLE', + 'activityType': 'Resource', + } + ] + } + }, + processedActivityList: { + 'data': { + 'fields': [ + { + 'index': 0, + 'title': 'Courses', + 'activityType': 'Course' + }, + { + 'index': 1, + 'title': 'Textbooks', + 'activityType': 'TextBook', + }, + { + 'index': 2, + 'title': 'Explanation content', + 'activityType': 'ExplanationContent', + }, + { + 'index': 3, + 'title': 'Practice resource', + 'activityType': 'PracticeResource', + }, + { + 'index': 4, + 'title': 'Practice question set', + 'activityType': 'PracticeQuestionSet', + }, + { + 'index': 5, + 'title': 'Collection', + 'activityType': 'Collection', + }, + { + 'index': 6, + 'title': 'Resource', + 'activityType': 'Resource', + } + ] + } + }, + mockCardData: { + 'index': 0, + 'title': 'Courses', + 'activityType': 'Course', + 'objectType': 'Content', + 'sortBy': [{ + }], + 'searchQuery': '{\'request\':{\'filters\':{\'contentType\':[\'Course\'],\'status\':[\'Live\'],\'objectType\':[\'Content\']},\'fields\':[\'name\',\'appIcon\',\'contentType\',\'identifier\',\'objectType\',\'createdBy\']}}' + }, + groupData : { + 'membershipType': 'invite_only', + 'updatedBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'createdBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'activities': [ + { + 'id': 'do_1130958935577886721105', + 'type': 'PracticeQuestionSet' + } + ], + 'members': [ + { + 'userId': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'groupId': 'dcffdb33-edbe-4ea8-8ed5-4d6781c2e2e7', + 'role': 'admin', + 'status': 'active', + 'createdOn': '2020-09-09 07:05:27:543+0000', + 'createdBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'updatedOn': null, + 'updatedBy': null, + 'removedOn': null, + 'removedBy': null, + 'name': 'Mentor First User', + 'title': 'Mentor first user (You)', + 'initial': 'M', + 'identifier': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'isAdmin': true, + 'isCreator': true, + 'isSelf': true, + 'isMenu': false, + 'indexOfMember': 0 + } + ], + 'name': 'My testing group', + 'description': '', + 'id': 'dcffdb33-edbe-4ea8-8ed5-4d6781c2e2e7', + 'updatedOn': '2020-09-09 07:21:15:380+0000', + 'createdOn': '2020-09-09 07:05:27:528+0000', + 'status': 'active', + 'isCreator': true, + 'isAdmin': true, + 'initial': 'M' + } +}; diff --git a/src/app/client/src/app/modules/groups/components/activity/index.ts b/src/app/client/src/app/modules/groups/components/activity/index.ts index 9918d161a27f39bc0e028ae2553f33fbdb2fa587..f3af3cfecaeed4dc28a233855ea4a566723ffbbc 100644 --- a/src/app/client/src/app/modules/groups/components/activity/index.ts +++ b/src/app/client/src/app/modules/groups/components/activity/index.ts @@ -2,3 +2,4 @@ export * from './activity-dashboard/activity-dashboard.component'; export * from './activity-form/activity-form.component'; export * from './activity-list/activity-list.component'; export * from './activity-search/activity-search.component'; +export * from './add-activity-content-types/add-activity-content-types.component'; diff --git a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.html b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.html index dfdbb1e6b39039794981e59855d1611fefc4ec50..eaf67a84071aa3e8808f35bed078282af93c1dea 100644 --- a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.html +++ b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.html @@ -17,7 +17,7 @@ <h4 class="sb-pageSection-title m-0 mr-5 sb-pagesection-activity" (click)="toggleActivityModal(true)"> {{resourceService?.frmelmnts?.lbl?.activities}}</h4> <button type="button" class="sb-btn sb-btn-primary sb-btn-normal ml-auto" *ngIf="isAdmin" - (click)="toggleActivityModal(true);addTelemetry('add-activity')"> + (click)="navigateToAddActivity(); addTelemetry('add-activity')"> <i class="plus icon" aria-hidden="true"></i> {{resourceService?.frmelmnts?.btn?.addActivity}} </button> @@ -34,8 +34,4 @@ </div> </div> -<sui-modal [mustScroll]="true" [isClosable]="true" [transitionDuration]="0" [size]="'small'" class="sb-modal" - appBodyScroll (dismissed)="toggleActivityModal(false)" #addActivityModal *ngIf="showModal"> - <app-activity-form (nextClick)="handleNextClick($event)"></app-activity-form> -</sui-modal> <router-outlet></router-outlet> \ No newline at end of file diff --git a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.data.ts b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.data.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e0f6b411e12f9332f2842f9e6cc26f3370a42aa --- /dev/null +++ b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.data.ts @@ -0,0 +1,45 @@ +export const GroupDetailsData = { + groupData : { + 'membershipType': 'invite_only', + 'updatedBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'createdBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'activities': [ + { + 'id': 'do_1130958935577886721105', + 'type': 'PracticeQuestionSet' + } + ], + 'members': [ + { + 'userId': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'groupId': 'dcffdb33-edbe-4ea8-8ed5-4d6781c2e2e7', + 'role': 'admin', + 'status': 'active', + 'createdOn': '2020-09-09 07:05:27:543+0000', + 'createdBy': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'updatedOn': null, + 'updatedBy': null, + 'removedOn': null, + 'removedBy': null, + 'name': 'Mentor First User', + 'title': 'Mentor first user (You)', + 'initial': 'M', + 'identifier': '8454cb21-3ce9-4e30-85b5-fade097880d8', + 'isAdmin': true, + 'isCreator': true, + 'isSelf': true, + 'isMenu': false, + 'indexOfMember': 0 + } + ], + 'name': 'My testing group', + 'description': '', + 'id': 'dcffdb33-edbe-4ea8-8ed5-4d6781c2e2e7', + 'updatedOn': '2020-09-09 07:21:15:380+0000', + 'createdOn': '2020-09-09 07:05:27:528+0000', + 'status': 'active', + 'isCreator': true, + 'isAdmin': true, + 'initial': 'M' + } +}; diff --git a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.ts b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.ts index 2d01fb869d7333669b994797fe1967eaf933c37d..98039fe51d100ba1bf7daf3b9d37c3b85ad1b0b4 100644 --- a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.ts +++ b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.spec.ts @@ -12,6 +12,8 @@ import { ActivatedRoute, Router } from '@angular/router'; import { APP_BASE_HREF } from '@angular/common'; import { of } from 'rxjs'; import { impressionObj, fakeActivatedRoute } from './../../services/groups/groups.service.spec.data'; +import { GroupDetailsData } from './group-details.component.spec.data'; +import * as _ from 'lodash-es'; describe('GroupDetailsComponent', () => { let component: GroupDetailsComponent; @@ -90,15 +92,16 @@ describe('GroupDetailsComponent', () => { }); it('should call handleNextClick', () => { + component.groupData = GroupDetailsData.groupData; const router = TestBed.get(Router); - spyOn(component, 'toggleActivityModal'); - component.addActivityModal = { - deny: jasmine.createSpy('deny') - }; - component.handleNextClick({}); - expect(component.toggleActivityModal).toHaveBeenCalled(); - expect(component.addActivityModal.deny).toHaveBeenCalled(); - expect(router.navigate).toHaveBeenCalled(); + component.navigateToAddActivity(); + expect(router.navigate).toHaveBeenCalledWith(['add-activity-content-types'], { + relativeTo: fakeActivatedRoute, + queryParams: { + groupName: _.get(component.groupData, 'name'), + createdBy: _.capitalize(_.get(_.find(component.groupData['members'], { userId: component.groupData['createdBy'] }), 'name')) + } + }); }); it('should ngOnDestroy', () => { diff --git a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.ts b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.ts index ba613fe2965ce169602ed9c446d5e51bc5729d1f..fea8342b15b8e92c33af658cd04d17b8e9d026bb 100644 --- a/src/app/client/src/app/modules/groups/components/group-details/group-details.component.ts +++ b/src/app/client/src/app/modules/groups/components/group-details/group-details.component.ts @@ -6,7 +6,7 @@ import * as _ from 'lodash-es'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { GroupsService } from '../../services'; -import { IGroupMemberConfig, IGroupCard, ADD_ACTIVITY_TO_GROUP, COURSES, IGroupMember } from '../../interfaces'; +import { IGroupMemberConfig, IGroupCard, IGroupMember, ADD_ACTIVITY_CONTENT_TYPES } from '../../interfaces'; import { IImpressionEventInput } from '@sunbird/telemetry'; @Component({ selector: 'app-group-details', @@ -92,10 +92,14 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { this.showFilters = true; } - handleNextClick(event) { - this.toggleActivityModal(false); - this.addActivityModal.deny(); - this.router.navigate([`${ADD_ACTIVITY_TO_GROUP}/${COURSES}`, 1], { relativeTo: this.activatedRoute }); + navigateToAddActivity() { + this.router.navigate([`${ADD_ACTIVITY_CONTENT_TYPES}`], { + relativeTo: this.activatedRoute, + queryParams: { + groupName: _.get(this.groupData, 'name'), + createdBy: _.capitalize(_.get(_.find(this.groupData['members'], {userId: this.groupData['createdBy']}), 'name')) + } + }); } diff --git a/src/app/client/src/app/modules/groups/components/group-members/group-members.component.ts b/src/app/client/src/app/modules/groups/components/group-members/group-members.component.ts index bf0e5f0e5b11262ea024156ab5e79f0e74a8554d..cb77f0cadb5924eff8cab30c0f85df0617d6445e 100644 --- a/src/app/client/src/app/modules/groups/components/group-members/group-members.component.ts +++ b/src/app/client/src/app/modules/groups/components/group-members/group-members.component.ts @@ -117,7 +117,7 @@ export class GroupMembersComponent implements OnInit, OnDestroy { getUpdatedGroupData() { const groupId = _.get(this.groupData, 'id') || _.get(this.activatedRoute.snapshot, 'params.groupId'); - this.groupsService.getGroupById(groupId, true).pipe(takeUntil(this.unsubscribe$)).subscribe(groupData => { + this.groupsService.getGroupById(groupId, true, true).pipe(takeUntil(this.unsubscribe$)).subscribe(groupData => { const user = _.find(_.get(groupData, 'members'), (m) => _.get(m, 'userId') === this.userService.userid); if (!user || _.get(groupData, 'status') === 'inactive') { this.groupsService.goBack(); diff --git a/src/app/client/src/app/modules/groups/groups-routing.module.ts b/src/app/client/src/app/modules/groups/groups-routing.module.ts index 3abd334d8a976a48f23f2a3c7d3f2ff780bdfa09..5a9751823b799a8b5051c53ef8fb637b5c668670 100644 --- a/src/app/client/src/app/modules/groups/groups-routing.module.ts +++ b/src/app/client/src/app/modules/groups/groups-routing.module.ts @@ -1,8 +1,9 @@ import { WORKSPACE, ADD_MEMBER_TO_GROUP, CREATE_GROUP, MY_GROUPS, - ADD_ACTIVITY_TO_GROUP, ACTIVITY_DETAILS, COURSES, GROUP_DETAILS, ADD_MEMBER } from './interfaces'; + ADD_ACTIVITY_TO_GROUP, ACTIVITY_DETAILS, COURSES, GROUP_DETAILS, ADD_MEMBER, + ADD_ACTIVITY_CONTENT_TYPES} from './interfaces'; import { MyGroupsComponent, AddMemberComponent, GroupDetailsComponent, - CreateEditGroupComponent, ActivitySearchComponent, ActivityDashboardComponent + CreateEditGroupComponent, ActivitySearchComponent, ActivityDashboardComponent, AddActivityContentTypesComponent } from './components'; import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; @@ -46,15 +47,22 @@ const routes: Routes = [ }, }, { - path: `${WORKSPACE.GROUP_ID}/${ADD_ACTIVITY_TO_GROUP}/${COURSES}/:pageNumber`, component: ActivitySearchComponent, + path: `${WORKSPACE.GROUP_ID}/${ACTIVITY_DETAILS}/:activityId`, component: ActivityDashboardComponent, data: { - telemetry: { env: telemetryEnv, pageid: ADD_ACTIVITY_TO_GROUP, type: type, subtype: subtype }, + telemetry: { env: telemetryEnv, pageid: ACTIVITY_DETAILS, type: type, subtype: subtype }, }, }, { - path: `${WORKSPACE.GROUP_ID}/${ACTIVITY_DETAILS}/:activityId`, component: ActivityDashboardComponent, + path: `${WORKSPACE.GROUP_ID}/${ADD_ACTIVITY_CONTENT_TYPES}`, component: AddActivityContentTypesComponent, data: { - telemetry: { env: telemetryEnv, pageid: ACTIVITY_DETAILS, type: type, subtype: subtype }, + telemetry: { env: telemetryEnv, pageid: ADD_ACTIVITY_CONTENT_TYPES, type: type, subtype: subtype }, + }, + }, + { + path: `${WORKSPACE.GROUP_ID}/${ADD_ACTIVITY_CONTENT_TYPES}/${ADD_ACTIVITY_TO_GROUP}/:activityType/:pageNumber`, + component: ActivitySearchComponent, + data: { + telemetry: { env: telemetryEnv, pageid: ADD_ACTIVITY_TO_GROUP, type: type, subtype: subtype }, }, }, ]; diff --git a/src/app/client/src/app/modules/groups/groups.module.ts b/src/app/client/src/app/modules/groups/groups.module.ts index b02e014fa63fd4865987d9aa08ea8dd4721b570b..33b0e19e231db0eeb70e5125b7c45807a99085d5 100644 --- a/src/app/client/src/app/modules/groups/groups.module.ts +++ b/src/app/client/src/app/modules/groups/groups.module.ts @@ -9,7 +9,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MyGroupsComponent, AddMemberComponent, GroupHeaderComponent, NoGroupResultComponent, AddActivityComponent, MemberActionsComponent, GroupMembersComponent, FtuPopupComponent, BackButtonComponent, ActivityListComponent, ActivityDashboardComponent, ActivitySearchComponent, - GroupDetailsComponent, ActivityFormComponent, CreateEditGroupComponent } from './components'; + GroupDetailsComponent, ActivityFormComponent, CreateEditGroupComponent, AddActivityContentTypesComponent } from './components'; import { CoreModule } from '@sunbird/core'; import { SharedFeatureModule } from '@sunbird/shared-feature'; import { GroupsService } from './services'; @@ -48,7 +48,8 @@ import { RecaptchaModule } from 'ng-recaptcha'; ActivitySearchComponent, ActivityFormComponent, CreateEditGroupComponent, - GroupDetailsComponent] + GroupDetailsComponent, + AddActivityContentTypesComponent] }) export class GroupsModule { constructor(private csLibInitializerService: CsLibInitializerService) { diff --git a/src/app/client/src/app/modules/groups/interfaces/routerLinks.ts b/src/app/client/src/app/modules/groups/interfaces/routerLinks.ts index 8f2045f8b7d5e5b26f4bdb0efd25af6dbf1543d6..50e8d7059bd58eb0e6ae36b4e4c695992ed161d5 100644 --- a/src/app/client/src/app/modules/groups/interfaces/routerLinks.ts +++ b/src/app/client/src/app/modules/groups/interfaces/routerLinks.ts @@ -9,3 +9,4 @@ export const ADD_ACTIVITY_TO_GROUP = 'add-activity-to-group'; export const ACTIVITY_DETAILS = 'activity-details'; export const COURSES = 'courses'; export const CREATE_GROUP = 'create-edit-group'; +export const ADD_ACTIVITY_CONTENT_TYPES = 'add-activity-content-types'; diff --git a/src/app/client/src/app/modules/groups/services/groups/groups.service.ts b/src/app/client/src/app/modules/groups/services/groups/groups.service.ts index 7fccc88be1a5e1b690629aef414c7e733d16d323..c936730ae7295b07885bf9a9bfa75b534ad747a2 100644 --- a/src/app/client/src/app/modules/groups/services/groups/groups.service.ts +++ b/src/app/client/src/app/modules/groups/services/groups/groups.service.ts @@ -246,4 +246,8 @@ getActivity(groupId, activity, mergeGroup) { emitMenuVisibility(visibility) { this.showMenu.emit(visibility); } + + getSupportedActivityList() { + return this.groupCservice.getSupportedActivities(); + } } diff --git a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.html b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.html index 9ffecebaa0337114a129a19d2eb2727c7398ff61..275e39c683d03aee5fe521d554c58b9f2c347519 100644 --- a/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.html +++ b/src/app/client/src/app/modules/learn/components/course-consumption/course-consumption-header/course-consumption-header.component.html @@ -70,9 +70,10 @@ <div class="sb-g-col-xs-12 sb-g-col-md-3 sb-g-col-lg-3 sb-g-col-xxxl-4 certified-course"> - <div class="certified-course__btn" *ngIf="showAddGroup"> + <div class="certified-course__btn"> <button class="sb-btn sb-btn-secondary sb-btn-normal ml-auto textbook__addbtn" - (click)="addActivityToGroup(); this.logTelemetry('add-to-group', courseHierarchy)">{{resourceService?.frmelmnts?.lbl?.AddtoGroup}}</button> + appAddToGroup [identifier]="courseHierarchy?.identifier" [pageId]="courseHierarchy?.contentType.toLowerCase()"> + {{resourceService?.frmelmnts?.lbl?.AddtoGroup}}</button> </div> <!-- join course, start learning, continue learning, view dashboard buttons --> <div *ngIf="!showAddGroup && isTrackable"> diff --git a/src/app/client/src/app/modules/resource/modules/player/components/collection-player/collection-player.component.html b/src/app/client/src/app/modules/resource/modules/player/components/collection-player/collection-player.component.html index 501a1c242b3efc7e86b3af61d0f26cda91b1f28e..6b6b71c5153f0b2601e43bb076c251f74533e5ae 100644 --- a/src/app/client/src/app/modules/resource/modules/player/components/collection-player/collection-player.component.html +++ b/src/app/client/src/app/modules/resource/modules/player/components/collection-player/collection-player.component.html @@ -60,6 +60,14 @@ [permission]="['CONTENT_CREATOR']" (click)="createCourse()" class="sb-btn sb-btn-normal sb-btn-primary"> {{resourceService?.frmelmnts?.btn?.createCourse}} </button> + + <div class="certified-course__btn"> + <button class="sb-btn sb-btn-secondary sb-btn-normal ml-auto textbook__addbtn" + appAddToGroup + [identifier]="collectionData?.identifier" + [pageId]="collectionData?.contentType.toLowerCase()">{{resourceService?.frmelmnts?.lbl?.AddtoGroup}} + </button> + </div> <div class="ui active inverted dimmer" *ngIf="showCopyLoader"> <div class="ui text centered inline loader mt-40"> diff --git a/src/app/client/src/app/modules/resource/modules/player/components/content-player/content-player.component.html b/src/app/client/src/app/modules/resource/modules/player/components/content-player/content-player.component.html index b1747da6575d5ca5ac76d5a42c3baf20f486207e..5f1c9535deeda9373df1bb3e65da4f7323bca2d4 100644 --- a/src/app/client/src/app/modules/resource/modules/player/components/content-player/content-player.component.html +++ b/src/app/client/src/app/modules/resource/modules/player/components/content-player/content-player.component.html @@ -27,6 +27,11 @@ {{resourceService?.frmelmnts?.lbl?.copy}} </a> </span> + <div class="certified-course__btn"> + <button class="sb-btn sb-btn-secondary sb-btn-normal ml-auto textbook__addbtn" + appAddToGroup [identifier]="contentData?.identifier" [pageId]="contentData?.contentType.toLowerCase()"> + {{resourceService?.frmelmnts?.lbl?.AddtoGroup}}</button> + </div> </div> </div> diff --git a/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.data.ts b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.data.ts new file mode 100644 index 0000000000000000000000000000000000000000..e83e5c3719024d16cd08a4ed8e7a63377e574c4b --- /dev/null +++ b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.data.ts @@ -0,0 +1,6 @@ +export const AddToGroupDirectiveMockData = { + csGroupAddableBlockData : { + + } + +}; diff --git a/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.ts b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e12fb0977f0deb449db79d5cfb6fb8a323aaf8b9 --- /dev/null +++ b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.spec.ts @@ -0,0 +1,56 @@ +import { TelemetryService } from '@sunbird/telemetry'; +import { ConfigService, ResourceService, NavigationHelperService, ToasterService } from '@sunbird/shared'; +import { AddToGroupDirective, csGroupServiceFactory } from './add-to-group.directive'; +import { TestBed } from '@angular/core/testing'; +import { HttpHandler } from '@angular/common/http'; +import { CacheService } from 'ng2-cache-service'; +import { BrowserCacheTtlService, UtilService } from '../../services'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { ElementRef } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; + +describe('AddToGroupDirective', () => { + let directive: AddToGroupDirective; + + class ResourceServiceStub { + } + + class RouterStub { + + } + + const fakeActivatedRoute = { + + }; + + const elementRefStub = { nativeElement: { 'lang': 'en', 'dir': 'ltr' } }; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ ], + providers: [ + HttpClientTestingModule, + HttpHandler, + CacheService, + BrowserCacheTtlService, + AddToGroupDirective, + ConfigService, + NavigationHelperService, + UtilService, + ToasterService, + TelemetryService, + { provide: ResourceService, useClass: ResourceServiceStub }, + { provide: ElementRef, useValue: elementRefStub }, + { provide: Router, useClass: RouterStub }, + { provide: ActivatedRoute, useValue: fakeActivatedRoute}, + { provide: 'CS_GROUP_SERVICE', useFactory: csGroupServiceFactory} + ] + }); + directive = TestBed.get(AddToGroupDirective); + }); + + it('should create an instance', () => { + expect(directive).toBeTruthy(); + }); + +}); diff --git a/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.ts b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.ts new file mode 100644 index 0000000000000000000000000000000000000000..55418565e7eb15e32977dc61a7d715bcbb4f5700 --- /dev/null +++ b/src/app/client/src/app/modules/shared/directives/add-to-group/add-to-group.directive.ts @@ -0,0 +1,102 @@ +import { Directive, OnInit, HostListener, ElementRef, Input, Inject } from '@angular/core'; +import { CsGroupAddableBloc } from '@project-sunbird/client-services/blocs'; +import { filter } from 'rxjs/operators'; +import { ResourceService } from './../../services/resource/resource.service'; +import { NavigationHelperService } from '../../services/navigation-helper/navigation-helper.service'; +import { ToasterService } from '../../services/toaster/toaster.service'; +import * as _ from 'lodash-es'; +import { takeUntil } from 'rxjs/operators'; +import { Subject } from 'rxjs'; +import { CsGroupService } from '@project-sunbird/client-services/services/group/interface'; +import { CsModule } from '@project-sunbird/client-services'; +import { TelemetryService } from '@sunbird/telemetry'; + + +// tslint:disable-next-line:only-arrow-functions +export function csGroupServiceFactory() { + return CsModule.instance.groupService; +} + +@Directive({ + selector: '[appAddToGroup]', + providers: [{ provide: 'CS_GROUP_SERVICE', useFactory: csGroupServiceFactory}] +}) +export class AddToGroupDirective implements OnInit { + + @Input() pageId: string; + @Input() identifier: string; + unsubscribe$ = new Subject<void>(); + groupAddableBlocData: any; + constructor( + private ref: ElementRef, + public navigationHelperService: NavigationHelperService, + public toasterService: ToasterService, + public resourceService: ResourceService, + @Inject('CS_GROUP_SERVICE') + private csGroupService: CsGroupService, + private telemetryService: TelemetryService ) { } + + @HostListener('click', ['$event']) + clickEvent(event) { + this.addActivityToGroup(); + } + + ngOnInit() { + CsGroupAddableBloc.instance.state$.pipe(takeUntil(this.unsubscribe$)).subscribe(data => { + this.groupAddableBlocData = data; + }); + (this.ref.nativeElement as HTMLButtonElement).style.display = 'none'; + if (CsGroupAddableBloc.instance.initialised) { + CsGroupAddableBloc.instance.state$.pipe( + filter((state) => state && state.pageIds.includes(this.pageId)) + ).subscribe(data => { + (this.ref.nativeElement as HTMLButtonElement).style.display = data ? 'block' : 'none'; + }); + } + } + + addActivityToGroup() { + this.sendInteractData(); + const isActivityAdded = _.find(_.get(this.groupAddableBlocData, 'params.groupData.activities'), {id: this.identifier}); + if ( _.isEmpty(isActivityAdded)) { + const request = { + activities: [{ id: this.identifier, type: _.get(this.groupAddableBlocData, 'params.contentType') }] + }; + this.csGroupService.addActivities(_.get(this.groupAddableBlocData, 'groupId'), request).subscribe(response => { + this.goBack(); + this.toasterService.success(this.resourceService.messages.imsg.activityAddedSuccess); + }, error => { + console.error('Error while adding activity to the group', error); + this.goBack(); + this.toasterService.error(this.resourceService.messages.stmsg.activityAddFail); + }); + } else { + this.goBack(); + isActivityAdded ? this.toasterService.error(this.resourceService.messages.emsg.activityAddedToGroup) : + this.toasterService.error(this.resourceService.messages.emsg.noAdminRole); + } + } + + sendInteractData() { + const data = { + context: { + env: 'groups', + cdata: [{ + type: _.get(this.groupAddableBlocData, 'params.contentType'), + id: this.identifier + }] + }, + edata: { + id: 'add-to-group-button', + type: 'CLICK', + pageid: this.pageId + } + }; + + this.telemetryService.interact(data); + } + + goBack() { + this.navigationHelperService.navigateToLastUrl(); + } +} diff --git a/src/app/client/src/app/modules/shared/directives/index.ts b/src/app/client/src/app/modules/shared/directives/index.ts index 6af8076f78289854b0d1f007817388cfd51ac3fa..3ff07aa3cf1bb9b0305c4de8db33ceee947e6844 100644 --- a/src/app/client/src/app/modules/shared/directives/index.ts +++ b/src/app/client/src/app/modules/shared/directives/index.ts @@ -1,3 +1,4 @@ export * from './content-direction.directive'; export * from './highlight-text/highlight-text.directive'; export * from './markdown/markdown.directive'; +export * from './add-to-group/add-to-group.directive'; diff --git a/src/app/client/src/app/modules/shared/services/util/util.service.ts b/src/app/client/src/app/modules/shared/services/util/util.service.ts index b99a8f32f8e66c62d12e72cce1ed707fcd1d1115..b18b2f61189222f4240b95adfe12593a6f375b04 100644 --- a/src/app/client/src/app/modules/shared/services/util/util.service.ts +++ b/src/app/client/src/app/modules/shared/services/util/util.service.ts @@ -61,6 +61,7 @@ export class UtilService { hoverData: data.hoverData, board: data.board || '', identifier: data.identifier, + mimeType: data.mimeType }; if (data.desktopAppMetadata) { diff --git a/src/app/client/src/app/modules/shared/shared.module.ts b/src/app/client/src/app/modules/shared/shared.module.ts index 8aa2ed47481a0a63156c377f6a888fadb4314627..3ca397f9e6d6177431f42d0c1c8e4790c5c7ba65 100644 --- a/src/app/client/src/app/modules/shared/shared.module.ts +++ b/src/app/client/src/app/modules/shared/shared.module.ts @@ -26,6 +26,7 @@ import { CdnprefixPipe } from './pipes/cdnprefix.pipe'; import { HighlightTextDirective } from './directives/highlight-text/highlight-text.directive'; import { AppLandingSectionComponent } from './components/app-landing-section/app-landing-section.component'; import { TranslateModule, TranslateStore } from '@ngx-translate/core'; +import { AddToGroupDirective } from './directives/add-to-group/add-to-group.directive'; @NgModule({ imports: [ @@ -41,14 +42,14 @@ import { TranslateModule, TranslateStore } from '@ngx-translate/core'; ShareLinkComponent, BrowserCompatibilityComponent, QrCodeModalComponent, CdnprefixPipe, RedirectComponent, CustomMultiSelectComponent, InstallAppComponent, LockInfoPopupComponent, ContentDirectionDirective, OfflineBannerComponent, OfflineApplicationDownloadComponent, HighlightTextDirective, FullPageModalComponent, AccountMergeModalComponent, SortByPipe, - ConfirmPopupComponent, SelectOptionGroupComponent, AppLandingSectionComponent, MarkdownDirective], + ConfirmPopupComponent, SelectOptionGroupComponent, AppLandingSectionComponent, MarkdownDirective, AddToGroupDirective], exports: [AppLoaderComponent, DateFormatPipe, TranslateModule, BatchCardComponent, NoResultComponent, CardComponent, CardCreationComponent, FilterPipe, OfflineApplicationDownloadComponent, HighlightTextDirective, FullPageModalComponent, AccountMergeModalComponent, SortByPipe, ConfirmPopupComponent, SelectOptionGroupComponent, AppLandingSectionComponent, ShareLinkComponent, BrowserCompatibilityComponent, QrCodeModalComponent, CdnprefixPipe, InterpolatePipe, RedirectComponent, CustomMultiSelectComponent, InstallAppComponent, LockInfoPopupComponent, ContentDirectionDirective, OfflineBannerComponent, - MarkdownDirective] + MarkdownDirective, AddToGroupDirective] }) export class SharedModule { static forRoot(): ModuleWithProviders { diff --git a/src/app/client/yarn.lock b/src/app/client/yarn.lock index f45b8e41fee36169c1b1b46a8ea2a8f40a870a26..b761380dcd6a150998c670ea3e5fb31350792bce 100644 --- a/src/app/client/yarn.lock +++ b/src/app/client/yarn.lock @@ -549,10 +549,10 @@ "@ckeditor/ckeditor5-font" "^11.1.0" "@wiris/mathtype-ckeditor5" "^7.13.0" -"@project-sunbird/client-services@~3.2.4": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@project-sunbird/client-services/-/client-services-3.2.6.tgz#24c37ce9a8f5c3b7724983638c6013168149e7a0" - integrity sha512-zCkSY2cH1U6h4FSfDV2364xYF3y4qJYbyeWQyE/DFcJ6LZXKuBLIZenB++dBL4FBpjztqawTC793d2eFB5I0Vw== +"@project-sunbird/client-services@3.3.10": + version "3.3.10" + resolved "https://registry.yarnpkg.com/@project-sunbird/client-services/-/client-services-3.3.10.tgz#0e9f31a23bf37640d5d56f373e91439ec9c6b0b9" + integrity sha512-HSb9edpGwkYz2tOFh7bNq/oifttx7bHSkYStJtwQXXxBaOaS+bW9a8Lma6mbcmeybtm3c5tOWwne/KnZhFiHyA== dependencies: inversify "^5.0.1" qs "^6.9.4" @@ -1066,20 +1066,6 @@ angular-inport@^2.0.0: resolved "https://registry.yarnpkg.com/angular-inport/-/angular-inport-2.0.1.tgz#f24c5c6fdbda6067862b67b562e4f79a8bb42bb8" integrity sha512-nMcT/1T9J6YdtaFWwvNbsmx51yCL3OoRTFipjukD7q+lVH4jIcWrAcX4uQWO4fuRcu+UOCWzXAInqwJjyq+wkg== -angular-shepherd@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/angular-shepherd/-/angular-shepherd-0.0.5.tgz#cc4349f376e61e520103e51e19a00bfc06e2e3e6" - integrity sha512-EDDy67LhrGfM1ni7uwCAtoNdO3i1jwiyrSbnFpvhT87RWsAW4Lmlyn84qgSs3NqfwTSeESkBKEv9h8RYDayMGg== - dependencies: - disable-scroll "0.3.0" - shepherd.js "^2.9.0" - tslib "^1.9.0" - -angular2-multiselect-dropdown@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/angular2-multiselect-dropdown/-/angular2-multiselect-dropdown-3.2.1.tgz#952750132b38b9ee176c31b1b5048f55811abb73" - integrity sha512-E2ZFkpeNq6vAwNwVZcwwioajs4N/bkG8KZMgS68HfP25yWSMZ9tYIPsHYW6rh8hus+Zm15Y/Cfih8DK0wrOsuw== - angular2-uuid@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/angular2-uuid/-/angular2-uuid-1.1.1.tgz#72f03cd532b7f40032eb1ecfb9f8457384be956e" @@ -2415,15 +2401,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -clipboard@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" - integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -3239,11 +3216,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -3325,11 +3297,6 @@ dir-glob@^2.0.0: dependencies: path-type "^3.0.0" -disable-scroll@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/disable-scroll/-/disable-scroll-0.3.0.tgz#486d309ec9873edb18aec7891c5576bf8b506c59" - integrity sha1-SG0wnsmHPtsYrseJHFV2v4tQbFk= - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -3428,11 +3395,6 @@ element-closest@^2.0.2: resolved "https://registry.yarnpkg.com/element-closest/-/element-closest-2.0.2.tgz#72a740a107453382e28df9ce5dbb5a8df0f966ec" integrity sha1-cqdAoQdFM4LijfnOXbtajfD5Zuw= -element-matches@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/element-matches/-/element-matches-0.1.2.tgz#7345cb71e965bd2b12f725e524591c102198361a" - integrity sha512-yWh1otcs3OKUWDvu/IxyI36ZI3WNaRZlI0uG/DK6fu0pap0VYZ0J5pEGTk1zakme+hT0OKHwhlHc0N5TJhY6yQ== - elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" @@ -3632,7 +3594,7 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3, es6-promise@^4.2.5: +es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== @@ -3870,11 +3832,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -export-to-csv@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/export-to-csv/-/export-to-csv-0.2.1.tgz#8f997156feebc1cf995096da16341aa0100cce4e" - integrity sha512-KTbrd3CAZ0cFceJEZr1e5uiMasabeCpXq1/5uvVxDl53o4jXJHnltasQoj2NkzrxD8hU9kdwjnMhoir/7nNx/A== - express@^4.16.2: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -4101,11 +4058,6 @@ fileset@^2.0.3: glob "^7.0.3" minimatch "^3.0.3" -"filesize@>= 4.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" - integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4695,13 +4647,6 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= - dependencies: - delegate "^3.1.2" - graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -5073,22 +5018,6 @@ html2canvas@1.0.0-rc.3: dependencies: css-line-break "1.1.1" -html2canvas@^1.0.0-alpha.12: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-rc.5.tgz#4ee3cac9f6e20a0fa0c2f35a6f99c960ae7ec4c1" - integrity sha512-DtNqPxJNXPoTajs+lVQzGS1SULRI4GQaROeU5R41xH8acffHukxRh/NBVcTBsfCkJSkLq91rih5TpbEwUP9yWA== - dependencies: - css-line-break "1.1.1" - -html2pdf.js@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/html2pdf.js/-/html2pdf.js-0.9.1.tgz#144fbe972848cebaa1cf6f8fa66395422d9aad55" - integrity sha512-bneX1NQTj67PZuV4WX19fOGLZWbEIZvO8qLAGOKX5VQsbGXX62/5ZraD42oeUHlh5gSOkFpNf+J9lOjQV6qAvg== - dependencies: - es6-promise "^4.2.5" - html2canvas "^1.0.0-alpha.12" - jspdf "^1.4.1" - http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -6097,7 +6026,7 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= -jspdf@1.5.3, jspdf@^1.4.1: +jspdf@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-1.5.3.tgz#5a12c011479defabef5735de55c913060ed219f2" integrity sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw== @@ -6539,11 +6468,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.defer/-/lodash.defer-4.1.0.tgz#e9c158a961de1a46ea24fda34685b4ccdd358f3f" - integrity sha1-6cFYqWHeGkbqJP2jRoW0zN01jz8= - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -6561,16 +6485,6 @@ lodash.isarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= -lodash.iselement@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.iselement/-/lodash.iselement-4.1.1.tgz#f678d4f6f3a964f9ec7f115f2546f3e4a0ba82ca" - integrity sha1-9njU9vOpZPnsfxFfJUbz5KC6gso= - -lodash.isobjectlike@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isobjectlike/-/lodash.isobjectlike-4.0.0.tgz#742c5fc65add27924d3d24191681aa9a17b2b60d" - integrity sha1-dCxfxlrdJ5JNPSQZFoGqmheytg0= - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -6613,11 +6527,6 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash.zipobject@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz#b399f5aba8ff62a746f6979bf20b214f964dbef8" - integrity sha1-s5n1q6j/YqdG9peb8gshT5ZNvvg= - lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -6823,11 +6732,6 @@ marked@1.1.1: resolved "https://registry.yarnpkg.com/marked/-/marked-1.1.1.tgz#e5d61b69842210d5df57b05856e0c91572703e6a" integrity sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw== -marked@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== - matchdep@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" @@ -6861,11 +6765,6 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medium-zoom@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-1.0.5.tgz#81413dda20ccdd857141ff420cfab788dd32e20e" - integrity sha512-aLGa6WlTuFKWvH88bqTrY5ztJMN+D0hd8UX6BYc4YSoPayppzETjZUcdVcksgaoQEMg4cZSmXPg846fTp2rjRQ== - mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" @@ -7218,11 +7117,6 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -ng-dynamic-component@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ng-dynamic-component/-/ng-dynamic-component-5.0.0.tgz#8be806cf7b4d6ab6e59d86f69e65f2b0820c2892" - integrity sha512-87ragKzHGkeuXY3OqphZwNog7na4FhzJqcpqHFxCov2MXWm+fcInqcf3xunPhjJFYpAnbjb89VZO2zElLqvosA== - ng-recaptcha@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ng-recaptcha/-/ng-recaptcha-5.0.0.tgz#3aa3344b17e2954ba0eb0e27daf97e216c006b4f" @@ -7285,13 +7179,6 @@ ngx-device-detector@1.3.5: resolved "https://registry.yarnpkg.com/ngx-device-detector/-/ngx-device-detector-1.3.5.tgz#febd134cc58c2a61e83bec5491d1e2f429bfde67" integrity sha512-u/h/HGVTqOxweLSKQmXoOLHsYldSDAQePrMC6sa3WGAECoAR6S7W1QuwdNN1cj7NBdfY0wxar9MQ3MV7DiFfkg== -ngx-filesize@^2.0.15: - version "2.0.15" - resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-2.0.15.tgz#4194ec134c47e56926704c5039ab1f8c2965b8b4" - integrity sha512-ARWZC3YSueyBhSmxRk0tAMvjYsYCiUrluiM4LK1xiLSkTvHSo1m1XqbBp9/6SIWRo9/5JqUfThmBvAjCi4fVKw== - dependencies: - filesize ">= 4.0.0" - ngx-infinite-scroll@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-8.0.2.tgz#ab527962f179b00f7b57c37cc0c8aba1bf88b131" @@ -7300,15 +7187,6 @@ ngx-infinite-scroll@^8.0.2: "@scarf/scarf" "0.1.5" opencollective-postinstall "^2.0.2" -ngx-md@^8.1.6: - version "8.1.6" - resolved "https://registry.yarnpkg.com/ngx-md/-/ngx-md-8.1.6.tgz#479cb2c010d2943b2769ad11d87840c30a8316b2" - integrity sha512-uecStRlxoyOXFeFBNPIsNZDpkOzApWiivQVH4OH/7FvUtIkZrS28dNnmzQvt076t4Fr2UJVxUe8h60dtI1BtuA== - dependencies: - marked "^0.7.0" - prismjs "^1.15.0" - tslib "^1.9.0" - ngx-order-pipe@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/ngx-order-pipe/-/ngx-order-pipe-2.0.4.tgz#8152278e655706852536e1914ffa5321eb91d12f" @@ -8328,7 +8206,7 @@ plugin-error@^1.0.0, plugin-error@^1.0.1: arr-union "^3.1.0" extend-shallow "^3.0.2" -popper.js@^1.14.0, popper.js@^1.14.7: +popper.js@^1.14.0: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== @@ -8429,13 +8307,6 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -prismjs@^1.15.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" - integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== - optionalDependencies: - clipboard "^2.0.0" - process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -9288,11 +9159,6 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= - selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: version "3.6.0" resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" @@ -9486,19 +9352,6 @@ shelljs@^0.8.1: interpret "^1.0.0" rechoir "^0.6.2" -shepherd.js@2.10.0, shepherd.js@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/shepherd.js/-/shepherd.js-2.10.0.tgz#3afbfe87bcfab54bc9a38b88f1305247935ca45f" - integrity sha512-37bVD5/RTmwHA5zhX/WNsU/9U5S3FslBjZCqHI7/upuahieOr3TaOx+Jkc9TJK6HD9r8I8rQOeQSZGQbOs2kwA== - dependencies: - element-matches "^0.1.2" - lodash.defer "^4.1.0" - lodash.iselement "^4.1.1" - lodash.isobjectlike "^4.0.0" - lodash.zipobject "^4.1.3" - smoothscroll-polyfill "^0.4.4" - tippy.js "^4.3.4" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -9550,11 +9403,6 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== -smoothscroll-polyfill@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" - integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== - smtp-connection@2.12.0: version "2.12.0" resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" @@ -10413,13 +10261,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -time-ago-pipe@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/time-ago-pipe/-/time-ago-pipe-1.3.2.tgz#deeea1c19d5ba45b67498d0f4f7050d2fa57e6eb" - integrity sha512-ecKcPRPzQ4iDGrcifplKod4/Ael6w65LAw0Ll/IEJBv+CBmKZGMLpgduLWmlgu6Ow8ykwb/Fp2SPqPNDTLpuoQ== - dependencies: - tslib "^1.7.1" - time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" @@ -10437,18 +10278,6 @@ timespan@2.3.x: resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" integrity sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk= -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - -tippy.js@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.5.tgz#882bff8d92f09bb0546d2826d5668c0560006f54" - integrity sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA== - dependencies: - popper.js "^1.14.7" - tlds@^1.203.0: version "1.207.0" resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.207.0.tgz#459264e644cf63ddc0965fece3898913286b1afd" @@ -10626,7 +10455,7 @@ tsconfig@^7.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== diff --git a/src/app/helpers/whitelistApis.js b/src/app/helpers/whitelistApis.js index 80f3a57d698b759006da8f84c1c8ade7ffb09c99..30cf36c6911f91a3bd5bd806c050f0bf94bfd98e 100644 --- a/src/app/helpers/whitelistApis.js +++ b/src/app/helpers/whitelistApis.js @@ -551,6 +551,10 @@ const API_LIST = { '/learner/anonymous/otp/v1/generate': { checksNeeded: [] }, + '/learner/data/v1/form/read': { + checksNeeded: ['ROLE_CHECK'], + ROLE_CHECK: [ROLE.PUBLIC] + }, // Groups related APIs '/learner/group/v1/create': { diff --git a/src/app/resourcebundles/data/consumption/en.properties b/src/app/resourcebundles/data/consumption/en.properties index 6b058cda3e73f647bc3fa14e0fe589bdd4456ba8..c38c524f05d2f18aa801d7fee73849efabc919b9 100644 --- a/src/app/resourcebundles/data/consumption/en.properties +++ b/src/app/resourcebundles/data/consumption/en.properties @@ -173,7 +173,7 @@ frmelmnts.lbl.ACTIVITY_EXPLANATION_CONTENT_TITLE = Explanation content frmelmnts.lbl.ACTIVITY_PRACTICE_QUESTION_SET_TITLE = Practice question set frmelmnts.lbl.ACTIVITY_PRACTICE_RESOURCE_TITLE = Practice resource frmelmnts.lbl.ACTIVITY_RESOURCE_TITLE = Resource -frmelmnts.lbl.ACTIVITY_TEXTBOOK_TITLE = Textbooks(Coming soon) +frmelmnts.lbl.ACTIVITY_TEXTBOOK_TITLE = Textbooks frmelmnts.lbl.ACTIVITY_TV_EPISODE_TITLE = TV Episode frmelmnts.lbl.ActivityCourses = Courses frmelmnts.lbl.ActivityLessonPlan = Lesson Plan diff --git a/src/app/resourcebundles/json/en.json b/src/app/resourcebundles/json/en.json index dec9014656728511b792939078fa0659d14f087b..dc48623a2af181cdeba5da582b6e250ffd7f92db 100644 --- a/src/app/resourcebundles/json/en.json +++ b/src/app/resourcebundles/json/en.json @@ -1,2 +1 @@ -{"consumption":{"frmelmnts":{"lbl":{"addNewMember":"Add member","fromGroup":"from this group","groupDescription":"Enter a description to help members understand the purpose of the group","member":"Member","tryDifferentName":"* type a similar but, different name","ACTIVITY_COLLECTION_TITLE":"Collection","ACTIVITY_COURSE_TITLE":"Courses","ACTIVITY_EXPLANATION_CONTENT_TITLE":"Explanation content","ACTIVITY_PRACTICE_QUESTION_SET_TITLE":"Practice question set","ACTIVITY_PRACTICE_RESOURCE_TITLE":"Practice resource","ACTIVITY_RESOURCE_TITLE":"Resource","ACTIVITY_TEXTBOOK_TITLE":"Textbooks(Coming soon)","ACTIVITY_TV_EPISODE_TITLE":"TV Episode","ActivityCourses":"Courses","ActivityLessonPlan":"Lesson Plan","ActivityTextbooks":"Textbooks","AddtoGroup":"Add to group","CCbyLicense":"All content here is licensed under a Creative Commons license (CC-BY 4.0) unless otherwise noted","EnterPassword":"Enter password","InstanceIdProfilename":"The {instance} ID is written just below the profile name.","LastUpdated":"Last updated","MembersInstanceId":"Use the following instructions to guide members to identify their unique {instance} ID.","Mobile":"Mobile","switchToOldLayout":"Switch to old theme","switchToJoyLayout":"Switch to joyful theme","tryNewTheme":"Try new theme","noThankYou":"No thank you","NoSerchGroupMemberResults":"Sorry! there are no results to match your search. To continue your search","OTPhasbeensent":"OTP has been sent","OTPhasbeensentToEmail":"OTP is sent to your email address","OTPhasbeensentToPhone":"OTP is sent to your mobile number","OTPmsgforuser":"You will receive an OTP to verify your mobile number or email address","OTPresendMaxretry":"You can request for an OTP only 4 times. You have to register again","OTPresendMaxretryreached":"Maximum retry limit exceeded","OTPvalid":"OTP is valid for 30 minutes","RecommndationsBasedOnProfile":"Recommendations based on your profile details","SearchIn":"Search in {searchContentType}","SeetheInstanceIDhere":"See the {instance} ID here","Select":"Select","SelectProfileMenu":"Select the profile menu","ShowingActivityResults":"Showing {resultCount} results for {searchString}","TypeToSearchForContent":"Type to search for content. e.g. 'Story'","aboutTheContent":"About the content","accessCourse":"Access course","accessToLogin":"To access the course you have to log in and join the course","accountRecoveryDescription":"A recovery account helps you to regain access to your account if you are locked out or forget your password. Choose the recovery account type and enter details","active":"Active","activities":"Activities","activityRecommendation":"Recommendations based on your profile details","addAnotherUser":"Add another user","addCourse":"Add course","addDistrict":"Add District","addEmailID":"Add Email address","addMember":"Add member","addPhoneNo":"Add Mobile Number","addRecoveryAccount":"Add recovery account","addRecoveryId":"Add Recovery ID","addState":"Add State","addUser":"Add user","addingMembertoGroup":"Where can I see the {instance} ID?","addlInfo":"Additional Information","addnote":"TAKE NOTES","addorgtype":"Add Organization Type","address":"Address","admindshheader":{"blocks":"Blocks","districts":"Districts","index":"Serial No.","schools":"Schools","teachers":"Regd. Teachers"},"agreeGroupToc":"I agree to {instance}'s ","allDownloads":"All downloads will automatically be added to","anncmnt":"Announcement","anncmntall":"All Announcements","anncmntcancelconfirm":"Are you sure you want to stop showing this announcement?","anncmntcancelconfirmdescrption":"Users will not be able to see this announcement after this action","anncmntcreate":"CREATE ANNOUNCEMENT","anncmntdtlsattachments":"Attachments","anncmntdtlssenton":"Sent on","anncmntdtlsweblinks":"Weblinks","anncmntinboxannmsg":"Announcements","anncmntinboxseeall":"See All","anncmntlastupdate":"Consumption data last updated on","anncmntmine":"My Announcements","anncmntnotfound":"No announcement found !","anncmntoutboxdelete":"Delete","anncmntoutboxresend":"Resend","anncmntreadmore":"... Read More","anncmntsent":"Showing all sent announcements","anncmnttblactions":"Actions","anncmnttblname":"Name","anncmnttblpublished":"Published","anncmnttblreceived":"Received","anncmnttblseen":"Seen","anncmnttblsent":"Sent","appUpdateAvailable":"New update available!","appUpdateDescription":"Click on the link to get the new version of the desktop app","appliedFilters":"Applied filters","attributions":"Attributions","author":"Author","authorofsourcecontent":"Author of Source Content","availableBatches":"Available batches","availableForContribution":"Available for contribution","badgeassignconfirmation":"Are you sure you want to issue the badge to this content?","basedOnPref":"Based on your preferences","batch_name":"Batch name","batchdescription":"DESCRIPTION OF BATCH","batchdetails":"Batch Details","batchenddate":"End Date","batches":"Batches","batchstartdate":"Start Date","birthdate":"Birthdate (dd/mm/yyyy)","block":"Block","blocked":"Blocked","blockedUserError":"The user account is blocked. Contact administrator","board":"Board/University","boardRequired":"You have to select a State","boards":"Board","browse":"Online library","browserSuggestions":"For an improved experience, we suggest that you upgrade or install","captchaValidationFailed":"Failed to validate your details","cert":"Reissue certificates","certificateIssuedTo":"Certificate issued to","certificates":"Certificates","certificatesIssued":"Certificates Issued","certificationAward":"Certifications & Awards","channel":"Channel","chapter":"Chapter","charError":"Password must contain at least 8 alphanumeric characters.","characterleft":"Characters remaining","chartSummary":"Chart summary","checkSpelling":"* check your spelling","checkYourSpelling":"*check your spelling","chkuploadsts":"Check Upload Status","chooseAll":"Choose All","class":"Class","classRequired":"You have to select a class","classes":"Classes","clickHere":"Click here","clickOnProfileIcon":"Click on the profile icon on the header","collapseAll":"Collapse all","comingSoon":"Coming soon","completeContentToUnlock":"Complete {count} more contents to unlock a new achievement","completeForCertificate":"Complete all the modules to get a certificate","completed":"Completed","completedCourse":"Courses completed","completingCourseSuccessfully":"For successfully completing the course,","confirmPassword":"Confirm Password","confirmblock":"Are you sure to Block","congratulations":"Congratulations!","contactStateAdmin":"Contact your state admin to add more participants to this batch","content":{"AUTHOR":"Author","BOARD":"Board","CLASS":"Class","CREATEDON":"Created on","ContentInformation":"Content information","CreatedOnBy":"Created on {instance} by","DESCRIPTION":"Description","KEYWORDS":"Keywords","LASTUPDATEDON":"Last updated on","LicenseTerms":"License terms","MEDIUM":"Medium","RESOURCETYPE":"Resource type","SUBJECT":"Subject"},"contentCredits":"Content Credits","contentLabel":"Content","contentType":"Content type","contentcopiedtitle":"This content is derived from","contentinformation":"Content Information","contentname":"CONTENT NAME","contentsLabel":"Contents","contenttype":"Content","continue":"Continue","copy":"Copy","copyAsCourse":"Copy as course","copyRight":"Copyright","copycontent":"Copying content...","country":"Country","countryCode":"Country code","courseContainCertificate":"This is a certificate course ","courseCreatedBy":"Created by","courseCredits":"Credits","courseDetails":"Course details","courseDontContainCertificate":"This course does not have a certificate","courseLastUpdatedOn":"Course last updated on","courseProgress":"Course progress","courseRelevantFor":"The course is relevant for:","courseSuccessMessage":"You have successfully completed the course","courseSuccessNotificationMessage":"You will be notified about the course certificate on your registered contact details within 7 days","courseWithoutCertificateNote":"Note: This course does not have a certificate","coursecreatedon":"Created on","courses":"Courses","coursestructure":"Course modules","createGroup":"Create group","createGroupDes":"You are just a step away from creating a group","createUser":"Add user","createUserSuccessWithEmail":"Your email address is verified. Log in to continue","createUserSuccessWithPhone":"Verification successful. Login to continue","createdInstanceName":"Created on {instance} by","createdon":"Created On","creationdataset":"Creation","creator":"Creator","credits":"Credits","creditsLicenceInfo":"Credits & license info","current":"Current","currentlocation":"Current location","curriculum":"Curriculum","dashBoardTitle":"Dashboard","dashboard":{"action":"Action","description":"Description","download":"Download","downloadfile":"Download file","fileName":"File name","fileSize":"File size"},"dashboardcertificateStatus":"Certificate Status","dashboardfiveweeksfilter":"LAST 5 WEEKS","dashboardfourteendaysfilter":"LAST 14 DAYS","dashboardnobatchselected":"No batch selected","dashboardnobatchselecteddesc":"Select a batch to proceed","dashboardnocourseselected":"No course selected","dashboardnocourseselecteddesc":"Select a course from the list","dashboardnoorgselected":"No organization selected!","dashboardnoorgselecteddesc":"Select an organization to proceed","dashboardselectorg":"Select Organization","dashboardsevendaysfilter":"LAST 7 DAYS","dashboardsortbyenrolledon":"Enroled On","dashboardsortbystatus":"Status","dashboardsortbyusername":"User Name","defaultstar":"Tap on stars to rate the content","delete":"Delete","deleteGroup":"Delete group","deleteUser":"Delete user","deletenote":"Delete Note","description":"Description","desktop":{"Suggestions":"Suggestions","SuggestionsText1":"Make sure that all words are spelt correctly","SuggestionsText2":"Try different keywords","SuggestionsText3":"Try more general keywords","about_us":"About {instance}","app":"{instance} Lite Desktop App","authorOfSourceContent":"Author of source content","board":"by {board}","content":"Content","creditsAndLicenceInfo":"Credits and Licence information","deleteCollection":"Deleting {name} textbook removes it from My Downloads. Click Delete to continue.","deleteContent":"Deleting {name} content removes it from My Downloads. Click Delete to continue.","downloadBook":"Download textbook","explore":"Explore more content","failedListLabel":"Could not download or import file(s). Remove unwanted files from your computer and try again","find_more":"Find more textbooks and content on {instance}","lastShared":"Last shared","lowMemory":"The app may be slow as your computer has low memory","notMatchContent":"did not match any content","storageSpaceRunningOutHeader":"Insufficient storage space","update":"Update {instance} desktop","updateAvailable":"New version update available ","updateTextbook":"Update textbook"},"desktopAppDescription":"Install {instance} desktop app to explore downloaded content or to play content from external devices. {instance} Desktop App provides","desktopAppFeature001":"Free unlimited content","desktopAppFeature002":"Multilingual support","desktopAppFeature003":"Play content offline","dialCode":"QR code","dialCodeDescription":"QR code is the 6 digit alphanumeric code found beneath the QR code image in your text book","dialCodeDescriptionGetPage":"QR code is the 6 digit alphanumeric code found beneath the QR code image in your text book.","dikshaForMobile":"DIKSHA for Mobile","dismissWarning":"Dismissing {memberName} as group admin removes admin permissions from the member","district":"District","dob":"Date Of Birth","done":"Done","downloadAppLite":"Download {instance} Lite Desktop App","downloadAppOtherversions":"Other versions","downloadAppRecommended":"Recommended for your PC","downloadBooks":"Download books to access while offline","downloadCourseQRCode":"Download Course QR Code","downloadCsv":"Download data CSV","downloadDikshaForMobile":"Download DIKSHA for Mobile","downloadQRCode":{"tooltip":"Click to download QR codes and link them to the published course"},"drive":"Pendrive or External Drives","dropcomment":"Add a comment ","duplicateEmailAddress":"This email address is the same as that linked to your profile","duplicatePhoneNumber":"This mobile number is the same as that linked to your profile","ecmlarchives":"Ecml Archives","edit":"Edit","editGroup":"Edit group details","editPersonalDetails":"Edit Personal Details","editProfileInfo":"You can edit this information from your profile","editUserDetails":"Edit details of the User","education":"Education","email":"Email address","emailAddress":"Email address","emailId":"Email address","emailPhonenotRegistered":"Email address / Mobile number is not registered with {instance}","emailVerfied":"Email verified","emptycomments":"No comments","enddate":"END DATE","enjoyedContent":"Enjoyed this content?","enrollcourse":"Join Course","enrollmentenddate":"Enrolment End Date","enterCertificateCode":"Enter the certificate code here","enterDialCode":"Enter QR code","enterEmail":"Enter email address","enterEmailID":"Enter email address","enterEmailPhoneAsRegisteredInAccount":"Enter email address/mobile number registered with {instance}","enterFollowingInfo":"Enter the following information","enterGroupName":"Enter group name","enterInstanceId":"Enter {instance} ID","enterName":"Enter name","enterNameNotMatch":"The entry does not match the name registered with {instance}","enterOTP":"Enter OTP","enterPhoneNumber":"Enter mobile number","enterQrCode":"Enter QR code","enterValidCertificateCode":"Enter a valid certificate code","enterValidName":"Enter a valid name. Only alphabets are allowed.","enternameAsRegisteredInAccount":"and the name as on the {instance} account","epubarchives":"Epub Archives","errorConfirmPassword":"Passwords do not match","errorMessage":"Error message","errorMsg":"To copy the error to a text editor, click the copy to clipboard button","errorWhileGeneratingTicket":"There was a technical error, try again later","errorinupload":"Error while uploading users","expandAll":"Expand all","experience":"Experience","expiredBatchWarning":"Batch has ended on {EndDate}, therefore your progress will not be updated.","explore":"Explore","exploreContentOn":"Explore content on {instance}","explorecontentfrom":"Explore content from","exprdbtch":"Expired Batches","externalId":"External Id","failres":"Failure Results","fetchingBlocks":"Please wait while we are fetching blocks","fetchingContentFailed":"Failed to fetch content. Try again later.","fetchingSchools":"Please wait while we fetch schools","fieldsmarked":"Fields marked with an asterisk (","fileUploadSuccessMessage":"File uploaded successfully. All record status updates will be processed within 24 hours. Use the Download User Details button to see updated status values","filterContentBy":"Filter content by","filterby":"Filter by","filters":"Filters","first":"FIRST\t","firstName":"First name","flaggedby":"Flagged by","flaggeddescription":"Flagged Description","flaggedreason":"Flagged reason","for":"for","forDetails":"For details","forSearch":"for {searchString}","fromTheTextBook":"from the textbook","fullName":"Full name","gender":"Gender","generateOtpFailed":"Failed to generate OTP. Try again later ","getOTP":"Get OTP","getStarted":"Get started","getUnlimitedAccess":"Get unlimited access to textbooks, lessons and courses offline on your mobile phone","goBackToClassicTheme":"If you want to change the theme, you can always do this from your preferences.","goToMyDownloads":"Go to My Downloads to find this content","goback":"To cancel","grade":"Grade","grades":"Grades","graphNotAvailable":"This report does not have graphs ","graphStat":"Graph Statistics","graphs":"Graphs","groupCreatedBy":"Created by {name}","groupGuidelines":"Group guidelines","groupName":"Group name","groupNameRequired":"You have to enter the group name","groupToc":"You have to agree to {instance}'s group guidelines before you proceed","groupWelcomeMsg":"Create a group or be a part of one to connect with people, share activities, review progress and explore other possibilities","groupWelcomeTitle":"Have you explored the potential of groups yet?","h5parchives":"H5p Archives","haventFoundAnyOtherissue":"Haven't found what are you looking for?","homeUrl":"Home Url","htmlarchives":"Html Archives","iAmStateTeacher":"Submit details","iam":"I am a","imagecontents":"Image Contents","import":"Download books to access while offline","improveYourExperience":"Improve your experience","inAll":"in \"all\"","inProgress":"In progress","inUsers":"in users","inactive":"Inactive","incompatibleBrowser":"You seem to have an incompatible browser or browser version","indPhoneCode":91,"instacnceId":"{instance} ID","installApp":"Install app","installAppDesc":"Store lessons, textbooks and content offline on your device","installAppFree":"Free","installAppPlayStore":"Available on Play Store","installAppTitle":"{instance} - National Teachers Platform for India","instanceId":"{instance} ID","isRootOrg":"Is RootOrg","issueReportedSuccessfuly":"Issue reported successfully","issueReportedSuccessfulySubNote":"Note: Your issue will automatically be sent to {instance} when you are online","itis":"It is","join":"Join","joinTrainingToAcessContent":"You must join the course to get complete access to content","joyThemeText":"The new design makes it easier for you to find content you need, and adds a splash of joy to your learning experience","keywords":"Keywords","lang":"Language","language":"Language(s) known","last":"LAST\t","lastName":"Last name","lastUpdatedOn":"Last updated on","lastupdate":"Last update","learnerPassbook":"Learner passbook","learners":"Learners","leaveGroup":"Leave group","leaveGroupWarning":"This action cannot be undone. Do you want to leave {groupName}","lessonPlan":"Lesson Plan","library":"Online library","licenseTerms":"License terms","linkCopied":"Link copied ","linkedContents":"Linked contents","loadContentFrom":"Load content from","location":"Location","lockPopupTitle":"{collaborator} is currently working on {contentName}. Try again later.","loginToCreateGroup":"The first step towards creating your own group, study circle or classroom is to log in","makeAdmin":"This action will give {memberName} group admin permissions","manage":"Manage","manageuser":"Manage user","mandatory":") are mandatory","markas":"Mark as","medium":"Medium","mediumRequired":"You have to select a medium","memberVerificationMsg":"You have to check that the member's name and {instance} ID match, before you proceed","members":"Members","mentors":"Mentors","mergeAccount":"Merge Account","mobileEmailInfoText":"Enter your mobile number or email address to log in on DIKSHA","mobileNumber":"Mobile Number","moduleFinish":"You have completed this module","moduleProgress":"Module progress","more":"more","myBadges":"My badges","mynotebook":"My Notebook","mynotes":"My Notes","mytrainings":"My courses","name":"Name","nameRequired":"You have to enter a username ","newLookAndFeel":"{instance} has got a new look and feel.","next":"Next","nextModule":"Next module","noBookfoundButtonText":"See more books and contents","noBookfoundSubTitle":"Your board is yet to add more books. Tap the button to see more books and content on {instance}","noBookfoundTitle":"Board is adding books","noContentToPlay":"No content to play","noContentfoundButtonText":"Explore more content","noContentfoundSubTitle":"Your board is yet to add more content. Click the button below to explore other content on {instance}","noContentfoundTitle":"Board is adding content","noCreditsAvailable":"No credits available","noDataAvailable":"No data available","noMatchingMember":"Sorry! There are no results that match your search. To continue your search","noMatchingRecordFound":"There are no participants in this batch","noProgress":"Progress cannot be tracked for {type}s","note":"Note:","okGotIt":"OK, Got it","onDiksha":"on {instance} on","oneCourse":"Course","oneTimePassword":"One Time Password (OTP)","ongoing":"Ongoing","open":"Open","opndbtch":"Open Batches","orgCode":"Org Code","orgId":"OrgId","orgName":"Org Name","orgType":"Org Type","orgname":"Organization Name","orgtypes":"Organization Type","originalAuthor":"Original Author","other":"Other","otpMandatory":"OTP is mandatory","otpSentTo":"OTP has been sent to","otpValidationFailed":"Failed to validate the OTP","parentOrGuardian":"of your parent or guardian","participants":"Participants","passwd":"Your password must contain a minimum of 8 characters. It must include numerals, lower and upper case alphabets and special characters, without any spaces","passwderr":"Your password and username cannot be the same","password":"Password","pdfcontents":"Pdf contents","phone":"Mobile number","phoneNumber":"Mobile Number","phoneOrEmail":"Enter mobile number or email address","phoneRequired":"Mobile number is required","phoneVerfied":"Mobile number verified","phonenumber":"Mobile Number","pincode":"Pin Code","play":"PLAY","playContent":"Play Content","playVideo":"Play video","pleaseValidateYour":"You must validate your","plslgn":"This session has expired. Login again to continue using ${instance}.","position":"Position","preferenceCanBeUpdated":"You can edit this user's details from the Profile page","preferredLanguage":"Preferred Language","prevModule":"Prev. module","previous":"Previous","privacyPolicy":"Privacy Policy","processid":"Process ID","profile":{"selectDistrict":"Select district"},"profilePopup":"To discover relevant content update the following details:","profileTab":"Click the Profile tab","provideDetails":"Provide details to register on {instance}","provideTeacherDetails":"Required details","provider":"OrgProvider","publishedBy":"Published by","publishedOnInstanceName":"Published on {instance} by","publisher":"Publisher","questionBank":"Question bank","reEnterPassword":"Re-enter the password","re_issue":"Reissue certificate","readless":"Read Less ...","readmore":"... Read More","receiveOTP":"Where would you like to receive the OTP?","recoverAccount":"Recover Account","redirectMsg":"This content is hosted outside","redirectWaitMsg":"Wait while the content loads","refreshedDaily":"Refreshed daily","register":"Register","registerOn":"Register on {instance}","releaseDateKey":"Release date","removeActivity":"Remove activity","removeAll":"Remove All","removeWarning":"Removing {memberName} permanently removes him/her for the group","reportAnIssue":"Report an issue","reportOtherIssue":"Report another issue","reportSummary":"Report summary","reportUpdatedOn":"This report was last updated on","requiredField":"You have to enter {field}","resendOTP":"Resend OTP","resentOTP":"OTP has been resent. Enter OTP.","retired":"Retired","returnToCourses":"Return to Courses","role":"Role","roles":"Roles","rootOrg":"Root org","sameEmailId":"This email address is the same as that linked to your profile","samePhoneNo":"This Mobile Number is the same as what is linked with your profile","saveToPenDrive":"Save to pen drive","school":"School","schoolName":"School or Org name","schoolTeacherId":"Your State, Board, or Org ID ","schoolUdiseId":"School UDISE ID/ Org ID","search":"Search","searchForContent":"Enter QR code","searchForGroupMembe":"Search for a group member","searchForGroupMember":"Search for group member","searchOrQr":"Search or enter QR code","searchUser":"Search user","searchUserName":"Search for participants","searchWithinGroup":"Search within group","section":"Section:","sectionTitle":"Courses","selectActivity":"Select activity","selectAll":"Select all","selectBatch":"Select batch","selectBlock":"Select Block","selectBoard":"Select board","selectChapter":"Select Module","selectClass":"Select class","selectContentFromCourse":"Select contents for course","selectContentType":"Select content type","selectDistrict":"Select district","selectMedium":"Select medium","selectPublisher":"Select publisher","selectSchool":"Select School","selectState":"Select State","selectSubject":"Select subject","selected":"Selected","selectreason":"SELECT A REASON","selfDeclaredDetails":"Self-declared user details","selfDeclaredInfo":"My details","sesnexrd":"Session Expired","setRole":"Edit user","share":"Share","sharelink":"Share using the link -","showLess":"Show less","showingResults":"Showing results","showingResultsFor":"Showing results for {searchString}","showingResultsForWithCount":"Showing {resultCount} results for","showingrecord":"Showing {count} of","signUp":"Register","signinenrollTitle":"Log in to join this course","similarButDiffName":"*type a similar but, different name","skillTags":"Skill Tags","sltBtch":"Select a batch to proceed","sortby":"Sort by","startExploringContent":"Enter a QR code to start exploring content ","startExploringContentBySearch":"Explore content using QR codes","startLearning":"Start learning","startdate":"START DATE","started":"Started","state":"State","stateRecord":"As per state records","stateValidationDetails":"These details may be made available to your declared State to validate and follow progress.","stateVerified":"State verified user","status":"Status","step1":"Step 1:","step2":"Step 2:","step3":"Step 3:","student":"Student","subject":"Subject","subjectRequired":"You have to select a subject","subjects":"Subjects","subjectstaught":"Subject(s) taught","submit":"Submit","submitIssueButton":"Submit Issue","submitOTP":"Submit OTP","successres":"Success Results","summary":"Summary","supportedLanguages":"Supported languages","switchLayout":"Switch layout","switchUser":"Change user","tableNotAvailable":"Table view is not available for this report","takenote":"TAKE NOTES","tcfrom":"From","tcno":"No","tcto":"To","teacher":"Teacher","teacherDetailsTnc":"I agree to share these details with the Administrators of {instance} as per the","teachingResource":"Teaching resources","tellUsMoreAboutProblem":"Tell us more about the problem you faced","tenDigitPhone":"10 digit mobile number","termsAndCond":"Terms and Policies","termsAndCondAgree":"I agree to the updated terms and policies","termsOfService":"terms of services","textbooks":"Digital textbooks","thankyouForSubmittingDetails":"Thank you for submitting your details","theme":"Theme","title":"Title","tncLabel":"I understand and accept the","tncLabelLink":"{instance} Terms of Use","toTryAgain":"to try again","toYourEmailPhone":"to < email address/mobile number >","topics":"Topics","totalBatches":"Total batches till date","totalCompletions":"Total completed till date","totalEnrollments":"Total enrollment till date","totalrecords":"{total} records","trainingAttended":"Courses attended","tvProgram":"TV classes","typeHere":"Type here ","unableToUpdateEmail":"Unable to update email address?","unableToUpdateMobile":"Unable to update Mobile Number?","unableToVerifyEmail":"Unable to verify email address?","unableToVerifyPhone":"Unable to verify your mobile number?","unenrollMsg":"Do you want to unenrol from this batch?","unenrollTitle":"Batch Unenrolment","uniqueEmail":"Your email address is already registered","uniqueEmailId":"This email address is already registered. Enter another email address","uniqueMobile":"This mobile number is already registered. Enter another mobile number.","uniquePhone":"This mobile number is already registered","updateDetails":"Update details","updateEmailId":"Update Email address","updatePhoneNo":"Update Mobile Number","updateRecoveryId":"Update Recovery ID","updatedon":"Updated on","updateorgtype":"Update Organization Type","upldfile":"Uploaded File","uploadFileError":"Uploaded file not in expected format","uploadValidationStatus":"Upload Validation Status","uploadcsvfile":"Upload CSV file","uploadingValidationStatusHeader":"Uploading Validation Status For Self Declared User Information","uploadmsg":"Upload the CSV file in the required format","useInstanceAs":"Use {instance} as","userDistrict":"User district","userFilterForm":"Search for participants","userID":"UserId","userId":"User ID","userType":"User Type","validDescription":"Enter valid description","validEmail":"Enter a valid email address","validFor":"valid for 30 min","validPhone":"Enter a valid 10 digit mobile number","validate":"Validate","verifying":"Verifying ","verifyingCertificate":"Verifying your certificate","versionKey":"Version","videos":"Videos","view":"View","viewInBrowser":"View in browser","viewless":"View less","viewmore":"View more","welcomeToInstance":"Welcome to {instance}","whatInstanceId":"What is {instance} ID ?","whatsQRCode":"What is a QR code?","whatwentwrong":"What went wrong?","whatwentwrongdesc":"Let us know what went wrong. Mention the exact reasons so that we review this as soon as possible and address this issue. Thank you for your feedback!","willsendOTP":"You will receive an OTP. After you validate it, you can recover your account","with":"with","wrongEmailOTP":"You have entered an incorrect OTP. Enter the OTP received on your Email ID. The OTP is valid only for 30 minutes.","wrongPhoneOTP":"You have entered an incorrect OTP. Enter the OTP received on your mobile number. The OTP is valid only for 30 minutes.","year":"Year","yearOfBirth":"Select year of birth","yetToStart":"Not started","yop":"Year of Passing","you":"You","youAre":"You are a","contentsUploaded":"Contents are being uploaded","anncmntplzcreate":"Please create announcement","learn_more":"Learn more about how to use {instance}","allContent":"All content","change":"Change","dataDictionary":"Data Dictionary","datasetExamples":"Dataset Examples"},"btn":{"add":"Add","addActivity":"Add activity","all":"All","apply":"Apply","back":"Back","botTitle":"Ask Tara","cancel":"Cancel","cancelCapitalize":"Cancel","chksts":"Check status","clear":"Clear","close":"Close","continueLearning":"Continue learning","copyLink":"Copy link","copytoclipboard":"Copy to clipboard","create":"Create","createCourse":"Create course","createNew":"Create new ","delete":"Delete","dismissAdmin":"Dismiss as admin","docs":"Docs","download":"Download","downloadAppForLinux":"Download for Ubuntu","downloadAppForWindows32":"Download for Windows (32-bit)","downloadAppForWindows64":"Download for Windows (64-bit)","downloadCertificate":"Download Certificate","downloadDesktopApp":"Download Desktop App","downloadInstruction":"See download instructions","enroll":"Join Course","interactive":"Interactive","loadContent":"Load content","login":"Login","makeAdmin":"Make admin","merge":"Merge","next":"Next","no":"No","ok":"OK","previous":"Previous","print":"Print","remove":"Remove","removeMember":"Remove member","reset":"Reset","resume":"Resume","resumecourse":"Resume Course","retry":"Retry","save":"Save","selectCsvFile":"Select CSV file for Upload","selectLanguage":"Select language","selrole":"Select role","signin":"Log In","submit":"Submit","submitbtn":"Submit","tryagain":"Try again","unenroll":"Leave course","update":"Update","uploading":"Uploading","uploadorgscsv":"Upload organization's CSV file","verify":"Verify","video":"Video","viewCourseStatsDashboard":"View course dashboard","viewcoursestats":"View course stats","viewdetails":"View Details","viewless":"View less","viewmore":"View more","yes":"Yes","yesiamsure":"Yes, I am sure","smplcsv":"Download sample CSV","uploadusrscsv":"Upload users CSV"},"cert":{"lbl":{"addCert":"Add certificate","addCertToBatch":"Would you like to add and configure certificates for this batch?","batchCreateSuccess":"Batch created successfully.","batchUpdateSuccess":"Batch updated successfully.","button":"button","certAddError":"Failed to add the certificate. Try again later.","certAddSuccess":"Certificate added successfully","certEditError":"Failed to edit the certificate. Try again later.","certPreview":"Certificate Preview","certRules":"Certificate Rules","certType":"Certificate Type","certUpdateSuccess":"Certificate updated successfully.","certificate":"Certificate","changeDetected":"Template Change detected!","configure":"Configure certificates","confirmTemplateChange":"Would you really want to change the template?","editCert":"Edit Certificate","issueTo":"Issue Certificate to?","noCertificate":"You do not have any certificates attached yet.To proceed, click the","noEditAction":"Edit action for this Certificate is not allowed.Contact support team for any updates","preview":"Preview","selectTemplate":"Select template","templateChange":"The change in template will not reflect for users who have already received their certificates.Users with the older template have to contact the State admin for any changes required","templates":"Templates","unselect":"unselect","updateCert":"Update certificate","verified":"All the elements and attributes are thoroughly verified"}},"instn":{"t0002":"You can add or upload details of up to 199 organizations at a time in one csv file","t0007":"The OrgName column is mandatory. Enter organization name in this column","t0011":"You can track progress with Process ID","t0012":"Save the Process ID for your future reference to track progress ","t0013":"Download the csv file for reference","t0015":"Upload Organizations","t0016":"Upload Users","t0021":"Enter each organization's name in a separate row","t0022":"Entering details in all other columns is optional:","t0023":"isRootOrg: Valid values for this column True False","t0024":"channel: Unique ID provided during master organization creation","t0025":"externalId: Unique ID associated with each organization in the administrating organization’s repository","t0026":"provider: Channel ID of the administrator organization","t0027":"description: Details describing the organization","t0028":"homeUrl: Organization’s homepage url","t0029":"orgCode: Organization’s unique code, if any,","t0030":"orgType: Type of organization, such as, NGO, primary school, secondary school etc","t0031":"preferredLanguage: Language preferences for the organization, if any","t0032":"contactDetail: Organization’s mobile number and email address. Details should be entered within curly brackets in single quotes. For example: [{‘mobile number’: ‘1234567890’}]","t0049":"channel is mandatory if value for column isRootOrg is True","t0050":"externalId and provider are mutually mandatory","t0055":"Oops announcement details not found!","t0056":"Please try again...","t0058":"Download as:","t0059":"CSV","t0060":"Thank you!","t0061":"Oops...","t0062":"You haven't created a batch for this course yet. Create a new batch and check the dashboard again.","t0063":"You have not created any course as yet. Create a new course and check the dashboard again.","t0065":"Progress Report","t0066":"Score Report","t0076":"Note: All other columns in the CSV file are optional, for details on filling these, refer to","t0077":"Register Users.","t0078":"locationId: An ID which identifies an announcement topic for a particular organisation","t0079":"locationCode: Comma separated list of location codes","t0081":"Thank you for registering on DIKSHA. We have sent an sms OTP for verification. Verify your mobile number with the OTP to complete the registration process.","t0082":"Thank you for registering on DIKSHA. We have sent an OTP to your registered email address for verification. Verify your email address with the OTP to complete the registration process.","t0083":"You will receive an SMS with the OTP for Mobile Number verification","t0084":"You will receive an email with the OTP to verify your email address ","t0085":"The report shows data for the first 10,000 participants. Click download to view the progress of all the participants in the batch.","t0098":"File format for user list upload:","t0099":"Name * (Name of the user as per state records)","t0100":"Identifier * (Mobile number OR email address - either one of the two is mandatory)","t0101":"State * (The State that the user belongs to)","t0102":"Ext Org ID * (School ID as provided in DIKSHA)","t0103":"Ext User ID * (State ID of the user)","t0104":"Input Status (Active, Inactive) * - Enter the record status as provided by the state administrator","t0105":"Roles (System roles to be assigned to the user)","t0106":"Save file as .csv before upload","t0107":"Download the list of Self declared teachers from the portal using the Download User Details button alongside (This data is updated every 24 hours)","t0108":"Update the column STATUS for this file - the state records for the user should be matched with BOTH the Phone number and State ID in the downloaded data, if a record is to updated as validated. The STATUS for all records has to be updated in the file accordingly.The values for this column can be (STATUS = VALIDATED/REJECTED/ERROR)","t0109":"Add new col. ERROR TYPE to the file, if there are records that have STATUS = ERROR","t0110":"For rows where STATUS = ERROR, add value for ERROR TYPE (ERROR TYPE = ERROR-DISTRICT/ERROR-PHONE/ERROR-EMAIL/ERROR-SCHOOL ORG NAME/ERROR-SCHOOL ORG ID/ERROR-ID/ERROR-NAME) based on what the error on the record is","t0111":"This file has be saved in the .CSV format for upload into the system","t0112":"Re-upload list into portal,after filling the STATUS & ERROR TYPE (if applicable) value for each Record in the file. Use the Select CSV file for Upload button above to do this."},"intxt":{"t0001":"Search for notes or title","t0002":"ADD YOUR COMMENT","t0005":"Select batch mentors","t0006":"Select batch members"},"lnk":{"announcement":"Announcement dashboard","assignedToMe":"Assigned to me","createdByMe":"Created by me","dashboard":"Admin dashboard","footerContact":"Contact for queries:","footerDIKSHAForMobile":"DIKSHA for Mobile","footerDikshaVerticals":"DIKSHA Verticals","footerHelpCenter":"Help Center","footerPartners":"Partners","footerTnC":"Terms and Privacy","logout":"Logout","myactivity":"My Activity","profile":"Profile","viewall":"View all"},"pgttl":{"takeanote":"Notes"},"prmpt":{"deletenote":"Are you sure to delete this note?","enteremailID":"Enter your email address","enterphoneno":"Enter 10 digit mobile number","search":"Search","searchOrQr":"Search or enter QR code"},"scttl":{"blkuser":"Block User","contributions":"Contribution(s)","error":"Error:","instructions":"Instructions :","todo":"To Do"},"snav":{"shareViaLink":"Shared via link","submittedForReview":"Submitted for review"},"tab":{"all":"All","community":"Groups","contribute":"Contribute","courses":"Courses","help":"Help","mygroups":"My Groups","resources":"Library","workspace":"Workspace"},"reissue":{"lbl":{"instructions":"Use the following instructions to guide users to identify the unique {instance} ID:","displayUser":"The {instance} ID is displayed below the user name"}}},"messages":{"emsg":{"m001":"Could not create the group. Try again later","m002":"Could not find the group. Try again later","m003":"Could not delete the group. Try again later","m004":"You have entered an invalid {instance} ID","m005":"Unable to update group. Try again later","activityAddedToGroup":"You have added this activity previously for the group","activityRemove":"Could not remove activity. Try again later","dissmissAsAdmin":"Could not dismiss {memberName} as group admin","leaveGroup":"Could not leave the group. Try again later","m0001":"Cannot enrol now. Try again later","m0002":"The course is not available now","m0003":"This course does not have any open batches","m0005":"Something went wrong, try again later","m0007":"size should be less than","m0008":"Could not copy content. Try again later","m0009":"Cannot un-enrol now. Try again later","m0014":"Could not update mobile number","m0015":"Could not update email address","m0016":"Fetching states failed. Try again later","m0017":"Fetching districts failed. Try again later","m0018":"Updating profile failed","m0019":"Could not download the report, try again later","m0020":"Updating user failed. Try again later","m0050":"Failed to validate OTP. Try again later.","m0051":"Failed to submit teacher declaration ","m0052":"Failed to update the teacher declaration ","m006":"Could not add {name} to the group. Try again later","m007":"Member is part of the group","m0076":"No data available to download","mutliParametersFound":"Multi parameters found for this report. Please visit reports list page and select a report.","noAdminRole":"You are not authorised to add activities","noAdminRoleActivity":"You do not have permissions to access this page","promoteAsAdmin":"Could not make {memberName} as the group admin","removeMember":"Could not remove member from the group. Try again later"},"imsg":{"m0082":"Deleting {group name} will permanently remove the group from the application","activityAddedSuccess":"Activity added successfully","confirmReportPublish":"Are you sure you want to publish the report?","confirmRetirePublish":"Are you sure you want to retire the report ?","m0001":"This course is flagged as inappropriate and is currently under review.","m0022":"Stats for last 7 days","m0023":"Stats for last 14 days","m0024":"Stats for last 5 weeks","m0025":"Stats from begining","m0026":"Hi, this course is not available now. It is likely that the creator has made some changes to the course.","m0027":"Hi, this content is not available now. It is likely that the creator has made some changes to the content.","m0034":"As the content is from an external source, it will be opened in a while.","m0035":"Unauthorized access","m0036":"The content is externally hosted, to view it, click <b>Preview</b>","m0040":"Operation is in progress, try again later","m0041":"Your profile is","m0042":"% complete","m0043":"Your profile does not have a valid email ID. Update your email ID.","m0045":"The download has failed. Try again after some time","m0047":"You can only select 100 participants","m0060":"If you have two accounts with {instance}, click","m0061":"to","m0062":"Else, click","m0063":"combine usage details of both accounts, and","m0064":"delete the other account","m0065":"Account merge initiated successfully","m0066":"you will be notified once it is completed","m0067":"Could not initiate the account merge. Click the Merge Account option in the Profile menu and try again","m0070":"Account {identifierValue} already exists on {instance}. If this is your account, click Merge to","m0072":"Could not merge accounts because the password entered is incorrect.","m0073":"Click OK to create a new {instance} account.","m0074":"Your location details help us suggest content that is useful to you. Is your location correct? If not, select your correct location and click Submit","m0080":"Could not initiate Account Merge. Log in through your State portal and try again","m0081":"Merging of accounts is in progress. You will receive a notification on your registered email address/mobile number when it is complete","m0086":"Incorrect OTP. Number of attempts remaining : {remainingAttempt}","m0087":"Not permitted to merge account","m0095":"Hi <b>{userName}</b>. \nYou can edit your {instance} profile details from the Profile setting","m0096":"\"{firstName}\" added successfully ","m0141":"Create new to create a {instance} account.","removeActivityWarning":"Removing the activity takes it off from the group activity list and you can no longer check member's progress on it ","reportPublished":"Report published successfully","reportRetired":"The report has been retired successfully","reportSummaryAdded":"Summary added successfully"},"smsg":{"m001":"Group created successfully","m002":"Group deleted successfully","activityRemove":"Activity removed for the group successfully ","dissmissAsAdmin":"{memberName} is no longer the group admin","leaveGroup":"You are no longer part of this group","m0009":"Note created successfully...","m0013":"Note updated successfully...","m0028":"Roles updated successfully","m0029":"User deleted successfully","m003":"Group updated successfully","m0030":"Users uploaded successfully","m0031":"Organizations uploaded successfully","m0032":"Status fetched successfully","m0035":"Org type added successfully","m0037":"updated successfully","m004":"{memberName} added successfully","m0042":"Content successfully copied","m0043":"Endorsement successfull","m0044":"Badge assigned successfully...","m0045":"User unenroled from the batch successfully","m0046":"Profile updated successfully...","m0047":"Your Mobile Number has been updated","m0048":"Your email address has been updated","m0049":"User updated successfully","m0050":"Thank you for rating this content!","m0059":"Content copied successfully ","m0060":"Content updated successfully","m0061":"Content sent for review","m0062":"Content rejected ","m0063":"Content published successfully","m0064":"Content removed successfully","moo41":"Announcement cancelled successfully...","promoteAsAdmin":"{memberName} is now the group admin","removeMember":"{memberName} is no longer part of the group","m0036":"Course enroled for this batch successfully"},"dashboard":{"emsg":{"m001":"Sorry! We are unable to get the certificate list. Try again later","m002":"The user is not enrolled in any batch of this course","m003":"Sorry! We could not reissue the certificate. Try again later","m004":"You have not created this batch as yet"},"imsg":{"m001":"Are you sure you want to reissue certificates to {userName}?"},"smsg":{"m001":"We have received a request to re-issue your certificate. You will receive the re-issued certificate in 7 working days"}},"etmsg":{"desktop":{"telemetryImportError":"Unable to import file, try again later"}},"fmsg":{"m0001":"Could not fetch enroled courses, try again later","m0002":"Could not fetch other courses, try again later...","m0003":"Unable to get batch schedule details","m0004":"Could not fetch data, try again later","m0005":"Could not fetch data, try again later","m00100":"Could not reject the content, try again later","m00101":"Could not publishing content, try again later","m0030":"Could not create the note, try again later...","m0032":"Could not remove the note, try again later","m0033":"Could not fetch the note, try again later...","m0034":"Could not update the note, try again later...","m0049":"Unable to load data.","m0050":"Could not submit the request, try again later","m0051":"Something went wrong, try again later","m0054":"Fetching batch detail failed, try again later...","m0056":"Could not fetch user list, try again later...","m0076":"Enter mandatory fields","m0077":"Fetching search result failed..","m0079":"Failed to assign badge, try again later","m0080":"Failed to fetch the badge, try again later...","m0082":"This course is not open for enrolment","m0085":"There was a technical error. Try again.","m0086":"This course is retired by the author and hence is not available anymore","m0087":"Please wait","m0088":"We are fetching details.","m0089":"No Topics/SubTopics found","m0090":"Could not download, try again later","m0091":"Could not copy content. Try again later","m0095":"Failed to fetch the CSV file, try again later","m0096":"Could not update, try again later","m0097":"Action failed due to a technical error. Try again later","m0099":"Could not send content for review, try again later","m0100":"You have exceeded the user creation limit ","m0098":"Updating content failed, try again later"},"stmsg":{"activityAddFail":"Could not add the activity. Try again later","m0006":"No results found","m0007":"Refine your search ","m0008":"no-results","m0009":"Unable to play, try again or close","m0022":"Submit one of your drafts for review. Content is published only after a review","m0024":"Upload a document, video, or any other supported format. You have not uploaded anything yet","m0033":"Submit one of your drafts for review. You have not yet submitted any content for review","m0035":"There is no content to review","m0077":"We are submitting your request...","m0080":"Upload files only in .csv format ","m0081":"No batches found","m0083":"You have not shared content with any one yet","m0108":"Your Progress","m0113":"Enter a valid start date","m0116":"Deleting selected note...","m0120":"No content to play","m0121":"Content not added yet","m0122":"Your state will soon add content for this QR code. It will be available shortly.","m0123":"Ask a friend to add you as a collaborator. You will receive an email when your friend adds you.","m0125":"Start creating Resource, Book, Course, Collection or Upload. You have no work-in-progress draft at the moment","m0126":"Select board","m0127":"Select medium","m0128":"Select class","m0129":"Loading the terms and conditions.","m0130":"We are fetching districts","m0131":"Could not find any reports","m0134":"You cannot enrol into this batch, as it is closed","m0135":"Enter a valid date","m0136":"Last Date for Enrolment:","m0138":"Failed","m0139":"Downloaded","m0140":"Downloading","m0141":"Data unavailable to generate Score Report","m0142":"Paused","m0143":"Download","m0144":"You do not have appropriate rights to access this page","reportNotReady":"Your report is not ready, try again later"}},"completedCourse":"Course completed","orgname":"orgname","participants":"Participants","resourceService":{"frmelmnts":{"lbl":{"userId":"User ID"}}},"t0065":"Download file"},"creation":{"frmelmnts":{"btn":{"yes":"Yes","no":"No","back":"Back","tryagain":"Try again","close":"Close","accept":"Accept","discard":"Discard","anncmntconfirmrecipients":"Confirm recipients","anncmntpreview":"Preview announcement","anncmntsendanncmnt":"Send announcement","anncmnteditrecipients":"Edit recipients","anncmntselectrecipients":"Select recipients","anncmntdtlsview":"View","anncmntgotit":"Got it","save":"Save","addMembers":"Add members","createbatch":"Create batch","cancel":"Cancel","update":"Update","updatebatch":"Update batch","checkListComment":"Comment","checklistCancel":"Cancel","checklistPublish":"Publish","checkListRequestChanges":"Request changes","publish":"Publish","requestChanges":"Request changes","startcreating":"Start creating","login":"Login"},"lbl":{"name":"Name","Name":"Name","email":"Email Address","contact":"Contact","delete":"Delete","pleaseSelect":"Please Select","anncmntttlresend":"Resend Announcement","createnewanncmnt":"Create New Announcement","createnewanncmntdesc":"Fill in all the required fields to create the announcement.","resendanncmntdesc":"You can make any edits required and resend the announcement.","selectrecipient":"Select Announcement Recipients","selectrecipientdesc":"Select locations who should receive the announcement.","editrecipientdesc":"Edit locations who should receive the announcement.","confirmrecipient":"Confirm Announcement Recipients","confirmrecipientdesc":"Review and confirm your announcement recipients.","previewanncmnt":"Preview Announcement","previewanncmntdesc":"This is how your announcement will look.","anncmntstep":"STEP","anncmnttitle":"TITLE","anncmntfrom":"FROM","anncmntfromDesc":"Please enter organisation/department that has sent the announcement","anncmnttype":"ANNOUNCEMENT TYPE","anncmntdesc":"DESCRIPTION (OPTIONAL)","anncmntlink":"URL / WEBLINK","anncmntaddlink":"Add URL/weblink","anncmntaddlinkdesc":"(For example, you can link a Google Form)","anncmntaddmorelink":"Add Another URL/weblink","anncmntuploadfile":"UPLOAD ATTACHMENT","anncmntsentsuccess":"Announcement Sent!","anncmntsentdesc":"Your announcement has been sent to all your recipients. View all your announcement from the Announcement Dashboard.","anncmntcancel":"Are you sure you want to stop creating this announcement","anncmntcanceldesc":"You will lose your work if you close this announcement","organisation":"Organization","organisationName":"Organisation Name","subOrganisation":"Sub-Organization","selectSubOrganisation":"Select Sub-Organization","unselectAll":"UnSelect All","orgName":"orgName","SelectMentors":"Select Mentors","SelectParticipants":"Select Participants","mentors":"Mentors","participants":"Participants","searchMembers":"Search members","createnewbatch":"Create New Batch","createbatch":"Create Batch","batchmentors":"MENTORS IN THE BATCH","batchselmentors":"SELECTED MENTORS","bacthmembers":"MEMBERS IN THE BATCH","batchparticipants":"SELECTED PARTICIPANTS","batchname":"NAME OF BATCH","aboutbatch":"ABOUT THIS BATCH","startdate":"START DATE","enrollmentenddate":"ENROLMENT END DATE","enddate":"END DATE","natureofbatch":"BATCH TYPE","inviteonly":"Invite-only","open":"Open","play":"Play","discardChange":"Discard Changes","textbook":"Book","textbookdescription":"Build books using resources for an interesting learning experience.","course":"Course","coursedescription":"Design courses using collections and resources. Courses are for a duration, to achieve an objective.","lesson":"Resource","lessondescription":"Create different resources like story, game, activity, audio, video, using the inbuilt authoring tools.","collection":"Collection","collectiondescription":"Compile resources of your choice.","lessonplandescription":"Frame lesson plans with structured sections for an efficient learning experience.","lessonplan":"Lesson Plan","contentupload":"Upload Content","contentuploadlarge":"Upload Large Videos (>50 MB)","contentuploaddescription":"You can upload content here.","assessment":"Course Assessment","courseassessment":"CourseAssessment","assessmentdescription":"Create assessments for courses using the in-built authoring tools","contentCaps":"CONTENT","lastupdate":"Last update","statusCaps":"STATUS","flagReview":"Flag Review","pendingSince":"Pending since","deletecontent":"Delete Content","deleteconfirm":"Are you sure to delete this content?","deletepublishedcontent":"Retire Content","deletepublishedconfirm":"Retire myself from the content?","checkListPublish":"Publish","checklistCancel":"Cancel","showFilters":"Show Filters","sortby":"Sort by","designcourse":"Design Course","createtextbook":"Create Book","createlessontext":"Create Resource","createcollection":"Create Collection","createlessonplan":"Create Lesson Plan","createassessment":"Create Assessment","viewCaps":"VIEW","editCaps":"EDIT","authorCaps":"AUTHOR","lastupdatedCaps":"Last Updated","content":"Content","contentLabel":"Content","status":"Status","edit":"Edit","author":"Author","courseName":"Course Name","publhwarng":"You have given some review comments or suggestions, they will be lost if content is published. Do you want to publish?","disablePopupText":"This content can not be deleted","contactStateAdminToAdd":"Please contact your state admin to add more participants to this batch","whatToCreate":"What type of course do you want to create ?"},"prmpt":{"search":"Search","searchContent":"Search content"},"intxt":{"t0006":"Select batch members","t0005":"Select batch mentors","t0007":"Update Batch Details","t0015":"View Batch Details"},"instn":{"t0052":"Please enter description for this announcement (Max: 1200 chars)","t0053":"Enter web url (starting with http or https)","t0054":"Note: At least one of 'Description' or 'URL / weblink' or 'Attachment' must be provided.","t0057":"Please enter relevant title for this announcement (Max: 100 chars)","t0080":"Please wait...Loading comments"},"scttl":{"myworkspace":"My Workspace"},"snav":{"start":"Create","draft":"Drafts","inreview":"Review Submissions","submittedForReview":"Submitted for review","published":"Published","alluploads":"All Uploads","upForReview":"Up For Review","flagged":"Flagged","limitedPublishing":"Limited Publishing","shareViaLink":"Shared via link","allmycontents":"All My Content","flagReviewer":"Flag Review","Collaboratingon":"Collaborations"},"lnk":{"coursebacthes":"Course Batches","createdByMe":"Created by me","assignedToMe":"Assigned to me"}},"messages":{"stmsg":{"m0008":"no-results","m0009":"Unable to play, please try again or close.","m0011":"We are fetching draft content...","m0012":"You don't have any draft content...","m0019":"You don't have any content in review...","m0020":"You don't have any batches...","m0021":"We are fetching published content...","m0022":"Submit one of your drafts for review. Content is published only after a review","m0023":"We are fetching uploaded content...","m0024":"Upload a document, video, or any other supported format. You have not uploaded anything yet","m0025":"We are fetching content detail...","m0032":"We are fetching up for review content...","m0033":"Submit one of your drafts for review. You have not yet submitted any content for review","m0034":"We are deleting the content...","m0035":"There is no content to review","m0038":"We are fetching flagged content...","m0039":"You don't have any flagged content...","m0081":"No batches found","m0082":"We are fetching limited published content...","m0083":"You have not shared content with any one yet","m0101":"Please enter a valid url","m0105":"Title is required","m0106":"Title is too long","m0107":"From is required","m0108":"Your Progress","m0109":"Descripton is too long","m0110":"We are fetching all content...","m0111":"Looks like there is nothing to show here. Please go to “Create†to start creating content","m0112":"Content is coming soon","m0113":"Enter valid start date","m0135":"Enter a valid date","m0114":"Name is required","m0115":"We are fetching flagged review content...","m0117":"From is too long","m0123":"Ask a friend to add you as a collaborator. You will be notified of the same via email.","m0124":"We are fetching collaborating content...","m0119":"We are updating batch...","m0125":"Start creating Resource, Book, Course, Collection or Upload. You have no work-in-progress draft at the moment","m0126":"Start creating Resource, Book, Course, Collection or Upload"},"emsg":{"m0004":"Cannot preview now. Try again later","m0005":"Something went wrong, please try in some time....","m0006":"Please select recipient(s)","m0011":"Fetching review comments failed","m0010":"Creating review comments failed","m0012":"Something went wrong while saving your preferences. Please go to your profile to save your preferences","m0013":"You don't have permission to edit this content"},"imsg":{"m0020":"location is removed sucessfully.","m0027":"Hi, this content is not available now. It is likely that the creator has made some changes to the content.","m0037":"To close this resource, save and click the X icon.","m0038":"To close this","m0039":"please save and click on X icon.","m0046":"You can only select 100 participants."},"fmsg":{"m0004":"Fetching data failed, please try again later...","m0006":"Fetching draft content failed, please try again later...","m0007":"Creating lesson failed. Please login again to create lesson.","m0008":"Creating book failed. Please login again to create book.","m0009":"Creating course failed. Please login again to create course.","m0010":"Creating collection failed. Please login again to create collection.","m0012":"Fetching review content failed, please try again later...","m0013":"Fetching published content failed, please try again later...","m0014":"Fetching uploaded content failed, please try again later...","m0015":"Fetching content detail failed, please try again later...","m0019":"Publishing content failed, please try again later...","m0020":"Rejecting content failed, please try again later...","m0021":"Fetching up for review content failed, please try again later...","m0022":"Deleting content failed, please try again later...","m0023":"Fetching flagged content failed, please try again later...","m0024":"Accepting flag failed, please try again later...","m0025":"Discarding flag failed, please try again later...","m0052":"Creating batch failed, please try again later...","m0053":"Adding users to batch is failed, please try again later...","m0054":"Fetching batch detail failed, please try again later...","m0056":"Fetching users list failed, please try again later...","m0064":"Fetching limited published content failed, please try again later...","m0078":"Creating content failed. Please login again to create content.","m0081":"Fetching all content failed, please try again later...","m0083":"Fetching flagged review content failed, please try again later...","m0084":"Fetching collaborating content failed, please try again later...","m0085":"Fetching CSV failed, please try again later..."},"smsg":{"m0004":"Content published successfully...","m0005":"Content rejected successfully...","m0006":"Content deleted successfully...","m0007":"Flag accepted successfully...","m0008":"Flag discarded successfully...","m0033":"Batch created successfully...","m0034":"Batch updated successfully..."}}}} - +{"consumption":{"frmelmnts":{"lbl":{"addNewMember":"Add member","fromGroup":"from this group","groupDescription":"Enter a description to help members understand the purpose of the group","member":"Member","tryDifferentName":"* type a similar but, different name","ACTIVITY_COLLECTION_TITLE":"Collection","ACTIVITY_COURSE_TITLE":"Courses","ACTIVITY_EXPLANATION_CONTENT_TITLE":"Explanation content","ACTIVITY_PRACTICE_QUESTION_SET_TITLE":"Practice question set","ACTIVITY_PRACTICE_RESOURCE_TITLE":"Practice resource","ACTIVITY_RESOURCE_TITLE":"Resource","ACTIVITY_TEXTBOOK_TITLE":"Textbooks","ACTIVITY_TV_EPISODE_TITLE":"TV Episode","ActivityCourses":"Courses","ActivityLessonPlan":"Lesson Plan","ActivityTextbooks":"Textbooks","AddtoGroup":"Add to group","CCbyLicense":"All content here is licensed under a Creative Commons license (CC-BY 4.0) unless otherwise noted","EnterPassword":"Enter password","InstanceIdProfilename":"The {instance} ID is written just below the profile name.","LastUpdated":"Last updated","MembersInstanceId":"Use the following instructions to guide members to identify their unique {instance} ID.","Mobile":"Mobile","switchToOldLayout":"Switch to old theme","switchToJoyLayout":"Switch to joyful theme","tryNewTheme":"Try new theme","noThankYou":"No thank you","NoSerchGroupMemberResults":"Sorry! there are no results to match your search. To continue your search","OTPhasbeensent":"OTP has been sent","OTPhasbeensentToEmail":"OTP is sent to your email address","OTPhasbeensentToPhone":"OTP is sent to your mobile number","OTPmsgforuser":"You will receive an OTP to verify your mobile number or email address","OTPresendMaxretry":"You can request for an OTP only 4 times. You have to register again","OTPresendMaxretryreached":"Maximum retry limit exceeded","OTPvalid":"OTP is valid for 30 minutes","RecommndationsBasedOnProfile":"Recommendations based on your profile details","SearchIn":"Search in {searchContentType}","SeetheInstanceIDhere":"See the {instance} ID here","Select":"Select","SelectProfileMenu":"Select the profile menu","ShowingActivityResults":"Showing {resultCount} results for {searchString}","TypeToSearchForContent":"Type to search for content. e.g. 'Story'","aboutTheContent":"About the content","accessCourse":"Access course","accessToLogin":"To access the course you have to log in and join the course","accountRecoveryDescription":"A recovery account helps you to regain access to your account if you are locked out or forget your password. Choose the recovery account type and enter details","active":"Active","activities":"Activities","activityRecommendation":"Recommendations based on your profile details","addAnotherUser":"Add another user","addCourse":"Add course","addDistrict":"Add District","addEmailID":"Add Email address","addMember":"Add member","addPhoneNo":"Add Mobile Number","addRecoveryAccount":"Add recovery account","addRecoveryId":"Add Recovery ID","addState":"Add State","addUser":"Add user","addingMembertoGroup":"Where can I see the {instance} ID?","addlInfo":"Additional Information","addnote":"TAKE NOTES","addorgtype":"Add Organization Type","address":"Address","admindshheader":{"blocks":"Blocks","districts":"Districts","index":"Serial No.","schools":"Schools","teachers":"Regd. Teachers"},"agreeGroupToc":"I agree to {instance}'s ","allDownloads":"All downloads will automatically be added to","anncmnt":"Announcement","anncmntall":"All Announcements","anncmntcancelconfirm":"Are you sure you want to stop showing this announcement?","anncmntcancelconfirmdescrption":"Users will not be able to see this announcement after this action","anncmntcreate":"CREATE ANNOUNCEMENT","anncmntdtlsattachments":"Attachments","anncmntdtlssenton":"Sent on","anncmntdtlsweblinks":"Weblinks","anncmntinboxannmsg":"Announcements","anncmntinboxseeall":"See All","anncmntlastupdate":"Consumption data last updated on","anncmntmine":"My Announcements","anncmntnotfound":"No announcement found !","anncmntoutboxdelete":"Delete","anncmntoutboxresend":"Resend","anncmntreadmore":"... Read More","anncmntsent":"Showing all sent announcements","anncmnttblactions":"Actions","anncmnttblname":"Name","anncmnttblpublished":"Published","anncmnttblreceived":"Received","anncmnttblseen":"Seen","anncmnttblsent":"Sent","appUpdateAvailable":"New update available!","appUpdateDescription":"Click on the link to get the new version of the desktop app","appliedFilters":"Applied filters","attributions":"Attributions","author":"Author","authorofsourcecontent":"Author of Source Content","availableBatches":"Available batches","availableForContribution":"Available for contribution","badgeassignconfirmation":"Are you sure you want to issue the badge to this content?","basedOnPref":"Based on your preferences","batch_name":"Batch name","batchdescription":"DESCRIPTION OF BATCH","batchdetails":"Batch Details","batchenddate":"End Date","batches":"Batches","batchstartdate":"Start Date","birthdate":"Birthdate (dd/mm/yyyy)","block":"Block","blocked":"Blocked","blockedUserError":"The user account is blocked. Contact administrator","board":"Board/University","boardRequired":"You have to select a State","boards":"Board","browse":"Online library","browserSuggestions":"For an improved experience, we suggest that you upgrade or install","captchaValidationFailed":"Failed to validate your details","cert":"Reissue certificates","certificateIssuedTo":"Certificate issued to","certificates":"Certificates","certificatesIssued":"Certificates Issued","certificationAward":"Certifications & Awards","channel":"Channel","chapter":"Chapter","charError":"Password must contain at least 8 alphanumeric characters.","characterleft":"Characters remaining","chartSummary":"Chart summary","checkSpelling":"* check your spelling","checkYourSpelling":"*check your spelling","chkuploadsts":"Check Upload Status","chooseAll":"Choose All","class":"Class","classRequired":"You have to select a class","classes":"Classes","clickHere":"Click here","clickOnProfileIcon":"Click on the profile icon on the header","collapseAll":"Collapse all","comingSoon":"Coming soon","completeContentToUnlock":"Complete {count} more contents to unlock a new achievement","completeForCertificate":"Complete all the modules to get a certificate","completed":"Completed","completedCourse":"Courses completed","completingCourseSuccessfully":"For successfully completing the course,","confirmPassword":"Confirm Password","confirmblock":"Are you sure to Block","congratulations":"Congratulations!","contactStateAdmin":"Contact your state admin to add more participants to this batch","content":{"AUTHOR":"Author","BOARD":"Board","CLASS":"Class","CREATEDON":"Created on","ContentInformation":"Content information","CreatedOnBy":"Created on {instance} by","DESCRIPTION":"Description","KEYWORDS":"Keywords","LASTUPDATEDON":"Last updated on","LicenseTerms":"License terms","MEDIUM":"Medium","RESOURCETYPE":"Resource type","SUBJECT":"Subject"},"contentCredits":"Content Credits","contentLabel":"Content","contentType":"Content type","contentcopiedtitle":"This content is derived from","contentinformation":"Content Information","contentname":"CONTENT NAME","contentsLabel":"Contents","contenttype":"Content","continue":"Continue","copy":"Copy","copyAsCourse":"Copy as course","copyRight":"Copyright","copycontent":"Copying content...","country":"Country","countryCode":"Country code","courseContainCertificate":"This is a certificate course ","courseCreatedBy":"Created by","courseCredits":"Credits","courseDetails":"Course details","courseDontContainCertificate":"This course does not have a certificate","courseLastUpdatedOn":"Course last updated on","courseProgress":"Course progress","courseRelevantFor":"The course is relevant for:","courseSuccessMessage":"You have successfully completed the course","courseSuccessNotificationMessage":"You will be notified about the course certificate on your registered contact details within 7 days","courseWithoutCertificateNote":"Note: This course does not have a certificate","coursecreatedon":"Created on","courses":"Courses","coursestructure":"Course modules","createGroup":"Create group","createGroupDes":"You are just a step away from creating a group","createUser":"Add user","createUserSuccessWithEmail":"Your email address is verified. Log in to continue","createUserSuccessWithPhone":"Verification successful. Login to continue","createdInstanceName":"Created on {instance} by","createdon":"Created On","creationdataset":"Creation","creator":"Creator","credits":"Credits","creditsLicenceInfo":"Credits & license info","current":"Current","currentlocation":"Current location","curriculum":"Curriculum","dashBoardTitle":"Dashboard","dashboard":{"action":"Action","description":"Description","download":"Download","downloadfile":"Download file","fileName":"File name","fileSize":"File size"},"dashboardcertificateStatus":"Certificate Status","dashboardfiveweeksfilter":"LAST 5 WEEKS","dashboardfourteendaysfilter":"LAST 14 DAYS","dashboardnobatchselected":"No batch selected","dashboardnobatchselecteddesc":"Select a batch to proceed","dashboardnocourseselected":"No course selected","dashboardnocourseselecteddesc":"Select a course from the list","dashboardnoorgselected":"No organization selected!","dashboardnoorgselecteddesc":"Select an organization to proceed","dashboardselectorg":"Select Organization","dashboardsevendaysfilter":"LAST 7 DAYS","dashboardsortbyenrolledon":"Enroled On","dashboardsortbystatus":"Status","dashboardsortbyusername":"User Name","defaultstar":"Tap on stars to rate the content","delete":"Delete","deleteGroup":"Delete group","deleteUser":"Delete user","deletenote":"Delete Note","description":"Description","desktop":{"Suggestions":"Suggestions","SuggestionsText1":"Make sure that all words are spelt correctly","SuggestionsText2":"Try different keywords","SuggestionsText3":"Try more general keywords","about_us":"About {instance}","app":"{instance} Lite Desktop App","authorOfSourceContent":"Author of source content","board":"by {board}","content":"Content","creditsAndLicenceInfo":"Credits and Licence information","deleteCollection":"Deleting {name} textbook removes it from My Downloads. Click Delete to continue.","deleteContent":"Deleting {name} content removes it from My Downloads. Click Delete to continue.","downloadBook":"Download textbook","explore":"Explore more content","failedListLabel":"Could not download or import file(s). Remove unwanted files from your computer and try again","find_more":"Find more textbooks and content on {instance}","lastShared":"Last shared","lowMemory":"The app may be slow as your computer has low memory","notMatchContent":"did not match any content","storageSpaceRunningOutHeader":"Insufficient storage space","update":"Update {instance} desktop","updateAvailable":"New version update available ","updateTextbook":"Update textbook"},"desktopAppDescription":"Install {instance} desktop app to explore downloaded content or to play content from external devices. {instance} Desktop App provides","desktopAppFeature001":"Free unlimited content","desktopAppFeature002":"Multilingual support","desktopAppFeature003":"Play content offline","dialCode":"QR code","dialCodeDescription":"QR code is the 6 digit alphanumeric code found beneath the QR code image in your text book","dialCodeDescriptionGetPage":"QR code is the 6 digit alphanumeric code found beneath the QR code image in your text book.","dikshaForMobile":"DIKSHA for Mobile","dismissWarning":"Dismissing {memberName} as group admin removes admin permissions from the member","district":"District","dob":"Date Of Birth","done":"Done","downloadAppLite":"Download {instance} Lite Desktop App","downloadAppOtherversions":"Other versions","downloadAppRecommended":"Recommended for your PC","downloadBooks":"Download books to access while offline","downloadCourseQRCode":"Download Course QR Code","downloadCsv":"Download data CSV","downloadDikshaForMobile":"Download DIKSHA for Mobile","downloadQRCode":{"tooltip":"Click to download QR codes and link them to the published course"},"drive":"Pendrive or External Drives","dropcomment":"Add a comment ","duplicateEmailAddress":"This email address is the same as that linked to your profile","duplicatePhoneNumber":"This mobile number is the same as that linked to your profile","ecmlarchives":"Ecml Archives","edit":"Edit","editGroup":"Edit group details","editPersonalDetails":"Edit Personal Details","editProfileInfo":"You can edit this information from your profile","editUserDetails":"Edit details of the User","education":"Education","email":"Email address","emailAddress":"Email address","emailId":"Email address","emailPhonenotRegistered":"Email address / Mobile number is not registered with {instance}","emailVerfied":"Email verified","emptycomments":"No comments","enddate":"END DATE","enjoyedContent":"Enjoyed this content?","enrollcourse":"Join Course","enrollmentenddate":"Enrolment End Date","enterCertificateCode":"Enter the certificate code here","enterDialCode":"Enter QR code","enterEmail":"Enter email address","enterEmailID":"Enter email address","enterEmailPhoneAsRegisteredInAccount":"Enter email address/mobile number registered with {instance}","enterFollowingInfo":"Enter the following information","enterGroupName":"Enter group name","enterInstanceId":"Enter {instance} ID","enterName":"Enter name","enterNameNotMatch":"The entry does not match the name registered with {instance}","enterOTP":"Enter OTP","enterPhoneNumber":"Enter mobile number","enterQrCode":"Enter QR code","enterValidCertificateCode":"Enter a valid certificate code","enterValidName":"Enter a valid name. Only alphabets are allowed.","enternameAsRegisteredInAccount":"and the name as on the {instance} account","epubarchives":"Epub Archives","errorConfirmPassword":"Passwords do not match","errorMessage":"Error message","errorMsg":"To copy the error to a text editor, click the copy to clipboard button","errorWhileGeneratingTicket":"There was a technical error, try again later","errorinupload":"Error while uploading users","expandAll":"Expand all","experience":"Experience","expiredBatchWarning":"Batch has ended on {EndDate}, therefore your progress will not be updated.","explore":"Explore","exploreContentOn":"Explore content on {instance}","explorecontentfrom":"Explore content from","exprdbtch":"Expired Batches","externalId":"External Id","failres":"Failure Results","fetchingBlocks":"Please wait while we are fetching blocks","fetchingContentFailed":"Failed to fetch content. Try again later.","fetchingSchools":"Please wait while we fetch schools","fieldsmarked":"Fields marked with an asterisk (","fileUploadSuccessMessage":"File uploaded successfully. All record status updates will be processed within 24 hours. Use the Download User Details button to see updated status values","filterContentBy":"Filter content by","filterby":"Filter by","filters":"Filters","first":"FIRST\t","firstName":"First name","flaggedby":"Flagged by","flaggeddescription":"Flagged Description","flaggedreason":"Flagged reason","for":"for","forDetails":"For details","forSearch":"for {searchString}","fromTheTextBook":"from the textbook","fullName":"Full name","gender":"Gender","generateOtpFailed":"Failed to generate OTP. Try again later ","getOTP":"Get OTP","getStarted":"Get started","getUnlimitedAccess":"Get unlimited access to textbooks, lessons and courses offline on your mobile phone","goBackToClassicTheme":"If you want to change the theme, you can always do this from your preferences.","goToMyDownloads":"Go to My Downloads to find this content","goback":"To cancel","grade":"Grade","grades":"Grades","graphNotAvailable":"This report does not have graphs ","graphStat":"Graph Statistics","graphs":"Graphs","groupCreatedBy":"Created by {name}","groupGuidelines":"Group guidelines","groupName":"Group name","groupNameRequired":"You have to enter the group name","groupToc":"You have to agree to {instance}'s group guidelines before you proceed","groupWelcomeMsg":"Create a group or be a part of one to connect with people, share activities, review progress and explore other possibilities","groupWelcomeTitle":"Have you explored the potential of groups yet?","h5parchives":"H5p Archives","haventFoundAnyOtherissue":"Haven't found what are you looking for?","homeUrl":"Home Url","htmlarchives":"Html Archives","iAmStateTeacher":"Submit details","iam":"I am a","imagecontents":"Image Contents","import":"Download books to access while offline","improveYourExperience":"Improve your experience","inAll":"in \"all\"","inProgress":"In progress","inUsers":"in users","inactive":"Inactive","incompatibleBrowser":"You seem to have an incompatible browser or browser version","indPhoneCode":91,"instacnceId":"{instance} ID","installApp":"Install app","installAppDesc":"Store lessons, textbooks and content offline on your device","installAppFree":"Free","installAppPlayStore":"Available on Play Store","installAppTitle":"{instance} - National Teachers Platform for India","instanceId":"{instance} ID","isRootOrg":"Is RootOrg","issueReportedSuccessfuly":"Issue reported successfully","issueReportedSuccessfulySubNote":"Note: Your issue will automatically be sent to {instance} when you are online","itis":"It is","join":"Join","joinTrainingToAcessContent":"You must join the course to get complete access to content","joyThemeText":"The new design makes it easier for you to find content you need, and adds a splash of joy to your learning experience","keywords":"Keywords","lang":"Language","language":"Language(s) known","last":"LAST\t","lastName":"Last name","lastUpdatedOn":"Last updated on","lastupdate":"Last update","learnerPassbook":"Learner passbook","learners":"Learners","leaveGroup":"Leave group","leaveGroupWarning":"This action cannot be undone. Do you want to leave {groupName}","lessonPlan":"Lesson Plan","library":"Online library","licenseTerms":"License terms","linkCopied":"Link copied ","linkedContents":"Linked contents","loadContentFrom":"Load content from","location":"Location","lockPopupTitle":"{collaborator} is currently working on {contentName}. Try again later.","loginToCreateGroup":"The first step towards creating your own group, study circle or classroom is to log in","makeAdmin":"This action will give {memberName} group admin permissions","manage":"Manage","manageuser":"Manage user","mandatory":") are mandatory","markas":"Mark as","medium":"Medium","mediumRequired":"You have to select a medium","memberVerificationMsg":"You have to check that the member's name and {instance} ID match, before you proceed","members":"Members","mentors":"Mentors","mergeAccount":"Merge Account","mobileEmailInfoText":"Enter your mobile number or email address to log in on DIKSHA","mobileNumber":"Mobile Number","moduleFinish":"You have completed this module","moduleProgress":"Module progress","more":"more","myBadges":"My badges","mynotebook":"My Notebook","mynotes":"My Notes","mytrainings":"My courses","name":"Name","nameRequired":"You have to enter a username ","newLookAndFeel":"{instance} has got a new look and feel.","next":"Next","nextModule":"Next module","noBookfoundButtonText":"See more books and contents","noBookfoundSubTitle":"Your board is yet to add more books. Tap the button to see more books and content on {instance}","noBookfoundTitle":"Board is adding books","noContentToPlay":"No content to play","noContentfoundButtonText":"Explore more content","noContentfoundSubTitle":"Your board is yet to add more content. Click the button below to explore other content on {instance}","noContentfoundTitle":"Board is adding content","noCreditsAvailable":"No credits available","noDataAvailable":"No data available","noMatchingMember":"Sorry! There are no results that match your search. To continue your search","noMatchingRecordFound":"There are no participants in this batch","noProgress":"Progress cannot be tracked for {type}s","note":"Note:","okGotIt":"OK, Got it","onDiksha":"on {instance} on","oneCourse":"Course","oneTimePassword":"One Time Password (OTP)","ongoing":"Ongoing","open":"Open","opndbtch":"Open Batches","orgCode":"Org Code","orgId":"OrgId","orgName":"Org Name","orgType":"Org Type","orgname":"Organization Name","orgtypes":"Organization Type","originalAuthor":"Original Author","other":"Other","otpMandatory":"OTP is mandatory","otpSentTo":"OTP has been sent to","otpValidationFailed":"Failed to validate the OTP","parentOrGuardian":"of your parent or guardian","participants":"Participants","passwd":"Your password must contain a minimum of 8 characters. It must include numerals, lower and upper case alphabets and special characters, without any spaces","passwderr":"Your password and username cannot be the same","password":"Password","pdfcontents":"Pdf contents","phone":"Mobile number","phoneNumber":"Mobile Number","phoneOrEmail":"Enter mobile number or email address","phoneRequired":"Mobile number is required","phoneVerfied":"Mobile number verified","phonenumber":"Mobile Number","pincode":"Pin Code","play":"PLAY","playContent":"Play Content","playVideo":"Play video","pleaseValidateYour":"You must validate your","plslgn":"This session has expired. Login again to continue using ${instance}.","position":"Position","preferenceCanBeUpdated":"You can edit this user's details from the Profile page","preferredLanguage":"Preferred Language","prevModule":"Prev. module","previous":"Previous","privacyPolicy":"Privacy Policy","processid":"Process ID","profile":{"selectDistrict":"Select district"},"profilePopup":"To discover relevant content update the following details:","profileTab":"Click the Profile tab","provideDetails":"Provide details to register on {instance}","provideTeacherDetails":"Required details","provider":"OrgProvider","publishedBy":"Published by","publishedOnInstanceName":"Published on {instance} by","publisher":"Publisher","questionBank":"Question bank","reEnterPassword":"Re-enter the password","re_issue":"Reissue certificate","readless":"Read Less ...","readmore":"... Read More","receiveOTP":"Where would you like to receive the OTP?","recoverAccount":"Recover Account","redirectMsg":"This content is hosted outside","redirectWaitMsg":"Wait while the content loads","refreshedDaily":"Refreshed daily","register":"Register","registerOn":"Register on {instance}","releaseDateKey":"Release date","removeActivity":"Remove activity","removeAll":"Remove All","removeWarning":"Removing {memberName} permanently removes him/her for the group","reportAnIssue":"Report an issue","reportOtherIssue":"Report another issue","reportSummary":"Report summary","reportUpdatedOn":"This report was last updated on","requiredField":"You have to enter {field}","resendOTP":"Resend OTP","resentOTP":"OTP has been resent. Enter OTP.","retired":"Retired","returnToCourses":"Return to Courses","role":"Role","roles":"Roles","rootOrg":"Root org","sameEmailId":"This email address is the same as that linked to your profile","samePhoneNo":"This Mobile Number is the same as what is linked with your profile","saveToPenDrive":"Save to pen drive","school":"School","schoolName":"School or Org name","schoolTeacherId":"Your State, Board, or Org ID ","schoolUdiseId":"School UDISE ID/ Org ID","search":"Search","searchForContent":"Enter QR code","searchForGroupMembe":"Search for a group member","searchForGroupMember":"Search for group member","searchOrQr":"Search or enter QR code","searchUser":"Search user","searchUserName":"Search for participants","searchWithinGroup":"Search within group","section":"Section:","sectionTitle":"Courses","selectActivity":"Select activity","selectAll":"Select all","selectBatch":"Select batch","selectBlock":"Select Block","selectBoard":"Select board","selectChapter":"Select Module","selectClass":"Select class","selectContentFromCourse":"Select contents for course","selectContentType":"Select content type","selectDistrict":"Select district","selectMedium":"Select medium","selectPublisher":"Select publisher","selectSchool":"Select School","selectState":"Select State","selectSubject":"Select subject","selected":"Selected","selectreason":"SELECT A REASON","selfDeclaredDetails":"Self-declared user details","selfDeclaredInfo":"My details","sesnexrd":"Session Expired","setRole":"Edit user","share":"Share","sharelink":"Share using the link -","showLess":"Show less","showingResults":"Showing results","showingResultsFor":"Showing results for {searchString}","showingResultsForWithCount":"Showing {resultCount} results for","showingrecord":"Showing {count} of","signUp":"Register","signinenrollTitle":"Log in to join this course","similarButDiffName":"*type a similar but, different name","skillTags":"Skill Tags","sltBtch":"Select a batch to proceed","sortby":"Sort by","startExploringContent":"Enter a QR code to start exploring content ","startExploringContentBySearch":"Explore content using QR codes","startLearning":"Start learning","startdate":"START DATE","started":"Started","state":"State","stateRecord":"As per state records","stateValidationDetails":"These details may be made available to your declared State to validate and follow progress.","stateVerified":"State verified user","status":"Status","step1":"Step 1:","step2":"Step 2:","step3":"Step 3:","student":"Student","subject":"Subject","subjectRequired":"You have to select a subject","subjects":"Subjects","subjectstaught":"Subject(s) taught","submit":"Submit","submitIssueButton":"Submit Issue","submitOTP":"Submit OTP","successres":"Success Results","summary":"Summary","supportedLanguages":"Supported languages","switchLayout":"Switch layout","switchUser":"Change user","tableNotAvailable":"Table view is not available for this report","takenote":"TAKE NOTES","tcfrom":"From","tcno":"No","tcto":"To","teacher":"Teacher","teacherDetailsTnc":"I agree to share these details with the Administrators of {instance} as per the","teachingResource":"Teaching resources","tellUsMoreAboutProblem":"Tell us more about the problem you faced","tenDigitPhone":"10 digit mobile number","termsAndCond":"Terms and Policies","termsAndCondAgree":"I agree to the updated terms and policies","termsOfService":"terms of services","textbooks":"Digital textbooks","thankyouForSubmittingDetails":"Thank you for submitting your details","theme":"Theme","title":"Title","tncLabel":"I understand and accept the","tncLabelLink":"{instance} Terms of Use","toTryAgain":"to try again","toYourEmailPhone":"to < email address/mobile number >","topics":"Topics","totalBatches":"Total batches till date","totalCompletions":"Total completed till date","totalEnrollments":"Total enrollment till date","totalrecords":"{total} records","trainingAttended":"Courses attended","tvProgram":"TV classes","typeHere":"Type here ","unableToUpdateEmail":"Unable to update email address?","unableToUpdateMobile":"Unable to update Mobile Number?","unableToVerifyEmail":"Unable to verify email address?","unableToVerifyPhone":"Unable to verify your mobile number?","unenrollMsg":"Do you want to unenrol from this batch?","unenrollTitle":"Batch Unenrolment","uniqueEmail":"Your email address is already registered","uniqueEmailId":"This email address is already registered. Enter another email address","uniqueMobile":"This mobile number is already registered. Enter another mobile number.","uniquePhone":"This mobile number is already registered","updateDetails":"Update details","updateEmailId":"Update Email address","updatePhoneNo":"Update Mobile Number","updateRecoveryId":"Update Recovery ID","updatedon":"Updated on","updateorgtype":"Update Organization Type","upldfile":"Uploaded File","uploadFileError":"Uploaded file not in expected format","uploadValidationStatus":"Upload Validation Status","uploadcsvfile":"Upload CSV file","uploadingValidationStatusHeader":"Uploading Validation Status For Self Declared User Information","uploadmsg":"Upload the CSV file in the required format","useInstanceAs":"Use {instance} as","userDistrict":"User district","userFilterForm":"Search for participants","userID":"UserId","userId":"User ID","userType":"User Type","validDescription":"Enter valid description","validEmail":"Enter a valid email address","validFor":"valid for 30 min","validPhone":"Enter a valid 10 digit mobile number","validate":"Validate","verifying":"Verifying ","verifyingCertificate":"Verifying your certificate","versionKey":"Version","videos":"Videos","view":"View","viewInBrowser":"View in browser","viewless":"View less","viewmore":"View more","welcomeToInstance":"Welcome to {instance}","whatInstanceId":"What is {instance} ID ?","whatsQRCode":"What is a QR code?","whatwentwrong":"What went wrong?","whatwentwrongdesc":"Let us know what went wrong. Mention the exact reasons so that we review this as soon as possible and address this issue. Thank you for your feedback!","willsendOTP":"You will receive an OTP. After you validate it, you can recover your account","with":"with","wrongEmailOTP":"You have entered an incorrect OTP. Enter the OTP received on your Email ID. The OTP is valid only for 30 minutes.","wrongPhoneOTP":"You have entered an incorrect OTP. Enter the OTP received on your mobile number. The OTP is valid only for 30 minutes.","year":"Year","yearOfBirth":"Select year of birth","yetToStart":"Not started","yop":"Year of Passing","you":"You","youAre":"You are a","contentsUploaded":"Contents are being uploaded","anncmntplzcreate":"Please create announcement","learn_more":"Learn more about how to use {instance}","allContent":"All content","change":"Change","dataDictionary":"Data Dictionary","datasetExamples":"Dataset Examples"},"btn":{"add":"Add","addActivity":"Add activity","all":"All","apply":"Apply","back":"Back","botTitle":"Ask Tara","cancel":"Cancel","cancelCapitalize":"Cancel","chksts":"Check status","clear":"Clear","close":"Close","continueLearning":"Continue learning","copyLink":"Copy link","copytoclipboard":"Copy to clipboard","create":"Create","createCourse":"Create course","createNew":"Create new ","delete":"Delete","dismissAdmin":"Dismiss as admin","docs":"Docs","download":"Download","downloadAppForLinux":"Download for Ubuntu","downloadAppForWindows32":"Download for Windows (32-bit)","downloadAppForWindows64":"Download for Windows (64-bit)","downloadCertificate":"Download Certificate","downloadDesktopApp":"Download Desktop App","downloadInstruction":"See download instructions","enroll":"Join Course","interactive":"Interactive","loadContent":"Load content","login":"Login","makeAdmin":"Make admin","merge":"Merge","next":"Next","no":"No","ok":"OK","previous":"Previous","print":"Print","remove":"Remove","removeMember":"Remove member","reset":"Reset","resume":"Resume","resumecourse":"Resume Course","retry":"Retry","save":"Save","selectCsvFile":"Select CSV file for Upload","selectLanguage":"Select language","selrole":"Select role","signin":"Log In","submit":"Submit","submitbtn":"Submit","tryagain":"Try again","unenroll":"Leave course","update":"Update","uploading":"Uploading","uploadorgscsv":"Upload organization's CSV file","verify":"Verify","video":"Video","viewCourseStatsDashboard":"View course dashboard","viewcoursestats":"View course stats","viewdetails":"View Details","viewless":"View less","viewmore":"View more","yes":"Yes","yesiamsure":"Yes, I am sure","smplcsv":"Download sample CSV","uploadusrscsv":"Upload users CSV"},"cert":{"lbl":{"addCert":"Add certificate","addCertToBatch":"Would you like to add and configure certificates for this batch?","batchCreateSuccess":"Batch created successfully.","batchUpdateSuccess":"Batch updated successfully.","button":"button","certAddError":"Failed to add the certificate. Try again later.","certAddSuccess":"Certificate added successfully","certEditError":"Failed to edit the certificate. Try again later.","certPreview":"Certificate Preview","certRules":"Certificate Rules","certType":"Certificate Type","certUpdateSuccess":"Certificate updated successfully.","certificate":"Certificate","changeDetected":"Template Change detected!","configure":"Configure certificates","confirmTemplateChange":"Would you really want to change the template?","editCert":"Edit Certificate","issueTo":"Issue Certificate to?","noCertificate":"You do not have any certificates attached yet.To proceed, click the","noEditAction":"Edit action for this Certificate is not allowed.Contact support team for any updates","preview":"Preview","selectTemplate":"Select template","templateChange":"The change in template will not reflect for users who have already received their certificates.Users with the older template have to contact the State admin for any changes required","templates":"Templates","unselect":"unselect","updateCert":"Update certificate","verified":"All the elements and attributes are thoroughly verified","issueCertificate":"Issue Certificate"}},"instn":{"t0002":"You can add or upload details of up to 199 organizations at a time in one csv file","t0007":"The OrgName column is mandatory. Enter organization name in this column","t0011":"You can track progress with Process ID","t0012":"Save the Process ID for your future reference to track progress ","t0013":"Download the csv file for reference","t0015":"Upload Organizations","t0016":"Upload Users","t0021":"Enter each organization's name in a separate row","t0022":"Entering details in all other columns is optional:","t0023":"isRootOrg: Valid values for this column True False","t0024":"channel: Unique ID provided during master organization creation","t0025":"externalId: Unique ID associated with each organization in the administrating organization’s repository","t0026":"provider: Channel ID of the administrator organization","t0027":"description: Details describing the organization","t0028":"homeUrl: Organization’s homepage url","t0029":"orgCode: Organization’s unique code, if any,","t0030":"orgType: Type of organization, such as, NGO, primary school, secondary school etc","t0031":"preferredLanguage: Language preferences for the organization, if any","t0032":"contactDetail: Organization’s mobile number and email address. Details should be entered within curly brackets in single quotes. For example: [{‘mobile number’: ‘1234567890’}]","t0049":"channel is mandatory if value for column isRootOrg is True","t0050":"externalId and provider are mutually mandatory","t0055":"Oops announcement details not found!","t0056":"Please try again...","t0058":"Download as:","t0059":"CSV","t0060":"Thank you!","t0061":"Oops...","t0062":"You haven't created a batch for this course yet. Create a new batch and check the dashboard again.","t0063":"You have not created any course as yet. Create a new course and check the dashboard again.","t0065":"Progress Report","t0066":"Score Report","t0076":"Note: All other columns in the CSV file are optional, for details on filling these, refer to","t0077":"Register Users.","t0078":"locationId: An ID which identifies an announcement topic for a particular organisation","t0079":"locationCode: Comma separated list of location codes","t0081":"Thank you for registering on DIKSHA. We have sent an sms OTP for verification. Verify your mobile number with the OTP to complete the registration process.","t0082":"Thank you for registering on DIKSHA. We have sent an OTP to your registered email address for verification. Verify your email address with the OTP to complete the registration process.","t0083":"You will receive an SMS with the OTP for Mobile Number verification","t0084":"You will receive an email with the OTP to verify your email address ","t0085":"The report shows data for the first 10,000 participants. Click download to view the progress of all the participants in the batch.","t0098":"File format for user list upload:","t0099":"Name * (Name of the user as per state records)","t0100":"Identifier * (Mobile number OR email address - either one of the two is mandatory)","t0101":"State * (The State that the user belongs to)","t0102":"Ext Org ID * (School ID as provided in DIKSHA)","t0103":"Ext User ID * (State ID of the user)","t0104":"Input Status (Active, Inactive) * - Enter the record status as provided by the state administrator","t0105":"Roles (System roles to be assigned to the user)","t0106":"Save file as .csv before upload","t0107":"Download the list of Self declared teachers from the portal using the Download User Details button alongside (This data is updated every 24 hours)","t0108":"Update the column STATUS for this file - the state records for the user should be matched with BOTH the Phone number and State ID in the downloaded data, if a record is to updated as validated. The STATUS for all records has to be updated in the file accordingly.The values for this column can be (STATUS = VALIDATED/REJECTED/ERROR)","t0109":"Add new col. ERROR TYPE to the file, if there are records that have STATUS = ERROR","t0110":"For rows where STATUS = ERROR, add value for ERROR TYPE (ERROR TYPE = ERROR-DISTRICT/ERROR-PHONE/ERROR-EMAIL/ERROR-SCHOOL ORG NAME/ERROR-SCHOOL ORG ID/ERROR-ID/ERROR-NAME) based on what the error on the record is","t0111":"This file has be saved in the .CSV format for upload into the system","t0112":"Re-upload list into portal,after filling the STATUS & ERROR TYPE (if applicable) value for each Record in the file. Use the Select CSV file for Upload button above to do this."},"intxt":{"t0001":"Search for notes or title","t0002":"ADD YOUR COMMENT","t0005":"Select batch mentors","t0006":"Select batch members"},"lnk":{"announcement":"Announcement dashboard","assignedToMe":"Assigned to me","createdByMe":"Created by me","dashboard":"Admin dashboard","footerContact":"Contact for queries:","footerDIKSHAForMobile":"DIKSHA for Mobile","footerDikshaVerticals":"DIKSHA Verticals","footerHelpCenter":"Help Center","footerPartners":"Partners","footerTnC":"Terms and Privacy","logout":"Logout","myactivity":"My Activity","profile":"Profile","viewall":"View all"},"pgttl":{"takeanote":"Notes"},"prmpt":{"deletenote":"Are you sure to delete this note?","enteremailID":"Enter your email address","enterphoneno":"Enter 10 digit mobile number","search":"Search","searchOrQr":"Search or enter QR code"},"scttl":{"blkuser":"Block User","contributions":"Contribution(s)","error":"Error:","instructions":"Instructions :","todo":"To Do"},"snav":{"shareViaLink":"Shared via link","submittedForReview":"Submitted for review"},"tab":{"all":"All","community":"Groups","contribute":"Contribute","courses":"Courses","help":"Help","mygroups":"My Groups","resources":"Library","workspace":"Workspace"},"reissue":{"lbl":{"instructions":"Use the following instructions to guide users to identify the unique {instance} ID:","displayUser":"The {instance} ID is displayed below the user name"}}},"messages":{"emsg":{"m001":"Could not create the group. Try again later","m002":"Could not find the group. Try again later","m003":"Could not delete the group. Try again later","m004":"You have entered an invalid {instance} ID","m005":"Unable to update group. Try again later","m008":"The batch's enrollment date {endDate} is crossed","m009":"The course's batch is available from {startDate}","activityAddedToGroup":"You have added this activity previously for the group","activityRemove":"Could not remove activity. Try again later","dissmissAsAdmin":"Could not dismiss {memberName} as group admin","leaveGroup":"Could not leave the group. Try again later","m0001":"Cannot enrol now. Try again later","m0002":"The course is not available now","m0003":"This course does not have any open batches","m0005":"Something went wrong, try again later","m0007":"size should be less than","m0008":"Could not copy content. Try again later","m0009":"Cannot un-enrol now. Try again later","m0014":"Could not update mobile number","m0015":"Could not update email address","m0016":"Fetching states failed. Try again later","m0017":"Fetching districts failed. Try again later","m0018":"Updating profile failed","m0019":"Could not download the report, try again later","m0020":"Updating user failed. Try again later","m0050":"Failed to validate OTP. Try again later.","m0051":"Failed to submit teacher declaration ","m0052":"Failed to update the teacher declaration ","m006":"Could not add {name} to the group. Try again later","m007":"Member is part of the group","m0076":"No data available to download","mutliParametersFound":"Multi parameters found for this report. Please visit reports list page and select a report.","noAdminRole":"You are not authorised to add activities","noAdminRoleActivity":"You do not have permissions to access this page","promoteAsAdmin":"Could not make {memberName} as the group admin","removeMember":"Could not remove member from the group. Try again later"},"imsg":{"m0082":"Deleting {group name} will permanently remove the group from the application","activityAddedSuccess":"Activity added successfully","confirmReportPublish":"Are you sure you want to publish the report?","confirmRetirePublish":"Are you sure you want to retire the report ?","m0001":"This course is flagged as inappropriate and is currently under review.","m0022":"Stats for last 7 days","m0023":"Stats for last 14 days","m0024":"Stats for last 5 weeks","m0025":"Stats from begining","m0026":"Hi, this course is not available now. It is likely that the creator has made some changes to the course.","m0027":"Hi, this content is not available now. It is likely that the creator has made some changes to the content.","m0034":"As the content is from an external source, it will be opened in a while.","m0035":"Unauthorized access","m0036":"The content is externally hosted, to view it, click <b>Preview</b>","m0040":"Operation is in progress, try again later","m0041":"Your profile is","m0042":"% complete","m0043":"Your profile does not have a valid email ID. Update your email ID.","m0045":"The download has failed. Try again after some time","m0047":"You can only select 100 participants","m0060":"If you have two accounts with {instance}, click","m0061":"to","m0062":"Else, click","m0063":"combine usage details of both accounts, and","m0064":"delete the other account","m0065":"Account merge initiated successfully","m0066":"you will be notified once it is completed","m0067":"Could not initiate the account merge. Click the Merge Account option in the Profile menu and try again","m0070":"Account {identifierValue} already exists on {instance}. If this is your account, click Merge to","m0072":"Could not merge accounts because the password entered is incorrect.","m0073":"Click OK to create a new {instance} account.","m0074":"Your location details help us suggest content that is useful to you. Is your location correct? If not, select your correct location and click Submit","m0080":"Could not initiate Account Merge. Log in through your State portal and try again","m0081":"Merging of accounts is in progress. You will receive a notification on your registered email address/mobile number when it is complete","m0086":"Incorrect OTP. Number of attempts remaining : {remainingAttempt}","m0087":"Not permitted to merge account","m0095":"Hi <b>{userName}</b>. \nYou can edit your {instance} profile details from the Profile setting","m0096":"\"{firstName}\" added successfully ","m0141":"Create new to create a {instance} account.","removeActivityWarning":"Removing the activity takes it off from the group activity list and you can no longer check member's progress on it ","reportPublished":"Report published successfully","reportRetired":"The report has been retired successfully","reportSummaryAdded":"Summary added successfully"},"smsg":{"m001":"Group created successfully","m002":"Group deleted successfully","activityRemove":"Activity removed for the group successfully ","dissmissAsAdmin":"{memberName} is no longer the group admin","leaveGroup":"You are no longer part of this group","m0009":"Note created successfully...","m0013":"Note updated successfully...","m0028":"Roles updated successfully","m0029":"User deleted successfully","m003":"Group updated successfully","m0030":"Users uploaded successfully","m0031":"Organizations uploaded successfully","m0032":"Status fetched successfully","m0035":"Org type added successfully","m0037":"updated successfully","m004":"{memberName} added successfully","m0042":"Content successfully copied","m0043":"Endorsement successfull","m0044":"Badge assigned successfully...","m0045":"User unenroled from the batch successfully","m0046":"Profile updated successfully...","m0047":"Your Mobile Number has been updated","m0048":"Your email address has been updated","m0049":"User updated successfully","m0050":"Thank you for rating this content!","m0059":"Content copied successfully ","m0060":"Content updated successfully","m0061":"Content sent for review","m0062":"Content rejected ","m0063":"Content published successfully","m0064":"Content removed successfully","moo41":"Announcement cancelled successfully...","promoteAsAdmin":"{memberName} is now the group admin","removeMember":"{memberName} is no longer part of the group","m0036":"Course enroled for this batch successfully"},"dashboard":{"emsg":{"m001":"Sorry! We are unable to get the certificate list. Try again later","m002":"The user is not enrolled in any batch of this course","m003":"Sorry! We could not reissue the certificate. Try again later","m004":"You have not created this batch as yet"},"imsg":{"m001":"Are you sure you want to reissue certificates to {userName}?"},"smsg":{"m001":"We have received a request to re-issue your certificate. You will receive the re-issued certificate in 7 working days"}},"etmsg":{"desktop":{"telemetryImportError":"Unable to import file, try again later"}},"fmsg":{"m0001":"Could not fetch enroled courses, try again later","m0002":"Could not fetch other courses, try again later...","m0003":"Unable to get batch schedule details","m0004":"Could not fetch data, try again later","m0005":"Could not fetch data, try again later","m00100":"Could not reject the content, try again later","m00101":"Could not publishing content, try again later","m0030":"Could not create the note, try again later...","m0032":"Could not remove the note, try again later","m0033":"Could not fetch the note, try again later...","m0034":"Could not update the note, try again later...","m0049":"Unable to load data.","m0050":"Could not submit the request, try again later","m0051":"Something went wrong, try again later","m0054":"Fetching batch detail failed, try again later...","m0056":"Could not fetch user list, try again later...","m0076":"Enter mandatory fields","m0077":"Fetching search result failed..","m0079":"Failed to assign badge, try again later","m0080":"Failed to fetch the badge, try again later...","m0082":"This course is not open for enrolment","m0085":"There was a technical error. Try again.","m0086":"This course is retired by the author and hence is not available anymore","m0087":"Please wait","m0088":"We are fetching details.","m0089":"No Topics/SubTopics found","m0090":"Could not download, try again later","m0091":"Could not copy content. Try again later","m0095":"Failed to fetch the CSV file, try again later","m0096":"Could not update, try again later","m0097":"Action failed due to a technical error. Try again later","m0099":"Could not send content for review, try again later","m0100":"You have exceeded the user creation limit ","m0098":"Updating content failed, try again later"},"stmsg":{"activityAddFail":"Could not add the activity. Try again later","m0006":"No results found","m0007":"Refine your search ","m0008":"no-results","m0009":"Unable to play, try again or close","m0022":"Submit one of your drafts for review. Content is published only after a review","m0024":"Upload a document, video, or any other supported format. You have not uploaded anything yet","m0033":"Submit one of your drafts for review. You have not yet submitted any content for review","m0035":"There is no content to review","m0077":"We are submitting your request...","m0080":"Upload files only in .csv format ","m0081":"No batches found","m0083":"You have not shared content with any one yet","m0108":"Your Progress","m0113":"Enter a valid start date","m0116":"Deleting selected note...","m0120":"No content to play","m0121":"Content not added yet","m0122":"Your state will soon add content for this QR code. It will be available shortly.","m0123":"Ask a friend to add you as a collaborator. You will receive an email when your friend adds you.","m0125":"Start creating Resource, Book, Course, Collection or Upload. You have no work-in-progress draft at the moment","m0126":"Select board","m0127":"Select medium","m0128":"Select class","m0129":"Loading the terms and conditions.","m0130":"We are fetching districts","m0131":"Could not find any reports","m0134":"You cannot enrol into this batch, as it is closed","m0135":"Enter a valid date","m0136":"Last Date for Enrolment:","m0138":"Failed","m0139":"Downloaded","m0140":"Downloading","m0141":"Data unavailable to generate Score Report","m0142":"Paused","m0143":"Download","m0144":"You do not have appropriate rights to access this page","reportNotReady":"Your report is not ready, try again later"}},"completedCourse":"Course completed","orgname":"orgname","participants":"Participants","resourceService":{"frmelmnts":{"lbl":{"userId":"User ID"}}},"t0065":"Download file"},"creation":{"frmelmnts":{"btn":{"yes":"Yes","no":"No","back":"Back","tryagain":"Try again","close":"Close","accept":"Accept","discard":"Discard","anncmntconfirmrecipients":"Confirm recipients","anncmntpreview":"Preview announcement","anncmntsendanncmnt":"Send announcement","anncmnteditrecipients":"Edit recipients","anncmntselectrecipients":"Select recipients","anncmntdtlsview":"View","anncmntgotit":"Got it","save":"Save","addMembers":"Add members","createbatch":"Create batch","cancel":"Cancel","update":"Update","updatebatch":"Update batch","checkListComment":"Comment","checklistCancel":"Cancel","checklistPublish":"Publish","checkListRequestChanges":"Request changes","publish":"Publish","requestChanges":"Request changes","startcreating":"Start creating","login":"Login"},"lbl":{"name":"Name","Name":"Name","email":"Email Address","contact":"Contact","delete":"Delete","pleaseSelect":"Please Select","anncmntttlresend":"Resend Announcement","createnewanncmnt":"Create New Announcement","createnewanncmntdesc":"Fill in all the required fields to create the announcement.","resendanncmntdesc":"You can make any edits required and resend the announcement.","selectrecipient":"Select Announcement Recipients","selectrecipientdesc":"Select locations who should receive the announcement.","editrecipientdesc":"Edit locations who should receive the announcement.","confirmrecipient":"Confirm Announcement Recipients","confirmrecipientdesc":"Review and confirm your announcement recipients.","previewanncmnt":"Preview Announcement","previewanncmntdesc":"This is how your announcement will look.","anncmntstep":"STEP","anncmnttitle":"TITLE","anncmntfrom":"FROM","anncmntfromDesc":"Please enter organisation/department that has sent the announcement","anncmnttype":"ANNOUNCEMENT TYPE","anncmntdesc":"DESCRIPTION (OPTIONAL)","anncmntlink":"URL / WEBLINK","anncmntaddlink":"Add URL/weblink","anncmntaddlinkdesc":"(For example, you can link a Google Form)","anncmntaddmorelink":"Add Another URL/weblink","anncmntuploadfile":"UPLOAD ATTACHMENT","anncmntsentsuccess":"Announcement Sent!","anncmntsentdesc":"Your announcement has been sent to all your recipients. View all your announcement from the Announcement Dashboard.","anncmntcancel":"Are you sure you want to stop creating this announcement","anncmntcanceldesc":"You will lose your work if you close this announcement","organisation":"Organization","organisationName":"Organisation Name","subOrganisation":"Sub-Organization","selectSubOrganisation":"Select Sub-Organization","unselectAll":"UnSelect All","orgName":"orgName","SelectMentors":"Select Mentors","SelectParticipants":"Select Participants","mentors":"Mentors","participants":"Participants","searchMembers":"Search members","createnewbatch":"Create New Batch","createbatch":"Create Batch","batchmentors":"MENTORS IN THE BATCH","batchselmentors":"SELECTED MENTORS","bacthmembers":"MEMBERS IN THE BATCH","batchparticipants":"SELECTED PARTICIPANTS","batchname":"NAME OF BATCH","aboutbatch":"ABOUT THIS BATCH","startdate":"START DATE","enrollmentenddate":"ENROLMENT END DATE","enddate":"END DATE","natureofbatch":"BATCH TYPE","inviteonly":"Invite-only","open":"Open","play":"Play","discardChange":"Discard Changes","textbook":"Book","textbookdescription":"Build books using resources for an interesting learning experience.","course":"Course","coursedescription":"Design courses using collections and resources. Courses are for a duration, to achieve an objective.","lesson":"Resource","lessondescription":"Create different resources like story, game, activity, audio, video, using the inbuilt authoring tools.","collection":"Collection","collectiondescription":"Compile resources of your choice.","lessonplandescription":"Frame lesson plans with structured sections for an efficient learning experience.","lessonplan":"Lesson Plan","contentupload":"Upload Content","contentuploadlarge":"Upload Large Videos (>50 MB)","contentuploaddescription":"You can upload content here.","assessment":"Course Assessment","courseassessment":"CourseAssessment","assessmentdescription":"Create assessments for courses using the in-built authoring tools","contentCaps":"CONTENT","lastupdate":"Last update","statusCaps":"STATUS","flagReview":"Flag Review","pendingSince":"Pending since","deletecontent":"Delete Content","deleteconfirm":"Are you sure to delete this content?","deletepublishedcontent":"Retire Content","deletepublishedconfirm":"Retire myself from the content?","checkListPublish":"Publish","checklistCancel":"Cancel","showFilters":"Show Filters","sortby":"Sort by","designcourse":"Design Course","createtextbook":"Create Book","createlessontext":"Create Resource","createcollection":"Create Collection","createlessonplan":"Create Lesson Plan","createassessment":"Create Assessment","viewCaps":"VIEW","editCaps":"EDIT","authorCaps":"AUTHOR","lastupdatedCaps":"Last Updated","content":"Content","contentLabel":"Content","status":"Status","edit":"Edit","author":"Author","courseName":"Course Name","publhwarng":"You have given some review comments or suggestions, they will be lost if content is published. Do you want to publish?","disablePopupText":"This content can not be deleted","contactStateAdminToAdd":"Please contact your state admin to add more participants to this batch","whatToCreate":"What type of course do you want to create ?","scanningLinkedContent":"Scanning for linked content","linkedContentErrorMessage":"This content cannot be deleted as it is used in the following"},"prmpt":{"search":"Search","searchContent":"Search content"},"intxt":{"t0006":"Select batch members","t0005":"Select batch mentors","t0007":"Update Batch Details","t0015":"View Batch Details"},"instn":{"t0052":"Please enter description for this announcement (Max: 1200 chars)","t0053":"Enter web url (starting with http or https)","t0054":"Note: At least one of 'Description' or 'URL / weblink' or 'Attachment' must be provided.","t0057":"Please enter relevant title for this announcement (Max: 100 chars)","t0080":"Please wait...Loading comments"},"scttl":{"myworkspace":"My Workspace"},"snav":{"start":"Create","draft":"Drafts","inreview":"Review Submissions","submittedForReview":"Submitted for review","published":"Published","alluploads":"All Uploads","upForReview":"Up For Review","flagged":"Flagged","limitedPublishing":"Limited Publishing","shareViaLink":"Shared via link","allmycontents":"All My Content","flagReviewer":"Flag Review","Collaboratingon":"Collaborations"},"lnk":{"coursebacthes":"Course Batches","createdByMe":"Created by me","assignedToMe":"Assigned to me"}},"messages":{"stmsg":{"m0008":"no-results","m0009":"Unable to play, please try again or close.","m0011":"We are fetching draft content...","m0012":"You don't have any draft content...","m0019":"You don't have any content in review...","m0020":"You don't have any batches...","m0021":"We are fetching published content...","m0022":"Submit one of your drafts for review. Content is published only after a review","m0023":"We are fetching uploaded content...","m0024":"Upload a document, video, or any other supported format. You have not uploaded anything yet","m0025":"We are fetching content detail...","m0032":"We are fetching up for review content...","m0033":"Submit one of your drafts for review. You have not yet submitted any content for review","m0034":"We are deleting the content...","m0035":"There is no content to review","m0038":"We are fetching flagged content...","m0039":"You don't have any flagged content...","m0081":"No batches found","m0082":"We are fetching limited published content...","m0083":"You have not shared content with any one yet","m0101":"Please enter a valid url","m0105":"Title is required","m0106":"Title is too long","m0107":"From is required","m0108":"Your Progress","m0109":"Descripton is too long","m0110":"We are fetching all content...","m0111":"Looks like there is nothing to show here. Please go to “Create†to start creating content","m0112":"Content is coming soon","m0113":"Enter valid start date","m0135":"Enter a valid date","m0114":"Name is required","m0115":"We are fetching flagged review content...","m0117":"From is too long","m0123":"Ask a friend to add you as a collaborator. You will be notified of the same via email.","m0124":"We are fetching collaborating content...","m0119":"We are updating batch...","m0125":"Start creating Resource, Book, Course, Collection or Upload. You have no work-in-progress draft at the moment","m0126":"Start creating Resource, Book, Course, Collection or Upload"},"emsg":{"m0004":"Cannot preview now. Try again later","m0005":"Something went wrong, please try in some time....","m0006":"Please select recipient(s)","m0011":"Fetching review comments failed","m0010":"Creating review comments failed","m0012":"Something went wrong while saving your preferences. Please go to your profile to save your preferences","m0013":"You don't have permission to edit this content","m0014":"Unable to get channel details","m0015":"Unable to get collection details"},"imsg":{"m0020":"location is removed sucessfully.","m0027":"Hi, this content is not available now. It is likely that the creator has made some changes to the content.","m0037":"To close this resource, save and click the X icon.","m0038":"To close this","m0039":"please save and click on X icon.","m0046":"You can only select 100 participants."},"fmsg":{"m0004":"Fetching data failed, please try again later...","m0006":"Fetching draft content failed, please try again later...","m0007":"Creating lesson failed. Please login again to create lesson.","m0008":"Creating book failed. Please login again to create book.","m0009":"Creating course failed. Please login again to create course.","m0010":"Creating collection failed. Please login again to create collection.","m0012":"Fetching review content failed, please try again later...","m0013":"Fetching published content failed, please try again later...","m0014":"Fetching uploaded content failed, please try again later...","m0015":"Fetching content detail failed, please try again later...","m0019":"Publishing content failed, please try again later...","m0020":"Rejecting content failed, please try again later...","m0021":"Fetching up for review content failed, please try again later...","m0022":"Deleting content failed, please try again later...","m0023":"Fetching flagged content failed, please try again later...","m0024":"Accepting flag failed, please try again later...","m0025":"Discarding flag failed, please try again later...","m0052":"Creating batch failed, please try again later...","m0053":"Adding users to batch is failed, please try again later...","m0054":"Fetching batch detail failed, please try again later...","m0056":"Fetching users list failed, please try again later...","m0064":"Fetching limited published content failed, please try again later...","m0078":"Creating content failed. Please login again to create content.","m0081":"Fetching all content failed, please try again later...","m0083":"Fetching flagged review content failed, please try again later...","m0084":"Fetching collaborating content failed, please try again later...","m0085":"Fetching CSV failed, please try again later..."},"smsg":{"m0004":"Content published successfully...","m0005":"Content rejected successfully...","m0006":"Content deleted successfully...","m0007":"Flag accepted successfully...","m0008":"Flag discarded successfully...","m0033":"Batch created successfully...","m0034":"Batch updated successfully..."}}}} \ No newline at end of file