Merge pull request #4173 from dpalou/MOBILE-4640

Mobile 4640
main
Pau Ferrer Ocaña 2024-09-13 12:46:45 +02:00 committed by GitHub
commit 00f4e77d3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 18 deletions

View File

@ -38,28 +38,26 @@ export class AddonModPageHelperProvider {
* @returns The HTML of the page.
*/
async getPageHtml(contents: CoreCourseModuleContentFile[], moduleId: number): Promise<string> {
let indexUrl: string | undefined;
let indexFile: CoreCourseModuleContentFile | undefined;
const paths: Record<string, string> = {};
// Extract the information about paths from the module contents.
contents.forEach((content) => {
const url = content.fileurl;
if (this.isMainPage(content)) {
// This seems to be the most reliable way to spot the index page.
indexUrl = url;
indexFile = content;
} else {
let key = content.filename;
if (content.filepath !== '/') {
// Add the folders without the leading slash.
key = content.filepath.substring(1) + key;
}
paths[CoreUrl.decodeURIComponent(key)] = url;
paths[CoreUrl.decodeURIComponent(key)] = content.fileurl;
}
});
// Promise handling when we are in a browser.
if (!indexUrl) {
if (!indexFile) {
// If ever that happens.
throw new CoreError('Could not locate the index page');
}
@ -69,14 +67,15 @@ export class AddonModPageHelperProvider {
// The file system is available.
url = await CoreFilepool.downloadUrl(
CoreSites.getCurrentSiteId(),
indexUrl,
indexFile.fileurl,
false,
ADDON_MOD_PAGE_COMPONENT,
moduleId,
indexFile.timemodified,
);
} else {
// We return the live URL.
url = await CoreSites.getCurrentSite()?.checkAndFixPluginfileURL(indexUrl) || '';
url = await CoreSites.getCurrentSite()?.checkAndFixPluginfileURL(indexFile.fileurl) || '';
}
const content = await CoreWS.getText(url);

View File

@ -316,12 +316,12 @@ describe('CoreUrl singleton', () => {
.toEqual(['6', 'mod_foo', 'content', '14', 'foo.txt']);
expect(CoreUrl.getPluginFileArgs('http://mysite.com/webservice/pluginfile.php/6/mod_foo/content/14/foo.txt'))
.toEqual(['6', 'mod_foo', 'content', '14', 'foo.txt']);
expect(CoreUrl.getPluginFileArgs('http://mysite.com/tokenpluginfile.php/abcdef123456/6/mod_foo/content/14/foo.txt'))
.toEqual(['6', 'mod_foo', 'content', '14', 'foo.txt']);
// It doesn't work with tokenpluginfile or other URLs, and also when pluginfile doesn't have enough params.
// It doesn't work with other URLs, and also when pluginfile doesn't have enough params.
expect(CoreUrl.getPluginFileArgs('http://mysite.com')).toEqual(undefined);
expect(CoreUrl.getPluginFileArgs('http://mysite.com/pluginfile.php/6/')).toEqual(undefined);
expect(CoreUrl.getPluginFileArgs('http://mysite.com/tokenpluginfile.php/abcdef123456/6/mod_foo/content/14/foo.txt'))
.toEqual(undefined);
});
});

View File

@ -693,19 +693,22 @@ export class CoreUrl {
}
/**
* Return the array of arguments of the pluginfile url.
* Return the array of arguments of the pluginfile or tokenpluginfile url.
*
* @param url URL to get the args.
* @returns The args found, undefined if not a pluginfile.
*/
static getPluginFileArgs(url: string): string[] | undefined {
if (!CoreUrl.isPluginFileUrl(url)) {
// Not pluginfile, return.
return;
}
let args: string[] = [];
const relativePath = url.substring(url.indexOf('/pluginfile.php') + 16);
const args = relativePath.split('/');
if (CoreUrl.isPluginFileUrl(url)) {
const relativePath = url.substring(url.indexOf('/pluginfile.php') + 16);
args = relativePath.split('/');
} else if (CoreUrl.isTokenPluginFileUrl(url)) {
const relativePath = url.substring(url.indexOf('/tokenpluginfile.php') + 21);
args = relativePath.split('/');
args.shift(); // Remove the token.
}
if (args.length < 3) {
// To be a plugin file it should have at least contextId, Component and Filearea.