APIs

Show:
  1. /**
  2. Pepper SDK is a collection of files that provide a wrapper for the Soap API used to communicate with MediaSignage servers.
  3. The SDK makes programming easier by abstracting some of the tedious tasks such as enumeration.
  4.  
  5. The msdb internal Database is the magic sauce as it maps against the actual mediaSERVER remote database via
  6. local generated handles (a.k.a IDs). Once a user saves the local configuration, the local Database is serialized
  7. and pushed onto the a remote mediaSERVER. This allows for the user to work offline without the need for constant network
  8. communication until a save is initiated.
  9.  
  10. The internal database is referenced as msdb in both code and documentation.
  11.  
  12. Library requirements:
  13. composition: x2js, jQuery
  14. inheritance: ComBroker
  15.  
  16. @class Pepper
  17. @constructor
  18. @return {Object} Pepper instance
  19. **/
  20. function Pepper() {
  21. this.m_user = undefined;
  22. this.m_pass = undefined;
  23. this.m_msdb = undefined;
  24. this.m_loaderManager = undefined;
  25. };
  26.  
  27. /**
  28. Custom event fired when a total timeline length (i.e.: channel content within specified timeline) has changed
  29. @event Pepper.TIMELINE_LENGTH_CHANGED
  30. @param {This} caller
  31. @param {Event}
  32. @static
  33. @final
  34. **/
  35. Pepper.SCENE_CREATED = 'SCENE_CREATED';
  36.  
  37. /**
  38. Custom event fired when a block is removed from a timeline channel
  39. @event Pepper.REMOVE_TIMELINE_CHANNEL_BLOCK
  40. @param {This} caller
  41. @param {Event}
  42. @static
  43. @final
  44. **/
  45. Pepper.REMOVE_TIMELINE_CHANNEL_BLOCK = 'REMOVE_TIMELINE_CHANNEL_BLOCK';
  46.  
  47. /**
  48. Custom event fired when saving to server
  49. @event Pepper.SAVE_TO_SERVER
  50. @param {This} caller
  51. @param {Event}
  52. @static
  53. @final
  54. **/
  55. Pepper.SAVE_TO_SERVER = 'SAVE_TO_SERVER';
  56.  
  57.  
  58. /**
  59. Custom event fired when a total timeline length (i.e.: channel content within specified timeline) has changed
  60. @event Pepper.TIMELINE_LENGTH_CHANGED
  61. @param {This} caller
  62. @param {Event}
  63. @static
  64. @final
  65. **/
  66. Pepper.TIMELINE_LENGTH_CHANGED = 'TIMELINE_LENGTH_CHANGED';
  67.  
  68. /**
  69. Custom event fired when a total timeline length (i.e.: channel content within specified timeline) has changed
  70. @event Pepper.TIMELINE_LENGTH_CHANGED
  71. @param {This} caller
  72. @param {Event}
  73. @static
  74. @final
  75. **/
  76. Pepper.TEMPLATE_VIEWER_EDITED = 'TEMPLATE_VIEWER_EDITED';
  77.  
  78. /**
  79. Custom event fired when a timeline is removed from campaign
  80. @event Pepper.TIMELINE_DELETED
  81. @param {This} caller
  82. @param {Event}
  83. @static
  84. @final
  85. **/
  86. Pepper.TIMELINE_DELETED = 'TIMELINE_DELETED';
  87.  
  88. /**
  89. Custom event fired when a scheduale removed from timeline
  90. @event Pepper.TIMELINE_SCHEDULE_DELETED
  91. @param {This} caller
  92. @param {Event}
  93. @static
  94. @final
  95. **/
  96. Pepper.TIMELINE_SCHEDULE_DELETED = 'TIMELINE_SCHEDULE_DELETED';
  97.  
  98. /**
  99. Custom event fired when a new player (aka block) was created
  100. @event Pepper.NEW_PLAYER_CREATED
  101. @param {This} caller
  102. @param {Event}
  103. @static
  104. @final
  105. **/
  106. Pepper.NEW_PLAYER_CREATED = 'NEW_PLAYER_CREATED';
  107.  
  108. /**
  109. Custom event fired when a new campaign was created
  110. @event Pepper.NEW_CAMPAIGN_CREATED
  111. @param {This} caller
  112. @param {Event}
  113. @static
  114. @final
  115. **/
  116. Pepper.NEW_CAMPAIGN_CREATED = 'NEW_CAMPAIGN_CREATED';
  117.  
  118. /**
  119. Custom event fired when a new template (aka screen division layout in global) was created
  120. @event Pepper.NEW_TEMPLATE_CREATED
  121. @param {This} caller
  122. @param {Event}
  123. @static
  124. @final
  125. **/
  126. Pepper.NEW_TEMPLATE_CREATED = 'NEW_TEMPLATE_CREATED';
  127.  
  128.  
  129. /**
  130. Custom event fired when a new timeline was created
  131. @event Pepper.NEW_TIMELINE_CREATED
  132. @param {This} caller
  133. @param {Event}
  134. @static
  135. @final
  136. **/
  137. Pepper.NEW_TIMELINE_CREATED = 'NEW_TIMELINE_CREATED';
  138.  
  139. /**
  140. Custom event fired when a new channel was created
  141. @event Pepper.NEW_CHANNEL_CREATED
  142. @param {This} caller
  143. @param {Event}
  144. @static
  145. @final
  146. **/
  147. Pepper.NEW_CHANNEL_CREATED = 'NEW_CHANNEL_CREATED';
  148.  
  149. /**
  150. Custom event fired when a new channel is added to an existing timeline
  151. @event Pepper.NEW_CHANNEL_ADDED
  152. @param {This} caller
  153. @param {Event}
  154. @static
  155. @final
  156. **/
  157. Pepper.NEW_CHANNEL_ADDED = 'NEW_CHANNEL_ADDED';
  158.  
  159. /**
  160. Custom event fired when a block (ie Player on channel) changes it's total playback length
  161. @event Pepper.BLOCK_LENGTH_CHANGED
  162. @param {This} caller
  163. @param {Event}
  164. @static
  165. @final
  166. **/
  167. Pepper.BLOCK_LENGTH_CHANGED = 'BLOCK_LENGTH_CHANGED';
  168.  
  169. Pepper.prototype = {
  170. constructor: Pepper,
  171.  
  172. /**
  173. Authenticate through mediaSERVER
  174. @method dbConnect
  175. @param {String} i_user
  176. @param {String} i_pass
  177. @param {Function} i_callBack
  178. @return none
  179. **/
  180. dbConnect: function (i_user, i_pass, i_callBack) {
  181. var self = this;
  182. self.m_user = i_user;
  183. self.m_pass = i_pass;
  184. self.m_loaderManager = new LoaderManager();
  185. self.m_msdb = self.m_loaderManager['m_dataBaseManager'];
  186. self.m_loaderManager.create(self.m_user, self.m_pass, function (i_result) {
  187. if (i_result.status) {
  188. self.m_authenticated = true;
  189. self.m_domain = self.m_loaderManager['m_domain'];
  190. var resellerInfo = self.m_loaderManager['m_resellerInfo'];
  191. self.m_whiteLabel = parseInt($(resellerInfo).find('WhiteLabel').attr('enabled'));
  192. self.m_resellerId = parseInt($(resellerInfo).find('BusinessInfo').attr('businessId'));
  193. self.m_resellerName = $(resellerInfo).find('BusinessInfo').attr('name');
  194. self.m_businessID = self.m_loaderManager['m_businessId'];
  195. self.m_eri = self.m_loaderManager['m_eri'];
  196. self.m_authTime = Date.now();
  197. self.m_components = {};
  198.  
  199. // build list of allowed prime components
  200. var components = $(resellerInfo).find('InstalledApps').find('App');
  201. _.each(components, function (component) {
  202. if ($(component).attr('installed') == 1)
  203. self.m_components[$(component).attr('id')] = 1;
  204. });
  205. }
  206. i_callBack(i_result);
  207. });
  208. },
  209.  
  210. /**
  211. Return all authenticated user data
  212. @method getUserData
  213. @return {Object} reference to all user data
  214. **/
  215. getUserData: function () {
  216. var self = this;
  217. return {
  218. userName: self.m_user,
  219. userPass: self.m_pass,
  220. domain: self.m_domain,
  221. businessID: self.m_businessID,
  222. eri: self.m_eri,
  223. authTime: self.m_authTime,
  224. whiteLabel: self.m_whiteLabel,
  225. resellerName: self.m_resellerName,
  226. resellerID: self.m_resellerId,
  227. components: self.m_components
  228. };
  229. },
  230.  
  231. /**
  232. Returns a reference to the Pepper loader
  233. @method getLoader
  234. @return {Object} reference to loader
  235. **/
  236. getLoader: function () {
  237. var self = this;
  238. return self.m_loaderManager;
  239. },
  240.  
  241. /**
  242. Serialize the local msdb and push to remote server
  243. @method save
  244. @return none
  245. **/
  246. save: function (i_callback) {
  247. var self = this;
  248. self.m_loaderManager.save(i_callback);
  249. pepper.fire(Pepper.SAVE_TO_SERVER);
  250. },
  251.  
  252. /**
  253. Sync internal msdb to remote mediaSERVER account
  254. @method requestData
  255. @param {Function} i_callback
  256. **/
  257. sync: function (i_callBack) {
  258. var self = this;
  259. self.m_loaderManager.requestData(i_callBack);
  260. },
  261.  
  262. /**
  263. Get proof of play stats report
  264. @method getProofOfPlayStats
  265. @param {Function} i_callBack
  266. @param {Number} i_year
  267. @param {Number} i_playerData
  268. @return {Number} i_month clientId.
  269. **/
  270. getProofOfPlayStats: function (i_year, i_month, i_callBack) {
  271. var self = this;
  272. self.m_loaderManager.requestAdsReport(function (data) {
  273. var report = $(data.report).find('Report');
  274. i_callBack(report);
  275. }, i_year, i_month)
  276. },
  277.  
  278. /**
  279. Get list of all create account samples, both lite and pro
  280. @method getSampleList
  281. @param {Function} i_callBack
  282. **/
  283. getSampleList: function (i_callBack) {
  284. var url = window.g_protocol + window.g_masterDomain + '/WebService/getResellerTemplates.ashx?callback=?';
  285. $.getJSON(url, function (data) {
  286. i_callBack(data);
  287. });
  288. },
  289.  
  290. /**
  291. Push a command to remote station
  292. @method sendCommand
  293. @param {String} i_command
  294. @param {Number} i_stationId
  295. @param {Function} i_callBack
  296. **/
  297. sendCommand: function (i_command, i_stationId, i_callBack) {
  298. var url = window.g_protocol + pepper.getUserData().domain + '/WebService/sendCommand.ashx?i_user=' + pepper.getUserData().userName + '&i_password=' + pepper.getUserData().userPass + '&i_stationId=' + i_stationId + '&i_command=' + i_command + '&i_param1=' + 'SignageStudioLite' + '&i_param2=' + '&callback=?';
  299. console.log(url)
  300. $.getJSON(url, i_callBack);
  301. },
  302.  
  303. /**
  304. Push an event to a local station / server for Location based content, see parms for details
  305. Keep in mind this supports both local and remote events
  306. @method sendLocalEventGPS
  307. @param {String} i_mode local or remote
  308. @param {Number} i_stationId
  309. @param {Number} i_lat
  310. @param {Number} i_lng
  311. @param {Function} i_callBack
  312. @return {String) short url
  313. **/
  314. sendLocalEventGPS: function (i_mode, i_lat, i_lng, i_id, i_ip, i_port, i_callBack) {
  315. var self = this;
  316. // example posts
  317. // curl "http://192.168.92.133:1024/sendLocalEvent?eventName=gps&eventParam=34.22447,-118.828"
  318. // https://sun.signage.me/WebService/sendCommand.ashx?i_user=d39@ms.com&i_password=xxxx&i_stationId=44&i_command=event&i_param1=gps&i_param2=34.22447,-118.828&callback=
  319. var url;
  320. var returnUrl;
  321. if (i_mode == "local") {
  322. url = 'http://' + i_ip + ':' + i_port + '/sendLocalEvent?eventName=gps&eventParam=' + i_lat + ',' + i_lng;
  323. returnUrl = url;
  324. } else {
  325. url = window.g_protocol + pepper.getUserData().domain + '/WebService/sendCommand.ashx?i_user=' + pepper.getUserData().userName + '&i_password=' + pepper.getUserData().userPass + '&i_stationId=' + i_id + '&i_command=event&i_param1=' + 'gps' + '&i_param2=' + i_lat + ',' + i_lng + '&callback=?';
  326. returnUrl = '//remoteServer' + '&i_stationId=' + i_id + '&i_command=event&i_param1=' + 'gps' + '&i_param2=' + i_lat + ',' + i_lng;
  327. }
  328. // log(url);
  329. if (i_mode == 'local')
  330. return returnUrl;
  331.  
  332. try {
  333. $.ajax({
  334. url: url,
  335. dataType: "jsonp",
  336. type: "post",
  337. complete: function (response) {
  338. if (i_callBack)
  339. i_callBack(response.statusText);
  340. },
  341. error: function (jqXHR, exception) {
  342. log(jqXHR, exception);
  343. if (i_callBack)
  344. i_callBack(exception);
  345. }
  346. });
  347. } catch (e) {
  348. log('error on ajax' + e);
  349. }
  350. return returnUrl;
  351. },
  352.  
  353. /**
  354. Push a command to remote station
  355. @method getLocalization
  356. @param {String} i_command
  357. @param {Number} i_stationId
  358. @param {Function} i_callBack
  359. **/
  360. getLocalization: function (i_lang, i_callBack) {
  361. $.getJSON(window.g_protocol + window.g_masterDomain + '/WebService/getLocalList.ashx?callback=?', function (data) {
  362. data = _.invert(data);
  363. if (i_lang == 'zh')
  364. i_lang = 'zh-CN';
  365. var local = data[i_lang];
  366. var url = window.g_protocol + window.g_masterDomain + '/WebService/getResourceBundlesJson.ashx?local=' + local + '&bundleList=studiolite&callback=?';
  367. $.getJSON(url, function (data) {
  368. i_callBack(data);
  369. });
  370. });
  371. },
  372.  
  373. /**
  374. Push a command to remote station, this v2 has a fall back and returns null on fails
  375. @method getLocalizationNew
  376. @param {String} i_command
  377. @param {Number} i_stationId
  378. @param {Function} i_callBack
  379. **/
  380. getLocalizationNew: function (i_lang, i_callBack) {
  381. $.getJSON(window.g_protocol + window.g_masterDomain + '/WebService/getLocalList.ashx?callback=?', function (data) {
  382. data = _.invert(data);
  383. if (i_lang == 'zh')
  384. i_lang = 'zh-CN';
  385. var local = data[i_lang];
  386. var url = window.g_protocol + window.g_masterDomain + '/WebService/getResourceBundlesJson.ashx?local=' + local + '&bundleList=studiolite&callback=?';
  387. $.getJSON(url, function (data) {
  388. i_callBack(data);
  389. }).error(function () {
  390. i_callBack(null);
  391. });
  392. }).error(function (e) {
  393. i_callBack(null);
  394. });
  395. },
  396.  
  397. /**
  398. Return the url address of StudioLite
  399. @method getStudioLiteURL
  400. @return {String} url address
  401. **/
  402. getStudioLiteURL: function () {
  403. var protocol = window.g_protocol;
  404. if (window.g_masterDomain == 'galaxy.signage.me')
  405. protocol = 'https://';
  406. return protocol + window.g_masterDomain + '/_studiolite-dist/studiolite.html';
  407. },
  408.  
  409. /**
  410. Return the url address of StudioPro
  411. @method getStudioProURL
  412. @return {String} url address
  413. **/
  414. getStudioProURL: function () {
  415. var protocol = window.g_protocol;
  416. return window.g_protocol + window.g_masterDomain + '/WebService/signagestudio_d.aspx';
  417. },
  418.  
  419. /**
  420. Create a new mediaCLOUD account
  421. @method createAccount
  422. @param {Function} i_callBack
  423. **/
  424. createAccount: function (i_businessName, i_userName, i_password, i_templateBusinessId, i_resellerId, i_firstName, i_lastName, i_contactEmail, i_workPhone, i_cellPhone, i_address, i_city, i_state, i_contry, i_zipcode, i_callback) {
  425. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=CreateCustomerAccount'
  426. url += '&businessName=' + i_businessName;
  427. url += '&userName=' + i_userName;
  428. url += '&password=' + i_password;
  429. url += '&templateBusinessId=' + i_templateBusinessId;
  430. url += '&resellerId=' + i_resellerId;
  431. url += '&firstName=' + i_firstName;
  432. url += '&lastName=' + i_lastName;
  433. url += '&contactEmail=' + i_contactEmail;
  434. url += '&workPhone=' + i_workPhone;
  435. url += '&cellPhone=' + i_cellPhone;
  436. url += '&address=' + i_address;
  437. url += '&city=' + i_city;
  438. url += '&state=' + i_state;
  439. url += '&contry=' + i_contry;
  440. url += '&zipcode=' + i_zipcode;
  441. url += '&callback=?';
  442. log(url);
  443. $.getJSON(url, i_callback);
  444. },
  445.  
  446. /**
  447. Get business user info
  448. @method GetBusinessUserInfo
  449. @param {Function} i_callBack
  450. **/
  451. getAccountStatus: function (i_businessId, i_callBack) {
  452. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=GetAccountStatus&businessId=' + i_businessId + '&callback=?';
  453. $.getJSON(url, i_callBack);
  454. },
  455.  
  456. /**
  457. Get business user info
  458. @method GetBusinessUserInfo
  459. @param {Function} i_callBack
  460. **/
  461. resetPassword: function (i_email, i_callBack) {
  462. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=ResetPassword&userName=' + i_email + '&callback=?';
  463. $.getJSON(url, i_callBack);
  464. },
  465.  
  466. /**
  467. Get business user info
  468. @method ChangePassword
  469. @param {Function} i_callBack
  470. **/
  471. changePassword: function (i_email, i_oldPassword, i_newPassword, i_callBack) {
  472. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=ChangePassword&userName=' + i_email + '&oldPassword=' + i_oldPassword + '&newPassword=' + i_newPassword + '&callback=?';
  473. $.getJSON(url, i_callBack);
  474. },
  475.  
  476. /**
  477. Get business user info
  478. @method ChangeBusinessName
  479. @param {Function} i_callBack
  480. **/
  481. changeBusinessName: function (i_email, i_password, i_businessName, i_callBack) {
  482. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=ChangeBusinessName&userName=' + i_email + '&password=' + i_password + '&busnessName=' + i_businessName + '&callback=?';
  483. $.getJSON(url, i_callBack);
  484. },
  485.  
  486. /**
  487. Get business user info
  488. @method GetBusinessUserInfo
  489. @param {Function} i_callBack
  490. **/
  491. getBusinessUserInfo: function (i_user, i_pass, i_callBack) {
  492. var url = window.g_protocol + window.g_masterDomain + '/WebService/createNewAccount.ashx?command=GetBusinessUserInfo&userName=' + i_user + '&password=' + i_pass + '&callback=?';
  493. $.getJSON(url, i_callBack);
  494. },
  495.  
  496. /**
  497. Get list of all create account samples, both lite and pro
  498. @method getSampleList
  499. @param {Function} i_callBack
  500. **/
  501. getSampleList: function (i_callBack) {
  502. var url = window.g_protocol + window.g_masterDomain + '/WebService/getResellerTemplates.ashx?callback=?';
  503. $.getJSON(url, function (data) {
  504. i_callBack(data);
  505. });
  506. },
  507.  
  508. /**
  509. Push an event to remote station
  510. @method sendEvent
  511. @param {String} i_eventName
  512. @param {Number} i_stationId
  513. @param {Function} i_callBack
  514. **/
  515. sendEvent: function (i_eventName, i_stationId, i_callBack) {
  516. var url = window.g_protocol + pepper.getUserData().domain + '/WebService/sendCommand.ashx?i_user=' + pepper.getUserData().userName + '&i_password=' + pepper.getUserData().userPass + '&i_stationId=' + i_stationId + '&i_command=event&i_param1=' + i_eventName + '&i_param2=' + '&callback=?';
  517. $.getJSON(url, i_callBack);
  518. },
  519.  
  520. /**
  521. Send remote command to retrieve snapshot of a running station
  522. @method sendSnapshot
  523. @param {String} i_fileName
  524. @param {Number} i_quality
  525. @param {Number} i_stationId
  526. @param {Function} i_callBack
  527. @return {String} image path url
  528. **/
  529. sendSnapshot: function (i_fileName, i_quality, i_stationId, i_callBack) {
  530. var url = window.g_protocol + pepper.getUserData().domain + '/WebService/sendCommand.ashx?i_user=' + pepper.getUserData().userName + '&i_password=' + pepper.getUserData().userPass + '&i_stationId=' + i_stationId + '&i_command=' + 'captureScreen2' + '&i_param1=' + i_fileName + '&i_param2=' + i_quality + '&callback=?';
  531. $.getJSON(url, i_callBack);
  532. var path = window.g_protocol + pepper.getUserData().domain + '/Snapshots/business' + pepper.getUserData().businessID + "/station" + i_stationId + '/' + i_fileName + '.jpg';
  533. log(path);
  534. return path;
  535. },
  536.  
  537. /**
  538. Build URL for player preview using supplied player parameters
  539. @method _livePreviewGetLink
  540. @param {String} i_playerParams
  541. @param {Number} i_bannerMode
  542. @return {String} url
  543. **/
  544. _livePreviewGetLink: function (i_playerParams, i_bannerMode) {
  545. var self = this;
  546. var rc4v2 = new RC4V2();
  547. var playerParams = rc4v2.encrypt(i_playerParams, '8547963624824263');
  548. var domain = pepper.getUserData().domain;
  549. var eri = pepper.getUserData().eri;
  550. var url = window.g_protocol + domain + '/WebService/SignagePlayerApp.html?eri=' + eri + '&playerParams=' + playerParams + '&banner=' + i_bannerMode;
  551. log(playerParams);
  552. return url;
  553. },
  554.  
  555. /**
  556. Create a live preview URL for campaign
  557. @method livePreviewCampaign
  558. @param {Number} i_campaignID
  559. @param {Number} i_bannerMode
  560. @return {String} url
  561. **/
  562. livePreviewCampaign: function (i_campaignID, i_bannerMode) {
  563. var self = this;
  564. var campaignBoardId = pepper.getCampaignBoardIdFromCampaignId(i_campaignID);
  565. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(campaignBoardId);
  566. var campaignNativeID = recCampaignBoard['native_id'];
  567. var playerParams = pepper.getUserData().businessID + ',1,' + campaignNativeID;
  568. return pepper._livePreviewGetLink(playerParams, i_bannerMode);
  569. },
  570.  
  571. /**
  572. Create a live preview URL for campaign
  573. @method livePreviewTimeline
  574. @param {Number} i_campaignID
  575. @param {Number} i_timelineID
  576. @param {Number} i_bannerMode
  577. @return {String} url
  578. **/
  579. livePreviewTimeline: function (i_campaignID, i_timelineID, i_bannerMode) {
  580. var self = this;
  581. var campaignBoardId = pepper.getCampaignBoardIdFromCampaignId(i_campaignID);
  582. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(campaignBoardId);
  583. var campaignNativeID = recCampaignBoard['native_id'];
  584. var recCampaignTimeline = pepper.getCampaignTimelineRecord(i_timelineID);
  585. var timelineNativeID = recCampaignTimeline['native_id'];
  586. var playerParams = pepper.getUserData().businessID + ',2,' + campaignNativeID + "," + timelineNativeID;
  587. return pepper._livePreviewGetLink(playerParams, i_bannerMode);
  588. },
  589.  
  590. /**
  591. Create a live preview URL for a scene
  592. @method livePreviewScene
  593. @param {Number} i_scene_id
  594. @param {Number} i_bannerMode
  595. @return {String} url
  596. **/
  597. livePreviewScene: function (i_scene_id, i_bannerMode) {
  598. var self = this;
  599. var sceneID = pepper.getSceneIdFromPseudoId(i_scene_id);
  600. var recPlayerData = pepper.getScenePlayerRecord(sceneID);
  601. var nativeID = recPlayerData['native_id'];
  602. var playerParams = pepper.getUserData().businessID + ',3,' + nativeID;
  603. return pepper._livePreviewGetLink(playerParams, i_bannerMode);
  604. },
  605.  
  606. /**
  607. get a scene's default length
  608. @method getSceneDuration
  609. @param {number} i_scene_id
  610. @return {number} total seconds
  611. **/
  612. getSceneDuration: function (i_scene_id) {
  613. var self = this;
  614. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  615. var seconds = 0;
  616. var minutes = 0;
  617. var hours = 0;
  618. var totalInSeconds = 0;
  619.  
  620. var recPlayerData = pepper.getScenePlayerRecord(i_scene_id);
  621. var player_data = recPlayerData['player_data_value'];
  622. var domPlayerData = $.parseXML(player_data);
  623. var xSnippet = $(domPlayerData).find('Scene');
  624. var totalSeconds = parseInt(xSnippet.attr('defaultDuration'));
  625.  
  626. totalInSeconds = totalSeconds;
  627. if (totalSeconds >= 3600) {
  628. hours = Math.floor(totalSeconds / 3600);
  629. totalSeconds = totalSeconds - (hours * 3600);
  630. }
  631. if (totalSeconds >= 60) {
  632. minutes = Math.floor(totalSeconds / 60);
  633. seconds = totalSeconds - (minutes * 60);
  634. }
  635. if (hours == 0 && minutes == 0)
  636. seconds = totalSeconds;
  637.  
  638. var playbackLength = {
  639. hours: hours,
  640. minutes: minutes,
  641. seconds: seconds,
  642. totalInSeconds: totalInSeconds
  643. };
  644. return playbackLength;
  645. },
  646.  
  647. /**
  648. Set a scene's default length (can be overridden on timeline)
  649. @method setSceneDuration
  650. @param {number} i_scene_id
  651. @param {string} hours
  652. @param {string} minutes
  653. @param {string} seconds
  654. **/
  655. setSceneDuration: function (i_scene_id, i_hours, i_minutes, i_seconds) {
  656. var self = this;
  657. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  658. var totalSecInMin = 60
  659. var totalSecInHour = totalSecInMin * 60
  660. var totalSeconds = parseInt(i_seconds) + (parseInt(i_minutes) * totalSecInMin) + (parseInt(i_hours) * totalSecInHour);
  661. var recPlayerData = pepper.getScenePlayerRecord(i_scene_id);
  662. var player_data = recPlayerData['player_data_value'];
  663. var domPlayerData = $.parseXML(player_data)
  664. var xSnippet = $(domPlayerData).find('Scene');
  665. xSnippet.attr('defaultDuration', totalSeconds);
  666. var player_data = (new XMLSerializer()).serializeToString(domPlayerData);
  667. pepper.setScenePlayerData(i_scene_id, player_data);
  668. },
  669.  
  670. /**
  671. Returns all scenes
  672. @method getSceneNames
  673. @param {Number} i_playerData
  674. @return {Object} scene names
  675. **/
  676. getSceneNames: function () {
  677. var self = this;
  678. var sceneNames = {};
  679. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  680. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  681. var domPlayerData = $.parseXML(recPlayerData['player_data_value'])
  682. sceneNames[player_data_id] = {
  683. label: ($(domPlayerData).find('Player').attr('label')),
  684. mimeType: $(domPlayerData).find('Player').attr('mimeType')
  685. };
  686. });
  687. return sceneNames;
  688. },
  689.  
  690. /**
  691. Returns all scenes
  692. @method getSceneMime
  693. @param {Number} i_sceneID
  694. @return {Object} scene names
  695. **/
  696. getSceneMime: function (i_sceneID) {
  697. var self = this;
  698. var mimeType = '';
  699. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  700. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  701. var domPlayerData = $.parseXML(recPlayerData['player_data_value'])
  702. var id = $(domPlayerData).find('Player').attr('id');
  703. if (id == i_sceneID)
  704. mimeType = $(domPlayerData).find('Player').attr('mimeType');
  705. });
  706. return mimeType;
  707. },
  708.  
  709. /**
  710. Create a new Scene
  711. If mimetype was give as an argument and it's of format
  712. Json.xxxx (i.e.: Json.weather, Json.spreadsheet ...) add it to scene table as well
  713. @method createScene
  714. @optional i_mimeType
  715. @optional i_name
  716. @return {Number} scene player_data id
  717. **/
  718. createScene: function (i_player_data, i_mimeType, i_name) {
  719. var self = this;
  720. var table_player_data = self.m_msdb.table_player_data();
  721. var recPlayerData = table_player_data.createRecord();
  722. if (i_mimeType && i_mimeType.match(/Json./)){
  723. i_player_data = $.parseXML(i_player_data);
  724. $(i_player_data).find('Player').attr('mimeType', i_mimeType);
  725. i_player_data = pepper.xmlToStringIEfix(i_player_data);
  726. }
  727. if (!_.isUndefined(i_name)){
  728. i_player_data = $.parseXML(i_player_data);
  729. $(i_player_data).find('Player').attr('label', i_name);
  730. i_player_data = pepper.xmlToStringIEfix(i_player_data);
  731. }
  732. recPlayerData['player_data_value'] = i_player_data;
  733. table_player_data.addRecord(recPlayerData);
  734. var scene_id = recPlayerData['player_data_id'];
  735. self.injectPseudoScenePlayersIDs(scene_id);
  736. pepper.fire(Pepper['SCENE_CREATED'], self, null, recPlayerData['player_data_id']);
  737. return self.getPseudoIdFromSceneId(scene_id);
  738. },
  739.  
  740. /**
  741. Returns this model's attributes as...
  742. @method xmlToStringIEfix
  743. @param {Object} i_domPlayerData
  744. @return {String} xml string
  745. **/
  746. xmlToStringIEfix: function (i_domPlayerData) {
  747. var self = this;
  748. var player_data = (new XMLSerializer()).serializeToString(i_domPlayerData);
  749. return self.ieFixEscaped(player_data);
  750. },
  751.  
  752. /**
  753. "Good" old IE, always a headache, jQuery workarounds....
  754. @method ieFixEscaped
  755. @param {String} escapedHTML
  756. @return {String}
  757. **/
  758. ieFixEscaped: function (escapedHTML) {
  759. return escapedHTML.replace(/xmlns="http:\/\/www.w3.org\/1999\/xhtml"/g, '').
  760. replace(/&lt;/g, '<').
  761. replace(/&gt;/g, '>').
  762. replace(/&amp;/g, '&').
  763. replace(/<rss/gi, '<Rss').replace(/rss>/g, 'Rss>').
  764. replace(/<background/gi, '<Background').replace(/background>/gi, 'Background>').
  765. replace(/<appearance/gi, '<Appearance').replace(/appearance>/gi, 'Appearance>').
  766. replace(/<gradientpoints/gi, '<GradientPoints').replace(/gradientpoints>/gi, 'GradientPoints>').
  767. replace(/<aspectratio/gi, '<AspectRatio').replace(/aspectratio>/gi, 'AspectRatio>').
  768. replace(/<layout/gi, '<Layout').replace(/layout>/gi, 'Layout>').
  769. replace(/<title/gi, '<Title').replace(/title>/gi, 'Title>').
  770. replace(/<description/gi, '<Description').replace(/description>/gi, 'Description>').
  771. replace(/<data/gi, '<Data').replace(/data>/gi, 'Data>').
  772. replace(/<player/gi, '<Player').replace(/player>/gi, 'Player>').
  773. replace(/<players/gi, '<Players').replace(/players>/gi, 'Players>').
  774. replace(/<text/gi, '<Text').replace(/text>/gi, 'Text>').
  775. replace(/<eventCommands/gi, '<EventCommands').replace(/eventCommands>/gi, 'EventCommands>').
  776. replace(/<eventCommand/gi, '<EventCommand').replace(/eventCommand>/gi, 'EventCommand>').
  777. replace(/<border/gi, '<Border').replace(/border>/gi, 'Border>').
  778. replace(/<scene/gi, '<Scene').replace(/scene>/gi, 'Scene>').
  779. replace(/<clock/gi, '<Clock').replace(/clock>/gi, 'Clock>').
  780. replace(/<point/gi, '<Point').replace(/point>/gi, 'Point>').
  781. replace(/<video/gi, '<Video').replace(/video>/gi, 'Video>').
  782. replace(/<image/gi, '<Image').replace(/image>/gi, 'Image>').
  783. replace(/<label/gi, '<Label').replace(/label>/gi, 'Label>').
  784. replace(/<font/gi, '<Font').replace(/font>/gi, 'Font>').
  785. replace(/fontsize/gi, 'fontSize').
  786. replace(/startdate/gi, 'startDate').
  787. replace(/enddate/gi, 'endDate').
  788. replace(/fontcolor/gi, 'fontColor').
  789. replace(/fontfamily/gi, 'fontFamily').
  790. replace(/fontweight/gi, 'fontWeight').
  791. replace(/fontstyle/gi, 'fontStyle').
  792. replace(/bordercolor/gi, 'borderColor').
  793. replace(/borderthickness/gi, 'borderThickness').
  794. replace(/cornerradius/gi, 'cornerRadius').
  795. replace(/textdecoration/gi, 'textDecoration').
  796. replace(/textalign/gi, 'textAlign').
  797. replace(/hdatasrc/gi, 'hDataSrc').
  798. replace(/minrefreshtime/gi, 'minRefreshTime').
  799. replace(/itemspath/gi, 'itemsPath').
  800. replace(/slideshow/gi, 'slideShow').
  801. replace(/iteminterval/gi, 'itemInterval').
  802. replace(/playvideoinfull/gi, 'playVideoInFull').
  803. replace(/randomorder/gi, 'randomOrder').
  804. replace(/providertype/gi, 'providerType').
  805. replace(/fieldname/gi, 'fieldName').
  806. replace(/fieldtype/gi, 'fieldType').
  807. replace(/gradienttype/gi, 'gradientType').
  808. replace(/autorewind/gi, 'autoRewind').
  809. replace(/clockformat/gi, 'clockFormat').
  810. replace(/clockmask/gi, 'clockMask').
  811. replace(/hresource/gi, 'hResource').
  812. replace(/videoidlist/gi, 'VideoIdList').
  813. replace(/<page/gi, '<Page').replace(/page>/gi, 'Page>').
  814. replace(/<gps/gi, '<GPS').replace(/gps>/gi, 'GPS>').
  815. replace(/<fixed/gi, '<Fixed').replace(/fixed>/gi, 'Fixed>').
  816. replace(/<xmlitem/gi, '<XmlItem').replace(/xmlitem>/gi, 'XmlItem>').
  817. replace(/<json/gi, '<Json').replace(/json>/gi, 'Json>').
  818. replace(/<locationbased/gi, '<LocationBased').replace(/locationbased>/gi, 'LocationBased>').
  819. replace(/<params/gi, '<Params').replace(/params>/gi, 'Params>').
  820. replace(/<url/gi, '<Url').replace(/url>/gi, 'Url>').
  821. replace(/maintainaspectratio/gi, 'maintainAspectRatio').
  822. replace(/<resource/gi, '<Resource').replace(/resource>/g, 'Resource>').
  823. // replace(/<htdata/gi, '<htData').replace(/htdata>/gi, 'htData>').
  824. replace(/<link/gi, '<LINK').replace(/link>/g, 'LINK>');
  825. },
  826.  
  827. /**
  828. append scene player block to pepper player_data table
  829. @method appendScenePlayerBlock
  830. @param {Number} i_scene_id
  831. @param {XML} i_player_data
  832. **/
  833. appendScenePlayerBlock: function (i_scene_id, i_player_data) {
  834. var self = this;
  835. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  836. self.m_msdb.table_player_data().openForEdit(i_scene_id);
  837. var recPlayerData = self.m_msdb.table_player_data().getRec(i_scene_id);
  838. var scene_player_data = recPlayerData['player_data_value'];
  839. var sceneDomPlayerData = $.parseXML(scene_player_data);
  840. var playerData = $.parseXML(i_player_data);
  841. // use first child to overcome the removal by jquery of the HTML tag
  842. $(sceneDomPlayerData).find('Players').append(playerData.firstChild);
  843. // $(sceneDomPlayerData).find('Players').append($(i_player_data));
  844. var player_data = pepper.xmlToStringIEfix(sceneDomPlayerData);
  845. recPlayerData['player_data_value'] = player_data;
  846. },
  847.  
  848. /**
  849. set entire scene playerdata
  850. @method setScenePlayerData
  851. @return {Number} scene player_data id
  852. **/
  853. setScenePlayerData: function (i_scene_id, i_player_data) {
  854. var self = this;
  855. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  856. self.m_msdb.table_player_data().openForEdit(i_scene_id);
  857. var recPlayerData = self.m_msdb.table_player_data().getRec(i_scene_id);
  858. recPlayerData['player_data_value'] = i_player_data;
  859. },
  860.  
  861. /**
  862. Get a unique scene > player id
  863. @method generateSceneId
  864. @return {Number} Unique scene player id
  865. **/
  866. generateSceneId: function () {
  867. return ($.base64.encode(_.uniqueId('blockid'))).replace('=', '');
  868. },
  869.  
  870. /**
  871. Sterilize pseudo id to scene id always returns scene_id as an integer rather pseudo id
  872. @method sterilizePseudoId
  873. @param {Number} i_id
  874. @return {Number} i_id
  875. **/
  876. sterilizePseudoId: function (i_id) {
  877. var self = this;
  878. var id = parseInt(i_id);
  879. if (_.isNaN(id))
  880. return pepper.getSceneIdFromPseudoId(i_id);
  881. return i_id;
  882. },
  883.  
  884. /**
  885. Translate a scene id to its matching pseudo scene id
  886. @method getPseudoIdFromSceneId
  887. @param {Number} i_scene_id
  888. @return {Number} pseudo id
  889. **/
  890. getPseudoIdFromSceneId: function (i_scene_id) {
  891. var self = this;
  892. var found = undefined;
  893. var scenes = pepper.getScenes();
  894. _.each(scenes, function (domPlayerData, scene_id) {
  895. var injectedID = $(domPlayerData).find('Player').eq(0).attr('id');
  896. if (i_scene_id == scene_id)
  897. found = injectedID;
  898. });
  899. return found;
  900. },
  901.  
  902. /**
  903. Translate an injected id to a table_player_data scene id
  904. @method createPseudoSceneID
  905. @param {Number} getSceneIdFromPseudoId
  906. @return {Number} scene id
  907. **/
  908. getSceneIdFromPseudoId: function (i_pseudo_id) {
  909. var self = this;
  910. var found = undefined;
  911. var scenes = pepper.getScenes();
  912. _.each(scenes, function (domPlayerData, scene_id) {
  913. var pseudo_id = $(domPlayerData).find('Player').eq(0).attr('id');
  914. if (pseudo_id == i_pseudo_id)
  915. found = scene_id;
  916. });
  917. return found;
  918. },
  919.  
  920. /**
  921. Inject unique player ids for all players within a scene
  922. @method injectPseudoScenePlayersIDs
  923. @param {Number} i_scene_id
  924. **/
  925. injectPseudoScenePlayersIDs: function (i_scene_id) {
  926. var self = this;
  927. var scenes = {};
  928. if (!_.isUndefined(i_scene_id)) {
  929. var domPlayerData = self.getScenePlayerdataDom(i_scene_id);
  930. scenes[i_scene_id] = domPlayerData;
  931. } else {
  932. scenes = pepper.getScenes();
  933. }
  934. _.each(scenes, function (domPlayerData, scene_id) {
  935. $(domPlayerData).find('Player').eq(0).attr('id', pepper.generateSceneId());
  936. $(domPlayerData).find('Players').find('Player').each(function (i, player) {
  937. var blockID = pepper.generateSceneId();
  938. $(player).attr('id', blockID);
  939. });
  940. pepper.setScenePlayerData(scene_id, (new XMLSerializer()).serializeToString(domPlayerData));
  941. });
  942. },
  943.  
  944. /**
  945. Remove all player ids from player_data inside a scene
  946. @method stripScenePlayersIDs
  947. **/
  948. stripScenePlayersIDs: function () {
  949. var self = this;
  950. self.m_tempScenePlayerIDs = {};
  951. var scenes = pepper.getScenes();
  952. _.each(scenes, function (domPlayerData, scene_id) {
  953. // $(domPlayerData).find('Player').eq(0).removeAttr('id');
  954. self.m_tempScenePlayerIDs[scene_id] = (new XMLSerializer()).serializeToString(domPlayerData);
  955. var players = $(domPlayerData).find('Players').find('Player').each(function (i, player) {
  956. // var blockID = pepper.generateSceneId();
  957. $(player).removeAttr('id');
  958. });
  959. pepper.setScenePlayerData(scene_id, (new XMLSerializer()).serializeToString(domPlayerData));
  960. });
  961. },
  962.  
  963. /**
  964. Remove all player ids from i_domPlayerData
  965. @method stripPlayersID
  966. **/
  967. stripPlayersID: function (i_domPlayerData) {
  968. var self = this;
  969. $(i_domPlayerData).removeAttr('id');
  970. return i_domPlayerData;
  971. },
  972.  
  973. /**
  974. Remove specific player id (i.e.: block) from scene player_data
  975. @method removeScenePlayer
  976. @param {Number} i_scene_id
  977. @param {Number} i_player_id
  978. **/
  979. removeScenePlayer: function (i_scene_id, i_player_data_id) {
  980. var self = this;
  981. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  982. self.m_msdb.table_player_data().openForEdit(i_scene_id);
  983. var recPlayerData = self.m_msdb.table_player_data().getRec(i_scene_id);
  984. var player_data = recPlayerData['player_data_value'];
  985. var domPlayerData = $.parseXML(player_data)
  986. $(domPlayerData).find('[id="' + i_player_data_id + '"]').remove();
  987. pepper.setScenePlayerData(i_scene_id, (new XMLSerializer()).serializeToString(domPlayerData));
  988. },
  989.  
  990. /**
  991. Remove all scene players that use resources (3100 & 3130) and that include the specified resource id
  992. @method removeAllScenePlayersWithResource
  993. @param {Number} i_resource_id
  994. **/
  995. removeAllScenePlayersWithResource: function (i_resource_id) {
  996. var self = this;
  997. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  998. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  999. var domSceneData = $.parseXML(recPlayerData['player_data_value']);
  1000. var sceneID = $(domSceneData).find('Player').eq(0).attr('id');
  1001. $(domSceneData).find('Player').each(function (i, playerData) {
  1002. $(playerData).find('[player="3100"],[player="3130"],[player="3140"]').each(function (i, playeResourceData) {
  1003. var playerDataID = $(this).attr('id');
  1004. var hResource = $(playeResourceData).find('Resource').attr('hResource');
  1005. if (hResource == i_resource_id) {
  1006. pepper.removeScenePlayer(sceneID, playerDataID);
  1007. }
  1008. });
  1009. });
  1010. });
  1011. },
  1012.  
  1013. /**
  1014. Remove a scene
  1015. @method removeScene
  1016. **/
  1017. removeScene: function (i_scene_player_data_id) {
  1018. var self = this;
  1019. var i_scene_id = pepper.sterilizePseudoId(i_scene_player_data_id);
  1020. self.m_msdb.table_player_data().openForDelete(i_scene_id);
  1021. },
  1022.  
  1023. /**
  1024. When we remove scene player ids we actually store them aside so we can restore them back after a save as the
  1025. remote server expects a scene's player_data to have no player ids on its scene player_data
  1026. @method restoreScenesWithPlayersIDs
  1027. **/
  1028. restoreScenesWithPlayersIDs: function () {
  1029. var self = this;
  1030. _.each(self.m_tempScenePlayerIDs, function (scene_player_data, scene_id) {
  1031. pepper.setScenePlayerData(scene_id, scene_player_data);
  1032. });
  1033. },
  1034.  
  1035. /**
  1036. get a scene block playerdata
  1037. @method getScenePlayerdataBlock
  1038. @param {Number} i_scene_id
  1039. @param {Number} i_player_data_id
  1040. @return {Number} i_player_data_id
  1041. **/
  1042. getScenePlayerdataBlock: function (i_scene_id, i_player_data_id) {
  1043. var self = this;
  1044. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  1045. self.m_msdb.table_player_data().openForEdit(i_scene_id);
  1046. var recPlayerData = self.m_msdb.table_player_data().getRec(i_scene_id);
  1047. var player_data = recPlayerData['player_data_value'];
  1048. var domPlayerData = $.parseXML(player_data)
  1049. var foundSnippet = $(domPlayerData).find('[id="' + i_player_data_id + '"]');
  1050. return foundSnippet[0];
  1051. },
  1052.  
  1053. /**
  1054. set a block id inside a scene with new player_data
  1055. @method setScenePlayerdataBlock
  1056. @param {Number} i_scene_id
  1057. @param {Number} i_player_data_id
  1058. @param {XML} player_data
  1059. **/
  1060. setScenePlayerdataBlock: function (i_scene_id, i_player_data_id, i_player_data) {
  1061. var self = this;
  1062. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  1063. self.m_msdb.table_player_data().openForEdit(i_scene_id);
  1064. var recPlayerData = self.m_msdb.table_player_data().getRec(i_scene_id);
  1065. var player_data = recPlayerData['player_data_value'];
  1066. var domPlayerData = $.parseXML(player_data);
  1067. var playerData = $.parseXML(i_player_data);
  1068. // use first child to overcome the removal by jquery of the HTML tag
  1069. $(domPlayerData).find('[id="' + i_player_data_id + '"]').replaceWith(playerData.firstChild);
  1070. player_data = pepper.xmlToStringIEfix(domPlayerData);
  1071. self.setScenePlayerData(i_scene_id, player_data);
  1072. },
  1073.  
  1074. /**
  1075. Get all Scenes and convert them to dom objects returning a hash of object literals
  1076. @method getScenes
  1077. @return {Object} all scenes as objects
  1078. **/
  1079. getScenes: function () {
  1080. var self = this;
  1081. var scenes = {};
  1082. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  1083. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  1084. var domPlayerData = $.parseXML(recPlayerData['player_data_value'])
  1085. scenes[recPlayerData['player_data_id']] = domPlayerData;
  1086. });
  1087. return scenes;
  1088. },
  1089.  
  1090. /**
  1091. Get Scene player record from player_data table
  1092. @method getScenePlayerRecord
  1093. @param {Number} i_sceneID
  1094. @return {Object} XML playerdata
  1095. **/
  1096. getScenePlayerRecord: function (i_scene_id) {
  1097. var self = this;
  1098. return self.m_msdb.table_player_data().getRec(i_scene_id);
  1099. },
  1100.  
  1101. /**
  1102. Get Scene player data
  1103. @method getScenePlayerdata
  1104. @param {Number} i_scene_id
  1105. @return {Object} XML scene player data
  1106. **/
  1107. getScenePlayerdata: function (i_scene_id) {
  1108. var self = this;
  1109. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  1110. return pepper.getScenePlayerRecord(i_scene_id)['player_data_value'];
  1111. },
  1112.  
  1113. /**
  1114. Get Scene player data as dom
  1115. @method getScenePlayerdataDom
  1116. @param {Number} i_sceneID
  1117. @return {Object} dom
  1118. **/
  1119. getScenePlayerdataDom: function (i_scene_id) {
  1120. var self = this;
  1121. i_scene_id = pepper.sterilizePseudoId(i_scene_id);
  1122. var scene_player_data = pepper.getScenePlayerRecord(i_scene_id)['player_data_value'];
  1123. return $.parseXML(scene_player_data)
  1124. },
  1125.  
  1126. /**
  1127. Announce via event that a template view (screen layout) has been edited
  1128. @method announceTemplateViewerEdited
  1129. @param {Number} i_campaign_timeline_board_template_id
  1130. **/
  1131. announceTemplateViewerEdited: function (i_campaign_timeline_board_template_id) {
  1132. var self = this;
  1133. pepper.fire(Pepper['TEMPLATE_VIEWER_EDITED'], self, null, i_campaign_timeline_board_template_id);
  1134. },
  1135.  
  1136. /**
  1137. Create a new campaign in the local database
  1138. @method createCampaign
  1139. @param {Number} i_campaginName
  1140. @return {Number} campaign id created
  1141. **/
  1142. createCampaign: function (i_campaginName) {
  1143. var self = this;
  1144. var campaigns = self.m_msdb.table_campaigns();
  1145. var campaign = campaigns.createRecord();
  1146. campaign.campaign_name = i_campaginName;
  1147. campaigns.addRecord(campaign);
  1148. pepper.fire(Pepper['NEW_CAMPAIGN_CREATED'], self, null, campaign['campaign_id']);
  1149. return campaign['campaign_id'];
  1150. },
  1151.  
  1152. /**
  1153. Create a new board, also known as Screen (screen divisions reside inside the board as viewers)
  1154. @method createBoard
  1155. @param {Number} i_boardName
  1156. @param {Number} i_width of the board
  1157. @param {Number} i_height of the board
  1158. @return {Number} the board id
  1159. **/
  1160. createBoard: function (i_boardName, i_width, i_height) {
  1161. var self = this;
  1162. var boards = self.m_msdb.table_boards();
  1163. var board = boards.createRecord();
  1164. board.board_name = i_boardName;
  1165. board.board_pixel_width = i_width;
  1166. board.board_pixel_height = i_height;
  1167. boards.addRecord(board);
  1168. return board['board_id'];
  1169. },
  1170.  
  1171. /**
  1172. Assign a campaign to a board, binding the to by referenced ids
  1173. @method assignCampaignToBoard
  1174. @param {Number} i_campaign_id the campaign id to assign to board
  1175. @param {Number} i_board_id the board id to assign to campaign
  1176. @return {Number} campain_board_id
  1177. **/
  1178. assignCampaignToBoard: function (i_campaign_id, i_board_id) {
  1179. var self = this;
  1180. var campaign_boards = self.m_msdb.table_campaign_boards();
  1181. var campain_board = campaign_boards.createRecord();
  1182. campain_board.campaign_id = i_campaign_id;
  1183. campain_board.board_id = i_board_id;
  1184. campaign_boards.addRecord(campain_board);
  1185. return campain_board['campaign_board_id'];
  1186. },
  1187.  
  1188. /**
  1189. Get the first board_id (output) that is assigned to the specified campaign_id
  1190. @method getFirstBoardIDofCampaign
  1191. @param {Number} i_campaign_id
  1192. @return {Number} foundBoardID of the board, or -1 if none found
  1193. **/
  1194. getFirstBoardIDofCampaign: function (i_campaign_id) {
  1195. var self = this;
  1196. var totalBoardsFound = 0;
  1197. var foundCampainBoardID = -1;
  1198.  
  1199. $(self.m_msdb.table_campaign_boards().getAllPrimaryKeys()).each(function (k, campaign_board_id) {
  1200. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(campaign_board_id);
  1201. if (i_campaign_id == recCampaignBoard.campaign_id && totalBoardsFound == 0) {
  1202. foundCampainBoardID = recCampaignBoard['campaign_board_id']
  1203. totalBoardsFound++;
  1204. }
  1205. });
  1206.  
  1207. return foundCampainBoardID;
  1208. },
  1209.  
  1210. /**
  1211. Get a campaign_board into it's matching pair in global boards.
  1212. @method getBoardFromCampaignBoard
  1213. @param {Number} i_campaign_board_id
  1214. @return {Number} board_id
  1215. **/
  1216. getBoardFromCampaignBoard: function (i_campaign_board_id) {
  1217. var self = this;
  1218. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(i_campaign_board_id);
  1219. return recCampaignBoard.board_id;
  1220. },
  1221.  
  1222. /**
  1223. Get i_campaign_board_id into campaign_id using local table_campaign_boards (not global boards)
  1224. @method getCampaignIdFromCampaignBoardId
  1225. @param {Number} i_campaign_board_id
  1226. @return {Number} campaign_id
  1227. **/
  1228. getCampaignIdFromCampaignBoardId: function (i_campaign_board_id) {
  1229. var self = this;
  1230. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(i_campaign_board_id);
  1231. return recCampaignBoard.campaign_id;
  1232. },
  1233.  
  1234. /**
  1235. get a Campaign's play mode (sceduler / sequencer) from timeline id
  1236. @method getCampaignPlayModeFromTimeline
  1237. @param {Number} i_campaign_timeline_id
  1238. @return {Number} play mode
  1239. **/
  1240. getCampaignPlayModeFromTimeline: function (i_campaign_timeline_id) {
  1241. var recTimeline = pepper.getCampaignTimelineRecord(i_campaign_timeline_id);
  1242. var campaign_id = recTimeline.campaign_id;
  1243. var recCampaign = pepper.getCampaignRecord(campaign_id);
  1244. return String(recCampaign['campaign_playlist_mode']);
  1245. },
  1246.  
  1247. /**
  1248. Get i_campaign_id into campaign_board_id using local table_campaign_boards (not global boards)
  1249. @method getCampaignIdFromCampaignBoardId
  1250. @param {Number} i_campaign_board_id
  1251. @return {Number} campaign_id
  1252. **/
  1253. getCampaignBoardIdFromCampaignId: function (i_campaign_id) {
  1254. var self = this;
  1255. var found_campaign_board_id = -1;
  1256. $(self.m_msdb.table_campaign_boards().getAllPrimaryKeys()).each(function (k, campaign_board_id) {
  1257. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(campaign_board_id);
  1258. if (recCampaignBoard['campaign_id'] == i_campaign_id)
  1259. found_campaign_board_id = recCampaignBoard['campaign_board_id'];
  1260. });
  1261. return found_campaign_board_id;
  1262. },
  1263.  
  1264. /**
  1265. Create channel and assign that channel to the specified timeline
  1266. @method createTimelineChannel
  1267. @param {Number} i_campaign_timeline_id the timeline id to assign channel to
  1268. @return {Array} createdChanels array of channel ids created
  1269. **/
  1270. createTimelineChannel: function (i_campaign_timeline_id) {
  1271. var self = this;
  1272. var chanels = self.m_msdb.table_campaign_timeline_chanels();
  1273. var chanel = chanels.createRecord();
  1274. chanel.chanel_name = "CH";
  1275. chanel.campaign_timeline_id = i_campaign_timeline_id;
  1276. chanels.addRecord(chanel);
  1277. pepper.fire(Pepper['NEW_CHANNEL_ADDED'], self, null, {
  1278. chanel: chanel['campaign_timeline_chanel_id'],
  1279. campaign_timeline_id: i_campaign_timeline_id
  1280. });
  1281. return chanel['campaign_timeline_chanel_id'];
  1282. },
  1283.  
  1284. /**
  1285. Create channels and assign these channels to the timeline
  1286. @method createTimelineChannels
  1287. @param {Number} i_campaign_timeline_id the timeline id to assign channel to
  1288. @param {Object} i_viewers we use viewer as a reference count to know how many channels to create (i.e.: one per channel)
  1289. @return {Array} createdChanels array of channel ids created
  1290. **/
  1291. createTimelineChannels: function (i_campaign_timeline_id, i_viewers) {
  1292. var self = this;
  1293. var createdChanels = [];
  1294.  
  1295. for (var i in i_viewers) {
  1296. i++;
  1297. var chanels = self.m_msdb.table_campaign_timeline_chanels();
  1298. var chanel = chanels.createRecord();
  1299. chanel.chanel_name = "CH" + i;
  1300. chanel.campaign_timeline_id = i_campaign_timeline_id;
  1301. chanels.addRecord(chanel);
  1302. createdChanels.push(chanel['campaign_timeline_chanel_id']);
  1303. }
  1304. pepper.fire(Pepper['NEW_CHANNEL_CREATED'], self, null, createdChanels);
  1305. return createdChanels;
  1306. },
  1307.  
  1308. /**
  1309. Create a new global template (screen and viewers) and assign the new template to the given global board_id
  1310. @method createNewTemplate
  1311. @param {Number} i_board_id
  1312. @param {Object} i_screenProps json object with all the viewers and attributes to create in msdb
  1313. @return {Object} returnData encapsulates the board_template_id and board_template_viewer_ids created
  1314. **/
  1315. createNewTemplate: function (i_board_id, i_screenProps) {
  1316. var self = this;
  1317.  
  1318. var returnData = {
  1319. board_template_id: -1,
  1320. viewers: []
  1321. };
  1322. // create screen template under board_id
  1323. var boardTemplates = self.m_msdb.table_board_templates();
  1324. var boardTemplate = boardTemplates.createRecord();
  1325. boardTemplate.template_name = "board template";
  1326. boardTemplate.board_id = i_board_id; // bind screen template to board
  1327. boardTemplates.addRecord(boardTemplate);
  1328.  
  1329. var board_template_id = boardTemplate['board_template_id'];
  1330.  
  1331. // add viewers (screen divisions)
  1332. var viewers = self.m_msdb.table_board_template_viewers();
  1333. var i = 0;
  1334. for (var screenValues in i_screenProps) {
  1335. i++;
  1336. var viewer = viewers.createRecord();
  1337. viewer.viewer_name = "Viewer" + i;
  1338. viewer.pixel_width = i_screenProps[screenValues]['w'];
  1339. viewer.pixel_height = i_screenProps[screenValues]['h'];
  1340. viewer.pixel_x = i_screenProps[screenValues]['x'];
  1341. viewer.pixel_y = i_screenProps[screenValues]['y'];
  1342. viewer.board_template_id = boardTemplate.board_template_id; // bind screen division to screen template
  1343. viewers.addRecord(viewer);
  1344. returnData['viewers'].push(viewer['board_template_viewer_id']);
  1345. }
  1346. returnData['board_template_id'] = board_template_id
  1347. pepper.fire(Pepper['NEW_TEMPLATE_CREATED'], self, null, returnData);
  1348. return returnData;
  1349. },
  1350.  
  1351. /**
  1352. Create a global viewer in an existing board_template
  1353. @method createViewer
  1354. @param {Number} board_template_id
  1355. @param {Number} i_board_template_id
  1356. @param {Object} i_props
  1357. @return {Number} viewer id
  1358. **/
  1359. createViewer: function (i_board_template_id, i_props) {
  1360. var self = this;
  1361. var viewers = self.m_msdb.table_board_template_viewers();
  1362. var viewer = viewers.createRecord();
  1363. viewer.viewer_name = "Viewer";
  1364. viewer.pixel_width = i_props['w'];
  1365. viewer.pixel_height = i_props['h'];
  1366. viewer.pixel_x = i_props['x'];
  1367. viewer.pixel_y = i_props['y'];
  1368. viewer.board_template_id = i_board_template_id;
  1369. viewers.addRecord(viewer);
  1370. return viewer['board_template_viewer_id'];
  1371. },
  1372.  
  1373. /**
  1374. Change a viewer's (aka screen division) order (layer) z-order
  1375. @method updateTemplateViewerOrder
  1376. @param {number} i_board_template_viewer_id
  1377. @param {number} i_view_order
  1378. **/
  1379. updateTemplateViewerOrder: function (i_board_template_viewer_id, i_view_order) {
  1380. var self = this;
  1381. self.m_msdb.table_board_template_viewers().openForEdit(i_board_template_viewer_id);
  1382. var recEditBoardTemplateViewer = self.m_msdb.table_board_template_viewers().getRec(i_board_template_viewer_id);
  1383. recEditBoardTemplateViewer['viewer_order'] = i_view_order;
  1384. },
  1385.  
  1386. /**
  1387. Create a new timeline under the specified campaign_id
  1388. @method createNewTimeline
  1389. @param {Number} i_campaign_id
  1390. @return {Number} campaign_timeline_id the timeline id created
  1391. **/
  1392. createNewTimeline: function (i_campaign_id) {
  1393. var self = this;
  1394. var timelines = self.m_msdb.table_campaign_timelines();
  1395. var timeline = timelines.createRecord();
  1396. timeline.campaign_id = i_campaign_id;
  1397. timeline.timeline_name = "Timeline";
  1398. timelines.addRecord(timeline);
  1399. pepper.fire(Pepper['NEW_TIMELINE_CREATED'], self, null, timeline['campaign_timeline_id']);
  1400. return timeline['campaign_timeline_id'];
  1401. },
  1402.  
  1403. /**
  1404. Create a new player (a.k.a block) and add it to the specified channel_id
  1405. @method createNewChannelPlayer
  1406. @param {Number} i_campaign_timeline_chanel_id is the channel id assign player to
  1407. @param {Number} i_playerCode is a unique pre-set code that exists per type of block (see component list for all available code)
  1408. @param {Number} i_offset set in seconds of when to begin playing the content with respect to timeline_channel
  1409. @param {Number} i_resourceID optional param used when creating a block with embedded resource (i.e.: video / image / swf)
  1410. @param {Number} i_sceneID optional param used when creating a block with embedded scene
  1411. @return {Object} campaign_timeline_chanel_player_id and campaign_timeline_chanel_player_data as json object
  1412. **/
  1413. createNewChannelPlayer: function (i_campaign_timeline_chanel_id, i_playerCode, i_offset, i_resourceID, i_sceneID) {
  1414. var self = this;
  1415.  
  1416. var timelinePlayers = self.m_msdb.table_campaign_timeline_chanel_players();
  1417. var recTimelinePlayer = timelinePlayers.createRecord();
  1418. var component = BB.PepperHelper.getBlockBoilerplate(i_playerCode);
  1419. var player_data = component.getDefaultPlayerData(BB.CONSTS.PLACEMENT_CHANNEL, i_resourceID);
  1420.  
  1421. // dealing with embedded scene, override player_data with scene handle
  1422. if (!_.isUndefined(i_sceneID))
  1423. player_data = '<Player hDataSrc="' + i_sceneID + '"/>';
  1424.  
  1425. recTimelinePlayer.player_data = player_data;
  1426. recTimelinePlayer.campaign_timeline_chanel_id = i_campaign_timeline_chanel_id;
  1427. recTimelinePlayer.player_duration = 10;
  1428. recTimelinePlayer.player_offset_time = i_offset;
  1429. timelinePlayers.addRecord(recTimelinePlayer);
  1430.  
  1431. var returnData = {
  1432. campaign_timeline_chanel_player_id: recTimelinePlayer['campaign_timeline_chanel_player_id'],
  1433. campaign_timeline_chanel_player_data: recTimelinePlayer['player_data']
  1434. };
  1435. pepper.fire(Pepper['NEW_PLAYER_CREATED'], self, null, returnData);
  1436. return returnData;
  1437. },
  1438.  
  1439. /**
  1440. Get all the campaign > timeline > board > template ids of a timeline
  1441. @method getTemplatesOfTimeline
  1442. @param {Number} i_campaign_timeline_id
  1443. @return {Array} template ids
  1444. **/
  1445. getTemplatesOfTimeline: function (i_campaign_timeline_id) {
  1446. var self = this;
  1447. var foundTemplatesIDs = [];
  1448.  
  1449. $(pepper.m_msdb.table_campaign_timeline_board_templates().getAllPrimaryKeys()).each(function (k, table_campaign_timeline_board_template_id) {
  1450. var recCampaignTimelineBoardTemplate = pepper.m_msdb.table_campaign_timeline_board_templates().getRec(table_campaign_timeline_board_template_id);
  1451. if (recCampaignTimelineBoardTemplate['campaign_timeline_id'] == i_campaign_timeline_id) {
  1452. foundTemplatesIDs.push(table_campaign_timeline_board_template_id);
  1453. }
  1454. });
  1455. return foundTemplatesIDs;
  1456. },
  1457.  
  1458. /**
  1459. Set a Board Template Viewer props
  1460. @method setBoardTemplateViewer
  1461. @param {Number} i_board_template_viewer_id
  1462. @return {Number} i_props
  1463. **/
  1464. setBoardTemplateViewer: function (i_campaign_timeline_board_template_id, i_board_template_viewer_id, i_props) {
  1465. var self = this;
  1466. var x = Math.round(i_props.x);
  1467. var y = Math.round(i_props.y);
  1468. var w = Math.round(i_props.w);
  1469. var h = Math.round(i_props.h);
  1470.  
  1471. // log('savings: template_id: ' + i_campaign_timeline_board_template_id + ' view_id: ' + i_board_template_viewer_id + ' ' + x + 'x' + y + ' ' + w + '/' + h);
  1472.  
  1473. self.m_msdb.table_board_template_viewers().openForEdit(i_board_template_viewer_id);
  1474. var recEditBoardTemplateViewer = self.m_msdb.table_board_template_viewers().getRec(i_board_template_viewer_id);
  1475. recEditBoardTemplateViewer['pixel_x'] = x;
  1476. recEditBoardTemplateViewer['pixel_y'] = y;
  1477. recEditBoardTemplateViewer['pixel_width'] = w;
  1478. recEditBoardTemplateViewer['pixel_height'] = h;
  1479. pepper.announceTemplateViewerEdited(i_campaign_timeline_board_template_id);
  1480. },
  1481.  
  1482. /**
  1483. Get a Board Template Viewer props
  1484. @method getBoardTemplateViewer
  1485. @param {Number} i_board_template_viewer_id
  1486. @return {Number} i_props
  1487. **/
  1488. getBoardTemplateViewer: function (i_board_template_viewer_id) {
  1489. var self = this;
  1490. var recEditBoardTemplateViewer = self.m_msdb.table_board_template_viewers().getRec(i_board_template_viewer_id);
  1491. return {
  1492. x: recEditBoardTemplateViewer['pixel_x'],
  1493. y: recEditBoardTemplateViewer['pixel_y'],
  1494. w: recEditBoardTemplateViewer['pixel_width'],
  1495. h: recEditBoardTemplateViewer['pixel_height']
  1496. };
  1497. },
  1498.  
  1499. /**
  1500. Get all the global board template ids of a timeline
  1501. @method getGlobalTemplateIdOfTimeline
  1502. @param {Number} i_campaign_timeline_id
  1503. @return {Array} foundGlobalBoardTemplatesIDs global board template ids
  1504. **/
  1505. getGlobalTemplateIdOfTimeline: function (i_campaign_timeline_id) {
  1506. var self = this;
  1507. var found = [];
  1508. $(pepper.m_msdb.table_campaign_timeline_board_templates().getAllPrimaryKeys()).each(function (k, table_campaign_timeline_board_template_id) {
  1509. var recCampaignTimelineBoardTemplate = pepper.m_msdb.table_campaign_timeline_board_templates().getRec(table_campaign_timeline_board_template_id);
  1510. if (recCampaignTimelineBoardTemplate['campaign_timeline_id'] == i_campaign_timeline_id) {
  1511. found.push(recCampaignTimelineBoardTemplate['board_template_id']);
  1512. }
  1513. });
  1514. return found[0];
  1515. },
  1516.  
  1517. /**
  1518. Get all the campaign > timeline > channels ids of a timeline
  1519. @method getChannelsOfTimeline
  1520. @param {Number} i_campaign_timeline_id
  1521. @return {Array} channel ids
  1522. **/
  1523. getChannelsOfTimeline: function (i_campaign_timeline_id) {
  1524. var self = this;
  1525. var foundChannelsIDs = [];
  1526.  
  1527. $(pepper.m_msdb.table_campaign_timeline_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_id) {
  1528. var recCampaignTimelineChannel = pepper.m_msdb.table_campaign_timeline_chanels().getRec(campaign_timeline_chanel_id);
  1529. if (i_campaign_timeline_id == recCampaignTimelineChannel['campaign_timeline_id']) {
  1530. foundChannelsIDs.push(campaign_timeline_chanel_id);
  1531. }
  1532. });
  1533. return foundChannelsIDs;
  1534. },
  1535.  
  1536. /**
  1537. Get a block's record using it's block_id
  1538. @method getBlockRecord
  1539. @param {Object} i_block_id
  1540. @return {Object} recBlock
  1541. **/
  1542. getBlockRecord: function (i_block_id) {
  1543. var self = this;
  1544. return self.m_msdb.table_campaign_timeline_chanel_players().getRec(i_block_id);
  1545. },
  1546.  
  1547. /**
  1548. Set a block's record using key value pair
  1549. The method uses generic key / value fields so it can set any part of the record.
  1550. @method setBlockRecord
  1551. @param {Number} i_block_id
  1552. @param {String} i_key
  1553. @param {Number} i_value
  1554. @return none
  1555. **/
  1556. setBlockRecord: function (i_block_id, i_key, i_value) {
  1557. var self = this;
  1558. pepper.m_msdb.table_campaign_timeline_chanel_players().openForEdit(i_block_id);
  1559. var recEditBlock = self.m_msdb.table_campaign_timeline_chanel_players().getRec(i_block_id);
  1560. recEditBlock[i_key] = i_value;
  1561. },
  1562.  
  1563. /**
  1564. Get a global board record (not the board that assigned to a campaign, but global).
  1565. Keep in mind that we only give as an argument the campaign > timeline > board > template id, so we have to query it and find
  1566. out to which global board its pointing so we can grab the correct record for the correct global board.
  1567. @method getGlobalBoardRecFromTemplate
  1568. @param {Number} i_campaign_timeline_board_template_id to reverse map into global board
  1569. @return {Object} global board record;
  1570. **/
  1571. getGlobalBoardRecFromTemplate: function (i_campaign_timeline_board_template_id) {
  1572. var self = this;
  1573. var recCampaignTimelineBoardTemplate = pepper.m_msdb.table_campaign_timeline_board_templates().getRec(i_campaign_timeline_board_template_id);
  1574. var board_template_id = recCampaignTimelineBoardTemplate['board_template_id'];
  1575. var recBoardTemplate = pepper.m_msdb.table_board_templates().getRec(board_template_id);
  1576. var board_id = recBoardTemplate['board_id'];
  1577. var recBoard = pepper.m_msdb.table_boards().getRec(board_id);
  1578. return recBoard;
  1579. },
  1580.  
  1581. /**
  1582. Bind the template (screen division template)to the specified timeline (i_campaign_timeline_id).
  1583. We need to also provide the board_template_id (screen template of the global board) as well as
  1584. the campaign's board_id to complete the binding
  1585. @method assignTemplateToTimeline
  1586. @param {Number} i_campaign_timeline_id to assign to template
  1587. @param {Number} i_board_template_id is the global board id (does not belong to campaign) to assign to the template
  1588. @param {Number} i_campaign_board_id is the campaign specific board id that will be bound to the template
  1589. @return {Number} campaign_timeline_board_template_id
  1590. **/
  1591. assignTemplateToTimeline: function (i_campaign_timeline_id, i_board_template_id, i_campaign_board_id) {
  1592. var self = this;
  1593. var timelineTemplate = self.m_msdb.table_campaign_timeline_board_templates();
  1594. var timelineScreen = timelineTemplate.createRecord();
  1595. timelineScreen.campaign_timeline_id = i_campaign_timeline_id;
  1596. timelineScreen.board_template_id = i_board_template_id;
  1597. timelineScreen.campaign_board_id = i_campaign_board_id;
  1598. timelineTemplate.addRecord(timelineScreen);
  1599.  
  1600. return timelineScreen['campaign_timeline_board_template_id'];
  1601. },
  1602.  
  1603. /**
  1604. Assign viewer (screen division) on the timeline to channel
  1605. @method assignViewerToTimelineChannel
  1606. @param {Number} i_campaign_timeline_board_template_id
  1607. @param {Object} i_viewers a json object with all viewers
  1608. @param {Array} i_channels a json object with all channels
  1609. @return none
  1610. **/
  1611. assignViewerToTimelineChannel: function (i_campaign_timeline_board_template_id, i_viewer_id, i_channel_id) {
  1612. var self = this;
  1613. var viewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels();
  1614. var viewerChanel = viewerChanels.createRecord();
  1615. viewerChanel.campaign_timeline_board_template_id = i_campaign_timeline_board_template_id;
  1616. viewerChanel.board_template_viewer_id = i_viewer_id;
  1617. viewerChanel.campaign_timeline_chanel_id = i_channel_id;
  1618. viewerChanels.addRecord(viewerChanel);
  1619. },
  1620.  
  1621. /**
  1622. Assign viewers (screen divisions) on the timeline to channels, so we get one viewer per channel
  1623. @method assignViewersToTimelineChannels
  1624. @param {Number} i_campaign_timeline_board_template_id
  1625. @param {Object} i_viewers a json object with all viewers
  1626. @param {Array} i_channels a json object with all channels
  1627. @return none
  1628. **/
  1629. assignViewersToTimelineChannels: function (i_campaign_timeline_board_template_id, i_viewers, i_channels) {
  1630. var self = this;
  1631. var viewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels();
  1632. for (var i in i_viewers) {
  1633. var viewerChanel = viewerChanels.createRecord();
  1634. viewerChanel.campaign_timeline_board_template_id = i_campaign_timeline_board_template_id;
  1635. viewerChanel.board_template_viewer_id = i_viewers[i];
  1636. viewerChanel.campaign_timeline_chanel_id = i_channels.shift();
  1637. viewerChanels.addRecord(viewerChanel);
  1638. }
  1639. },
  1640.  
  1641. /**
  1642. Get campaign schedule for timeline
  1643. @method getCampaignsSchedules
  1644. @param {Number} i_campaign_timeline_id
  1645. @return {Object} schedule record
  1646. **/
  1647. getCampaignsSchedule: function (i_campaign_timeline_id) {
  1648. var self = this;
  1649. var found = -1;
  1650. $(self.m_msdb.table_campaign_timeline_schedules().getAllPrimaryKeys()).each(function (k, campaign_timeline_schedule_id) {
  1651. var recCampaignTimelineSchedule = self.m_msdb.table_campaign_timeline_schedules().getRec(campaign_timeline_schedule_id);
  1652. if (recCampaignTimelineSchedule.campaign_timeline_id == i_campaign_timeline_id)
  1653. found = recCampaignTimelineSchedule;
  1654. });
  1655. return found;
  1656. },
  1657.  
  1658. /**
  1659. Get campaign schedule for timeline
  1660. @method setCampaignsSchedule
  1661. @param {Number} i_campaign_timeline_id
  1662. @param {Object} i_key
  1663. @param {Object} i_value
  1664. **/
  1665. setCampaignsSchedule: function (i_campaign_timeline_id, i_key, i_value) {
  1666. var self = this;
  1667. $(self.m_msdb.table_campaign_timeline_schedules().getAllPrimaryKeys()).each(function (k, campaign_timeline_schedule_id) {
  1668. var recCampaignTimelineSchedule = self.m_msdb.table_campaign_timeline_schedules().getRec(campaign_timeline_schedule_id);
  1669. if (recCampaignTimelineSchedule.campaign_timeline_id == i_campaign_timeline_id) {
  1670. self.m_msdb.table_campaign_timeline_schedules().openForEdit(campaign_timeline_schedule_id);
  1671. var recScheduler = self.m_msdb.table_campaign_timeline_schedules().getRec(campaign_timeline_schedule_id);
  1672. recScheduler[i_key] = i_value;
  1673. }
  1674. });
  1675. },
  1676.  
  1677. /**
  1678. Set the sequence index of a timeline in campaign. If timeline is not found in sequencer, we insert it with the supplied i_sequenceIndex
  1679. @method setCampaignTimelineSequencerIndex
  1680. @param {Number} i_campaign_id
  1681. @param {Number} i_campaign_timeline_id
  1682. @param {Number} i_sequenceIndex is the index to use for the timeline so we can playback the timeline in the specified index order
  1683. @return none
  1684. **/
  1685. setCampaignTimelineSequencerIndex: function (i_campaign_id, i_campaign_timeline_id, i_sequenceIndex) {
  1686. var self = this;
  1687. var updatedSequence = false;
  1688. $(self.m_msdb.table_campaign_timeline_sequences().getAllPrimaryKeys()).each(function (k, campaign_timeline_sequence_id) {
  1689. var recCampaignTimelineSequence = self.m_msdb.table_campaign_timeline_sequences().getRec(campaign_timeline_sequence_id);
  1690. if (recCampaignTimelineSequence.campaign_timeline_id == i_campaign_timeline_id) {
  1691. self.m_msdb.table_campaign_timeline_sequences().openForEdit(campaign_timeline_sequence_id);
  1692. var recEditCampaignTimelineSequence = self.m_msdb.table_campaign_timeline_sequences().getRec(campaign_timeline_sequence_id);
  1693. recEditCampaignTimelineSequence.sequence_index = i_sequenceIndex;
  1694. recEditCampaignTimelineSequence.sequence_count = 0;
  1695. updatedSequence = true;
  1696. }
  1697. });
  1698.  
  1699. // i_campaign_timeline_id was not found in the sequencer so create new record
  1700. if (updatedSequence == false) {
  1701. var table_campaign_timeline_sequences = self.m_msdb.table_campaign_timeline_sequences();
  1702. var recCampaignTimelineSequence = table_campaign_timeline_sequences.createRecord();
  1703. recCampaignTimelineSequence.sequence_index = i_sequenceIndex;
  1704. recCampaignTimelineSequence.sequence_count = 0;
  1705. recCampaignTimelineSequence.campaign_timeline_id = i_campaign_timeline_id;
  1706. recCampaignTimelineSequence.campaign_id = i_campaign_id;
  1707. table_campaign_timeline_sequences.addRecord(recCampaignTimelineSequence);
  1708. }
  1709. },
  1710.  
  1711. /**
  1712. Check that every timeline within a campaign has a scheduler table entry, if not, create one with default values
  1713. @method checkAndCreateCampaignTimelineScheduler
  1714. @param {Number} i_campaign_id
  1715. @return none
  1716. **/
  1717. checkAndCreateCampaignTimelineScheduler: function (i_campaign_id) {
  1718. var self = this;
  1719. $(self.m_msdb.table_campaign_timelines().getAllPrimaryKeys()).each(function (k, campaign_timeline_id) {
  1720. var recCampaignTimeline = self.m_msdb.table_campaign_timelines().getRec(campaign_timeline_id);
  1721.  
  1722. // if found a one timeline that belongs to i_campaign_id
  1723. if (recCampaignTimeline['campaign_id'] == i_campaign_id) {
  1724. var schedulerFound = 0;
  1725. $(self.m_msdb.table_campaign_timeline_schedules().getAllPrimaryKeys()).each(function (k, campaign_timeline_schedule_id) {
  1726. var recCampaignTimelineSchedule = self.m_msdb.table_campaign_timeline_schedules().getRec(campaign_timeline_schedule_id);
  1727. if (recCampaignTimelineSchedule.campaign_timeline_id == campaign_timeline_id)
  1728. schedulerFound = 1;
  1729. });
  1730. if (!schedulerFound)
  1731. pepper.createCampaignTimelineScheduler(i_campaign_id, campaign_timeline_id);
  1732. }
  1733. });
  1734. },
  1735.  
  1736. /**
  1737. Create a campaign timelime scheduler record for new timeline
  1738. @method createCampaignTimelineScheduler
  1739. @param {Number} i_campaign_id
  1740. @param {Number} i_campaign_timeline_id
  1741. @return none
  1742. **/
  1743. createCampaignTimelineScheduler: function (i_campaign_id, i_campaign_timeline_id) {
  1744. var self = this;
  1745. var startDate = new Date();
  1746. var endDate = new Date();
  1747. endDate.setDate(endDate.getDate() + 30);
  1748. var dateStart = startDate.getMonth() + 1 + '/' + startDate.getDate() + '/' + startDate.getFullYear() + ' 12:00 AM';
  1749. var dateEnd = endDate.getMonth() + 1 + '/' + endDate.getDate() + '/' + endDate.getFullYear() + ' 12:00 AM';
  1750. var table_campaign_timeline_schedules = self.m_msdb.table_campaign_timeline_schedules();
  1751. var recCampaignTimelineSchedules = table_campaign_timeline_schedules.createRecord();
  1752. recCampaignTimelineSchedules.campaign_timeline_id = i_campaign_timeline_id;
  1753. recCampaignTimelineSchedules.custom_duration = 'True';
  1754. recCampaignTimelineSchedules.duration = 3600;
  1755. recCampaignTimelineSchedules.repeat_type = 1;
  1756. recCampaignTimelineSchedules.week_days = 127;
  1757. recCampaignTimelineSchedules.conflict = false;
  1758. recCampaignTimelineSchedules.pattern_name = 'pattern';
  1759. recCampaignTimelineSchedules.priority = 1;
  1760. recCampaignTimelineSchedules.start_date = dateStart;
  1761. recCampaignTimelineSchedules.end_date = dateEnd;
  1762. table_campaign_timeline_schedules.addRecord(recCampaignTimelineSchedules);
  1763. },
  1764.  
  1765. /**
  1766. Get the timeline id of the specific sequencer index offset (0 based) under the specified campaign
  1767. @method getCampaignTimelineIdOfSequencerIndex
  1768. @param {Number} i_campaign_id
  1769. @param {Number} i_sequence_index
  1770. @return {Number} timeline_id
  1771. **/
  1772. getCampaignTimelineIdOfSequencerIndex: function (i_campaign_id, i_sequence_index) {
  1773. var self = this;
  1774. var timeline_id = -1;
  1775. $(self.m_msdb.table_campaign_timeline_sequences().getAllPrimaryKeys()).each(function (k, campaign_timeline_sequence_id) {
  1776. var recCampaignTimelineSequence = self.m_msdb.table_campaign_timeline_sequences().getRec(campaign_timeline_sequence_id);
  1777. var sequenceIndex = recCampaignTimelineSequence['sequence_index'];
  1778. if (sequenceIndex == i_sequence_index && i_campaign_id == recCampaignTimelineSequence['campaign_id'])
  1779. timeline_id = recCampaignTimelineSequence['campaign_timeline_id']
  1780. });
  1781. return timeline_id;
  1782. },
  1783.  
  1784. /**
  1785. Get the sequence index of a timeline in the specified campaign
  1786. @method getCampaignTimelineSequencerIndex
  1787. @param {Number} i_campaign_timeline_id
  1788. @return {Number} sequenceIndex
  1789. **/
  1790. getCampaignTimelineSequencerIndex: function (i_campaign_timeline_id) {
  1791. var self = this;
  1792. var sequenceIndex = -1;
  1793.  
  1794. $(self.m_msdb.table_campaign_timeline_sequences().getAllPrimaryKeys()).each(function (k, campaign_timeline_sequence_id) {
  1795. var recCampaignTimelineSequence = self.m_msdb.table_campaign_timeline_sequences().getRec(campaign_timeline_sequence_id);
  1796. if (recCampaignTimelineSequence['campaign_timeline_id'] == i_campaign_timeline_id) {
  1797. sequenceIndex = recCampaignTimelineSequence['sequence_index'];
  1798. }
  1799. });
  1800. return sequenceIndex;
  1801. },
  1802.  
  1803. /**
  1804. Get all none deleted (!=3) resources per current account
  1805. @method getResources
  1806. @return {Array} all records of all resources in current account
  1807. **/
  1808. getResources: function () {
  1809. var self = this;
  1810. var resources = [];
  1811.  
  1812. $(self.m_msdb.table_resources().getAllPrimaryKeys()).each(function (k, resource_id) {
  1813. var recResource = self.m_msdb.table_resources().getRec(resource_id);
  1814. // dont process deleted resources
  1815. if (recResource['change_type'] == 3)
  1816. return;
  1817. var resourceName = resources.push(recResource);
  1818. });
  1819. return resources;
  1820. },
  1821.  
  1822. /**
  1823. Get a resource record via its resource_id.
  1824. @method getResourceRecord
  1825. @param {Number} i_resource_id
  1826. @return {Object} foundResourceRecord
  1827. **/
  1828. getResourceRecord: function (i_resource_id) {
  1829. var self = this;
  1830. return self.m_msdb.table_resources().getRec(i_resource_id);
  1831. },
  1832.  
  1833. /**
  1834. Get the type of a resource (png/jpg...) for specified native_id
  1835. @method getResourceType
  1836. @param {Number} i_resource_id
  1837. @return {String} resourceType
  1838. **/
  1839. getResourceType: function (i_resource_id) {
  1840. var self = this;
  1841. var recResource = self.m_msdb.table_resources().getRec(i_resource_id);
  1842. return recResource['resource_type'];
  1843. },
  1844.  
  1845. /**
  1846. Get the native resource id from handle
  1847. @method getResourceNativeID
  1848. @param {Number} i_resource_id
  1849. @return {Number} nativeID
  1850. **/
  1851. getResourceNativeID: function (i_resource_id) {
  1852. var self = this;
  1853. var recResource = self.m_msdb.table_resources().getRec(i_resource_id);
  1854. if (_.isNull(recResource))
  1855. return null;
  1856. return recResource['native_id'];
  1857. },
  1858.  
  1859. /**
  1860. Get the name of a resource from the resources table using it's native_id
  1861. @method getResourceName
  1862. @param {Number} i_resource_id
  1863. @return {Number} resourceName
  1864. **/
  1865. getResourceName: function (i_resource_id) {
  1866. var self = this;
  1867. var recResource = self.m_msdb.table_resources().getRec(i_resource_id);
  1868. return recResource['resource_name'];
  1869. },
  1870.  
  1871. /**
  1872. Set a resource record via its resource_id.
  1873. The method uses generic key / value fields so it can set any part of the record.
  1874. @method setResourceRecord
  1875. @param {Number} i_resource_id
  1876. @param {Number} i_key
  1877. @param {String} i_value
  1878. @return {Object} foundResourceRecord
  1879. **/
  1880. setResourceRecord: function (i_resource_id, i_key, i_value) {
  1881. var self = this;
  1882. self.m_msdb.table_resources().openForEdit(i_resource_id);
  1883. var recResource = self.m_msdb.table_resources().getRec(i_resource_id);
  1884. recResource[i_key] = i_value;
  1885. },
  1886.  
  1887. /**
  1888. Remove a campaign record
  1889. @method removeCampaign
  1890. @param {Number} i_campaign_id
  1891. @return none
  1892. **/
  1893. removeCampaign: function (i_campaign_id) {
  1894. var self = this;
  1895. self.m_msdb.table_campaigns().openForDelete(i_campaign_id);
  1896. },
  1897.  
  1898. /**
  1899. Remove campaign board_id
  1900. @method removeCampaignBoard
  1901. @param {Number} i_campaign_id
  1902. @return none
  1903. **/
  1904. removeCampaignBoard: function (i_campaign_id) {
  1905. var self = this;
  1906. $(self.m_msdb.table_campaign_boards().getAllPrimaryKeys()).each(function (k, campaign_board_id) {
  1907. var recCampaignBoard = self.m_msdb.table_campaign_boards().getRec(campaign_board_id);
  1908. if (recCampaignBoard['campaign_id'] == i_campaign_id) {
  1909. self.m_msdb.table_campaign_boards().openForDelete(campaign_board_id);
  1910. }
  1911. });
  1912. },
  1913.  
  1914. /**
  1915. Remove all boards in msdb
  1916. @method removeAllBoards
  1917. @return none
  1918. **/
  1919. removeAllBoards: function () {
  1920. var self = this;
  1921.  
  1922. $(self.m_msdb.table_boards().getAllPrimaryKeys()).each(function (k, board_id) {
  1923. self.m_msdb.table_boards().openForDelete(board_id);
  1924. });
  1925. },
  1926.  
  1927. /**
  1928. Remove a block (i.e.: player) from campaign > timeline > channel
  1929. @method removeBlockFromTimelineChannel
  1930. @param {Number} i_block_id
  1931. @return none
  1932. **/
  1933. removeBlockFromTimelineChannel: function (i_block_id) {
  1934. var self = this;
  1935. var status = self.m_msdb.table_campaign_timeline_chanel_players().openForDelete(i_block_id);
  1936. pepper.fire(Pepper['REMOVE_TIMELINE_CHANNEL_BLOCK'], self, null, i_block_id);
  1937. },
  1938.  
  1939. /**
  1940. Remove all blocks (i.e.: players) from campaign > timeline > channel
  1941. @method removeBlocksFromTimelineChannel
  1942. @param {Number} i_block_id
  1943. @return none
  1944. **/
  1945. removeBlocksFromTimelineChannel: function (i_campaign_timeline_chanel_id) {
  1946. var self = this;
  1947. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  1948. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  1949. if (recCampaignTimelineChannelPlayer['campaign_timeline_chanel_id'] == i_campaign_timeline_chanel_id) {
  1950. var status = self.m_msdb.table_campaign_timeline_chanel_players().openForDelete(campaign_timeline_chanel_player_id);
  1951. }
  1952. });
  1953. },
  1954.  
  1955. /**
  1956. Remove a timeline from sequences
  1957. @method removeTimelineFromSequences
  1958. @param {Number} i_timeline_id
  1959. @return none
  1960. **/
  1961. removeTimelineFromSequences: function (i_campaign_timeline_id) {
  1962. var self = this;
  1963. $(self.m_msdb.table_campaign_timeline_sequences().getAllPrimaryKeys()).each(function (k, campaign_timeline_sequence_id) {
  1964. var recCampaignTimelineSequence = self.m_msdb.table_campaign_timeline_sequences().getRec(campaign_timeline_sequence_id);
  1965. if (recCampaignTimelineSequence['campaign_timeline_id'] == i_campaign_timeline_id) {
  1966. self.m_msdb.table_campaign_timeline_sequences().openForDelete(campaign_timeline_sequence_id);
  1967. }
  1968. });
  1969. },
  1970.  
  1971. /**
  1972. Remove board template from timeline
  1973. @method removeBoardTemplateFromTimeline
  1974. @param {Number} i_timeline_id
  1975. @return {Number} campaign_timeline_board_template_id
  1976. **/
  1977. removeBoardTemplateFromTimeline: function (i_timeline_id) {
  1978. var self = this;
  1979. var campaign_timeline_board_template_id = pepper.getTemplatesOfTimeline(i_timeline_id)[0];
  1980. self.m_msdb.table_campaign_timeline_board_templates().openForDelete(campaign_timeline_board_template_id);
  1981. return campaign_timeline_board_template_id;
  1982. },
  1983.  
  1984. /**
  1985. Remove board template
  1986. @method removeBoardTemplate
  1987. @param {Number} i_campaign_timeline_board_template_id
  1988. **/
  1989. removeBoardTemplate: function (i_board_template_id) {
  1990. var self = this;
  1991. self.m_msdb.table_board_templates().openForDelete(i_board_template_id);
  1992. return i_board_template_id;
  1993. },
  1994.  
  1995. /**
  1996. Remove board template viewers
  1997. @method removeBoardTemplateViewers
  1998. @param {Number} i_board_template_id
  1999. @return {Array} boardTemplateViewerIDs
  2000. **/
  2001. removeBoardTemplateViewers: function (i_board_template_id) {
  2002. var self = this;
  2003. var boardTemplateViewerIDs = [];
  2004.  
  2005. $(pepper.m_msdb.table_board_template_viewers().getAllPrimaryKeys()).each(function (k, board_template_viewer_id) {
  2006. var recBoardTemplateViewers = self.m_msdb.table_board_template_viewers().getRec(board_template_viewer_id);
  2007. if (recBoardTemplateViewers['board_template_id'] == i_board_template_id) {
  2008. var a = self.m_msdb.table_board_template_viewers().openForDelete(board_template_viewer_id);
  2009. boardTemplateViewerIDs.push(board_template_viewer_id);
  2010. }
  2011. });
  2012. return boardTemplateViewerIDs;
  2013. },
  2014.  
  2015. /**
  2016. Remove board template viewer
  2017. @method removeBoardTemplateViewer
  2018. @param {Number} i_board_template_id
  2019. @param {Number} i_board_template_viewer_id
  2020. **/
  2021. removeBoardTemplateViewer: function (i_board_template_id, i_board_template_viewer_id) {
  2022. var self = this;
  2023. self.m_msdb.table_board_template_viewers().openForDelete(i_board_template_viewer_id);
  2024. },
  2025.  
  2026. /**
  2027. Remove board template viewers
  2028. @method removeTimelineBoardViewerChannels
  2029. @param {Number} i_campaign_timeline_board_template_id
  2030. @return none
  2031. **/
  2032. removeTimelineBoardViewerChannels: function (i_campaign_timeline_board_template_id) {
  2033. var self = this;
  2034.  
  2035. $(self.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2036. var recCampaignTimelineViewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2037. if (recCampaignTimelineViewerChanels['campaign_timeline_board_template_id'] == i_campaign_timeline_board_template_id) {
  2038. self.m_msdb.table_campaign_timeline_board_viewer_chanels().openForDelete(campaign_timeline_board_viewer_chanel_id);
  2039. }
  2040. });
  2041. },
  2042.  
  2043. /**
  2044. Remove the association between the screen division (aka viewer) and all channels that are assigned with that viewer
  2045. @method removeTimelineBoardViewerChannel
  2046. @param {Number} i_campaign_timeline_board_template_id
  2047. @return {Number} return the channel that was de-associated with viewer
  2048. **/
  2049. removeTimelineBoardViewerChannel: function (i_board_template_viewer_id) {
  2050. var self = this;
  2051. var campaign_timeline_chanel_id = -1;
  2052. $(self.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2053. var recCampaignTimelineViewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2054. if (recCampaignTimelineViewerChanels['board_template_viewer_id'] == i_board_template_viewer_id) {
  2055. campaign_timeline_chanel_id = recCampaignTimelineViewerChanels['campaign_timeline_chanel_id'];
  2056. self.m_msdb.table_campaign_timeline_board_viewer_chanels().openForDelete(campaign_timeline_board_viewer_chanel_id);
  2057. }
  2058. });
  2059. return campaign_timeline_chanel_id;
  2060. },
  2061.  
  2062. /**
  2063. Remove a channel from a timeline
  2064. @method removeChannelFromTimeline
  2065. @param {Number} i_channel_id
  2066. @return {Boolean} status
  2067. **/
  2068. removeChannelFromTimeline: function (i_channel_id) {
  2069. var self = this;
  2070. return self.m_msdb.table_campaign_timeline_chanels().openForDelete(i_channel_id);
  2071. },
  2072.  
  2073. /**
  2074. Remove blocks (a.k.a players) from all campaign that use the specified resource_id (native id)
  2075. @method removeBlocksWithResourceID
  2076. @param {Number} i_resource_id
  2077. @return none
  2078. **/
  2079. removeBlocksWithResourceID: function (i_resource_id) {
  2080. var self = this;
  2081. // self.m_msdb.table_resources().openForDelete(i_resource_id);
  2082.  
  2083. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2084. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2085. var playerData = recCampaignTimelineChannelPlayer['player_data'];
  2086. var xPlayerData = x2js.xml_str2json(playerData);
  2087. var resourceID = undefined;
  2088. try {
  2089. resourceID = xPlayerData['Player']['Data']['Resource']['_hResource'];
  2090. } catch (e) {
  2091. }
  2092. if (resourceID != undefined && resourceID == i_resource_id) {
  2093. pepper.removeBlockFromTimelineChannel(campaign_timeline_chanel_player_id);
  2094. }
  2095. });
  2096. },
  2097.  
  2098. /**
  2099. Remove blocks (a.k.a players) from all campaign timeline channels that use the specified scene_id
  2100. @method removeBlocksWithSceneID
  2101. @param {Number} i_scene_id
  2102. @return none
  2103. **/
  2104. removeBlocksWithSceneID: function (i_scene_id) {
  2105. var self = this;
  2106. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2107. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2108. var playerData = recCampaignTimelineChannelPlayer['player_data'];
  2109. var domPlayerData = $.parseXML(playerData);
  2110. var scene_id = $(domPlayerData).find('Player').attr('hDataSrc');
  2111. if (scene_id == i_scene_id)
  2112. pepper.removeBlockFromTimelineChannel(campaign_timeline_chanel_player_id);
  2113. });
  2114. },
  2115.  
  2116. /**
  2117. Remove all refernce to a resource id from within Scenes > BlockCollections that refer to that particulat resource id
  2118. In other words, check all scenes for existing block collections, and if they refer to resource id, remove that entry
  2119. @method removeResourceFromBlockCollectionInScenes
  2120. @param {Number} i_resource_id resource id to search for and remove in all scenes > BlockCollections
  2121. **/
  2122. removeResourceFromBlockCollectionInScenes: function (i_resource_id) {
  2123. var self = this;
  2124. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  2125. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  2126. var domSceneData = $.parseXML(recPlayerData['player_data_value']);
  2127. var currentSceneID = $(domSceneData).find('Player').eq(0).attr('id');
  2128. $(domSceneData).find('Player').each(function (i, playerData) {
  2129. $(playerData).find('[player="' + BB.CONSTS.BLOCKCODE_COLLECTION + '"]').each(function (i, playerDataBlockCollection) {
  2130. $(playerDataBlockCollection).find('Collection').children().each(function (k, page) {
  2131. var resource_id = $(page).find('Resource').attr('hResource');
  2132. if (i_resource_id == resource_id) {
  2133. $(page).remove();
  2134. currentSceneID = pepper.sterilizePseudoId(currentSceneID);
  2135. self.m_msdb.table_player_data().openForEdit(currentSceneID);
  2136. var player_data = pepper.xmlToStringIEfix(domSceneData);
  2137. recPlayerData['player_data_value'] = player_data;
  2138. }
  2139. });
  2140. });
  2141. });
  2142. });
  2143. },
  2144.  
  2145. /**
  2146. Remove all refernce to a scene id from within Scenes > BlockCollections that refer to that particulat scene id
  2147. In other words, check all scenes for existing block collections, and if they refer to scene_id, remove that entry
  2148. @method removeSceneFromBlockCollectionWithSceneId
  2149. @param {Number} i_scene_id scene id to search for and remove in all scenes > BlockCollections
  2150. **/
  2151. removeSceneFromBlockCollectionInScenes: function (i_scene_id) {
  2152. var self = this;
  2153. $(self.m_msdb.table_player_data().getAllPrimaryKeys()).each(function (k, player_data_id) {
  2154. var recPlayerData = self.m_msdb.table_player_data().getRec(player_data_id);
  2155. var domSceneData = $.parseXML(recPlayerData['player_data_value']);
  2156. var currentSceneID = $(domSceneData).find('Player').eq(0).attr('id');
  2157. $(domSceneData).find('Player').each(function (i, playerData) {
  2158. $(playerData).find('[player="' + BB.CONSTS.BLOCKCODE_COLLECTION + '"]').each(function (i, playerDataBlockCollection) {
  2159. $(playerDataBlockCollection).find('Collection').children().each(function (k, page) {
  2160. var scene_id = $(page).find('Player').attr('hDataSrc');
  2161. if (scene_id == i_scene_id) {
  2162. $(page).remove();
  2163. currentSceneID = pepper.sterilizePseudoId(currentSceneID);
  2164. self.m_msdb.table_player_data().openForEdit(currentSceneID);
  2165. var player_data = pepper.xmlToStringIEfix(domSceneData);
  2166. recPlayerData['player_data_value'] = player_data;
  2167. }
  2168. });
  2169. });
  2170. });
  2171. });
  2172. },
  2173.  
  2174. /**
  2175. Remove the scene from any block collection which resides in campaign timeline channels that uses that scene in its collection list
  2176. @method removeSceneFromBlockCollectionsInChannels
  2177. @param {Number} i_scene_id
  2178. @return none
  2179. **/
  2180. removeSceneFromBlockCollectionsInChannels: function (i_scene_id) {
  2181. var self = this;
  2182. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2183. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2184. var playerData = recCampaignTimelineChannelPlayer['player_data'];
  2185. var domPlayerData = $.parseXML(playerData);
  2186. var blockType = $(domPlayerData).find('Player').attr('player');
  2187. if (blockType == BB.CONSTS.BLOCKCODE_COLLECTION) {
  2188. $(domPlayerData).find('Collection').children().each(function (k, page) {
  2189. var scene_hDataSrc;
  2190. var type = $(page).attr('type');
  2191. if (type == 'scene') {
  2192. scene_hDataSrc = $(page).find('Player').attr('hDataSrc');
  2193. if (scene_hDataSrc == i_scene_id) {
  2194. $(page).remove();
  2195. var player_data = pepper.xmlToStringIEfix(domPlayerData)
  2196. pepper.m_msdb.table_campaign_timeline_chanel_players().openForEdit(campaign_timeline_chanel_player_id);
  2197. pepper.setCampaignTimelineChannelPlayerRecord(campaign_timeline_chanel_player_id, 'player_data', player_data);
  2198. }
  2199. }
  2200. });
  2201. }
  2202. });
  2203. },
  2204.  
  2205. /**
  2206. Remove the resource from any block collection which resides in campaign timeline channels that uses that resource in its collection list
  2207. @method removeResourceFromBlockCollectionsInChannel
  2208. @param {Number} i_resource_id
  2209. @return none
  2210. **/
  2211. removeResourceFromBlockCollectionsInChannel: function (i_resource_id) {
  2212. var self = this;
  2213. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2214. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2215. var playerData = recCampaignTimelineChannelPlayer['player_data'];
  2216. var domPlayerData = $.parseXML(playerData);
  2217. var blockType = $(domPlayerData).find('Player').attr('player');
  2218. if (blockType == BB.CONSTS.BLOCKCODE_COLLECTION) {
  2219. $(domPlayerData).find('Collection').children().each(function (k, page) {
  2220. var resource_hResource;
  2221. var type = $(page).attr('type');
  2222. if (type == 'resource') {
  2223. resource_hResource = $(page).find('Resource').attr('hResource');
  2224. if (resource_hResource == i_resource_id) {
  2225. $(page).remove();
  2226. var player_data = pepper.xmlToStringIEfix(domPlayerData)
  2227. pepper.m_msdb.table_campaign_timeline_chanel_players().openForEdit(campaign_timeline_chanel_player_id);
  2228. pepper.setCampaignTimelineChannelPlayerRecord(campaign_timeline_chanel_player_id, 'player_data', player_data);
  2229. }
  2230. }
  2231. });
  2232. }
  2233. });
  2234. },
  2235.  
  2236. /**
  2237. Remove a timeline from a campaign.
  2238. @method removeTimelineFromCampaign
  2239. @param {Number} i_campaign_timeline_id
  2240. @return none
  2241. **/
  2242. removeTimelineFromCampaign: function (i_campaign_timeline_id) {
  2243. var self = this;
  2244. self.m_msdb.table_campaign_timelines().openForDelete(i_campaign_timeline_id);
  2245. pepper.fire(Pepper['TIMELINE_DELETED'], self, null, i_campaign_timeline_id);
  2246. },
  2247.  
  2248. /**
  2249. Remove a schedule from timeline
  2250. @method removeSchedulerFromTime
  2251. @param {Number} i_campaign_timeline_id
  2252. @return none
  2253. **/
  2254. removeSchedulerFromTime: function (i_campaign_timeline_id) {
  2255. var self = this;
  2256. $(self.m_msdb.table_campaign_timeline_schedules().getAllPrimaryKeys()).each(function (k, campaign_timeline_schedule_id) {
  2257. var recCampaignTimelineSchedule = self.m_msdb.table_campaign_timeline_schedules().getRec(campaign_timeline_schedule_id);
  2258. if (recCampaignTimelineSchedule.campaign_timeline_id == i_campaign_timeline_id) {
  2259. self.m_msdb.table_campaign_timeline_schedules().openForDelete(campaign_timeline_schedule_id);
  2260. pepper.fire(Pepper['TIMELINE_SCHEDULE_DELETED'], self, null, i_campaign_timeline_id);
  2261. }
  2262. });
  2263. },
  2264.  
  2265. /**
  2266. Remove a timeline from a campaign.
  2267. @method removeResource
  2268. @param {Number} i_resource_id
  2269. @return none
  2270. **/
  2271. removeResource: function (i_resource_id) {
  2272. var self = this;
  2273. self.m_msdb.table_resources().openForDelete(i_resource_id);
  2274. },
  2275.  
  2276. /**
  2277. Get a list of all campaigns per the account
  2278. @method getCampaignIDs
  2279. @return {Array} campaigns
  2280. **/
  2281. getCampaignIDs: function () {
  2282. var self = this;
  2283. var campaigns = [];
  2284. $(self.m_msdb.table_campaigns().getAllPrimaryKeys()).each(function (k, campaign_id) {
  2285. campaigns.push(campaign_id);
  2286. });
  2287. return campaigns;
  2288. },
  2289.  
  2290. /**
  2291. Get a campaign table record for the specified i_campaign_id.
  2292. @method getCampaignRecord
  2293. @param {Number} i_campaign_id
  2294. @return {Object} foundCampaignRecord
  2295. **/
  2296. getCampaignRecord: function (i_campaign_id) {
  2297. var self = this;
  2298. return self.m_msdb.table_campaigns().getRec(i_campaign_id);
  2299. },
  2300.  
  2301. /**
  2302. Set a campaign table record for the specified i_campaign_id.
  2303. The method uses generic key / value fields so it can set any part of the record.
  2304. @method setCampaignRecord
  2305. @param {Number} i_campaign_id
  2306. @param {Object} i_key
  2307. @param {String} i_value
  2308. @return {Object} foundCampaignRecord
  2309. **/
  2310. setCampaignRecord: function (i_campaign_id, i_key, i_value) {
  2311. var self = this;
  2312. self.m_msdb.table_campaigns().openForEdit(i_campaign_id);
  2313. var recCampaign = self.m_msdb.table_campaigns().getRec(i_campaign_id);
  2314. recCampaign[i_key] = i_value;
  2315. },
  2316.  
  2317. /**
  2318. Returns all of the campaign IDs that all stations belonging to account are associated with
  2319. @method getStationCampaignIDs
  2320. @return {Array} array of campaign IDs
  2321. **/
  2322. getStationCampaignIDs: function () {
  2323. var self = this;
  2324. var campaignIDs = [];
  2325. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2326. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2327. var campaign_board_id = recBranchStation['campaign_board_id'];
  2328. campaignIDs.push(self.getCampaignIdFromCampaignBoardId(campaign_board_id));
  2329. });
  2330. return campaignIDs;
  2331. },
  2332.  
  2333. /**
  2334. Sync to pepper and get station name for station id, callback on server sync return
  2335. @method getStationNameAsync
  2336. @param {Number} i_stationID
  2337. @param {Number} i_callBack
  2338. **/
  2339. getStationNameAsync: function (i_stationID, i_callBack) {
  2340. pepper.sync(function () {
  2341. $(pepper.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2342. var recBranchStation = pepper.m_msdb.table_branch_stations().getRec(branch_station_id);
  2343. if (recBranchStation['native_id'] == i_stationID) {
  2344. i_callBack(recBranchStation['station_name'])
  2345. }
  2346. });
  2347. });
  2348. },
  2349.  
  2350. /**
  2351. Get station name from msdb (no remote server async)
  2352. @method getStationNameSync
  2353. @param {Number} i_stationID
  2354. @return {String} stationName
  2355. **/
  2356. getStationNameSync: function (i_stationID) {
  2357. var self = this;
  2358. var stationName = '';
  2359. $(pepper.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2360. var recBranchStation = pepper.m_msdb.table_branch_stations().getRec(branch_station_id);
  2361. if (recBranchStation['native_id'] == i_stationID) {
  2362. var recBranch = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2363. stationName = recBranch['station_name'];
  2364. }
  2365. });
  2366. return stationName;
  2367. },
  2368.  
  2369. /**
  2370. Get station name from msdb (no remote server async)
  2371. @method getAdPackContNames
  2372. @param {Number} i_ad_local_content_id
  2373. @return {Object}
  2374. **/
  2375. getAdPackContNames: function (i_ad_local_content_id) {
  2376. var self = this;
  2377. var result = {
  2378. contentName: '',
  2379. packageName: ''
  2380. };
  2381. $(pepper.m_msdb.table_ad_local_contents().getAllPrimaryKeys()).each(function (k, ad_local_content_id) {
  2382. var recAdLocalContent = pepper.m_msdb.table_ad_local_contents().getRec(ad_local_content_id);
  2383. if (recAdLocalContent.native_id == i_ad_local_content_id) {
  2384. var recAdLocalPackage = pepper.m_msdb.table_ad_local_packages().getRec(recAdLocalContent.ad_local_package_id);
  2385. result = {
  2386. contentName: recAdLocalContent.content_name,
  2387. packageName: recAdLocalPackage.package_name
  2388. };
  2389. }
  2390. });
  2391. return result;
  2392. },
  2393.  
  2394. /**
  2395. save new station name
  2396. @method setStationName
  2397. @param {Number} branch_station_id
  2398. @param {String} i_callBack
  2399. **/
  2400. setStationName: function (i_stationID, i_name) {
  2401. var self = this;
  2402. $(pepper.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2403. var recBranchStation = pepper.m_msdb.table_branch_stations().getRec(branch_station_id);
  2404. if (recBranchStation['native_id'] == i_stationID) {
  2405. self.m_msdb.table_branch_stations().openForEdit(branch_station_id);
  2406. var recBranch = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2407. recBranch['station_name'] = i_name;
  2408. }
  2409. });
  2410. },
  2411.  
  2412. /**
  2413. Returns the campaign id that a station is bound to
  2414. @method getStationCampaignID
  2415. @param {Number} i_native_station_id
  2416. @return {Number} campaign_id
  2417. **/
  2418. getStationCampaignID: function (i_native_station_id) {
  2419. var self = this;
  2420. var campaignID = -1;
  2421. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2422. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2423. if (recBranchStation['native_id'] == i_native_station_id) {
  2424. var campaign_board_id = recBranchStation['campaign_board_id'];
  2425. campaignID = self.getCampaignIdFromCampaignBoardId(campaign_board_id);
  2426. }
  2427. });
  2428. return campaignID;
  2429. },
  2430.  
  2431. /**
  2432. Returns the record for a station id
  2433. @method getStationRecord
  2434. @param {Number} i_native_station_id
  2435. @return {Object} recBranchStation
  2436. **/
  2437. getStationRecord: function (i_native_station_id) {
  2438. var self = this;
  2439. var record;
  2440. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2441. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2442. if (recBranchStation['native_id'] == i_native_station_id) {
  2443. record = recBranchStation;
  2444. }
  2445. });
  2446. return record;
  2447. },
  2448.  
  2449. /**
  2450. Set a station record via object arg into msdb table_branch_stations
  2451. @method getStationRecord
  2452. @param {Number} i_native_station_id
  2453. @param {Object} record
  2454. **/
  2455. setStationRecord: function (i_native_station_id, i_record) {
  2456. var self = this;
  2457. var record;
  2458. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2459. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2460. if (recBranchStation['native_id'] == i_native_station_id) {
  2461. self.m_msdb.table_branch_stations().openForEdit(branch_station_id);
  2462. var recBranchStationEdit = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2463. recBranchStationEdit = i_record;
  2464. }
  2465. });
  2466. },
  2467.  
  2468. /**
  2469. Set a station so its bound to campaign_id
  2470. @method SetStationCampaignID
  2471. @param {Number} i_native_station_id
  2472. @param {Number} i_campaign_id
  2473. **/
  2474. setStationCampaignID: function (i_native_station_id, i_campaign_id) {
  2475. var self = this;
  2476. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2477. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2478. if (recBranchStation['native_id'] == i_native_station_id) {
  2479. self.m_msdb.table_branch_stations().openForEdit(branch_station_id);
  2480. var recBranchStationEdit = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2481. var campaign_board_id = self.getCampaignBoardIdFromCampaignId(i_campaign_id);
  2482. recBranchStationEdit.campaign_board_id = campaign_board_id;
  2483. }
  2484. });
  2485. },
  2486.  
  2487.  
  2488. /**
  2489. Set a station to server mode enable / disable
  2490. @method setStationServerMode
  2491. @param {Number} i_native_station_id
  2492. @param {Boolean} i_mode
  2493. **/
  2494. setStationServerMode: function (i_native_station_id, i_enabled, i_lan_server_ip, i_port) {
  2495. var self = this;
  2496. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2497. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2498. if (recBranchStation['native_id'] == i_native_station_id) {
  2499. self.m_msdb.table_branch_stations().openForEdit(branch_station_id);
  2500. var recBranchStationEdit = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2501. recBranchStationEdit.lan_server_enabled = i_enabled;
  2502. recBranchStationEdit.lan_server_port = i_port;
  2503. recBranchStationEdit.lan_server_ip = i_lan_server_ip;
  2504. }
  2505. });
  2506. },
  2507.  
  2508. /**
  2509. Remove station, delete it from internal msdb and push to server on save
  2510. @method removeStation
  2511. @param {Number} i_station
  2512. **/
  2513. removeStation: function (i_native_station_id) {
  2514. var self = this;
  2515. $(self.m_msdb.table_branch_stations().getAllPrimaryKeys()).each(function (k, branch_station_id) {
  2516. var recBranchStation = self.m_msdb.table_branch_stations().getRec(branch_station_id);
  2517. if (recBranchStation['native_id'] == i_native_station_id) {
  2518. self.m_msdb.table_branch_stations().openForDelete(branch_station_id);
  2519. self.m_msdb.table_station_ads().openForDelete(branch_station_id);
  2520. }
  2521. });
  2522. },
  2523.  
  2524. /**
  2525. Upload new resources onto the remote server and return matching ids.
  2526. The element id is of an HTML id of a multi-part upload element.
  2527. @method uploadResources
  2528. @param {String} i_elementID
  2529. @return {Array} list of resources created from newly attached files or empty array if not valid resource loaded
  2530. **/
  2531. uploadResources: function (i_elementID) {
  2532. var self = this;
  2533. var i_uploadFileElement = document.getElementById(i_elementID);
  2534. var count = i_uploadFileElement.files.length;
  2535. for (var iFile = 0; iFile < count; iFile++) {
  2536. var fileName = i_uploadFileElement.files[iFile];
  2537. var fileExtension = fileName.name.split('.')[1];
  2538. var block = BB.PepperHelper.getBlockCodeFromFileExt(fileExtension);
  2539. if (block == -1)
  2540. return [];
  2541. }
  2542. var resourceList = self.m_loaderManager.createResources(document.getElementById(i_elementID));
  2543. BB.comBroker.fire(BB.EVENTS.ADDED_RESOURCE);
  2544. return resourceList;
  2545. },
  2546.  
  2547. /**
  2548. Set a timeline's total duration
  2549. @method setTimelineTotalDuration
  2550. @param {Number} i_campaign_timeline_id
  2551. @param {Number} i_totalDuration
  2552. **/
  2553. setTimelineTotalDuration: function (i_campaign_timeline_id, i_totalDuration) {
  2554. var self = this;
  2555. self.m_msdb.table_campaign_timelines().openForEdit(i_campaign_timeline_id);
  2556. var recCampaignTimeline = self.m_msdb.table_campaign_timelines().getRec(i_campaign_timeline_id);
  2557. recCampaignTimeline['timeline_duration'] = i_totalDuration;
  2558. },
  2559.  
  2560. /**
  2561. Get a timeline's duration which is set as the total sum of all blocks within the longest running channel
  2562. @method getTimelineTotalDuration
  2563. @param {Number} i_campaign_timeline_id
  2564. @return {Number} length in seconds
  2565. **/
  2566. getTimelineTotalDuration: function (i_campaign_timeline_id) {
  2567. var self = this;
  2568. var recCampaignTimeline = self.m_msdb.table_campaign_timelines().getRec(i_campaign_timeline_id);
  2569. if (!recCampaignTimeline)
  2570. return 0;
  2571. return recCampaignTimeline['timeline_duration'];
  2572. },
  2573.  
  2574. /**
  2575. Get the total duration in seconds of all given block ids
  2576. @method getTotalDurationOfBlocks
  2577. @param {Array} i_blocks
  2578. @return {Number} totalChannelLength
  2579. **/
  2580. getTotalDurationOfBlocks: function (i_blocks) {
  2581. var self = this;
  2582. var totalChannelLength = 0;
  2583.  
  2584. for (var i = 0; i < i_blocks.length; i++) {
  2585. var block_id = i_blocks[i];
  2586. $(pepper.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2587. if (block_id == campaign_timeline_chanel_player_id) {
  2588. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2589. var playerDuration = recCampaignTimelineChannelPlayer['player_duration']
  2590. pepper.m_msdb.table_campaign_timeline_chanel_players().openForEdit(campaign_timeline_chanel_player_id);
  2591. // log('player ' + block_id + ' offset ' + totalChannelLength + ' playerDuration ' + playerDuration);
  2592. totalChannelLength = totalChannelLength + parseFloat(playerDuration);
  2593. }
  2594. });
  2595. }
  2596. return totalChannelLength;
  2597. },
  2598.  
  2599. /**
  2600. Update a timeline's duration which is set as the total sum of all blocks within the longest running channel
  2601. @method calcTimelineTotalDuration
  2602. @param {Number} i_campaign_timeline_id
  2603. @return none
  2604. **/
  2605. calcTimelineTotalDuration: function (i_campaign_timeline_id) {
  2606. var self = this;
  2607. var longestChannelDuration = 0;
  2608. // Get all timelines
  2609. $(self.m_msdb.table_campaign_timelines().getAllPrimaryKeys()).each(function (k, campaign_timeline_id) {
  2610. if (campaign_timeline_id == i_campaign_timeline_id) {
  2611. // get all channels that belong to timeline
  2612. $(self.m_msdb.table_campaign_timeline_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_id) {
  2613. var recCampaignTimelineChannel = self.m_msdb.table_campaign_timeline_chanels().getRec(campaign_timeline_chanel_id);
  2614. if (campaign_timeline_id == recCampaignTimelineChannel['campaign_timeline_id']) {
  2615.  
  2616. var timelineDuration = 0;
  2617. // get all players / resources that belong timeline
  2618. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2619. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2620. if (campaign_timeline_chanel_id == recCampaignTimelineChannelPlayer['campaign_timeline_chanel_id']) {
  2621. // log(campaign_timeline_chanel_player_id + ' ' + recCampaignTimelineChannelPlayer['player_duration']);
  2622. timelineDuration += parseFloat(recCampaignTimelineChannelPlayer['player_duration']);
  2623. if (timelineDuration > longestChannelDuration)
  2624. longestChannelDuration = timelineDuration;
  2625. }
  2626. });
  2627. }
  2628. });
  2629. }
  2630. });
  2631. pepper.setCampaignTimelineRecord(i_campaign_timeline_id, 'timeline_duration', longestChannelDuration);
  2632. pepper.fire(Pepper['TIMELINE_LENGTH_CHANGED'], self, null, longestChannelDuration);
  2633. },
  2634.  
  2635. /**
  2636. Set a block (a.k.a player) on the timeline_channel to a specified length in total seconds.
  2637. @method setBlockTimelineChannelBlockLength
  2638. @param {Number} i_campaign_timeline_chanel_player_id {string} plyer / block id
  2639. @param {Number} i_hours total hours to play
  2640. @param {Number} i_minutes total minutes to play
  2641. @param {Number} i_seconds total seconds to play
  2642. @return none
  2643. **/
  2644. setBlockTimelineChannelBlockLength: function (i_campaign_timeline_chanel_player_id, i_hours, i_minutes, i_seconds) {
  2645. var self = this;
  2646.  
  2647. var totalSecInMin = 60;
  2648. var totalSecInHour = totalSecInMin * 60;
  2649. var totalSeconds = parseInt(i_seconds) + (parseInt(i_minutes) * totalSecInMin) + (parseInt(i_hours) * totalSecInHour)
  2650.  
  2651. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2652. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2653. if (campaign_timeline_chanel_player_id == i_campaign_timeline_chanel_player_id) {
  2654. self.m_msdb.table_campaign_timeline_chanel_players().openForEdit(campaign_timeline_chanel_player_id);
  2655. var recPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2656. recPlayer.player_duration = totalSeconds;
  2657. }
  2658. });
  2659. var returnData = {
  2660. campaignTimelineChanelPlayerID: i_campaign_timeline_chanel_player_id,
  2661. totalSeconds: totalSeconds
  2662. }
  2663. pepper.fire(Pepper['BLOCK_LENGTH_CHANGED'], self, null, returnData);
  2664. },
  2665.  
  2666. /**
  2667. Get all the block IDs of a particular channel.
  2668. Push them into an array so they are properly sorted by player offset time.
  2669. @method getChannelBlocksIDs
  2670. @param {Number} i_campaign_timeline_chanel_id
  2671. @return {Array} foundBlocks
  2672. **/
  2673. getChannelBlocks: function (i_campaign_timeline_chanel_id) {
  2674. var self = this;
  2675. var foundBlocks = [];
  2676. $(pepper.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  2677. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  2678. if (i_campaign_timeline_chanel_id == recCampaignTimelineChannelPlayer['campaign_timeline_chanel_id']) {
  2679. foundBlocks.push(campaign_timeline_chanel_player_id);
  2680. }
  2681. });
  2682. return foundBlocks;
  2683. },
  2684.  
  2685. /**
  2686. Get a block's (a.k.a player) total hours / minutes / seconds playback length on the timeline_channel.
  2687. @method getBlockTimelineChannelBlockLength
  2688. @param {Number} i_campaign_timeline_chanel_player_id
  2689. @return {Object} playbackLength as a json object with keys of hours minutes seconds
  2690. **/
  2691. getBlockTimelineChannelBlockLength: function (i_campaign_timeline_chanel_player_id) {
  2692. var self = this;
  2693. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(i_campaign_timeline_chanel_player_id);
  2694. var totalSeconds = recCampaignTimelineChannelPlayer['player_duration'];
  2695. return self.formatSecondsToObject(totalSeconds);
  2696. },
  2697.  
  2698. /**
  2699. Format an object to seconds
  2700. @method formatObjectToSeconds
  2701. @param {Object} i_object with hours minutes and seconds key / values
  2702. @return {Number}
  2703. **/
  2704. formatObjectToSeconds: function (i_object) {
  2705. var seconds = i_object.seconds;
  2706. var minutes = i_object.minutes;
  2707. var hours = i_object.hours;
  2708. hours = hours * 3600;
  2709. minutes = minutes * 60;
  2710. return seconds + minutes + hours;
  2711. },
  2712.  
  2713. /**
  2714. Format a seconds value into an object broken into hours / minutes / seconds
  2715. @method formatSecondsToObject
  2716. @param {Number} i_totalSeconds
  2717. @return {Object}
  2718. **/
  2719. formatSecondsToObject: function (i_totalSeconds) {
  2720. var seconds = 0;
  2721. var minutes = 0;
  2722. var hours = 0;
  2723. var totalInSeconds = i_totalSeconds;
  2724. if (i_totalSeconds >= 3600) {
  2725. hours = Math.floor(i_totalSeconds / 3600);
  2726. i_totalSeconds = i_totalSeconds - (hours * 3600);
  2727. }
  2728. if (i_totalSeconds >= 60) {
  2729. minutes = Math.floor(i_totalSeconds / 60);
  2730. seconds = i_totalSeconds - (minutes * 60);
  2731. }
  2732. if (hours == 0 && minutes == 0)
  2733. seconds = i_totalSeconds;
  2734. var playbackLength = {
  2735. hours: parseInt(hours),
  2736. minutes: parseInt(minutes),
  2737. seconds: parseInt(seconds),
  2738. totalInSeconds: parseInt(totalInSeconds)
  2739. };
  2740. return playbackLength;
  2741. },
  2742.  
  2743. /**
  2744. Get a player_id record from msdb by player_id primary key.
  2745. @method getCampaignTimelineChannelPlayerRecord
  2746. @param {Number} i_player_id
  2747. @return {Object} player record
  2748. **/
  2749. getCampaignTimelineChannelPlayerRecord: function (i_player_id) {
  2750. var self = this;
  2751. return self.m_msdb.table_campaign_timeline_chanel_players().getRec(i_player_id);
  2752. },
  2753.  
  2754. /**
  2755. Set a player_id record in msdb on key with value
  2756. The method uses generic key / value fields so it can set any part of the record.
  2757. @method setCampaignTimelineChannelPlayerRecord
  2758. @param {Number} i_player_id
  2759. @param {Object} i_key
  2760. @param {Object} i_value
  2761. @return none
  2762. **/
  2763. setCampaignTimelineChannelPlayerRecord: function (i_player_id, i_key, i_value) {
  2764. var self = this;
  2765. self.m_msdb.table_campaign_timeline_chanel_players().openForEdit(i_player_id);
  2766. var recPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(i_player_id);
  2767. recPlayer[i_key] = i_value;
  2768. },
  2769.  
  2770. /**
  2771. Get a channel_id record from table channels msdb by channel_id
  2772. @method getCampaignTimelineChannelRecord
  2773. @param {Number} i_channel_id
  2774. @return {Object} channel record
  2775. **/
  2776. getCampaignTimelineChannelRecord: function (i_channel_id) {
  2777. var self = this;
  2778. return self.m_msdb.table_campaign_timeline_chanels().getRec(i_channel_id);
  2779. },
  2780.  
  2781. /**
  2782. Set a channel_id record in channels table using key and value
  2783. The method uses generic key / value fields so it can set any part of the record.
  2784. @method setCampaignTimelineChannelRecord
  2785. @param {Number} i_channel_id
  2786. @param {Number} i_key
  2787. @param {String} i_value
  2788. @return none
  2789. **/
  2790. setCampaignTimelineChannelRecord: function (i_channel_id, i_key, i_value) {
  2791. var self = this;
  2792. self.m_msdb.table_campaign_timeline_chanels().openForEdit(i_channel_id);
  2793. var recChannel = self.m_msdb.table_campaign_timeline_chanels().getRec(i_channel_id);
  2794. recChannel[i_key] = i_value;
  2795. },
  2796.  
  2797. /**
  2798. Get a timeline record from msdb using i_campaign_timeline_id primary key.
  2799. @method getCampaignTimelineRecord
  2800. @param {Number} i_campaign_timeline_id
  2801. @return {Object} player record
  2802. **/
  2803. getCampaignTimelineRecord: function (i_campaign_timeline_id) {
  2804. var self = this;
  2805. return self.m_msdb.table_campaign_timelines().getRec(i_campaign_timeline_id);
  2806. },
  2807.  
  2808. /**
  2809. Get all timeline ids for specified campaign
  2810. @method getCampaignTimelines
  2811. @param {Number} i_campaign_id
  2812. @return {Array} timeline ids
  2813. **/
  2814. getCampaignTimelines: function (i_campaign_id) {
  2815. var self = this;
  2816. var timelineIDs = [];
  2817. $(self.m_msdb.table_campaign_timelines().getAllPrimaryKeys()).each(function (k, campaign_timeline_id) {
  2818. var recCampaignTimeline = self.m_msdb.table_campaign_timelines().getRec(campaign_timeline_id);
  2819. if (recCampaignTimeline['campaign_id'] == i_campaign_id) {
  2820. timelineIDs.push(campaign_timeline_id);
  2821. }
  2822. });
  2823. return timelineIDs;
  2824. },
  2825.  
  2826. /**
  2827. Build screenProps json object with all viewers and all of their respective attributes for the given timeline_id / template_id
  2828. @method getTemplateViewersScreenProps
  2829. @param {Number} i_campaign_timeline_id
  2830. @param {Number} i_campaign_timeline_board_template_id
  2831. @return {Object} screenProps all viewers and all their properties
  2832. **/
  2833. getTemplateViewersScreenProps: function (i_campaign_timeline_id, i_campaign_timeline_board_template_id) {
  2834. var self = this;
  2835. var counter = -1;
  2836. var screenProps = {};
  2837. var viewOrderIndexes = {};
  2838. $(pepper.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2839.  
  2840. var recCampaignTimelineBoardViewerChanel = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2841. if (recCampaignTimelineBoardViewerChanel['campaign_timeline_board_template_id'] == i_campaign_timeline_board_template_id) {
  2842. var recBoardTemplateViewer = self.m_msdb.table_board_template_viewers().getRec(recCampaignTimelineBoardViewerChanel['board_template_viewer_id']);
  2843. // log(i_campaign_timeline_board_template_id + ' ' + recBoardTemplateViewer['board_template_viewer_id']);
  2844. counter++;
  2845. screenProps['sd' + counter] = {};
  2846. screenProps['sd' + counter]['campaign_timeline_board_viewer_id'] = recBoardTemplateViewer['board_template_viewer_id'];
  2847. screenProps['sd' + counter]['campaign_timeline_id'] = i_campaign_timeline_id;
  2848. screenProps['sd' + counter]['x'] = recBoardTemplateViewer['pixel_x'];
  2849. screenProps['sd' + counter]['y'] = recBoardTemplateViewer['pixel_y'];
  2850. screenProps['sd' + counter]['w'] = recBoardTemplateViewer['pixel_width'];
  2851. screenProps['sd' + counter]['h'] = recBoardTemplateViewer['pixel_height'];
  2852.  
  2853. // make sure that every view_order we assign is unique and sequential
  2854. var viewOrder = recBoardTemplateViewer['viewer_order'];
  2855. if (!_.isUndefined(viewOrderIndexes[viewOrder])) {
  2856. for (var i = 0; i < 100; i++) {
  2857. if (_.isUndefined(viewOrderIndexes[i])) {
  2858. viewOrder = i;
  2859. break;
  2860. }
  2861. }
  2862. }
  2863. viewOrderIndexes[viewOrder] = true;
  2864. screenProps['sd' + counter]['view_order'] = viewOrder;
  2865. }
  2866. });
  2867.  
  2868. return screenProps;
  2869. },
  2870.  
  2871. /**
  2872. Set a timeline records in msdb using i_campaign_timeline_id primary key.
  2873. The method uses generic key / value fields so it can set any part of the record.
  2874. @method setCampaignTimelineRecord
  2875. @param {number} i_player_id
  2876. @param {string} i_key the key to set
  2877. @param {Object} i_value the value to set
  2878. @return none
  2879. **/
  2880. setCampaignTimelineRecord: function (i_campaign_timeline_id, i_key, i_value) {
  2881. var self = this;
  2882. self.m_msdb.table_campaign_timelines().openForEdit(i_campaign_timeline_id);
  2883. var recTimeline = self.m_msdb.table_campaign_timelines().getRec(i_campaign_timeline_id);
  2884. recTimeline[i_key] = i_value;
  2885. },
  2886.  
  2887. /**
  2888. Use a viewer_id to reverse enumerate over the mapping of viewers to channels via:
  2889. campaign_timeline_viewer_chanels -> table_campaign_timeline_chanels
  2890. so we can find the channel assigned to the viewer_id provided.
  2891. @method getChannelIdFromCampaignTimelineBoardViewer
  2892. @param {Number} i_campaign_timeline_board_viewer_id
  2893. @param {Number} i_campaign_timeline_id
  2894. @return {Object} recCampaignTimelineViewerChanelsFound
  2895. **/
  2896. getChannelIdFromCampaignTimelineBoardViewer: function (i_campaign_timeline_board_viewer_id, i_campaign_timeline_id) {
  2897. var self = this;
  2898.  
  2899. var recCampaignTimelineViewerChanelsFound = undefined;
  2900.  
  2901. $(self.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2902. var recCampaignTimelineViewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2903.  
  2904. // if true, we found the viewer selected under table campaign_timeline_viewer_chanels
  2905. if (recCampaignTimelineViewerChanels['board_template_viewer_id'] == i_campaign_timeline_board_viewer_id) {
  2906.  
  2907. $(self.m_msdb.table_campaign_timeline_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_id) {
  2908. var recCampaignTimelineChannel = self.m_msdb.table_campaign_timeline_chanels().getRec(campaign_timeline_chanel_id);
  2909.  
  2910. // if true, we found the channel the viewer was assined to as long as it is part of the current selected timeline
  2911. if (recCampaignTimelineViewerChanels['campaign_timeline_chanel_id'] == campaign_timeline_chanel_id && recCampaignTimelineChannel['campaign_timeline_id'] == i_campaign_timeline_id) {
  2912. // log('selected: timeline_id ' + i_campaign_timeline_id + ' view_id ' + i_campaign_timeline_board_viewer_id + ' on channel_id ' + recCampaignTimelineViewerChanels['campaign_timeline_chanel_id']);
  2913. recCampaignTimelineViewerChanelsFound = recCampaignTimelineViewerChanels;
  2914. }
  2915. });
  2916. }
  2917. });
  2918.  
  2919. return recCampaignTimelineViewerChanelsFound;
  2920. },
  2921.  
  2922. /**
  2923. Get the assigned viewer id to the specified channel
  2924. @method getAssignedViewerIdFromChannelId
  2925. @param {Number} i_campaign_timeline_channel_id
  2926. @return {Number} foundViewerID
  2927. **/
  2928. getAssignedViewerIdFromChannelId: function (i_campaign_timeline_channel_id) {
  2929. var self = this;
  2930. var foundViewerID;
  2931. $(self.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2932. var recCampaignTimelineViewerChanels = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2933. if (recCampaignTimelineViewerChanels['campaign_timeline_chanel_id'] == i_campaign_timeline_channel_id) {
  2934. foundViewerID = recCampaignTimelineViewerChanels['board_template_viewer_id']
  2935. }
  2936. });
  2937. return foundViewerID;
  2938. },
  2939.  
  2940. /**
  2941. Sample function to demonstrate how to enumerate over records to query for specified template_id
  2942. @method populateBoardTemplate
  2943. @param {Number} i_campaign_timeline_board_template_id
  2944. @return none
  2945. **/
  2946. populateBoardTemplate: function (i_campaign_timeline_board_template_id) {
  2947. var self = this;
  2948.  
  2949. var recCampaignTimelineBoardTemplate = self.m_msdb.table_campaign_timeline_board_templates().getRec(i_campaign_timeline_board_template_id);
  2950.  
  2951. // Get global board > board template so we can get the total width / height resolution of the board
  2952.  
  2953. var recBoardTemplate = self.m_msdb.table_board_templates().getRec(recCampaignTimelineBoardTemplate['board_template_id']);
  2954. var recBoard = self.m_msdb.table_boards().getRec(recBoardTemplate['board_id']);
  2955.  
  2956. $(self.m_msdb.table_campaign_timeline_board_viewer_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_board_viewer_chanel_id) {
  2957. var recCampaignTimelineBoardViewerChanel = self.m_msdb.table_campaign_timeline_board_viewer_chanels().getRec(campaign_timeline_board_viewer_chanel_id);
  2958. if (recCampaignTimelineBoardViewerChanel['campaign_timeline_board_template_id'] == i_campaign_timeline_board_template_id) {
  2959. var recBoardTemplateViewer = self.m_msdb.table_board_template_viewers().getRec(recCampaignTimelineBoardViewerChanel['board_template_viewer_id']);
  2960. // log(i_campaign_timeline_board_template_id);
  2961. }
  2962. });
  2963. },
  2964.  
  2965. /**
  2966. The jQuery.Event constructor is exposed and can be used when calling trigger. The new operator is optional.
  2967. @method event
  2968. @param {Event} i_event
  2969. @param {Object} i_context
  2970. @param {Object} i_caller
  2971. @param {Object} i_data
  2972. @return none.
  2973.  
  2974. event: function (i_event, i_context, i_caller, i_data) {
  2975. return $.Event(i_event, {context: i_context, caller: i_caller, edata: i_data});
  2976. },
  2977. **/
  2978.  
  2979. /**
  2980. Sample function to demonstrate how to enumerate over records to query related tables of a campaign
  2981. @method populateBoardTemplate
  2982. @param {Number} i_campaign_timeline_board_template_id
  2983. @return none
  2984. **/
  2985. populateCampaign: function () {
  2986. var self = this;
  2987.  
  2988. // demo campaign_id
  2989. var campaign_id = 1;
  2990.  
  2991. // Get all timelines
  2992. $(self.m_msdb.table_campaign_timelines().getAllPrimaryKeys()).each(function (k, campaign_timeline_id) {
  2993.  
  2994. var recCampaignTimeline = self.m_msdb.table_campaign_timelines().getRec(campaign_timeline_id);
  2995.  
  2996. // if timeline belongs to selected campaign
  2997. if (recCampaignTimeline['campaign_id'] == campaign_id) {
  2998.  
  2999. // get all campaign timeline board templates (screen divison inside output, gets all outputs, in our case only 1)
  3000. $(self.m_msdb.table_campaign_timeline_board_templates().getAllPrimaryKeys()).each(function (k, table_campaign_timeline_board_template_id) {
  3001. var recCampaignTimelineBoardTemplate = self.m_msdb.table_campaign_timeline_board_templates().getRec(table_campaign_timeline_board_template_id);
  3002. if (recCampaignTimelineBoardTemplate['campaign_timeline_id'] == campaign_timeline_id) {
  3003. // log(recCampaignTimelineBoardTemplate['campaign_timeline_id']);
  3004. self._populateBoardTemplate(table_campaign_timeline_board_template_id);
  3005. }
  3006. });
  3007.  
  3008. // get all channels that belong to timeline
  3009. $(self.m_msdb.table_campaign_timeline_chanels().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_id) {
  3010. var recCampaignTimelineChannel = self.m_msdb.table_campaign_timeline_chanels().getRec(campaign_timeline_chanel_id);
  3011. if (campaign_timeline_id == recCampaignTimelineChannel['campaign_timeline_id']) {
  3012.  
  3013. // get all players / resources that belong timeline
  3014. $(self.m_msdb.table_campaign_timeline_chanel_players().getAllPrimaryKeys()).each(function (k, campaign_timeline_chanel_player_id) {
  3015. var recCampaignTimelineChannelPlayer = self.m_msdb.table_campaign_timeline_chanel_players().getRec(campaign_timeline_chanel_player_id);
  3016. if (campaign_timeline_chanel_id == recCampaignTimelineChannelPlayer['campaign_timeline_chanel_id']) {
  3017. log(campaign_timeline_chanel_player_id);
  3018. }
  3019. });
  3020. }
  3021. });
  3022. }
  3023. });
  3024. }
  3025. }