@project-sunbird/content-player
Version:
Which renders the contents in both web and devices
287 lines (265 loc) • 13.6 kB
JavaScript
/**
* User switcher controller
* @author Gourav More <gourav_m@tekditechnologies.com> Akash Gupta <akash.gupta@tarento.com>
*/
app.controllerProvider.register('SunbirdUserSwitchController', ['$scope','$rootScope','$state','$stateParams',function($scope, $rootScope, $state, $stateParams) {
$scope.selectedUser = {};
$scope.json = {};
$scope.playButton = 'Replay';
$scope.showSunbirdUserSwitchModal = false;
$scope.pluginInstance = {};
$scope.appContext = EkstepRendererAPI.getGlobalConfig().appContext;
$scope.hideUserSwitchingModal = function() {
$rootScope.safeApply(function() {
EkstepRendererAPI.removeEventListener(EkstepRendererEvents['renderer:device:back'], $scope.hideUserSwitchingModal, $scope);
$scope.showSunbirdUserSwitchModal = false;
});
}
$scope.showUserSwitchingModal = function() {
if ($scope.showSunbirdUserSwitchModal)
return;
TelemetryService.interact("TOUCH", "gc_sb_userswitch_popup_open", "TOUCH", {
stageId: EkstepRendererAPI.getCurrentStageId()? EkstepRendererAPI.getCurrentStageId() : $rootScope.pageId
},$scope.TelemetryEvent.interact);
EkstepRendererAPI.addEventListener(EkstepRendererEvents['renderer:device:back'], $scope.hideUserSwitchingModal, $scope);
_.each($rootScope.users, function(user) {
if (user.selected === true)
user.selected = false;
if (user.uid === $rootScope.currentUser.uid)
user.selected = true;
}
);
$scope.playButton = 'Replay';
$scope.sortUserlist();
$rootScope.safeApply(function() {
$scope.showSunbirdUserSwitchModal = true;
});
}
$scope.getUsersList = function() {
org.ekstep.service.content.getAllUserProfile($scope.appContext).then(function(usersData) {
$rootScope.users = usersData;
if ($rootScope.users.length == 0)
$rootScope.users.push($rootScope.currentUser);
$scope.sortUserlist();
}).catch(function(err) {
console.error(err);
});
}
$scope.sortUserlist = function() {
$rootScope.users = _.sortBy(_.sortBy($rootScope.users, 'handle'), 'userIndex');
}
// this function changes the selected user
$scope.selectUser = function(selectedUser) {
// here the user Selection is happening
_.each($rootScope.users, function(user) {
if (user.selected === true)
user.selected = false;
}
);
TelemetryService.interact("TOUCH", selectedUser.uid, "TOUCH", {
stageId: EkstepRendererAPI.getCurrentStageId() ? EkstepRendererAPI.getCurrentStageId() : $rootScope.pageId
}, $scope.TelemetryEvent.interact);
selectedUser.selected = true;
$scope.selectedUser = selectedUser;
$scope.playButton = 'Play';
}
// When the user clicks on replayContent, replayContent the content
$scope.replayContent = function() {
var replayContent = true;
TelemetryService.interact("TOUCH", 'gc_sb_userswitch_replayContent', "TOUCH", {
stageId: EkstepRendererAPI.getCurrentStageId() ? EkstepRendererAPI.getCurrentStageId() : $rootScope.pageId
}, $scope.TelemetryEvent.interact);
if (_.isEmpty($scope.selectedUser)) {
EkstepRendererAPI.dispatchEvent('renderer:content:close');
EkstepRendererAPI.dispatchEvent('renderer:content:replay');
$scope.closeUserSwitchingModal(false);
EkstepRendererAPI.hideEndPage();
} else {
$scope.switchUser(replayContent);
}
}
$scope.switchUser = function(replayContent) {
var userSwitchHappened;
if (!_.isEmpty($scope.selectedUser)) {
userSwitchHappened = true;
org.ekstep.service.content.setUser($scope.selectedUser.uid).then(function(data) {
$rootScope.$apply(function() {
$rootScope.currentUser = $scope.selectedUser;
$rootScope.currentUser.userIndex = $rootScope.sortingIndex -= 1;
$scope.selectedUser = {};
if (userSwitchHappened) {
var version = TelemetryService.getGameVer();
var gameId = TelemetryService.getGameId();
if (replayContent == true) {
var data = {
'callback': $scope.replayCallback
};
if (_.isUndefined($scope.TelemetryEvent.logGEEvent)) {
TelemetryService.interrupt("SWITCH", EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId);
}
EkstepRendererAPI.dispatchEvent('renderer:content:close', undefined, data);
} else {
if (_.isUndefined($scope.TelemetryEvent.logGEEvent)) {
TelemetryService.interrupt("SWITCH", EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId);
}
EkstepRendererAPI.dispatchEvent('renderer:telemetry:end');
TelemetryService.setUser($rootScope.currentUser, EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId, $scope.TelemetryEvent.interact);
if (EkstepRendererAPI.getCurrentStageId()) { // If stage id is not available that means user is on Endpage.
var data = {};
data.stageid = EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId;
data.mode = getPreviewMode();
TelemetryService.start(gameId, version, data);
}
}
}
});
}).catch(function(err) {
console.log(err);
})
}
$scope.closeUserSwitchingModal(false);
}
$scope.replayCallback = function() {
TelemetryService.setUser($rootScope.currentUser, EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId, $scope.TelemetryEvent.interact);
$scope.hideUserSwitchingModal();
EkstepRendererAPI.dispatchEvent('renderer:endpage:hide');
EkstepRendererAPI.dispatchEvent('renderer:content:replay');
}
$scope.closeUserSwitchingModal = function(logTelemetry) {
if (logTelemetry) {
TelemetryService.interact("TOUCH", "gc_sb_userswitch_popup_close", "TOUCH", {
stageId: EkstepRendererAPI.getCurrentStageId()
? EkstepRendererAPI.getCurrentStageId()
: $rootScope.pageId
}, $scope.TelemetryEvent.interact);
}
$scope.hideUserSwitchingModal();
}
$scope.initializeCtrl = function() {
var globalConfig = EkstepRendererAPI.getGlobalConfig();
$rootScope.showUser = globalConfig.overlay.showUser;
$rootScope.enableUserSwitcher = globalConfig.overlay.enableUserSwitcher;
$scope.pluginInstance = EkstepRendererAPI.getPluginObjs("org.sunbird.player.userswitcher");
var pluginManifest = $scope.pluginInstance._manifest;
$scope.closeIcon = EkstepRendererAPI.resolvePluginResource(pluginManifest.id, pluginManifest.ver, "renderer/assets/Grey_close.png");
$scope.checkMarkIcon = EkstepRendererAPI.resolvePluginResource(pluginManifest.id, pluginManifest.ver, "renderer/assets/checkmark.png");
EventBus.addEventListener("event:showUser", function(value) {
$rootScope.showUser = value.target;
});
EventBus.addEventListener("event:openUserSwitchingModal", function(data) {
$scope.TelemetryEvent = {};
if (data && data.target && data.target.logGEEvent) {
$scope.TelemetryEvent = {
'interact': 'GE_INTERACT',
'logGEEvent': true
};
}
$scope.showUserSwitchingModal();
});
/**
* event:getcurrentuser Event to get the current user being playing the content.
* @event event:getcurrentuser
* @listen event:getcurrentuser
* @memberOf EkstepRendererEvents
*/
EventBus.addEventListener("event:getcurrentuser", function() {
$scope.currentUser = $rootScope.currentUser;
});
/**
* event:getuserlist Event to get the user list.
* @event event:getuserlist
* @listen event:getuserlist
* @memberOf EkstepRendererEvents
*/
EventBus.addEventListener("event:getuserlist", function() {
userList = $rootScope.users;
});
/**
* event:showuser Event to show the user icon.
* @event event:showuser
* @listen event:showuser
* @memberOf EkstepRendererEvents
*/
EventBus.addEventListener("event:showuser", function(value) {
$rootScope.safeApply = function() {
$rootScope.showUser = value;
}
});
/**
* event:enableUserSwitcher Event to enable the userswitcher.
* @event event:enableUserSwitcher
* @listen event:enableUserSwitcher
* @memberOf EkstepRendererEvents
*/
EventBus.addEventListener("event:enableUserSwitcher", function(value) {
$rootScope.safeApply = function() {
$rootScope.enableUserSwitcher = value.target;
}
});
if (_.isUndefined($rootScope.currentUser)) {
org.ekstep.service.content.getCurrentUser().then(function(data) {
if (_.isEmpty(data.handle)) {
data.handle = "Anonymous";
data.grade = ["Class 0"];
}
$rootScope.currentUser = data;
$rootScope.currentUser.selected = true;
$scope.getUsersList();
$rootScope.safeApply();
}).catch(function(err) {
console.log(err);
})
} else {
$scope.getUsersList();
$rootScope.safeApply();
}
}
}
]);
app.compileProvider.directive('sunbirdUserswitcher', function($rootScope, $compile) {
return {
restrict: 'E',
controller: 'SunbirdUserSwitchController',
template: "<div ng-include='getUserSwitcherTemplate()' ></div>",
link: function(scope, element, attrs, controller) {
scope.initializeUser = function(evt, cityName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(cityName).style.display = "block";
evt.currentTarget.className += " active";
}
scope.init = function() {
scope.initializeCtrl();
var users = document.getElementById('usersButton');
scope.initializeUser({currentTarget: users}, 'users');
scope.safeApply();
};
scope.getUserSwitcherTemplate = function() {
var userSwitcherPluginInstance = EkstepRendererAPI.getPluginObjs("org.sunbird.player.userswitcher");
var config = EkstepRendererAPI.getGlobalConfig();
// if (!config.isCorePluginsPackaged) {
return userSwitcherPluginInstance._templatePath;
// } else {
// return 'sunbirdUserSwitch.html';
// }
}
}
}
});