- /**
- Campaign selector, class extends Backbone > View and used to select a campaign or create a new one
- @class CampaignSelectorView
- @constructor
- @return {Object} instantiated CampaignSelectorView
- **/
- define(['jquery', 'backbone', 'simplestorage', 'ResourcesListView'], function ($, Backbone, simplestorage, ResourcesListView) {
-
- BB.CONSTS.SEQUENCER_MODE = '0';
- BB.CONSTS.SCHEDULER_MODE = '1';
- /**
- Custom event fired when we need to refresh the campaign list
- @event LOAD_CAMPAIGN_LIST
- @param {This} caller
- @param {Self} context caller
- @param {Event} rss link
- @static
- @final
- **/
- BB.EVENTS.LOAD_CAMPAIGN_LIST = 'LOAD_CAMPAIGN_LIST';
-
- /**
- Custom event fired when a going back to campaign is selected
- @event CAMPAIGN_SELECTED
- @param {This} caller
- @param {Self} context caller
- @param {Event}
- @static
- @final
- **/
- BB.EVENTS.CAMPAIGN_SELECTED = 'CAMPAIGN_SELECTED';
-
- BB.SERVICES.CAMPAIGN_SELECTOR = 'CampaignSelector';
-
- var CampaignSelectorView = BB.View.extend({
-
- /**
- Constructor
- @method initialize
- **/
- initialize: function () {
- var self = this;
- self.m_selectedCampaignID = -1;
- self.m_disabled = true;
- self.m_campainProperties = new BB.View({
- el: Elements.CAMPAIGN_PROPERTIES
- });
- self.m_propertiesPanel = BB.comBroker.getService(BB.SERVICES.PROPERTIES_VIEW);
- self.m_propertiesPanel.addView(this.m_campainProperties);
- self.MIN_WIDTH_WIZARD = 1200;
- self.MIN_HIGHT_WIZARD = 700;
- self._loadCampaignList();
- self._listenAddRemoveCampaign();
- self._listenCampaignModeSelect();
- self._listenWizardStart();
- self._checkFirstTimeUser();
- },
-
- /**
- Enable this component, i.e.: allow clicking of campaign list selection and set
- the storage firstwizard so it no longer auto pops up
- @method _enableComponent
- **/
- _enableComponent: function () {
- var self = this;
- simplestorage.set('firstwizard', 2);
- $(Elements.CAMPAIGN_SELECTOR).animate({opacity: 1});
- $('button', self.$el).attr('disabled', false);
- self.m_disabled = false;
- },
-
- /**
- Listen to kick off of wizard button
- @method _listenWizardStart
- **/
- _listenWizardStart: function () {
- var self = this;
- $(Elements.GET_WIZARD_HELP).on('click', function () {
- $(Elements.GET_WIZARD_HELP).fadeOut('slow');
- var w = BB.comBroker.getService(BB.SERVICES.LAYOUT_ROUTER).getAppWidth();
- var h = BB.comBroker.getService(BB.SERVICES.LAYOUT_ROUTER).getAppHeight();
- if (w < self.MIN_WIDTH_WIZARD || h < self.MIN_HIGHT_WIZARD) {
- bootbox.alert($(Elements.MSG_BOOTBOX_BROWSER_TOO_SMALL).text());
- return;
- }
- $(Elements.LIVE_TUTORIAL).trigger('click');
- });
- },
-
- /**
- For first time users launch wizard
- @method _checkFirstTimeUser
- **/
- _checkFirstTimeUser: function () {
- var self = this;
-
- // disable wizard
- //self._enableComponent();
- //return;
-
- var firstwizard = simplestorage.get('firstwizard');
- firstwizard = _.isUndefined(firstwizard) ? 1 : firstwizard;
- if (firstwizard > 1) {
- self._enableComponent();
- } else {
- self._autoStartWizard();
- }
- },
-
- /**
- Auto kick start the Wizard, but only if app WxH is sufficient
- @method _autoStartWizard
- **/
- _autoStartWizard: function () {
- var self = this;
- var w = BB.comBroker.getService(BB.SERVICES.LAYOUT_ROUTER).getAppWidth();
- var h = BB.comBroker.getService(BB.SERVICES.LAYOUT_ROUTER).getAppHeight();
- if (w < self.MIN_WIDTH_WIZARD || h < self.MIN_HIGHT_WIZARD) {
- self._enableComponent();
- return;
- }
- $(Elements.GET_WIZARD_HELP).fadeOut('slow');
- setTimeout(function () {
- BB.comBroker.fire(BB.EVENTS.CAMPAIGN_LIST_LOADING, this, this);
- }, 1000);
- setTimeout(function () {
- self._enableComponent();
- }, 3000);
- },
-
- /**
- Listen to changes in campaign playback mode
- @method _listenCampaignModeSelect
- **/
- _listenCampaignModeSelect: function () {
- var self = this;
- $(Elements.CLASS_CAMPAIGN_PLAY_MODE).on('click', function (e) {
- if ($(e.target).is('span'))
- e.target = $(e.target).closest('button');
-
- switch ($(e.target).attr('name')) {
- case 'campaignModeSequencer':
- {
- self._populateCampaignMode(0);
- pepper.setCampaignRecord(self.m_selectedCampaignID, 'campaign_playlist_mode', '0');
- break;
- }
- case 'campaignModeScheduler':
- {
- self._populateCampaignMode(1);
- pepper.setCampaignRecord(self.m_selectedCampaignID, 'campaign_playlist_mode', '1');
- pepper.checkAndCreateCampaignTimelineScheduler(self.m_selectedCampaignID);
- break;
- }
- }
- });
- },
-
- /**
- Load the campaign's play mode (scheduler /sequencer)
- @method _populateCampaignMode();
- **/
- _populateCampaignMode: function (i_mode) {
- var self = this;
- var mode = String(i_mode);
- switch (mode) {
- case BB.CONSTS.SEQUENCER_MODE:
- {
- $(Elements.CAMPAIGN_MODE_SCHEDULER).fadeTo('fast', 0.4);
- $(Elements.CAMPAIGN_MODE_SEQUENCER).fadeTo('fast', 1);
- $(Elements.CAMPAIGN_MODE_HEADER).text($(Elements.CAMPAIGN_MODE_HEADER_SEQ).text());
- $(Elements.CAMPAIGN_MODE_DESCRIPTION).text($(Elements.CAMPAIGN_MODE_SEQ).text());
- break;
- }
- case BB.CONSTS.SCHEDULER_MODE:
- {
- $(Elements.CAMPAIGN_MODE_SCHEDULER).fadeTo('fast', 1);
- $(Elements.CAMPAIGN_MODE_SEQUENCER).fadeTo('fast', 0.4);
- $(Elements.CAMPAIGN_MODE_HEADER).text($(Elements.CAMPAIGN_MODE_HEADER_SCHED).text());
- $(Elements.CAMPAIGN_MODE_DESCRIPTION).text($(Elements.CAMPAIGN_MODE_SCHED).text());
- break;
- }
- }
- },
-
- /**
- Wire the UI including new campaign creation and delete existing campaign
- @method _listenAddRemoveCampaign
- **/
- _listenAddRemoveCampaign: function () {
- var self = this;
-
- $(Elements.NEW_CAMPAIGN).on('click', function (e) {
- if (self.m_disabled)
- return;
- self.m_selectedCampaignID = -1;
- BB.comBroker.fire(BB.EVENTS.CAMPAIGN_SELECTED, this, this, self.m_selectedCampaignID);
- self.options.stackView.slideToPage(self.options.to, 'right');
- return false;
- });
-
- $(Elements.REMOVE_CAMPAIGN).on('click', function (e) {
- if (self.m_disabled)
- return;
- if (self.m_selectedCampaignID != -1) {
- var selectedElement = self.$el.find('[data-campaignid="' + self.m_selectedCampaignID + '"]');
- var allCampaignIDs = pepper.getStationCampaignIDs();
- if (_.indexOf(allCampaignIDs, self.m_selectedCampaignID) == -1) {
- bootbox.confirm($(Elements.MSG_BOOTBOX_SURE_DELETE_CAMPAIGN).text(), function (result) {
- if (result == true) {
- selectedElement.remove();
- self._removeCampaignFromMSDB(self.m_selectedCampaignID);
- }
- });
- } else {
- bootbox.alert($(Elements.MSG_BOOTBOX_CANT_DELETE_COMP).text());
- return false;
- }
- } else {
- bootbox.alert($(Elements.MSG_BOOTBOX_SELECT_COMP_FIRST).text());
- return false;
- }
- });
- },
-
- /**
- Listen for when to refresh the campaign list (new campaign was created)
- @method _listenLoadCampaignList
- @return none
- **/
- _listenLoadCampaignList: function () {
- var self = this;
- BB.comBroker.listen(BB.EVENTS.LOAD_CAMPAIGN_LIST, function (e) {
- self._loadCampaignList();
- });
- },
-
- /**
- Populate the LI with all available campaigns from msdb
- @method _loadCampaignList
- @return none
- **/
- _loadCampaignList: function () {
- var self = this;
- self.m_selected_resource_id = undefined;
- $(Elements.CAMPAIGN_SELECTOR_LIST).empty();
- var campaignIDs = pepper.getCampaignIDs();
- for (var i = 0; i < campaignIDs.length; i++) {
- var campaignID = campaignIDs[i];
- var recCampaign = pepper.getCampaignRecord(campaignID);
- var playListMode = recCampaign['campaign_playlist_mode'] == 0 ? 'sequencer' : 'scheduler';
-
- var snippet = '<a href="#" class="' + BB.lib.unclass(Elements.CLASS_CAMPIGN_LIST_ITEM) + ' list-group-item" data-campaignid="' + campaignID + '">' +
- '<h4>' + recCampaign['campaign_name'] + '</h4>' +
- '<p class="list-group-item-text">play list mode:' + playListMode + '</p>' +
- '<div class="openProps">' +
- '<button type="button" class="' + BB.lib.unclass(Elements.CLASS_OPEN_PROPS_BUTTON) + ' btn btn-default btn-sm"><i style="font-size: 1.5em" class="fa fa-gear"></i></button>' +
- '</div>' +
- '</a>';
- $(Elements.CAMPAIGN_SELECTOR_LIST).append($(snippet));
- }
-
- this._listenOpenProps();
- this._listenSelectCampaign();
- this._listenInputChange();
- this._listenLoadCampaignList();
- },
-
- /**
- Listen select campaign
- @method _listenSelectCampaign
- @return none
- **/
- _listenSelectCampaign: function () {
- var self = this;
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).on('click', function (e) {
- if (self.m_disabled)
- return;
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).removeClass('active');
- $(this).addClass('active');
- self.m_selectedCampaignID = $(this).data('campaignid');
- BB.comBroker.fire(BB.EVENTS.CAMPAIGN_SELECTED, this, this, self.m_selectedCampaignID);
- self.options.stackView.slideToPage(Elements.CAMPAIGN, 'right');
- return false;
- });
- },
-
- /**
- Listen for user trigger on campaign selection and populate the properties panel
- @method _listenOpenProps
- @return none
- **/
- _listenOpenProps: function () {
- var self = this;
- $(Elements.CLASS_OPEN_PROPS_BUTTON, self.el).on('click', function (e) {
- if (self.m_disabled)
- return;
- $(Elements.CLASS_CAMPIGN_LIST_ITEM, self.el).removeClass('active');
- var elem = $(e.target).closest('a').addClass('active');
- self.m_selectedCampaignID = $(elem).data('campaignid');
- var recCampaign = pepper.getCampaignRecord(self.m_selectedCampaignID);
- self._populateCampaignMode(recCampaign.campaign_playlist_mode);
- $(Elements.FORM_CAMPAIGN_NAME).val(recCampaign['campaign_name']);
- self.m_propertiesPanel.selectView(self.m_campainProperties);
- self.m_propertiesPanel.openPropertiesPanel();
- return false;
- });
- },
-
- /**
- Remove an entire campaign including its timelines, channels, blocks, template, board etc
- @method removeCampaign
- @return none
- **/
- _removeCampaignFromMSDB: function (i_campaign_id) {
- var self = this;
-
- var timelineIDs = pepper.getCampaignTimelines(i_campaign_id);
-
- for (var i = 0; i < timelineIDs.length; i++) {
- var timelineID = timelineIDs[i];
- var boardTemplateID = pepper.getGlobalTemplateIdOfTimeline(timelineID);
- pepper.removeTimelineFromCampaign(timelineID);
- var campaignTimelineBoardTemplateID = pepper.removeBoardTemplateFromTimeline(timelineID);
- pepper.removeTimelineBoardViewerChannels(campaignTimelineBoardTemplateID);
- pepper.removeBoardTemplate(boardTemplateID);
- pepper.removeBoardTemplateViewers(boardTemplateID);
- pepper.removeTimelineFromSequences(timelineID);
- pepper.removeSchedulerFromTime(timelineID);
-
- var channelsIDs = pepper.getChannelsOfTimeline(timelineID);
- for (var n = 0; n < channelsIDs.length; n++) {
- var channelID = channelsIDs[n];
- pepper.removeChannelFromTimeline(channelID);
-
- var blockIDs = pepper.getChannelBlocks(channelID);
- for (var x = 0; x < blockIDs.length; x++) {
- var blockID = blockIDs[x];
- pepper.removeBlockFromTimelineChannel(blockID);
- }
- }
- }
- pepper.removeCampaign(i_campaign_id);
- pepper.removeCampaignBoard(i_campaign_id);
-
- // check to see if any other campaigns are left, do some clean house and remove all campaign > boards
- var campaignIDs = pepper.getCampaignIDs();
- if (campaignIDs.length == 0)
- pepper.removeAllBoards();
- self.m_selectedCampaignID = -1;
- self.m_propertiesPanel.selectView(Elements.DASHBOARD_PROPERTIES);
- },
-
- /**
- Wire changing of campaign name through campaign properties
- @method _listenInputChange
- @return none
- **/
- _listenInputChange: function () {
- var self = this;
- var onChange = _.debounce(function (e) {
- if (self.m_selectedCampaignID == -1)
- return;
- var text = $(e.target).val();
- if (BB.lib.isEmpty(text))
- return;
- text = BB.lib.cleanProbCharacters(text, 1);
- pepper.setCampaignRecord(self.m_selectedCampaignID, 'campaign_name', text);
- self.$el.find('[data-campaignid="' + self.m_selectedCampaignID + '"]').find('h4').text(text);
- }, 333, false);
- $(Elements.FORM_CAMPAIGN_NAME).on("input", onChange);
- },
-
- /**
- Get selected campaign id
- @method getSelectedCampaign
- @return {Number} campaign_id
- **/
- getSelectedCampaign: function () {
- return this.m_selectedCampaignID;
- },
-
- /**
- Set selected campaign id
- @method setSelectedCampaign
- **/
- setSelectedCampaign: function (i_campaign_id) {
- var self = this;
- self.m_selectedCampaignID = i_campaign_id;
- self._loadCampaignList();
- }
- });
-
- return CampaignSelectorView;
-
- });
-
-
-