(function () { "use strict"; angular.module('shared') .provider('targetedResource', [ function targetedResourceProvider() { var resourceCache = {}; var resourceInfoByTranslation = {}; return { "$get": ['$q', 'serverTargetedResource', '_', 'FeatureCheck', targetedResourceFactory], setResourceInfoByTranslation: setResourceInfoByTranslation }; function targetedResourceFactory($q, serverTargetedResource, _, FeatureCheck) { var factory = this; factory.getResourceInfo = getResourceInfo; factory.getScienceMaterialResourceInfo = getScienceMaterialResourceInfo; factory.getResourceInfoByTranslation = getResourceInfoByTranslation; return factory; function getResourceInfoByTranslation() { return resourceInfoByTranslation; } function getResourceInfo(action, resourceId, translationId, bookroomCollectionId, title) { var key = action + '-' + resourceId + '-' + translationId; if (resourceCache[key]) { return $q.when(resourceCache[key]); } else if (action == 'getAssessment') { resourceCache[key] = getAssessment(resourceId, title); return $q.when(resourceCache[key]); } else { return serverTargetedResource.getResourceInfo(action, resourceId, translationId) .then(function (result) { return resourceCache[key] = getTargetedResource(result, translationId, bookroomCollectionId, title, resourceId); }) } } function getScienceMaterialResourceInfo(minimumMaterialId, unitId, materialTypeId, materialId, scienceCategoryId, languageId) { var key = [minimumMaterialId, unitId, materialTypeId, materialId, scienceCategoryId, languageId].join('-'); if(resourceCache[key]) { return $q.when(resourceCache[key]); } else { return serverTargetedResource.getScienceMaterialResourceInfo(minimumMaterialId, unitId, materialTypeId, materialId, scienceCategoryId, languageId) .then(function(result) { return resourceCache[key] = getTargetedResources(result); }); } } function getAssessment(resourceId, title) { return { resource_type: 'assessment', resources: [{kids_book_id: resourceId}], activities: [], title: title } } function getTargetedResources(result) { var targetedResources = {}; Object.keys(result).forEach(function(key) { targetedResources[key] = getTargetedResource({ key: result[key] }); }); return targetedResources; } function getTargetedResource(serverTargetedResource, translationId, bookroomCollectionId, title, resourceId) { var resourcesAndActivities = _.reduce(serverTargetedResource, function (memo, value, index) { var resource = reduceResource(value, index); memo.resources.push(resource); memo.activities = _.union(memo.activities, resource.activities); return memo; }, { resources: [], activities: [] }); var targetedResource = { resource_type: 'collection', bookroom_collection_id: bookroomCollectionId, translation_id: translationId, resources: _.sortBy(resourcesAndActivities.resources, 'index') }; if (title && title != "") { targetedResource.title = title; } else if (targetedResource.resources.length == 1) { targetedResource.title = targetedResource.resources[0].title; } targetedResource.activities = [ { activity_name: 'listen', display_name: 'Listen', activities: ['listen'] }, { activity_name: 'read', display_name: 'Read', activities: ['read'] }, { activity_name: 'quiz', display_name: 'Quiz', activities: ['quiz', 'formative_worksheet'] }, { activity_name: 'worksheet', display_name: 'Interactivity', activities: ['worksheet'] }, { activity_name: 'watch', display_name: 'Watch', activities: ['watch'] }, { activity_name: 'interactive_lesson', display_name: 'Interactive Lesson', activities: ['interactive_lesson'] }, { activity_name: 'interactive_component', display_name: 'Interactive Component', activities: ['interactive_component'] } ].filter(function (activityObj) { if (activityObj.activities.filter(function (activity) { return _.contains(resourcesAndActivities.activities, activity); }).length) { return true; } }); if (resourceId !== undefined) { targetedResource['resourceId'] = resourceId; } return targetedResource; function reduceResource(resource, kids_book_id) { resource.kids_book_id = kids_book_id; if(resource.resource_deployment_ids) { resource.activities = _.keys(resource.resource_deployment_ids); } else { resource.activities = []; if(resource.readResourceDeploymentId) { resource.activities.push('read'); } if(resource.listenResourceDeploymentId) { resource.activities.push('listen'); } if(resource.quizResourceDeploymentId) { resource.activities.push('quiz'); } if(resource.watchResourceDeploymentId) { resource.activities.push('watch'); } if(resource.interactiveLessonResourceDeploymentId) { resource.activities.push('interactive_lesson'); } if(resource.interactiveComponentResourceDeploymentId) { resource.activities.push('interactive_component'); } } return resource; } } } function setResourceInfoByTranslation(resources) { resourceInfoByTranslation = resources; } }]); })();