File

src/app/modules/core/services/content-helper/content-helper.service.ts

Constructor

constructor(configService: any, programComponentsService: ProgramComponentsService, programStageService: ProgramStageService, userService: any, helperService: HelperService, programsService: any, resourceService: any, actionService: any, activatedRoute: ActivatedRoute, sourcingService: SourcingService)

Methods

initialize
initialize(programDetails: any, sessionContext: any)
Returns: void
handleContentCreation
handleContentCreation(event: any)
Returns: void
openContent
openContent(content: any)
Returns: void
componentLoadHandler
componentLoadHandler(action: any, component: any, componentName: any, event: any)
Returns: void
initiateInputs
initiateInputs(action: any, content: any)
Returns: void
setFrameworkCategories
setFrameworkCategories()
Returns: void
setNominationDetails
setNominationDetails(nominationDetails: any)
Returns: void
hasAccessFor
hasAccessFor(roles: string[], currentRoles: any)
Returns: void
shouldContentBeVisible
shouldContentBeVisible(content: any, programDetails: any, currentNominationStatus: any, currentRoles: any)
Returns: void
checkSourcingStatus
checkSourcingStatus(content: any, programDetails: any)
Returns: void
getContentDisplayStatus
getContentDisplayStatus(content: any)
Returns: void

Properties

Private _component
_component: any
Private _contentId
_contentId: any
Private _dynamicInputs
_dynamicInputs: any
Private _programDetails
_programDetails: any
Private _selectedSharedContext
_selectedSharedContext: any
Private _sessionContext
_sessionContext: ISessionContext
Private _telemetryInteractCdata
_telemetryInteractCdata: any
Private _telemetryPageId
_telemetryPageId: any
Private _templateDetails
_templateDetails: any
actionService
actionService: any
activatedRoute
activatedRoute: ActivatedRoute
currentOpenedComponent
currentOpenedComponent: any
Public defaultFileSize
defaultFileSize: any
Public defaultVideoSize
defaultVideoSize: any
dynamicComponentsInput
dynamicComponentsInput: any
resourceService
resourceService: any
import { Injectable } from '@angular/core';
import { ConfigService, ResourceService } from '@sunbird/shared';
import { UserService, ActionService , ProgramsService} from '@sunbird/core';
import { ActivatedRoute } from '@angular/router';
import { throwError, BehaviorSubject, Observable} from 'rxjs';
import { map, catchError, skipWhile } from 'rxjs/operators';
import * as _ from 'lodash-es';
import { ProgramComponentsService } from '../../../contribute/services/program-components/program-components.service';
import { ProgramStageService, ProgramTelemetryService} from '../../../program/services';
import { ISessionContext } from '../../../contribute/interfaces';
import { HelperService, SourcingService } from '../../../sourcing/services';
import { v4 as UUID } from 'uuid';


@Injectable({
  providedIn: 'root'
})
export class ContentHelperService {
  private _contentId: any;
  private _templateDetails: any;
  private _sessionContext: ISessionContext = {};
  private _programDetails: any;
  private _component: any;
  private _dynamicInputs: any;
  private _telemetryPageId: any;
  private _telemetryInteractCdata: any;
  private _selectedSharedContext: any;

  public defaultFileSize: any;
  public defaultVideoSize: any;
  constructor(private configService: ConfigService, private programComponentsService: ProgramComponentsService,
    private programStageService: ProgramStageService, private userService: UserService, private helperService: HelperService,
    private programsService: ProgramsService, public resourceService: ResourceService,
    public actionService: ActionService, public activatedRoute: ActivatedRoute, private sourcingService: SourcingService) {
      this.defaultFileSize = (<HTMLInputElement>document.getElementById('dockDefaultFileSize')) ?
      (<HTMLInputElement>document.getElementById('dockDefaultFileSize')).value : 150;
     this.defaultVideoSize =  (<HTMLInputElement>document.getElementById('dockDefaultVideoSize')) ?
     (<HTMLInputElement>document.getElementById('dockDefaultVideoSize')).value : 15000;
     }

    initialize(programDetails, sessionContext) {
      this._sessionContext = _.cloneDeep(sessionContext);
      this._programDetails = programDetails;
      this._selectedSharedContext = _.get(this._sessionContext, 'selectedSharedProperties');
      this.setFrameworkCategories();
      this._telemetryPageId = _.get(this.activatedRoute,'snapshot.data.telemetry.pageid');
      // tslint:disable-next-line:max-line-length
      this._telemetryInteractCdata = [{id: this.userService.channel, type: 'sourcing_organization'}, {id: programDetails.program_id, type: 'project'}];
    }

    get currentOpenedComponent() {
      return this._component;
    }
    set currentOpenedComponent(component) {
      this._component = component;
    }
    get dynamicComponentsInput() {
      return this._dynamicInputs;
    }
    set dynamicComponentsInput(input) {
      this._dynamicInputs = input;
    }
    set currentProgramDetails(programDetails) {
      this._programDetails = programDetails;
    }
    handleContentCreation(event) {
      return new Promise((resolve, reject) => {
        this._sessionContext['templateDetails'] =  event.templateDetails;
        if (event.template && event.templateDetails && !(event.templateDetails.onClick === 'uploadComponent')) {
          const creationInput  = {
            sessionContext: this._sessionContext,
            templateDetails: event.templateDetails,
            selectedSharedContext: this._selectedSharedContext,
            action: 'creation',
            programContext: this._programDetails,
          }
          const createContentReq = this.helperService.createContent(creationInput);
          createContentReq.pipe(map((res: any) => res.result), catchError(
              err => {
              const errInfo = {
                errorMsg: 'Unable to create contentId, Please Try Again',
                telemetryPageId: this._telemetryPageId,
                telemetryCdata : this._telemetryInteractCdata,
                env : this.activatedRoute.snapshot.data.telemetry.env,
                request: {}
              };
              return throwError(this.sourcingService.apiErrorHandling(err, errInfo));
            }))
            .subscribe(result => {
              this._contentId = result.identifier;
              this.programsService.emitHeaderEvent(false);
              // tslint:disable-next-line:max-line-length
              this.componentLoadHandler('creation', this.programComponentsService.getComponentInstance(event.templateDetails.onClick), event.templateDetails.onClick);
              const ret = {
                'currentComponent': this.currentOpenedComponent,
                'dynamicInputs': this.dynamicComponentsInput,
                'currentComponentName': event.templateDetails.onClick
              }
              return resolve(ret);
            }, (error)=> {
              return reject (error);
            });
        } else if (event.templateDetails) {
          this._templateDetails = event.templateDetails;
          this.programsService.emitHeaderEvent(false);
          this._contentId = undefined;
          // tslint:disable-next-line:max-line-length
          this.componentLoadHandler('creation', this.programComponentsService.getComponentInstance(event.templateDetails.onClick), event.templateDetails.onClick);
          const ret = {
            'currentComponent': this.currentOpenedComponent,
            'dynamicInputs': this.dynamicComponentsInput,
            'currentComponentName': event.templateDetails.onClick
          }
          return resolve(ret);
        }
      });
    }
    openContent(content) {
      return new Promise((resolve, reject) => {
        this._contentId = content.identifier;
        this._templateDetails = {
          'name' : content.primaryCategory
        };
        const appEditorConfig = this.configService.contentCategoryConfig.sourcingConfig.files;
        const acceptedFile = appEditorConfig[content.mimeType];
        this._templateDetails['filesConfig'] = {};
        this._templateDetails.filesConfig['accepted'] = acceptedFile || '';
        this._templateDetails.filesConfig['size'] = {
          defaultfileSize:  this.defaultFileSize,
          defaultVideoSize: this.defaultVideoSize
        };
        this._templateDetails.questionCategories = content.questionCategories;
        if (content.mimeType === 'application/vnd.ekstep.ecml-archive' && !_.isEmpty(content.questionCategories)) {
          this._templateDetails.onClick = 'questionSetComponent';
        } else if (content.mimeType === 'application/vnd.ekstep.ecml-archive' && _.isEmpty(content.questionCategories)) {
          this._templateDetails.onClick = 'editorComponent';
        } else if (content.mimeType === 'application/vnd.ekstep.quml-archive') {
          this._templateDetails.onClick = 'questionSetComponent';
        } else if (content.mimeType === 'application/vnd.sunbird.questionset'){
          this._templateDetails.onClick = 'questionSetEditorComponent';
        } else {
          this._templateDetails.onClick = 'uploadComponent';
        }
        this.programsService.emitHeaderEvent(false);
        const componentInstance = this.programComponentsService.getComponentInstance(this._templateDetails.onClick);
        this.componentLoadHandler('preview', componentInstance, this._templateDetails.onClick, {'content': content})
        const ret = {
          'currentComponent': this.currentOpenedComponent,
          'dynamicInputs': this.dynamicComponentsInput,
          'currentComponentName': this._templateDetails.onClick
        }
        return resolve(ret);
      });
    }
    componentLoadHandler(action, component, componentName, event?) {
      this.initiateInputs(action, (event ? event.content : undefined));
      this.currentOpenedComponent = component;
    }
    initiateInputs(action?, content?) {
      // this.showLoader = false;
      const sourcingStatus = !_.isUndefined(content) ? content.sourcingStatus : null;
      this._sessionContext.programId = this._programDetails.program_id;
      this._sessionContext.telemetryPageDetails = {
        telemetryPageId : this.configService.telemetryLabels.pageId.contribute.submitNomination,
        telemetryInteractCdata: this._telemetryInteractCdata
      };
      this.dynamicComponentsInput = {
        contentUploadComponentInput: {
          config: _.find(this._programDetails.config.components, {'id': 'ng.sunbird.uploadComponent'}),
          sessionContext: this._sessionContext,
          templateDetails: this._templateDetails,
          selectedSharedContext: this._selectedSharedContext,
          contentId: this._contentId,
          action: action,
          programContext: this._programDetails,
          sourcingStatus: sourcingStatus,
          content: content,
        },
        practiceQuestionSetComponentInput: {
          config: _.find(this._programDetails.config.components, {'id': 'ng.sunbird.practiceSetComponent'}),
          sessionContext: this._sessionContext,
          templateDetails: this._templateDetails,
          selectedSharedContext: this._selectedSharedContext,
          contentIdentifier: this._contentId,
          action: action,
          programContext: this._programDetails,
          sourcingStatus: sourcingStatus,
          content: content
        },
        contentEditorComponentInput: {
          contentId: this._contentId,
          action: action,
          content: content,
          sessionContext: this._sessionContext,
          programContext: this._programDetails,
          sourcingStatus: sourcingStatus,
          selectedSharedContext: this._selectedSharedContext,
        },
        questionSetEditorComponentInput: {
          contentId: this._contentId,
          action: action,
          content: content,
          sessionContext: this._sessionContext,
          programContext: this._programDetails,
          sourcingStatus: sourcingStatus,
          selectedSharedContext: this._selectedSharedContext,
        }
      };
    }
    setFrameworkCategories() {
      this._sessionContext.targetCollectionFrameworksData = {};
      // tslint:disable-next-line:max-line-length
      this._sessionContext.targetCollectionFrameworksData['framework'] = _.isArray(this._programDetails.config.framework) ? _.first(this._programDetails.config.framework) : this._programDetails.config.framework;
    }
    setNominationDetails(nominationDetails){
      this._sessionContext.nominationDetails = nominationDetails;
    }
    hasAccessFor(roles: Array<string>, currentRoles) {
      return !_.isEmpty(_.intersection(roles, currentRoles || []));
    }
    shouldContentBeVisible(content, programDetails, currentNominationStatus?, currentRoles?) {
      const sourcingInstance = this.programsService.ifSourcingInstance() ? true : false;
      if (sourcingInstance) {
        const isSourcingOrgReviewer = this.userService.isSourcingOrgReviewer(programDetails);
        if (isSourcingOrgReviewer && (content.status === 'Live'|| (content.prevStatus === 'Live' && content.status === 'Draft' ))) {
          return true;
        } else {
          return false;
        }
      } else {
        const hasAccessForContributor =  this.hasAccessFor(['CONTRIBUTOR'], currentRoles);
        const hasAccessForReviewer =  this.hasAccessFor(['REVIEWER'], currentRoles);
        const hasAccessForBoth =  hasAccessForContributor && hasAccessForReviewer;
        const currentUserID = this.userService.userid;
        const contributingOrgAdmin = this.userService.isContributingOrgAdmin();
        const myOrgId = (this.userService.userRegistryData
          && this.userService.userProfile.userRegData
          && this.userService.userProfile.userRegData.User_Org
          && this.userService.userProfile.userRegData.User_Org.orgId) ? this.userService.userProfile.userRegData.User_Org.orgId : '';
        if ((currentNominationStatus && _.includes(['Approved', 'Rejected'], currentNominationStatus))
          && content.sampleContent === true) {
          return false;
        // tslint:disable-next-line:max-line-length
        } else if (hasAccessForBoth) {
          if (( (_.includes(['Review', 'Live'], content.status) || (content.prevStatus === 'Live' && content.status === 'Draft' ) || (content.prevStatus === 'Review' && content.status === 'Draft' )) && currentUserID !== content.createdBy && content.organisationId === myOrgId) || currentUserID === content.createdBy) {
            return true;
          } else if (content.status === 'Live' && content.sourceURL) {
            return true;
          }
        } else if (hasAccessForReviewer && (content.status === 'Review' || content.status === 'Live' || (content.prevStatus === 'Review' && content.status === 'Draft' ) || (content.prevStatus === 'Live' && content.status === 'Draft' ))
        && currentUserID !== content.createdBy
        && content.organisationId === myOrgId) {
          return true;
        } else if (hasAccessForContributor && currentUserID === content.createdBy) {
          return true;
        } else if (contributingOrgAdmin && content.organisationId === myOrgId) {
          return true;
        } else if (content.status === 'Live' && content.sourceURL) {
          return true;
        }
        return false;
      }
    }
    checkSourcingStatus(content, programDetails) {
      if (programDetails.acceptedcontents  &&
           _.includes(programDetails.acceptedcontents || [], content.identifier)) {
              return 'Approved';
        } else if (programDetails.rejectedcontents  &&
                _.includes(programDetails.rejectedcontents || [], content.identifier)) {
              return 'Rejected';
        } else if (content.status === 'Draft' && content.prevStatus === 'Live') {
              return 'PendingForCorrections';
        } else {
          return null;
        }
    }
    getContentDisplayStatus(content) {
      const resourceStatus = content.status;
      const sourcingStatus = content.sourcingStatus;
      const prevStatus = content.prevStatus;
      let resourceStatusText,resourceStatusClass;
      if (resourceStatus === 'Review') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.reviewInProgress;
        resourceStatusClass = 'sb-color-primary';
      } else if (resourceStatus === 'Draft' && prevStatus === 'Review') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.notAccepted;
        resourceStatusClass = 'sb-color-error';
      } else if (resourceStatus === 'Draft' && prevStatus === 'Live') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.correctionsPending;
        resourceStatusClass = 'sb-color-primary';
      } else if (resourceStatus === 'Live' && _.isEmpty(sourcingStatus)) {
        resourceStatusText = this.resourceService.frmelmnts.lbl.approvalPending;
        resourceStatusClass = 'sb-color-warning';
      } else if ( sourcingStatus=== 'Rejected') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.rejected;
        resourceStatusClass = 'sb-color-error';
      } else if (sourcingStatus === 'Approved') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.approved;
        resourceStatusClass = 'sb-color-success';
      } else if (resourceStatus === 'Failed') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.failed;
        resourceStatusClass = 'sb-color-error';
      } else if (resourceStatus === 'Processing') {
        resourceStatusText = this.resourceService.frmelmnts.lbl.processing;
        resourceStatusClass = '';
      } else {
        resourceStatusText = resourceStatus;
        resourceStatusClass = 'sb-color-gray-400';
      }
      return [resourceStatusText, resourceStatusClass];
    }
}

results matching ""

    No results matching ""