/learn-portlet/src/main/webapp/js2.0/lesson-manager/entities.js

https://github.com/ViLPy/JSCORM · JavaScript · 228 lines · 200 code · 24 blank · 4 comment · 16 complexity · 5a11435ac51ab3ed6c383721ebc1aaf3 MD5 · raw file

  1. /**
  2. * Created by igorborisov on 26.05.14.
  3. */
  4. lessonManager.module("Entities", function(Entities, lessonManager, Backbone, Marionette, $, _){
  5. var apiUrl = path.api.packages;
  6. var packageService = new Backbone.Service({ url: path.root,
  7. sync: {
  8. 'update' : {
  9. 'path': apiUrl,
  10. 'data': function(model, options){
  11. //from {id:#, text:###} to ids
  12. var tagIds = [];
  13. var modelTags = model.get('tags');
  14. for(var i in modelTags) {
  15. var tag = modelTags[i];
  16. tagIds.push( tag.id || tag )
  17. }
  18. var params = {
  19. action : 'UPDATE',
  20. id: model.get('id'),
  21. ableToRunFrom: model.get('ableToRunFrom'),
  22. ableToRunTo: model.get('ableToRunTo'),
  23. attemptCount: model.get('attemptCount'),
  24. beginDate: model.get('beginDate'),
  25. endDate: model.get('endDate'),
  26. description: model.get('description') || 'New description',
  27. isDefault: model.get('isDefault'),
  28. packageType: model.get('packageType'),
  29. passingLimit: model.get('passingLimit'),
  30. rerunInterval: model.get('rerunInterval'),
  31. rerunIntervalType: model.get('rerunIntervalType'),
  32. tags: tagIds,
  33. visibility: model.get('visibility'),
  34. title: model.get('title'),
  35. scope: options.scope,
  36. courseId: Utils.getCourseId()
  37. };
  38. return params;
  39. },
  40. 'method': "post"
  41. },
  42. 'delete': {
  43. 'path': apiUrl,
  44. 'data': function(model){
  45. var params ={
  46. action: 'DELETE',
  47. id: model.get('id'),
  48. courseId: Utils.getCourseId(),
  49. scope : model.get('scope'),
  50. packageType: model.get('packageType')
  51. };
  52. return params;
  53. },
  54. 'method': 'post'
  55. }
  56. },
  57. targets: {
  58. updateLogo: {
  59. 'path': apiUrl,
  60. 'data': function(model){
  61. var params = {
  62. action: 'UPDATELOGO',
  63. id: model.get('id'),
  64. logo: model.get('logo'),
  65. packageType: model.get('packageType'),
  66. courseId : Utils.getCourseId()
  67. };
  68. return params;
  69. },
  70. 'method': 'post'
  71. }
  72. }
  73. });
  74. Entities.Package = Backbone.Model.extend({
  75. defaults: {
  76. id: '',
  77. title: '',
  78. description: '',
  79. packageType: '',
  80. visibility: true,
  81. isDefault: false,
  82. logo:'',
  83. type:'',
  84. contextPath: path.root,
  85. passingLimit: -1,
  86. rerunInterval: 0,
  87. rerunIntervalType: 'UNLIMITED',
  88. ableToRunFrom: '',
  89. ableToRunTo: '',
  90. filename: ''
  91. }
  92. }).extend(packageService);
  93. var packageCollectionService = new Backbone.Service({ url: path.root,
  94. sync: {
  95. 'read': {
  96. 'path': apiUrl,
  97. 'data': function(collection, options) {
  98. var filter = options.filter || {
  99. scope: 'site',
  100. sort : 'nameAsc',
  101. packageType: '',
  102. searchtext: '',
  103. selectedCategories: []
  104. };
  105. var sortBy = (filter.sort == 'nameAsc' || filter.sort == 'nameDesc' )? 'name' : '';
  106. var tagId = '';
  107. if(filter.selectedCategories && filter.selectedCategories.length >0) {
  108. tagId = filter.selectedCategories[0];
  109. }
  110. var params = {
  111. action: 'ALL',
  112. courseId: Utils.getCourseId(),
  113. scope: filter.scope || 'site',
  114. sortBy: sortBy,
  115. sortAscDirection: filter.sort == 'nameAsc',
  116. filter: filter.searchtext || '',
  117. packageType: filter.packageType || '',
  118. page: options.currentPage,
  119. count: options.itemsOnPage,
  120. tagID: tagId
  121. };
  122. return params;
  123. },
  124. 'method': "get"
  125. }
  126. },
  127. targets: {
  128. 'removePackages': {
  129. 'path': apiUrl,
  130. 'data': function (collection, options) {
  131. var packageIds = collection.map(function (item) {
  132. return item.get('id');
  133. });
  134. var params = {
  135. action :'REMOVEPACKAGES',
  136. packageIds: packageIds,
  137. courseId : Utils.getCourseId()
  138. };
  139. return params;
  140. },
  141. 'method': 'post'
  142. },
  143. 'updatePackages': {
  144. 'path': apiUrl,
  145. 'data': function (collection, options) {
  146. var packages =JSON.stringify( collection.map(function (item) {
  147. return {
  148. id: item.get('id'),
  149. title: item.get('title') || "New lesson",
  150. description: item.get('description') || "New description",
  151. packageType: item.get('packageType'),
  152. logo: item.get('logo')
  153. };
  154. } ));
  155. var scope = options.scope || 'site';
  156. var params = {
  157. action: 'UPDATEPACKAGES',
  158. packages: packages,
  159. scope: scope,
  160. courseId: Utils.getCourseId()
  161. };
  162. return params;
  163. },
  164. 'method': 'post'
  165. }
  166. }
  167. });
  168. Entities.PackageCollection = Backbone.Collection.extend({
  169. model: Entities.Package,
  170. parse: function(response){
  171. this.trigger('packageCollection:updated', { total: response.total, currentPage: response.currentPage });
  172. _.forEach(response.records,function(record){
  173. var tags = Array();
  174. record.tags.forEach(function(item) {
  175. tags.push(item.text);
  176. });
  177. record.tagsList = tags.join(' • ');
  178. });
  179. return response.records;
  180. }
  181. }).extend(packageCollectionService);
  182. Entities.NewPackageCollection = Backbone.Collection.extend({
  183. model: Entities.Package,
  184. initialize: function(){
  185. }
  186. }).extend(packageCollectionService);
  187. Entities.Filter = Backbone.Model.extend({
  188. defaults: {
  189. scope: 'site',
  190. packageType: '',
  191. categories: [],
  192. searchtext: '',
  193. sort: 'nameAsc',
  194. selectedCategories: []
  195. },
  196. initialize: function(){
  197. this.tags = new Valamis.TagCollection();
  198. this.tags.fetch({reset: true});
  199. this.tags.on('sync', function(){
  200. this.set('categories', this.tags.toJSON());
  201. }, this);
  202. }
  203. });
  204. });