@@ -21,8 +21,8 @@ angular.module('mm.core')
2121 * @ngdoc service
2222 * @name $mmWS
2323 */
24- . factory ( '$mmWS' , function ( $http , $q , $log , $mmLang , $cordovaFileTransfer , $mmApp , $mmFS , $mmText , mmCoreSessionExpired ,
25- mmCoreUserDeleted , $translate , $window , $mmUtil ) {
24+ . factory ( '$mmWS' , function ( $http , $q , $log , $mmLang , $cordovaFileTransfer , $mmApp , $mmFS , mmCoreSessionExpired ,
25+ mmCoreUserDeleted , $translate , $window ) {
2626
2727 $log = $log . getInstance ( '$mmWS' ) ;
2828
@@ -216,7 +216,7 @@ angular.module('mm.core')
216216 * @module mm.core
217217 * @ngdoc method
218218 * @name $mmWS#getRemoteFileSize
219- * @param {Object } uri File URI .
219+ * @param {Object } url File URL .
220220 * @return {Promise } Promise resolved with the size or -1 if failure.
221221 */
222222 self . getRemoteFileSize = function ( url ) {
@@ -231,6 +231,23 @@ angular.module('mm.core')
231231 } ) ;
232232 } ;
233233
234+ /*
235+ * Perform a HEAD request to get the mimetype of a remote file.
236+ *
237+ * @module mm.core
238+ * @ngdoc method
239+ * @name $mmWS#getRemoteFileMimeType
240+ * @param {Object } url File URL.
241+ * @return {Promise } Promise resolved with the mimetype or '' if failure.
242+ */
243+ self . getRemoteFileMimeType = function ( url ) {
244+ return $http . head ( url ) . then ( function ( data ) {
245+ return data . headers ( 'Content-Type' ) || '' ;
246+ } ) . catch ( function ( ) {
247+ return '' ;
248+ } ) ;
249+ } ;
250+
234251 /**
235252 * A wrapper function for a synchronous Moodle WebService call.
236253 * Warning: This function should only be used if synchronous is a must. It's recommended to use $mmWS#call.
@@ -276,7 +293,7 @@ angular.module('mm.core')
276293 siteurl = preSets . siteurl + '/webservice/rest/server.php?moodlewsrestformat=json' ;
277294
278295 // Serialize data.
279- data = $mmUtil . param ( data ) ;
296+ data = serializeParams ( data ) ;
280297
281298 // Perform sync request using XMLHttpRequest.
282299 xhr = new $window . XMLHttpRequest ( ) ;
@@ -331,6 +348,42 @@ angular.module('mm.core')
331348 return data ;
332349 } ;
333350
351+ /**
352+ * Serialize an object to be used in a request.
353+ *
354+ * @param {Object } obj Object to serialize.
355+ * @return {String } Serialization of the object.
356+ */
357+ function serializeParams ( obj ) {
358+ var query = '' , name , value , fullSubName , subName , subValue , innerObj , i ;
359+
360+ for ( name in obj ) {
361+ value = obj [ name ] ;
362+
363+ if ( value instanceof Array ) {
364+ for ( i = 0 ; i < value . length ; ++ i ) {
365+ subValue = value [ i ] ;
366+ fullSubName = name + '[' + i + ']' ;
367+ innerObj = { } ;
368+ innerObj [ fullSubName ] = subValue ;
369+ query += serializeParams ( innerObj ) + '&' ;
370+ }
371+ }
372+ else if ( value instanceof Object ) {
373+ for ( subName in value ) {
374+ subValue = value [ subName ] ;
375+ fullSubName = name + '[' + subName + ']' ;
376+ innerObj = { } ;
377+ innerObj [ fullSubName ] = subValue ;
378+ query += serializeParams ( innerObj ) + '&' ;
379+ }
380+ }
381+ else if ( value !== undefined && value !== null ) query += encodeURIComponent ( name ) + '=' + encodeURIComponent ( value ) + '&' ;
382+ }
383+
384+ return query . length ? query . substr ( 0 , query . length - 1 ) : query ;
385+ }
386+
334387 return self ;
335388
336389} ) ;
0 commit comments