forked from EVOgeek/Vmeda.Online
		
	
						commit
						5c381e3623
					
				| @ -1,5 +1,5 @@ | |||||||
| <?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | ||||||
| <widget android-versionCode="39100" id="com.moodle.moodlemobile" ios-CFBundleVersion="3.9.1.0" version="3.9.1" versionCode="39100" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0"> | <widget android-versionCode="39200" id="com.moodle.moodlemobile" ios-CFBundleVersion="3.9.2.0" version="3.9.2" versionCode="39200" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0"> | ||||||
|     <name>Moodle</name> |     <name>Moodle</name> | ||||||
|     <description>Moodle official app</description> |     <description>Moodle official app</description> | ||||||
|     <author email="mobile@moodle.com" href="http://moodle.com">Moodle Mobile team</author> |     <author email="mobile@moodle.com" href="http://moodle.com">Moodle Mobile team</author> | ||||||
| @ -241,7 +241,7 @@ | |||||||
|             <true /> |             <true /> | ||||||
|         </edit-config> |         </edit-config> | ||||||
|         <edit-config file="*-Info.plist" mode="merge" target="CFBundleShortVersionString"> |         <edit-config file="*-Info.plist" mode="merge" target="CFBundleShortVersionString"> | ||||||
|             <string>3.9.1</string> |             <string>3.9.2</string> | ||||||
|         </edit-config> |         </edit-config> | ||||||
|         <config-file parent="FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED" target="*-Info.plist"> |         <config-file parent="FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED" target="*-Info.plist"> | ||||||
|             <string>YES</string> |             <string>YES</string> | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ | |||||||
|   <Identity Name="3312ADB7.MoodleDesktop" |   <Identity Name="3312ADB7.MoodleDesktop" | ||||||
|     ProcessorArchitecture="x64" |     ProcessorArchitecture="x64" | ||||||
|     Publisher="CN=33CDCDF6-1EB5-4827-9897-ED25C91A32F6" |     Publisher="CN=33CDCDF6-1EB5-4827-9897-ED25C91A32F6" | ||||||
|     Version="3.9.1.0" /> |     Version="3.9.2.0" /> | ||||||
|   <Properties> |   <Properties> | ||||||
|     <DisplayName>Moodle Desktop</DisplayName> |     <DisplayName>Moodle Desktop</DisplayName> | ||||||
|     <PublisherDisplayName>Moodle Pty Ltd.</PublisherDisplayName> |     <PublisherDisplayName>Moodle Pty Ltd.</PublisherDisplayName> | ||||||
|  | |||||||
							
								
								
									
										118
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										118
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "moodlemobile", |   "name": "moodlemobile", | ||||||
|   "version": "3.9.0", |   "version": "3.9.2", | ||||||
|   "lockfileVersion": 1, |   "lockfileVersion": 1, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
| @ -6236,7 +6236,8 @@ | |||||||
|         "ansi-regex": { |         "ansi-regex": { | ||||||
|           "version": "2.1.1", |           "version": "2.1.1", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" |           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "aproba": { |         "aproba": { | ||||||
|           "version": "1.2.0", |           "version": "1.2.0", | ||||||
| @ -6257,12 +6258,14 @@ | |||||||
|         "balanced-match": { |         "balanced-match": { | ||||||
|           "version": "1.0.0", |           "version": "1.0.0", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" |           "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "brace-expansion": { |         "brace-expansion": { | ||||||
|           "version": "1.1.11", |           "version": "1.1.11", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |           "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "balanced-match": "^1.0.0", |             "balanced-match": "^1.0.0", | ||||||
|             "concat-map": "0.0.1" |             "concat-map": "0.0.1" | ||||||
| @ -6277,17 +6280,20 @@ | |||||||
|         "code-point-at": { |         "code-point-at": { | ||||||
|           "version": "1.1.0", |           "version": "1.1.0", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" |           "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "concat-map": { |         "concat-map": { | ||||||
|           "version": "0.0.1", |           "version": "0.0.1", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" |           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "console-control-strings": { |         "console-control-strings": { | ||||||
|           "version": "1.1.0", |           "version": "1.1.0", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" |           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "core-util-is": { |         "core-util-is": { | ||||||
|           "version": "1.0.2", |           "version": "1.0.2", | ||||||
| @ -6412,7 +6418,8 @@ | |||||||
|         "inherits": { |         "inherits": { | ||||||
|           "version": "2.0.3", |           "version": "2.0.3", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" |           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "ini": { |         "ini": { | ||||||
|           "version": "1.3.5", |           "version": "1.3.5", | ||||||
| @ -6424,6 +6431,7 @@ | |||||||
|           "version": "1.0.0", |           "version": "1.0.0", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", |           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "number-is-nan": "^1.0.0" |             "number-is-nan": "^1.0.0" | ||||||
|           } |           } | ||||||
| @ -6438,6 +6446,7 @@ | |||||||
|           "version": "3.0.4", |           "version": "3.0.4", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", |           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "brace-expansion": "^1.1.7" |             "brace-expansion": "^1.1.7" | ||||||
|           } |           } | ||||||
| @ -6481,6 +6490,7 @@ | |||||||
|           "version": "0.5.1", |           "version": "0.5.1", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", |           "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "minimist": "0.0.8" |             "minimist": "0.0.8" | ||||||
|           }, |           }, | ||||||
| @ -6488,7 +6498,8 @@ | |||||||
|             "minimist": { |             "minimist": { | ||||||
|               "version": "0.0.8", |               "version": "0.0.8", | ||||||
|               "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", |               "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", | ||||||
|               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" |               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", | ||||||
|  |               "optional": true | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
| @ -6587,7 +6598,8 @@ | |||||||
|         "number-is-nan": { |         "number-is-nan": { | ||||||
|           "version": "1.0.1", |           "version": "1.0.1", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" |           "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "object-assign": { |         "object-assign": { | ||||||
|           "version": "4.1.1", |           "version": "4.1.1", | ||||||
| @ -6599,6 +6611,7 @@ | |||||||
|           "version": "1.4.0", |           "version": "1.4.0", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", |           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "wrappy": "1" |             "wrappy": "1" | ||||||
|           } |           } | ||||||
| @ -6720,6 +6733,7 @@ | |||||||
|           "version": "1.0.2", |           "version": "1.0.2", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", |           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "code-point-at": "^1.0.0", |             "code-point-at": "^1.0.0", | ||||||
|             "is-fullwidth-code-point": "^1.0.0", |             "is-fullwidth-code-point": "^1.0.0", | ||||||
| @ -6739,6 +6753,7 @@ | |||||||
|           "version": "3.0.1", |           "version": "3.0.1", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", |           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | ||||||
|  |           "optional": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "ansi-regex": "^2.0.0" |             "ansi-regex": "^2.0.0" | ||||||
|           } |           } | ||||||
| @ -6794,7 +6809,8 @@ | |||||||
|         "wrappy": { |         "wrappy": { | ||||||
|           "version": "1.0.2", |           "version": "1.0.2", | ||||||
|           "resolved": false, |           "resolved": false, | ||||||
|           "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" |           "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||||||
|  |           "optional": true | ||||||
|         }, |         }, | ||||||
|         "yallist": { |         "yallist": { | ||||||
|           "version": "3.0.3", |           "version": "3.0.3", | ||||||
| @ -7278,7 +7294,8 @@ | |||||||
|               "version": "2.1.1", |               "version": "2.1.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", |               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "aproba": { |             "aproba": { | ||||||
|               "version": "1.2.0", |               "version": "1.2.0", | ||||||
| @ -7302,13 +7319,15 @@ | |||||||
|               "version": "1.0.0", |               "version": "1.0.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", |               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "brace-expansion": { |             "brace-expansion": { | ||||||
|               "version": "1.1.11", |               "version": "1.1.11", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "balanced-match": "^1.0.0", |                 "balanced-match": "^1.0.0", | ||||||
|                 "concat-map": "0.0.1" |                 "concat-map": "0.0.1" | ||||||
| @ -7325,19 +7344,22 @@ | |||||||
|               "version": "1.1.0", |               "version": "1.1.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", |               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "concat-map": { |             "concat-map": { | ||||||
|               "version": "0.0.1", |               "version": "0.0.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", |               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "console-control-strings": { |             "console-control-strings": { | ||||||
|               "version": "1.1.0", |               "version": "1.1.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", |               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "core-util-is": { |             "core-util-is": { | ||||||
|               "version": "1.0.2", |               "version": "1.0.2", | ||||||
| @ -7468,7 +7490,8 @@ | |||||||
|               "version": "2.0.3", |               "version": "2.0.3", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", |               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "ini": { |             "ini": { | ||||||
|               "version": "1.3.5", |               "version": "1.3.5", | ||||||
| @ -7482,6 +7505,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", |               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "number-is-nan": "^1.0.0" |                 "number-is-nan": "^1.0.0" | ||||||
|               } |               } | ||||||
| @ -7498,6 +7522,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", |               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "brace-expansion": "^1.1.7" |                 "brace-expansion": "^1.1.7" | ||||||
|               } |               } | ||||||
| @ -7506,13 +7531,15 @@ | |||||||
|               "version": "0.0.8", |               "version": "0.0.8", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", |               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "minipass": { |             "minipass": { | ||||||
|               "version": "2.3.5", |               "version": "2.3.5", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", |               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "safe-buffer": "^5.1.2", |                 "safe-buffer": "^5.1.2", | ||||||
|                 "yallist": "^3.0.0" |                 "yallist": "^3.0.0" | ||||||
| @ -7533,6 +7560,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", |               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "minimist": "0.0.8" |                 "minimist": "0.0.8" | ||||||
|               } |               } | ||||||
| @ -7621,7 +7649,8 @@ | |||||||
|               "version": "1.0.1", |               "version": "1.0.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", |               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "object-assign": { |             "object-assign": { | ||||||
|               "version": "4.1.1", |               "version": "4.1.1", | ||||||
| @ -7635,6 +7664,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", |               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "wrappy": "1" |                 "wrappy": "1" | ||||||
|               } |               } | ||||||
| @ -7730,7 +7760,8 @@ | |||||||
|               "version": "5.1.2", |               "version": "5.1.2", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", |               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "safer-buffer": { |             "safer-buffer": { | ||||||
|               "version": "2.1.2", |               "version": "2.1.2", | ||||||
| @ -7772,6 +7803,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", |               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "code-point-at": "^1.0.0", |                 "code-point-at": "^1.0.0", | ||||||
|                 "is-fullwidth-code-point": "^1.0.0", |                 "is-fullwidth-code-point": "^1.0.0", | ||||||
| @ -7793,6 +7825,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", |               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "ansi-regex": "^2.0.0" |                 "ansi-regex": "^2.0.0" | ||||||
|               } |               } | ||||||
| @ -7841,13 +7874,15 @@ | |||||||
|               "version": "1.0.2", |               "version": "1.0.2", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", |               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "yallist": { |             "yallist": { | ||||||
|               "version": "3.0.3", |               "version": "3.0.3", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", |               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
| @ -14909,7 +14944,8 @@ | |||||||
|               "version": "2.1.1", |               "version": "2.1.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", |               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "aproba": { |             "aproba": { | ||||||
|               "version": "1.2.0", |               "version": "1.2.0", | ||||||
| @ -14933,13 +14969,15 @@ | |||||||
|               "version": "1.0.0", |               "version": "1.0.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", |               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "brace-expansion": { |             "brace-expansion": { | ||||||
|               "version": "1.1.11", |               "version": "1.1.11", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "balanced-match": "^1.0.0", |                 "balanced-match": "^1.0.0", | ||||||
|                 "concat-map": "0.0.1" |                 "concat-map": "0.0.1" | ||||||
| @ -14956,19 +14994,22 @@ | |||||||
|               "version": "1.1.0", |               "version": "1.1.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", |               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "concat-map": { |             "concat-map": { | ||||||
|               "version": "0.0.1", |               "version": "0.0.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", |               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "console-control-strings": { |             "console-control-strings": { | ||||||
|               "version": "1.1.0", |               "version": "1.1.0", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", |               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "core-util-is": { |             "core-util-is": { | ||||||
|               "version": "1.0.2", |               "version": "1.0.2", | ||||||
| @ -15099,7 +15140,8 @@ | |||||||
|               "version": "2.0.3", |               "version": "2.0.3", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", |               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "ini": { |             "ini": { | ||||||
|               "version": "1.3.5", |               "version": "1.3.5", | ||||||
| @ -15113,6 +15155,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", |               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "number-is-nan": "^1.0.0" |                 "number-is-nan": "^1.0.0" | ||||||
|               } |               } | ||||||
| @ -15129,6 +15172,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", |               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "brace-expansion": "^1.1.7" |                 "brace-expansion": "^1.1.7" | ||||||
|               } |               } | ||||||
| @ -15137,13 +15181,15 @@ | |||||||
|               "version": "0.0.8", |               "version": "0.0.8", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", |               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "minipass": { |             "minipass": { | ||||||
|               "version": "2.3.5", |               "version": "2.3.5", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", |               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "safe-buffer": "^5.1.2", |                 "safe-buffer": "^5.1.2", | ||||||
|                 "yallist": "^3.0.0" |                 "yallist": "^3.0.0" | ||||||
| @ -15164,6 +15210,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", |               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "minimist": "0.0.8" |                 "minimist": "0.0.8" | ||||||
|               } |               } | ||||||
| @ -15252,7 +15299,8 @@ | |||||||
|               "version": "1.0.1", |               "version": "1.0.1", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", |               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "object-assign": { |             "object-assign": { | ||||||
|               "version": "4.1.1", |               "version": "4.1.1", | ||||||
| @ -15266,6 +15314,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", |               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "wrappy": "1" |                 "wrappy": "1" | ||||||
|               } |               } | ||||||
| @ -15361,7 +15410,8 @@ | |||||||
|               "version": "5.1.2", |               "version": "5.1.2", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", |               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "safer-buffer": { |             "safer-buffer": { | ||||||
|               "version": "2.1.2", |               "version": "2.1.2", | ||||||
| @ -15403,6 +15453,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", |               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "code-point-at": "^1.0.0", |                 "code-point-at": "^1.0.0", | ||||||
|                 "is-fullwidth-code-point": "^1.0.0", |                 "is-fullwidth-code-point": "^1.0.0", | ||||||
| @ -15424,6 +15475,7 @@ | |||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", |               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", | ||||||
|               "dev": true, |               "dev": true, | ||||||
|  |               "optional": true, | ||||||
|               "requires": { |               "requires": { | ||||||
|                 "ansi-regex": "^2.0.0" |                 "ansi-regex": "^2.0.0" | ||||||
|               } |               } | ||||||
| @ -15472,13 +15524,15 @@ | |||||||
|               "version": "1.0.2", |               "version": "1.0.2", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", |               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             }, |             }, | ||||||
|             "yallist": { |             "yallist": { | ||||||
|               "version": "3.0.3", |               "version": "3.0.3", | ||||||
|               "resolved": false, |               "resolved": false, | ||||||
|               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", |               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", | ||||||
|               "dev": true |               "dev": true, | ||||||
|  |               "optional": true | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "moodlemobile", |   "name": "moodlemobile", | ||||||
|   "version": "3.9.1", |   "version": "3.9.2", | ||||||
|   "description": "The official app for Moodle.", |   "description": "The official app for Moodle.", | ||||||
|   "author": { |   "author": { | ||||||
|     "name": "Moodle Pty Ltd.", |     "name": "Moodle Pty Ltd.", | ||||||
| @ -253,7 +253,7 @@ | |||||||
|       "category": "public.app-category.education", |       "category": "public.app-category.education", | ||||||
|       "icon": "resources/desktop/icon.icns", |       "icon": "resources/desktop/icon.icns", | ||||||
|       "target": "mas", |       "target": "mas", | ||||||
|       "bundleVersion": "3.9.1", |       "bundleVersion": "3.9.2", | ||||||
|       "extendInfo": { |       "extendInfo": { | ||||||
|         "ElectronTeamID": "2NU57U5PAW" |         "ElectronTeamID": "2NU57U5PAW" | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -1,7 +1,6 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| 
 | 
 | ||||||
| LANGPACKSFOLDER='../../moodle-langpacks' | LANGPACKSFOLDER='../../moodle-langpacks' | ||||||
| stepnumber=$1 |  | ||||||
| 
 | 
 | ||||||
| function check_success_exit { | function check_success_exit { | ||||||
|     if [ $? -ne 0 ]; then |     if [ $? -ne 0 ]; then | ||||||
|  | |||||||
| @ -186,7 +186,7 @@ function build_lang($lang, $keys) { | |||||||
|     $local = 0; |     $local = 0; | ||||||
| 
 | 
 | ||||||
|     $langparts = explode('-', $lang, 2); |     $langparts = explode('-', $lang, 2); | ||||||
|     $parentname = $langparts[0] ?? ""; |     $parentname = $langparts[0] ? $langparts[0] : ""; | ||||||
|     $parent = ""; |     $parent = ""; | ||||||
| 
 | 
 | ||||||
|     echo "Processing $lang"; |     echo "Processing $lang"; | ||||||
| @ -307,8 +307,6 @@ function detect_lang($lang, $keys) { | |||||||
|     $langname = $string['thislanguage']; |     $langname = $string['thislanguage']; | ||||||
|     $title .= " ".$langname." -D"; |     $title .= " ".$langname." -D"; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     // Add the translation to the array.
 |     // Add the translation to the array.
 | ||||||
|     foreach ($keys as $key => $value) { |     foreach ($keys as $key => $value) { | ||||||
|         $string = get_translation_strings($langfoldername, $value->file); |         $string = get_translation_strings($langfoldername, $value->file); | ||||||
|  | |||||||
| @ -1557,6 +1557,7 @@ | |||||||
|   "core.errorsomedatanotdownloaded": "local_moodlemobileapp", |   "core.errorsomedatanotdownloaded": "local_moodlemobileapp", | ||||||
|   "core.errorsync": "local_moodlemobileapp", |   "core.errorsync": "local_moodlemobileapp", | ||||||
|   "core.errorsyncblocked": "local_moodlemobileapp", |   "core.errorsyncblocked": "local_moodlemobileapp", | ||||||
|  |   "core.errorurlschemeinvalidsite": "local_moodlemobileapp", | ||||||
|   "core.explanationdigitalminor": "moodle", |   "core.explanationdigitalminor": "moodle", | ||||||
|   "core.favourites": "moodle", |   "core.favourites": "moodle", | ||||||
|   "core.filename": "repository", |   "core.filename": "repository", | ||||||
| @ -2096,6 +2097,7 @@ | |||||||
|   "core.tag.errorareanotsupported": "local_moodlemobileapp", |   "core.tag.errorareanotsupported": "local_moodlemobileapp", | ||||||
|   "core.tag.inalltagcoll": "tag", |   "core.tag.inalltagcoll": "tag", | ||||||
|   "core.tag.itemstaggedwith": "tag", |   "core.tag.itemstaggedwith": "tag", | ||||||
|  |   "core.tag.noresultsfor": "tag", | ||||||
|   "core.tag.notagsfound": "tag", |   "core.tag.notagsfound": "tag", | ||||||
|   "core.tag.searchtags": "tag", |   "core.tag.searchtags": "tag", | ||||||
|   "core.tag.showingfirsttags": "tag", |   "core.tag.showingfirsttags": "tag", | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ export class AddonBlockMyOverviewHandler extends CoreBlockBaseHandler { | |||||||
|      * @return Whether or not the handler is enabled on a site level. |      * @return Whether or not the handler is enabled on a site level. | ||||||
|      */ |      */ | ||||||
|     isEnabled(): boolean | Promise<boolean> { |     isEnabled(): boolean | Promise<boolean> { | ||||||
|         return this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6') || |         return (this.sitesProvider.getCurrentSite() && this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6')) || | ||||||
|             !this.coursesProvider.isMyCoursesDisabledInSite(); |             !this.coursesProvider.isMyCoursesDisabledInSite(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -41,7 +41,9 @@ export class AddonBlockTimelineHandler extends CoreBlockBaseHandler { | |||||||
|      */ |      */ | ||||||
|     isEnabled(): boolean | Promise<boolean> { |     isEnabled(): boolean | Promise<boolean> { | ||||||
|         return this.timelineProvider.isAvailable().then((enabled) => { |         return this.timelineProvider.isAvailable().then((enabled) => { | ||||||
|             return enabled && (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6') || |             const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
|  | 
 | ||||||
|  |             return enabled && ((currentSite && currentSite.isVersionGreaterEqualThan('3.6')) || | ||||||
|                 !this.coursesProvider.isMyCoursesDisabledInSite()); |                 !this.coursesProvider.isMyCoursesDisabledInSite()); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -222,7 +222,7 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, DoChec | |||||||
|                 let isPast = true; |                 let isPast = true; | ||||||
| 
 | 
 | ||||||
|                 this.weeks.forEach((week) => { |                 this.weeks.forEach((week) => { | ||||||
|                     week.days.some((day) => { |                     week.days.forEach((day) => { | ||||||
|                         day.istoday = day.mday == currentDay; |                         day.istoday = day.mday == currentDay; | ||||||
|                         day.ispast = isPast && !day.istoday; |                         day.ispast = isPast && !day.istoday; | ||||||
|                         isPast = day.ispast; |                         isPast = day.ispast; | ||||||
| @ -231,11 +231,7 @@ export class AddonCalendarCalendarComponent implements OnInit, OnChanges, DoChec | |||||||
|                             day.events.forEach((event) => { |                             day.events.forEach((event) => { | ||||||
|                                 event.ispast = this.isEventPast(event); |                                 event.ispast = this.isEventPast(event); | ||||||
|                             }); |                             }); | ||||||
| 
 |  | ||||||
|                             return true; |  | ||||||
|                         } |                         } | ||||||
| 
 |  | ||||||
|                         return day.istoday; |  | ||||||
|                     }); |                     }); | ||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -393,7 +393,7 @@ export class AddonCalendarProvider { | |||||||
|         site = site || this.sitesProvider.getCurrentSite(); |         site = site || this.sitesProvider.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         // The WS to create/edit events requires a fix that was integrated in 3.7.1.
 |         // The WS to create/edit events requires a fix that was integrated in 3.7.1.
 | ||||||
|         return site.isVersionGreaterEqualThan('3.7.1'); |         return site && site.isVersionGreaterEqualThan('3.7.1'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -83,6 +83,6 @@ export class AddonFilterMultilangHandler extends CoreFilterDefaultHandler { | |||||||
|      */ |      */ | ||||||
|     shouldBeApplied(options: CoreFilterFormatTextOptions, site?: CoreSite): boolean { |     shouldBeApplied(options: CoreFilterFormatTextOptions, site?: CoreSite): boolean { | ||||||
|         // The filter should be applied if site is older than 3.7 or the WS didn't filter the text.
 |         // The filter should be applied if site is older than 3.7 or the WS didn't filter the text.
 | ||||||
|         return options.wsNotFiltered || !site.isVersionGreaterEqualThan('3.7'); |         return options.wsNotFiltered || (site && !site.isVersionGreaterEqualThan('3.7')); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -207,9 +207,10 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo | |||||||
| 
 | 
 | ||||||
|                     // Check if groupmode is enabled to avoid showing wrong numbers.
 |                     // Check if groupmode is enabled to avoid showing wrong numbers.
 | ||||||
|                     return this.groupsProvider.getActivityGroupInfo(this.assign.cmid, false).then((groupInfo) => { |                     return this.groupsProvider.getActivityGroupInfo(this.assign.cmid, false).then((groupInfo) => { | ||||||
|  |                         const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
|                         this.groupInfo = groupInfo; |                         this.groupInfo = groupInfo; | ||||||
|                         this.showNumbers = groupInfo.groups.length == 0 || |                         this.showNumbers = groupInfo.groups.length == 0 || | ||||||
|                             this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.5'); |                             (currentSite && currentSite.isVersionGreaterEqualThan('3.5')); | ||||||
| 
 | 
 | ||||||
|                         return this.setGroup(this.groupsProvider.validateGroupId(this.group, groupInfo)); |                         return this.setGroup(this.groupsProvider.validateGroupId(this.group, groupInfo)); | ||||||
|                     }); |                     }); | ||||||
| @ -258,8 +259,10 @@ export class AddonModAssignIndexComponent extends CoreCourseModuleMainActivityCo | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
|  | 
 | ||||||
|             this.needsGradingAvalaible = response.gradingsummary && response.gradingsummary.submissionsneedgradingcount > 0 && |             this.needsGradingAvalaible = response.gradingsummary && response.gradingsummary.submissionsneedgradingcount > 0 && | ||||||
|                     this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); |                     currentSite && currentSite.isVersionGreaterEqualThan('3.2'); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -225,7 +225,7 @@ export class AddonModAssignSubmissionOnlineTextHandler implements AddonModAssign | |||||||
|         // Bug was fixed in 3.1.1 minor release and in 3.2.
 |         // Bug was fixed in 3.1.1 minor release and in 3.2.
 | ||||||
|         const currentSite = this.sitesProvider.getCurrentSite(); |         const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         return currentSite.isVersionGreaterEqualThan('3.1.1') || currentSite.checkIfAppUsesLocalMobile(); |         return currentSite && (currentSite.isVersionGreaterEqualThan('3.1.1') || currentSite.checkIfAppUsesLocalMobile()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -291,7 +291,8 @@ export class AddonModForumProvider { | |||||||
|      * @return True if fixed, false otherwise. |      * @return True if fixed, false otherwise. | ||||||
|      */ |      */ | ||||||
|     isAllParticipantsFixed(): boolean { |     isAllParticipantsFixed(): boolean { | ||||||
|         return this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan(['3.1.5', '3.2.2']); |         return this.sitesProvider.getCurrentSite() && | ||||||
|  |                 this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan(['3.1.5', '3.2.2']); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -543,7 +544,7 @@ export class AddonModForumProvider { | |||||||
|     isDiscussionListSortingAvailable(site?: CoreSite): boolean { |     isDiscussionListSortingAvailable(site?: CoreSite): boolean { | ||||||
|         site = site || this.sitesProvider.getCurrentSite(); |         site = site || this.sitesProvider.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         return site.isVersionGreaterEqualThan('3.7'); |         return site && site.isVersionGreaterEqualThan('3.7'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -87,7 +87,8 @@ export class AddonModForumPrefetchHandler extends CoreCourseActivityPrefetchHand | |||||||
|      */ |      */ | ||||||
|     protected getPostsFiles(posts: any[]): any[] { |     protected getPostsFiles(posts: any[]): any[] { | ||||||
|         let files = []; |         let files = []; | ||||||
|         const getInlineFiles = this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); |         const getInlineFiles = this.sitesProvider.getCurrentSite() && | ||||||
|  |                 this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); | ||||||
| 
 | 
 | ||||||
|         posts.forEach((post) => { |         posts.forEach((post) => { | ||||||
|             if (post.attachments && post.attachments.length) { |             if (post.attachments && post.attachments.length) { | ||||||
|  | |||||||
| @ -86,7 +86,8 @@ export class AddonModGlossaryPrefetchHandler extends CoreCourseActivityPrefetchH | |||||||
|      */ |      */ | ||||||
|     protected getFilesFromGlossaryAndEntries(module: any, glossary: any, entries: any[]): any[] { |     protected getFilesFromGlossaryAndEntries(module: any, glossary: any, entries: any[]): any[] { | ||||||
|         let files = this.getIntroFilesFromInstance(module, glossary); |         let files = this.getIntroFilesFromInstance(module, glossary); | ||||||
|         const getInlineFiles = this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); |         const getInlineFiles = this.sitesProvider.getCurrentSite() && | ||||||
|  |                 this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); | ||||||
| 
 | 
 | ||||||
|         // Get entries files.
 |         // Get entries files.
 | ||||||
|         entries.forEach((entry) => { |         entries.forEach((entry) => { | ||||||
|  | |||||||
| @ -110,8 +110,9 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl | |||||||
|      */ |      */ | ||||||
|     protected getAttemptsFeedbackFiles(quiz: any, attempts: any[]): Promise<any[]> { |     protected getAttemptsFeedbackFiles(quiz: any, attempts: any[]): Promise<any[]> { | ||||||
|         // We have quiz data, now we'll get specific data for each attempt.
 |         // We have quiz data, now we'll get specific data for each attempt.
 | ||||||
|         const promises = [], |         const promises = []; | ||||||
|             getInlineFiles = this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); |         const getInlineFiles = this.sitesProvider.getCurrentSite() && | ||||||
|  |                 this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.2'); | ||||||
|         let files = []; |         let files = []; | ||||||
| 
 | 
 | ||||||
|         attempts.forEach((attempt) => { |         attempts.forEach((attempt) => { | ||||||
|  | |||||||
| @ -104,8 +104,10 @@ export class AddonModResourceHelperProvider { | |||||||
|      * @return Whether the resource should be displayed embeded. |      * @return Whether the resource should be displayed embeded. | ||||||
|      */ |      */ | ||||||
|     isDisplayedEmbedded(module: any, display: number): boolean { |     isDisplayedEmbedded(module: any, display: number): boolean { | ||||||
|  |         const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
|  | 
 | ||||||
|         if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable() || |         if ((!module.contents.length && !module.contentsinfo) || !this.fileProvider.isAvailable() || | ||||||
|                 (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { |                 (currentSite && !currentSite.isVersionGreaterEqualThan('3.7') && this.isNextcloudFile(module))) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -147,7 +147,7 @@ export class AddonModResourcePrefetchHandler extends CoreCourseResourcePrefetchH | |||||||
|      * @return Promise resolved with true if downloadable, resolved with false otherwise. |      * @return Promise resolved with true if downloadable, resolved with false otherwise. | ||||||
|      */ |      */ | ||||||
|     isDownloadable(module: any, courseId: number): Promise<boolean> { |     isDownloadable(module: any, courseId: number): Promise<boolean> { | ||||||
|         if (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { |         if (this.sitesProvider.getCurrentSite() && this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { | ||||||
|             // Nextcloud files are downloadable from 3.7 onwards.
 |             // Nextcloud files are downloadable from 3.7 onwards.
 | ||||||
|             return Promise.resolve(true); |             return Promise.resolve(true); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ | |||||||
| <ion-content> | <ion-content> | ||||||
|     <core-loading [hideUntil]="loaded"> |     <core-loading [hideUntil]="loaded"> | ||||||
|         <core-navigation-bar [previous]="previousSco" [next]="nextSco" (action)="loadSco($event)"></core-navigation-bar> |         <core-navigation-bar [previous]="previousSco" [next]="nextSco" (action)="loadSco($event)"></core-navigation-bar> | ||||||
|         <core-iframe *ngIf="loaded && src" [src]="src" [iframeWidth]="scorm.popup ? scorm.width : undefined" [iframeHeight]="scorm.popup ? scorm.height : undefined"></core-iframe> |         <core-iframe *ngIf="loaded && src" [src]="src" [iframeWidth]="scormWidth" [iframeHeight]="scormHeight"></core-iframe> | ||||||
|         <p *ngIf="!src && errorMessage">{{ errorMessage | translate }}</p> |         <p *ngIf="!src && errorMessage">{{ errorMessage | translate }}</p> | ||||||
|     </core-loading> |     </core-loading> | ||||||
| </ion-content> | </ion-content> | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ import { IonicPage, NavParams, ModalController } from 'ionic-angular'; | |||||||
| import { CoreEventsProvider } from '@providers/events'; | import { CoreEventsProvider } from '@providers/events'; | ||||||
| import { CoreSitesProvider } from '@providers/sites'; | import { CoreSitesProvider } from '@providers/sites'; | ||||||
| import { CoreSyncProvider } from '@providers/sync'; | import { CoreSyncProvider } from '@providers/sync'; | ||||||
| import { CoreDomUtilsProvider } from '@providers/utils/dom'; | import { CoreDomUtils } from '@providers/utils/dom'; | ||||||
| import { CoreTimeUtilsProvider } from '@providers/utils/time'; | import { CoreTimeUtilsProvider } from '@providers/utils/time'; | ||||||
| import { CoreIonTabsComponent } from '@components/ion-tabs/ion-tabs'; | import { CoreIonTabsComponent } from '@components/ion-tabs/ion-tabs'; | ||||||
| import { AddonModScormProvider, AddonModScormAttemptCountResult } from '../../providers/scorm'; | import { AddonModScormProvider, AddonModScormAttemptCountResult } from '../../providers/scorm'; | ||||||
| @ -46,6 +46,8 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|     src: string; // Iframe src.
 |     src: string; // Iframe src.
 | ||||||
|     errorMessage: string; // Error message.
 |     errorMessage: string; // Error message.
 | ||||||
|     accessInfo: any; // Access information.
 |     accessInfo: any; // Access information.
 | ||||||
|  |     scormWidth: null; // Width applied to scorm iframe.
 | ||||||
|  |     scormHeight: null; // Height applied to scorm iframe.
 | ||||||
| 
 | 
 | ||||||
|     protected siteId: string; |     protected siteId: string; | ||||||
|     protected mode: string; // Mode to play the SCORM.
 |     protected mode: string; // Mode to play the SCORM.
 | ||||||
| @ -65,11 +67,18 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|     protected launchPrevObserver: any; |     protected launchPrevObserver: any; | ||||||
|     protected goOfflineObserver: any; |     protected goOfflineObserver: any; | ||||||
| 
 | 
 | ||||||
|     constructor(navParams: NavParams, protected modalCtrl: ModalController, protected eventsProvider: CoreEventsProvider, |     constructor( | ||||||
|             protected sitesProvider: CoreSitesProvider, protected syncProvider: CoreSyncProvider, |             navParams: NavParams, | ||||||
|             protected domUtils: CoreDomUtilsProvider, protected timeUtils: CoreTimeUtilsProvider, |             protected modalCtrl: ModalController, | ||||||
|             protected scormProvider: AddonModScormProvider, protected scormHelper: AddonModScormHelperProvider, |             protected eventsProvider: CoreEventsProvider, | ||||||
|             protected scormSyncProvider: AddonModScormSyncProvider, protected tabs: CoreIonTabsComponent) { |             protected sitesProvider: CoreSitesProvider, | ||||||
|  |             protected syncProvider: CoreSyncProvider, | ||||||
|  |             protected timeUtils: CoreTimeUtilsProvider, | ||||||
|  |             protected scormProvider: AddonModScormProvider, | ||||||
|  |             protected scormHelper: AddonModScormHelperProvider, | ||||||
|  |             protected scormSyncProvider: AddonModScormSyncProvider, | ||||||
|  |             protected tabs: CoreIonTabsComponent | ||||||
|  |             ) { | ||||||
| 
 | 
 | ||||||
|         this.scorm = navParams.get('scorm') || {}; |         this.scorm = navParams.get('scorm') || {}; | ||||||
|         this.mode = navParams.get('mode') || AddonModScormProvider.MODENORMAL; |         this.mode = navParams.get('mode') || AddonModScormProvider.MODENORMAL; | ||||||
| @ -95,12 +104,14 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|         if (this.scorm.popup) { |         if (this.scorm.popup) { | ||||||
|             this.tabs.changeVisibility(false); |             this.tabs.changeVisibility(false); | ||||||
| 
 | 
 | ||||||
|             // If we receive a value <= 100 we need to assume it's a percentage.
 |             // If we receive a value > 100 we assume it's a fixed pixel size.
 | ||||||
|             if (this.scorm.width <= 100) { |             if (this.scorm.width > 100) { | ||||||
|                 this.scorm.width = this.scorm.width + '%'; |                 this.scormWidth = this.scorm.width; | ||||||
|             } | 
 | ||||||
|             if (this.scorm.height <= 100) { |                 // Only get fixed size on height if width is also fixed.
 | ||||||
|                 this.scorm.height = this.scorm.height + '%'; |                 if (this.scorm.height > 100) { | ||||||
|  |                     this.scormHeight = this.scorm.height; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -111,7 +122,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|                 const promise = this.newAttempt ? this.setStartTime(this.currentSco.id) : Promise.resolve(); |                 const promise = this.newAttempt ? this.setStartTime(this.currentSco.id) : Promise.resolve(); | ||||||
| 
 | 
 | ||||||
|                 return promise.catch((error) => { |                 return promise.catch((error) => { | ||||||
|                     this.domUtils.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); |                     CoreDomUtils.instance.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); | ||||||
|                 }).finally(() => { |                 }).finally(() => { | ||||||
|                     // Load SCO.
 |                     // Load SCO.
 | ||||||
|                     this.loadSco(this.currentSco); |                     this.loadSco(this.currentSco); | ||||||
| @ -152,7 +163,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|                 // Wait a bit to prevent collisions between this store and SCORM API's store.
 |                 // Wait a bit to prevent collisions between this store and SCORM API's store.
 | ||||||
|                 setTimeout(() => { |                 setTimeout(() => { | ||||||
|                     this.scormHelper.convertAttemptToOffline(this.scorm, this.attempt).catch((error) => { |                     this.scormHelper.convertAttemptToOffline(this.scorm, this.attempt).catch((error) => { | ||||||
|                         this.domUtils.showErrorModalDefault(error, 'core.error', true); |                         CoreDomUtils.instance.showErrorModalDefault(error, 'core.error', true); | ||||||
|                     }).then(() => { |                     }).then(() => { | ||||||
|                         this.refreshToc(); |                         this.refreshToc(); | ||||||
|                     }); |                     }); | ||||||
| @ -248,7 +259,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|                     return Promise.all(promises); |                     return Promise.all(promises); | ||||||
|                 }); |                 }); | ||||||
|             }).catch((error) => { |             }).catch((error) => { | ||||||
|                 this.domUtils.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); |                 CoreDomUtils.instance.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| @ -372,7 +383,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|                                 return this.scormProvider.saveTracks(sco.id, this.attempt, tracks, this.scorm, true); |                                 return this.scormProvider.saveTracks(sco.id, this.attempt, tracks, this.scorm, true); | ||||||
|                             }).catch((error) => { |                             }).catch((error) => { | ||||||
|                                 this.domUtils.showErrorModalDefault(error, 'core.error', true); |                                 CoreDomUtils.instance.showErrorModalDefault(error, 'core.error', true); | ||||||
|                             }); |                             }); | ||||||
|                         } |                         } | ||||||
|                     }); |                     }); | ||||||
| @ -432,7 +443,7 @@ export class AddonModScormPlayerPage implements OnInit, OnDestroy { | |||||||
|         }).then(() => { |         }).then(() => { | ||||||
|             return this.fetchToc(); |             return this.fetchToc(); | ||||||
|         }).catch((error) => { |         }).catch((error) => { | ||||||
|             this.domUtils.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); |             CoreDomUtils.instance.showErrorModalDefault(error, 'addon.mod_scorm.errorgetscorm', true); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -112,7 +112,7 @@ | |||||||
|                     <h2>{{ 'addon.mod_workshop.publishedsubmissions' | translate }}</h2> |                     <h2>{{ 'addon.mod_workshop.publishedsubmissions' | translate }}</h2> | ||||||
|                 </ion-item-divider> |                 </ion-item-divider> | ||||||
|                 <ng-container *ngFor="let submission of publishedSubmissions"> |                 <ng-container *ngFor="let submission of publishedSubmissions"> | ||||||
|                     <addon-mod-workshop-submission [submission]="submission" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true"></addon-mod-workshop-submission> |                     <addon-mod-workshop-submission [submission]="submission" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true" class="core-as-item"></addon-mod-workshop-submission> | ||||||
|                 </ng-container> |                 </ng-container> | ||||||
|             </ion-card> |             </ion-card> | ||||||
|         </ng-container> |         </ng-container> | ||||||
| @ -134,7 +134,7 @@ | |||||||
|                     <p>{{ 'addon.mod_workshop.assignedassessmentsnone' | translate }}</p> |                     <p>{{ 'addon.mod_workshop.assignedassessmentsnone' | translate }}</p> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ng-container *ngFor="let assessment of (assessments || [])"> |                 <ng-container *ngFor="let assessment of (assessments || [])"> | ||||||
|                     <addon-mod-workshop-submission [submission]="assessment.submission" [assessment]="assessment" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true"></addon-mod-workshop-submission> |                     <addon-mod-workshop-submission [submission]="assessment.submission" [assessment]="assessment" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true" class="core-as-item"></addon-mod-workshop-submission> | ||||||
|                 </ng-container> |                 </ng-container> | ||||||
|             </ion-card > |             </ion-card > | ||||||
|         </ng-container> |         </ng-container> | ||||||
| @ -156,7 +156,7 @@ | |||||||
|             </ion-item> |             </ion-item> | ||||||
| 
 | 
 | ||||||
|             <ng-container *ngFor="let submission of grades"> |             <ng-container *ngFor="let submission of grades"> | ||||||
|                 <addon-mod-workshop-submission [submission]="submission" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true"></addon-mod-workshop-submission> |                 <addon-mod-workshop-submission [submission]="submission" [courseId]="workshop.course" [module]="module" [workshop]="workshop" [access]="access" summary="true" class="core-as-item"></addon-mod-workshop-submission> | ||||||
|             </ng-container> |             </ng-container> | ||||||
| 
 | 
 | ||||||
|             <ion-grid *ngIf="page > 0 || hasNextPage"> |             <ion-grid *ngIf="page > 0 || hasNextPage"> | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| <core-loading [hideUntil]="loaded"> | <core-loading [hideUntil]="loaded"> | ||||||
|     <div *ngIf="!summary"> |     <div *ngIf="!summary"> | ||||||
|         <ion-list-header text-wrap> |         <ion-item text-wrap class="addon-workshop-submission-title"> | ||||||
|             <ion-avatar core-user-avatar [user]="profile" [courseId]="courseId" [userId]="profile && profile.id" item-start></ion-avatar> |             <ion-avatar core-user-avatar [user]="profile" [courseId]="courseId" [userId]="profile && profile.id" item-start></ion-avatar> | ||||||
|             <h2><core-format-text [text]="submission.title" contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId"></core-format-text></h2> |             <h2><core-format-text [text]="submission.title" contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId"></core-format-text></h2> | ||||||
|             <p *ngIf="profile && profile.fullname">{{profile.fullname}}</p> |             <p *ngIf="profile && profile.fullname">{{profile.fullname}}</p> | ||||||
| @ -21,7 +21,7 @@ | |||||||
|                 <ng-container *ngIf="submission.offline"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ng-container> |                 <ng-container *ngIf="submission.offline"><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</ng-container> | ||||||
|                 <ng-container *ngIf="submission.deleted"><ion-icon name="trash"></ion-icon> {{ 'core.deletedoffline' | translate }}</ng-container> |                 <ng-container *ngIf="submission.deleted"><ion-icon name="trash"></ion-icon> {{ 'core.deletedoffline' | translate }}</ng-container> | ||||||
|             </ion-note> |             </ion-note> | ||||||
|         </ion-list-header> |         </ion-item> | ||||||
|         <ion-item text-wrap *ngIf="submission.content"> |         <ion-item text-wrap *ngIf="submission.content"> | ||||||
|             <core-format-text [component]="component" [componentId]="componentId" [text]="submission.content" contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId"></core-format-text> |             <core-format-text [component]="component" [componentId]="componentId" [text]="submission.content" contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId"></core-format-text> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|  | |||||||
| @ -1,4 +1,13 @@ | |||||||
| ion-app.app-root addon-mod-workshop-submission, | ion-app.app-root addon-mod-workshop-submission .addon-workshop-submission-title { | ||||||
| ion-app.app-root .card.with-borders addon-mod-workshop-submission { | 
 | ||||||
|   @include core-as-items(); |     &.item-ios { | ||||||
|  |         border-bottom: $list-ios-header-border-bottom; | ||||||
|  |     } | ||||||
|  |     &.item-md { | ||||||
|  |         border-bottom: 1px solid $list-md-border-color; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     &:last-child { | ||||||
|  |         border: 0; | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -113,8 +113,8 @@ ion-app.app-root { | |||||||
|     @include core-as-items(); |     @include core-as-items(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .card.with-borders .item, |   .card.with-borders > .item, | ||||||
|   .list.with-borders .item { |   .list.with-borders > .item { | ||||||
|     @include core-items(); |     @include core-items(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2095,6 +2095,7 @@ | |||||||
|     "core.tag.errorareanotsupported": "This tag area is not supported by the app.", |     "core.tag.errorareanotsupported": "This tag area is not supported by the app.", | ||||||
|     "core.tag.inalltagcoll": "Everywhere", |     "core.tag.inalltagcoll": "Everywhere", | ||||||
|     "core.tag.itemstaggedwith": "{{$a.tagarea}} tagged with \"{{$a.tag}}\"", |     "core.tag.itemstaggedwith": "{{$a.tagarea}} tagged with \"{{$a.tag}}\"", | ||||||
|  |     "core.tag.noresultsfor": "No results for \"{{$a}}\"", | ||||||
|     "core.tag.notagsfound": "No tags matching \"{{$a}}\" found", |     "core.tag.notagsfound": "No tags matching \"{{$a}}\" found", | ||||||
|     "core.tag.searchtags": "Search tags", |     "core.tag.searchtags": "Search tags", | ||||||
|     "core.tag.showingfirsttags": "Showing {{$a}} most popular tags", |     "core.tag.showingfirsttags": "Showing {{$a}} most popular tags", | ||||||
|  | |||||||
| @ -1,4 +1,9 @@ | |||||||
| ion-app.app-root core-iframe { | ion-app.app-root core-iframe { | ||||||
|  | 
 | ||||||
|  |     > div { | ||||||
|  |         max-width: 100%; | ||||||
|  |         max-height: 100%; | ||||||
|  |     } | ||||||
|     iframe { |     iframe { | ||||||
|         border: 0; |         border: 0; | ||||||
|         display: block; |         display: block; | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
|         </span> |         </span> | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| <div #originalTabs class="tabcontent"> | <div #originalTabs class="tabcontent" [class.tabshidden]="hidden"> | ||||||
|     <ng-content></ng-content> |     <ng-content></ng-content> | ||||||
| </div> | </div> | ||||||
| <div #portal tab-portal></div> | <div #portal tab-portal></div> | ||||||
|  | |||||||
| @ -27,6 +27,9 @@ ion-app.app-root core-ion-tabs { | |||||||
|         .ion-page > ion-content > .scroll-content { |         .ion-page > ion-content > .scroll-content { | ||||||
|             margin-bottom: $navbar-md-height; |             margin-bottom: $navbar-md-height; | ||||||
|         } |         } | ||||||
|  |         .tabshidden .ion-page > ion-content > .scroll-content { | ||||||
|  |             margin-bottom: 0; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     &[tabsplacement="side"] { |     &[tabsplacement="side"] { | ||||||
|  | |||||||
| @ -2,8 +2,8 @@ | |||||||
|     "app_id": "com.moodle.moodlemobile", |     "app_id": "com.moodle.moodlemobile", | ||||||
|     "appname": "Moodle Mobile", |     "appname": "Moodle Mobile", | ||||||
|     "desktopappname": "Moodle Desktop", |     "desktopappname": "Moodle Desktop", | ||||||
|     "versioncode": 3910, |     "versioncode": 3920, | ||||||
|     "versionname": "3.9.1", |     "versionname": "3.9.2", | ||||||
|     "cache_update_frequency_usually": 420000, |     "cache_update_frequency_usually": 420000, | ||||||
|     "cache_update_frequency_often": 1200000, |     "cache_update_frequency_often": 1200000, | ||||||
|     "cache_update_frequency_sometimes": 3600000, |     "cache_update_frequency_sometimes": 3600000, | ||||||
|  | |||||||
| @ -122,7 +122,7 @@ export class CoreCourseProvider { | |||||||
|     canGetCourseBlocks(site?: CoreSite): boolean { |     canGetCourseBlocks(site?: CoreSite): boolean { | ||||||
|         site = site || this.sitesProvider.getCurrentSite(); |         site = site || this.sitesProvider.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         return site.isVersionGreaterEqualThan('3.7') && site.wsAvailable('core_block_get_course_blocks'); |         return site && site.isVersionGreaterEqualThan('3.7') && site.wsAvailable('core_block_get_course_blocks'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -135,7 +135,7 @@ export class CoreCourseProvider { | |||||||
|     canRequestStealthModules(site?: CoreSite): boolean { |     canRequestStealthModules(site?: CoreSite): boolean { | ||||||
|         site = site || this.sitesProvider.getCurrentSite(); |         site = site || this.sitesProvider.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         return site.isVersionGreaterEqualThan(['3.4.6', '3.5.3']); |         return site && site.isVersionGreaterEqualThan(['3.4.6', '3.5.3']); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -197,7 +197,9 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { | |||||||
|             if (result.updated) { |             if (result.updated) { | ||||||
|                 // Update data.
 |                 // Update data.
 | ||||||
|                 return this.courseProvider.invalidateSections(courseId, siteId).then(() => { |                 return this.courseProvider.invalidateSections(courseId, siteId).then(() => { | ||||||
|                     if (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.6')) { |                     const currentSite = this.sitesProvider.getCurrentSite(); | ||||||
|  | 
 | ||||||
|  |                     if (currentSite && currentSite.isVersionGreaterEqualThan('3.6')) { | ||||||
|                         return this.courseProvider.getSections(courseId, false, true, undefined, siteId); |                         return this.courseProvider.getSections(courseId, false, true, undefined, siteId); | ||||||
|                     } else { |                     } else { | ||||||
|                         return this.courseProvider.getActivitiesCompletionStatus(courseId, siteId); |                         return this.courseProvider.getActivitiesCompletionStatus(courseId, siteId); | ||||||
|  | |||||||
| @ -235,7 +235,7 @@ export class CoreCoursesCoursePreviewPage implements OnDestroy { | |||||||
|                 }); |                 }); | ||||||
|             }); |             }); | ||||||
|         }).finally(() => { |         }).finally(() => { | ||||||
|             if (!this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { |             if (this.sitesProvider.getCurrentSite() && !this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { | ||||||
|                 return this.coursesProvider.isGetCoursesByFieldAvailableInSite().then((available) => { |                 return this.coursesProvider.isGetCoursesByFieldAvailableInSite().then((available) => { | ||||||
|                     if (available) { |                     if (available) { | ||||||
|                         return this.coursesProvider.getCourseByField('id', this.course.id).then((course) => { |                         return this.coursesProvider.getCourseByField('id', this.course.id).then((course) => { | ||||||
| @ -402,7 +402,7 @@ export class CoreCoursesCoursePreviewPage implements OnDestroy { | |||||||
|         promises.push(this.coursesProvider.invalidateCourse(this.course.id)); |         promises.push(this.coursesProvider.invalidateCourse(this.course.id)); | ||||||
|         promises.push(this.coursesProvider.invalidateCourseEnrolmentMethods(this.course.id)); |         promises.push(this.coursesProvider.invalidateCourseEnrolmentMethods(this.course.id)); | ||||||
|         promises.push(this.courseOptionsDelegate.clearAndInvalidateCoursesOptions(this.course.id)); |         promises.push(this.courseOptionsDelegate.clearAndInvalidateCoursesOptions(this.course.id)); | ||||||
|         if (this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { |         if (this.sitesProvider.getCurrentSite() && !this.sitesProvider.getCurrentSite().isVersionGreaterEqualThan('3.7')) { | ||||||
|             promises.push(this.coursesProvider.invalidateCoursesByField('id', this.course.id)); |             promises.push(this.coursesProvider.invalidateCoursesByField('id', this.course.id)); | ||||||
|         } |         } | ||||||
|         if (this.guestInstanceId) { |         if (this.guestInstanceId) { | ||||||
|  | |||||||
| @ -114,7 +114,7 @@ export class CoreCoursesHelperProvider { | |||||||
|             promises = [], |             promises = [], | ||||||
|             colors = []; |             colors = []; | ||||||
| 
 | 
 | ||||||
|         if (site.isVersionGreaterEqualThan('3.8')) { |         if (site && site.isVersionGreaterEqualThan('3.8')) { | ||||||
|             promises.push(site.getConfig().then((configs) => { |             promises.push(site.getConfig().then((configs) => { | ||||||
|                 for (let x = 0; x < 10; x++) { |                 for (let x = 0; x < 10; x++) { | ||||||
|                     colors[x] = configs['core_admin_coursecolor' + (x + 1)] || null; |                     colors[x] = configs['core_admin_coursecolor' + (x + 1)] || null; | ||||||
|  | |||||||
| @ -64,12 +64,10 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { | |||||||
|      * @return Data. |      * @return Data. | ||||||
|      */ |      */ | ||||||
|     getData(): CoreFileUploaderHandlerData { |     getData(): CoreFileUploaderHandlerData { | ||||||
|         const isIOS = this.platform.is('ios'); |  | ||||||
| 
 |  | ||||||
|         const handler: CoreFileUploaderHandlerData = { |         const handler: CoreFileUploaderHandlerData = { | ||||||
|             title: isIOS ? 'core.fileuploader.more' : 'core.fileuploader.file', |             title: 'core.fileuploader.file', | ||||||
|             class: 'core-fileuploader-file-handler', |             class: 'core-fileuploader-file-handler', | ||||||
|             icon: isIOS ? 'more' : 'folder', |             icon: 'folder', | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         if (this.appProvider.isMobile()) { |         if (this.appProvider.isMobile()) { | ||||||
| @ -98,7 +96,6 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { | |||||||
| 
 | 
 | ||||||
|                     input.addEventListener('change', (evt: Event) => { |                     input.addEventListener('change', (evt: Event) => { | ||||||
|                         const file = input.files[0]; |                         const file = input.files[0]; | ||||||
|                         let fileName; |  | ||||||
| 
 | 
 | ||||||
|                         input.value = ''; // Unset input.
 |                         input.value = ''; // Unset input.
 | ||||||
|                         if (!file) { |                         if (!file) { | ||||||
| @ -113,17 +110,8 @@ export class CoreFileUploaderFileHandler implements CoreFileUploaderHandler { | |||||||
|                             return; |                             return; | ||||||
|                         } |                         } | ||||||
| 
 | 
 | ||||||
|                         fileName = file.name; |  | ||||||
|                         if (isIOS) { |  | ||||||
|                             // Check the name of the file and add a timestamp if needed (take picture).
 |  | ||||||
|                             const matches = fileName.match(/image\.(jpe?g|png)/); |  | ||||||
|                             if (matches) { |  | ||||||
|                                 fileName = 'image_' + this.timeUtils.readableTimestamp() + '.' + matches[1]; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         // Upload the picked file.
 |                         // Upload the picked file.
 | ||||||
|                         this.uploaderHelper.uploadFileObject(file, maxSize, upload, allowOffline, fileName).then((result) => { |                         this.uploaderHelper.uploadFileObject(file, maxSize, upload, allowOffline, file.name).then((result) => { | ||||||
|                             this.uploaderHelper.fileUploaded(result); |                             this.uploaderHelper.fileUploaded(result); | ||||||
|                         }).catch((error) => { |                         }).catch((error) => { | ||||||
|                             this.domUtils.showErrorModalDefault(error, |                             this.domUtils.showErrorModalDefault(error, | ||||||
|  | |||||||
| @ -65,8 +65,12 @@ export class CoreFileUploaderHelperProvider { | |||||||
|      */ |      */ | ||||||
|     async chooseAndUploadFile(maxSize: number, upload?: boolean, allowOffline?: boolean, mimetypes?: string[]): Promise<any> { |     async chooseAndUploadFile(maxSize: number, upload?: boolean, allowOffline?: boolean, mimetypes?: string[]): Promise<any> { | ||||||
| 
 | 
 | ||||||
|  |         const modal = this.domUtils.showModalLoading(); | ||||||
|  | 
 | ||||||
|         const result = await this.fileChooser.getFile(mimetypes ? mimetypes.join(',') : undefined); |         const result = await this.fileChooser.getFile(mimetypes ? mimetypes.join(',') : undefined); | ||||||
| 
 | 
 | ||||||
|  |         modal.dismiss(); | ||||||
|  | 
 | ||||||
|         if (!result) { |         if (!result) { | ||||||
|             // User canceled.
 |             // User canceled.
 | ||||||
|             throw this.domUtils.createCanceledError(); |             throw this.domUtils.createCanceledError(); | ||||||
| @ -87,10 +91,6 @@ export class CoreFileUploaderHelperProvider { | |||||||
|         const options = this.fileUploaderProvider.getFileUploadOptions(result.uri, result.name, result.mediaType, true); |         const options = this.fileUploaderProvider.getFileUploadOptions(result.uri, result.name, result.mediaType, true); | ||||||
| 
 | 
 | ||||||
|         if (upload) { |         if (upload) { | ||||||
|             const size = await this.fileProvider.getExternalFileSize(result.uri); |  | ||||||
| 
 |  | ||||||
|             await this.confirmUploadFile(size, false, allowOffline); |  | ||||||
| 
 |  | ||||||
|             return this.uploadFile(result.uri, maxSize, true, options); |             return this.uploadFile(result.uri, maxSize, true, options); | ||||||
|         } else { |         } else { | ||||||
|             return this.copyToTmpFolder(result.uri, false, maxSize, undefined, options); |             return this.copyToTmpFolder(result.uri, false, maxSize, undefined, options); | ||||||
|  | |||||||
| @ -249,6 +249,9 @@ export class CoreLoginCredentialsPage { | |||||||
|             this.loginHelper.treatUserTokenError(siteUrl, error, username, password); |             this.loginHelper.treatUserTokenError(siteUrl, error, username, password); | ||||||
|             if (error.loggedout) { |             if (error.loggedout) { | ||||||
|                 this.navCtrl.setRoot('CoreLoginSitesPage'); |                 this.navCtrl.setRoot('CoreLoginSitesPage'); | ||||||
|  |             } else if (error.errorcode == 'forcepasswordchangenotice') { | ||||||
|  |                 // Reset password field.
 | ||||||
|  |                 this.credForm.controls.password.reset(); | ||||||
|             } |             } | ||||||
|         }).finally(() => { |         }).finally(() => { | ||||||
|             modal.dismiss(); |             modal.dismiss(); | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ | |||||||
|                 </ion-item> |                 </ion-item> | ||||||
|             </div> |             </div> | ||||||
|             <ion-item> |             <ion-item> | ||||||
|                 <ion-input type="text" name="value" placeholder="{{ 'core.login.usernameoremail' | translate }}" formControlName="value" autocapitalize="none" autocorrect="off" [core-auto-focus]></ion-input> |                 <ion-input type="text" name="value" placeholder="{{ 'core.login.usernameoremail' | translate }}" formControlName="value" autocapitalize="none" autocorrect="off" [core-auto-focus]="autoFocus"></ion-input> | ||||||
|             </ion-item> |             </ion-item> | ||||||
|             <ion-item> |             <ion-item> | ||||||
|                 <button text-wrap ion-button block [disabled]="!myForm.valid">{{ 'core.courses.search' | translate }}</button> |                 <button text-wrap ion-button block [disabled]="!myForm.valid">{{ 'core.courses.search' | translate }}</button> | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ | |||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| 
 | 
 | ||||||
| import { Component, ViewChild, ElementRef } from '@angular/core'; | import { Component, ViewChild, ElementRef } from '@angular/core'; | ||||||
| import { IonicPage, NavController, NavParams } from 'ionic-angular'; | import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular'; | ||||||
| import { TranslateService } from '@ngx-translate/core'; | import { TranslateService } from '@ngx-translate/core'; | ||||||
| import { CoreEventsProvider } from '@providers/events'; | import { CoreEventsProvider } from '@providers/events'; | ||||||
| import { CoreSitesProvider } from '@providers/sites'; | import { CoreSitesProvider } from '@providers/sites'; | ||||||
| @ -35,10 +35,12 @@ export class CoreLoginForgottenPasswordPage { | |||||||
| 
 | 
 | ||||||
|     myForm: FormGroup; |     myForm: FormGroup; | ||||||
|     siteUrl: string; |     siteUrl: string; | ||||||
|  |     autoFocus: boolean; | ||||||
| 
 | 
 | ||||||
|     constructor(protected navCtrl: NavController, |     constructor(protected navCtrl: NavController, | ||||||
|             navParams: NavParams, |             navParams: NavParams, | ||||||
|             fb: FormBuilder, |             fb: FormBuilder, | ||||||
|  |             platform: Platform, | ||||||
|             protected translate: TranslateService, |             protected translate: TranslateService, | ||||||
|             protected loginHelper: CoreLoginHelperProvider, |             protected loginHelper: CoreLoginHelperProvider, | ||||||
|             protected domUtils: CoreDomUtilsProvider, |             protected domUtils: CoreDomUtilsProvider, | ||||||
| @ -46,6 +48,7 @@ export class CoreLoginForgottenPasswordPage { | |||||||
|             protected sitesProvider: CoreSitesProvider) { |             protected sitesProvider: CoreSitesProvider) { | ||||||
| 
 | 
 | ||||||
|         this.siteUrl = navParams.get('siteUrl'); |         this.siteUrl = navParams.get('siteUrl'); | ||||||
|  |         this.autoFocus = platform.is('tablet'); | ||||||
|         this.myForm = fb.group({ |         this.myForm = fb.group({ | ||||||
|             field: ['username', Validators.required], |             field: ['username', Validators.required], | ||||||
|             value: [navParams.get('username') || '', Validators.required] |             value: [navParams.get('username') || '', Validators.required] | ||||||
|  | |||||||
| @ -221,6 +221,9 @@ export class CoreLoginReconnectPage { | |||||||
| 
 | 
 | ||||||
|             if (error.loggedout) { |             if (error.loggedout) { | ||||||
|                 this.cancel(); |                 this.cancel(); | ||||||
|  |             } else if (error.errorcode == 'forcepasswordchangenotice') { | ||||||
|  |                 // Reset password field.
 | ||||||
|  |                 this.credForm.controls.password.reset(); | ||||||
|             } |             } | ||||||
|         }).finally(() => { |         }).finally(() => { | ||||||
|             modal.dismiss(); |             modal.dismiss(); | ||||||
|  | |||||||
| @ -20,13 +20,13 @@ | |||||||
|                 <ng-container *ngIf="siteSelector == 'url'"> |                 <ng-container *ngIf="siteSelector == 'url'"> | ||||||
|                     <ion-item> |                     <ion-item> | ||||||
|                         <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> |                         <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> | ||||||
|                         <ion-input name="url" type="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard"></ion-input> |                         <ion-input name="url" type="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard && !showScanQR"></ion-input> | ||||||
|                     </ion-item> |                     </ion-item> | ||||||
|                 </ng-container> |                 </ng-container> | ||||||
|                 <ng-container *ngIf="siteSelector != 'url'"> |                 <ng-container *ngIf="siteSelector != 'url'"> | ||||||
|                     <ion-item> |                     <ion-item> | ||||||
|                         <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> |                         <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> | ||||||
|                         <ion-input name="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard" (ionChange)="searchSite($event, siteForm.value.siteUrl)"></ion-input> |                         <ion-input name="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard && !showScanQR" (ionChange)="searchSite($event, siteForm.value.siteUrl)"></ion-input> | ||||||
|                     </ion-item> |                     </ion-item> | ||||||
| 
 | 
 | ||||||
|                     <ion-list [class.hidden]="!hasSites && !enteredSiteUrl" class="core-login-site-list"> |                     <ion-list [class.hidden]="!hasSites && !enteredSiteUrl" class="core-login-site-list"> | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ | |||||||
|     "inalltagcoll": "Everywhere", |     "inalltagcoll": "Everywhere", | ||||||
|     "itemstaggedwith": "{{$a.tagarea}} tagged with \"{{$a.tag}}\"", |     "itemstaggedwith": "{{$a.tagarea}} tagged with \"{{$a.tag}}\"", | ||||||
|     "notagsfound": "No tags matching \"{{$a}}\" found", |     "notagsfound": "No tags matching \"{{$a}}\" found", | ||||||
|  |     "noresultsfor": "No results for \"{{$a}}\"", | ||||||
|     "searchtags": "Search tags", |     "searchtags": "Search tags", | ||||||
|     "showingfirsttags": "Showing {{$a}} most popular tags", |     "showingfirsttags": "Showing {{$a}} most popular tags", | ||||||
|     "tag": "Tag", |     "tag": "Tag", | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
|             <ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content> |             <ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content> | ||||||
|         </ion-refresher> |         </ion-refresher> | ||||||
|         <core-loading [hideUntil]="loaded"> |         <core-loading [hideUntil]="loaded"> | ||||||
|             <ion-list> |             <ion-list *ngIf="hasUnsupportedAreas || areas"> | ||||||
|                 <ion-item text-wrap *ngIf="hasUnsupportedAreas" class="core-warning-item"> |                 <ion-item text-wrap *ngIf="hasUnsupportedAreas" class="core-warning-item"> | ||||||
|                     <ion-icon item-start name="warning" color="warning"></ion-icon> |                     <ion-icon item-start name="warning" color="warning"></ion-icon> | ||||||
|                     {{ 'core.tag.warningareasnotsupported' | translate }} |                     {{ 'core.tag.warningareasnotsupported' | translate }} | ||||||
| @ -19,6 +19,7 @@ | |||||||
|                     <ion-badge item-end *ngIf="area.badge">{{ area.badge }}</ion-badge> |                     <ion-badge item-end *ngIf="area.badge">{{ area.badge }}</ion-badge> | ||||||
|                 </a> |                 </a> | ||||||
|             </ion-list> |             </ion-list> | ||||||
|  |             <core-empty-box icon="fa-tag" *ngIf="!hasUnsupportedAreas && (!areas || !areas.length)" [message]="'core.tag.noresultsfor' | translate: { $a: tagName }"></core-empty-box> | ||||||
|         </core-loading> |         </core-loading> | ||||||
|     </ion-content> |     </ion-content> | ||||||
| </core-split-view> | </core-split-view> | ||||||
|  | |||||||
| @ -166,7 +166,7 @@ export class CoreTagProvider { | |||||||
| 
 | 
 | ||||||
|                 return Promise.reject(error); |                 return Promise.reject(error); | ||||||
|             }).then((response) => { |             }).then((response) => { | ||||||
|                 if (!response || !response.length) { |                 if (!response) { | ||||||
|                     return Promise.reject(null); |                     return Promise.reject(null); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -711,7 +711,7 @@ export class CoreFormatTextDirective implements OnChanges { | |||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 // Width and height parameters are required in 3.6 and older sites.
 |                 // Width and height parameters are required in 3.6 and older sites.
 | ||||||
|                 if (!site.isVersionGreaterEqualThan('3.7')) { |                 if (site && !site.isVersionGreaterEqualThan('3.7')) { | ||||||
|                     newUrl += '&width=' + width + '&height=' + height; |                     newUrl += '&width=' + width + '&height=' + height; | ||||||
|                 } |                 } | ||||||
|                 iframe.src = newUrl; |                 iframe.src = newUrl; | ||||||
|  | |||||||
| @ -431,6 +431,8 @@ export class CoreSitesProvider { | |||||||
|      */ |      */ | ||||||
|     getDemoSiteData(name: string): any { |     getDemoSiteData(name: string): any { | ||||||
|         const demoSites = CoreConfigConstants.demo_sites; |         const demoSites = CoreConfigConstants.demo_sites; | ||||||
|  |         name = name.toLowerCase(); | ||||||
|  | 
 | ||||||
|         if (typeof demoSites != 'undefined' && typeof demoSites[name] != 'undefined') { |         if (typeof demoSites != 'undefined' && typeof demoSites[name] != 'undefined') { | ||||||
|             return demoSites[name]; |             return demoSites[name]; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -527,7 +527,7 @@ $core-dd-question-colors: $white, $blue-light, #DCDCDC, #D8BFD8, #87CEFA, #DAA52 | |||||||
|     border-bottom: $hairlines-width solid $list-ios-border-color; |     border-bottom: $hairlines-width solid $list-ios-border-color; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   &:last-child > .item-inner { |   &.item-block:last-child > .item-inner { | ||||||
|     border-bottom: 0; |     border-bottom: 0; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user