commit
						086fc954ad
					
				| @ -102,6 +102,7 @@ export class CoreSitePluginsPluginContentComponent implements OnInit, DoCheck { | |||||||
|             this.jsData = Object.assign(this.data, this.sitePluginsProvider.createDataForJS(this.initResult, result)); |             this.jsData = Object.assign(this.data, this.sitePluginsProvider.createDataForJS(this.initResult, result)); | ||||||
| 
 | 
 | ||||||
|             // Pass some methods as jsData so they can be called from the template too.
 |             // Pass some methods as jsData so they can be called from the template too.
 | ||||||
|  |             this.jsData.fetchContent = this.fetchContent.bind(this); | ||||||
|             this.jsData.openContent = this.openContent.bind(this); |             this.jsData.openContent = this.openContent.bind(this); | ||||||
|             this.jsData.refreshContent = this.refreshContent.bind(this); |             this.jsData.refreshContent = this.refreshContent.bind(this); | ||||||
|             this.jsData.updateContent = this.updateContent.bind(this); |             this.jsData.updateContent = this.updateContent.bind(this); | ||||||
|  | |||||||
| @ -164,7 +164,7 @@ export class CoreSitePluginsProvider { | |||||||
| 
 | 
 | ||||||
|         if (initResult) { |         if (initResult) { | ||||||
|             // First of all, add the data returned by the init JS (if any).
 |             // First of all, add the data returned by the init JS (if any).
 | ||||||
|             data = this.utils.clone(initResult.jsResult || {}); |             data = Object.assign({}, initResult.jsResult || {}); | ||||||
|             if (typeof data == 'boolean') { |             if (typeof data == 'boolean') { | ||||||
|                 data = {}; |                 data = {}; | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -1628,7 +1628,16 @@ export class CoreSitesProvider { | |||||||
|      * Register a site schema. |      * Register a site schema. | ||||||
|      */ |      */ | ||||||
|     registerSiteSchema(schema: CoreSiteSchema): void { |     registerSiteSchema(schema: CoreSiteSchema): void { | ||||||
|         this.siteSchemas[schema.name] = schema; | 
 | ||||||
|  |         if (this.currentSite) { | ||||||
|  |             // Site has already been created, it's a schema probably added by site plugins. Add it only to current site.
 | ||||||
|  |             const schemas: {[name: string]: CoreSiteSchema} = {}; | ||||||
|  |             schemas[schema.name] = schema; | ||||||
|  | 
 | ||||||
|  |             this.applySiteSchemas(this.currentSite, schemas); | ||||||
|  |         } else { | ||||||
|  |             this.siteSchemas[schema.name] = schema; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -1638,7 +1647,6 @@ export class CoreSitesProvider { | |||||||
|      * @return Promise resolved when done. |      * @return Promise resolved when done. | ||||||
|      */ |      */ | ||||||
|     migrateSiteSchemas(site: CoreSite): Promise<any> { |     migrateSiteSchemas(site: CoreSite): Promise<any> { | ||||||
|         const db = site.getDb(); |  | ||||||
| 
 | 
 | ||||||
|         if (this.siteSchemasMigration[site.id]) { |         if (this.siteSchemasMigration[site.id]) { | ||||||
|             return this.siteSchemasMigration[site.id]; |             return this.siteSchemasMigration[site.id]; | ||||||
| @ -1647,40 +1655,8 @@ export class CoreSitesProvider { | |||||||
|         this.logger.debug(`Migrating all schemas of ${site.id}`); |         this.logger.debug(`Migrating all schemas of ${site.id}`); | ||||||
| 
 | 
 | ||||||
|         // First create tables not registerd with name/version.
 |         // First create tables not registerd with name/version.
 | ||||||
|         const promise = db.createTablesFromSchema(this.siteTablesSchemas).then(() => { |         const promise = site.getDb().createTablesFromSchema(this.siteTablesSchemas).then(() => { | ||||||
|             // Fetch installed versions of the schema.
 |             return this.applySiteSchemas(site, this.siteSchemas); | ||||||
|             return db.getAllRecords(this.SCHEMA_VERSIONS_TABLE).then((records) => { |  | ||||||
|                 const versions = {}; |  | ||||||
|                 records.forEach((record) => { |  | ||||||
|                     versions[record.name] = record.version; |  | ||||||
|                 }); |  | ||||||
| 
 |  | ||||||
|                 const promises = []; |  | ||||||
|                 for (const name in this.siteSchemas) { |  | ||||||
|                     const schema = this.siteSchemas[name]; |  | ||||||
|                     const oldVersion = versions[name] || 0; |  | ||||||
|                     if (oldVersion >= schema.version) { |  | ||||||
|                         continue; |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     this.logger.debug(`Migrating schema '${name}' of ${site.id} from version ${oldVersion} to ${schema.version}`); |  | ||||||
| 
 |  | ||||||
|                     let promise: Promise<any> = Promise.resolve(); |  | ||||||
|                     if (schema.tables) { |  | ||||||
|                         promise = promise.then(() => db.createTablesFromSchema(schema.tables)); |  | ||||||
|                     } |  | ||||||
|                     if (schema.migrate) { |  | ||||||
|                         promise = promise.then(() => schema.migrate(db, oldVersion, site.id)); |  | ||||||
|                     } |  | ||||||
| 
 |  | ||||||
|                     // Set installed version.
 |  | ||||||
|                     promise = promise.then(() => db.insertRecord(this.SCHEMA_VERSIONS_TABLE, {name, version: schema.version})); |  | ||||||
| 
 |  | ||||||
|                     promises.push(promise); |  | ||||||
|                 } |  | ||||||
| 
 |  | ||||||
|                 return Promise.all(promises); |  | ||||||
|             }); |  | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         this.siteSchemasMigration[site.id] = promise; |         this.siteSchemasMigration[site.id] = promise; | ||||||
| @ -1690,6 +1666,51 @@ export class CoreSitesProvider { | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Install and upgrade the supplied schemas for a certain site. | ||||||
|  |      * | ||||||
|  |      * @param site Site. | ||||||
|  |      * @param schemas Schemas to migrate. | ||||||
|  |      * @return Promise resolved when done. | ||||||
|  |      */ | ||||||
|  |     protected applySiteSchemas(site: CoreSite, schemas: {[name: string]: CoreSiteSchema}): Promise<any> { | ||||||
|  |         const db = site.getDb(); | ||||||
|  | 
 | ||||||
|  |         // Fetch installed versions of the schema.
 | ||||||
|  |         return db.getAllRecords(this.SCHEMA_VERSIONS_TABLE).then((records) => { | ||||||
|  |             const versions = {}; | ||||||
|  |             records.forEach((record) => { | ||||||
|  |                 versions[record.name] = record.version; | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             const promises = []; | ||||||
|  |             for (const name in schemas) { | ||||||
|  |                 const schema = schemas[name]; | ||||||
|  |                 const oldVersion = versions[name] || 0; | ||||||
|  |                 if (oldVersion >= schema.version) { | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 this.logger.debug(`Migrating schema '${name}' of ${site.id} from version ${oldVersion} to ${schema.version}`); | ||||||
|  | 
 | ||||||
|  |                 let promise: Promise<any> = Promise.resolve(); | ||||||
|  |                 if (schema.tables) { | ||||||
|  |                     promise = promise.then(() => db.createTablesFromSchema(schema.tables)); | ||||||
|  |                 } | ||||||
|  |                 if (schema.migrate) { | ||||||
|  |                     promise = promise.then(() => schema.migrate(db, oldVersion, site.id)); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // Set installed version.
 | ||||||
|  |                 promise = promise.then(() => db.insertRecord(this.SCHEMA_VERSIONS_TABLE, {name, version: schema.version})); | ||||||
|  | 
 | ||||||
|  |                 promises.push(promise); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return Promise.all(promises); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Check if a URL is the root URL of any of the stored sites. |      * Check if a URL is the root URL of any of the stored sites. | ||||||
|      * |      * | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user