MOBILE-2404 update: Migrate site DB addon tables
parent
91035595b2
commit
dcd1ab0415
|
@ -20,6 +20,7 @@ import { CoreMainMenuDelegate } from '@core/mainmenu/providers/delegate';
|
||||||
import { CoreInitDelegate } from '@providers/init';
|
import { CoreInitDelegate } from '@providers/init';
|
||||||
import { CoreLocalNotificationsProvider } from '@providers/local-notifications';
|
import { CoreLocalNotificationsProvider } from '@providers/local-notifications';
|
||||||
import { CoreLoginHelperProvider } from '@core/login/providers/helper';
|
import { CoreLoginHelperProvider } from '@core/login/providers/helper';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -35,7 +36,7 @@ import { CoreLoginHelperProvider } from '@core/login/providers/helper';
|
||||||
export class AddonCalendarModule {
|
export class AddonCalendarModule {
|
||||||
constructor(mainMenuDelegate: CoreMainMenuDelegate, calendarHandler: AddonCalendarMainMenuHandler,
|
constructor(mainMenuDelegate: CoreMainMenuDelegate, calendarHandler: AddonCalendarMainMenuHandler,
|
||||||
initDelegate: CoreInitDelegate, calendarProvider: AddonCalendarProvider, loginHelper: CoreLoginHelperProvider,
|
initDelegate: CoreInitDelegate, calendarProvider: AddonCalendarProvider, loginHelper: CoreLoginHelperProvider,
|
||||||
localNotificationsProvider: CoreLocalNotificationsProvider) {
|
localNotificationsProvider: CoreLocalNotificationsProvider, updateManager: CoreUpdateManagerProvider) {
|
||||||
mainMenuDelegate.registerHandler(calendarHandler);
|
mainMenuDelegate.registerHandler(calendarHandler);
|
||||||
|
|
||||||
initDelegate.ready().then(() => {
|
initDelegate.ready().then(() => {
|
||||||
|
@ -56,5 +57,15 @@ export class AddonCalendarModule {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Allow migrating the table from the old app to the new schema.
|
||||||
|
// In the old app some calculated properties were stored when it shouldn't. Filter only the fields we want.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'calendar_events',
|
||||||
|
newName: AddonCalendarProvider.EVENTS_TABLE,
|
||||||
|
filterFields: ['id', 'name', 'description', 'format', 'eventtype', 'courseid', 'timestart', 'timeduration',
|
||||||
|
'categoryid', 'groupid', 'userid', 'instance', 'modulename', 'timemodified', 'repeatid', 'visible', 'uuid',
|
||||||
|
'sequence', 'subscriptionid', 'notificationtime']
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,10 +36,10 @@ export class AddonCalendarProvider {
|
||||||
protected DEFAULT_NOTIFICATION_TIME = 60;
|
protected DEFAULT_NOTIFICATION_TIME = 60;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected EVENTS_TABLE = 'calendar_events';
|
static EVENTS_TABLE = 'addon_calendar_events';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.EVENTS_TABLE,
|
name: AddonCalendarProvider.EVENTS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'id',
|
name: 'id',
|
||||||
|
@ -59,6 +59,10 @@ export class AddonCalendarProvider {
|
||||||
name: 'description',
|
name: 'description',
|
||||||
type: 'TEXT'
|
type: 'TEXT'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'format',
|
||||||
|
type: 'INTEGER'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'eventtype',
|
name: 'eventtype',
|
||||||
type: 'TEXT'
|
type: 'TEXT'
|
||||||
|
@ -83,6 +87,10 @@ export class AddonCalendarProvider {
|
||||||
name: 'groupid',
|
name: 'groupid',
|
||||||
type: 'INTEGER'
|
type: 'INTEGER'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'userid',
|
||||||
|
type: 'INTEGER'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'instance',
|
name: 'instance',
|
||||||
type: 'INTEGER'
|
type: 'INTEGER'
|
||||||
|
@ -98,6 +106,22 @@ export class AddonCalendarProvider {
|
||||||
{
|
{
|
||||||
name: 'repeatid',
|
name: 'repeatid',
|
||||||
type: 'INTEGER'
|
type: 'INTEGER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'visible',
|
||||||
|
type: 'INTEGER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'uuid',
|
||||||
|
type: 'TEXT'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'sequence',
|
||||||
|
type: 'INTEGER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'subscriptionid',
|
||||||
|
type: 'INTEGER'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -181,7 +205,7 @@ export class AddonCalendarProvider {
|
||||||
*/
|
*/
|
||||||
getEventFromLocalDb(id: number, siteId?: string): Promise<any> {
|
getEventFromLocalDb(id: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.EVENTS_TABLE, { id: id });
|
return site.getDb().getRecord(AddonCalendarProvider.EVENTS_TABLE, { id: id });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,7 +310,7 @@ export class AddonCalendarProvider {
|
||||||
* @return {string} Prefix Cache key.
|
* @return {string} Prefix Cache key.
|
||||||
*/
|
*/
|
||||||
protected getEventsListPrefixCacheKey(): string {
|
protected getEventsListPrefixCacheKey(): string {
|
||||||
return this.ROOT_CACHE_KEY + 'eventslist:';
|
return this.ROOT_CACHE_KEY + 'events:';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -501,20 +525,26 @@ export class AddonCalendarProvider {
|
||||||
id: event.id,
|
id: event.id,
|
||||||
name: event.name,
|
name: event.name,
|
||||||
description: event.description,
|
description: event.description,
|
||||||
|
format: event.format,
|
||||||
eventtype: event.eventtype,
|
eventtype: event.eventtype,
|
||||||
courseid: event.courseid,
|
courseid: event.courseid,
|
||||||
timestart: event.timestart,
|
timestart: event.timestart,
|
||||||
timeduration: event.timeduration,
|
timeduration: event.timeduration,
|
||||||
categoryid: event.categoryid,
|
categoryid: event.categoryid,
|
||||||
groupid: event.groupid,
|
groupid: event.groupid,
|
||||||
|
userid: event.userid,
|
||||||
instance: event.instance,
|
instance: event.instance,
|
||||||
modulename: event.modulename,
|
modulename: event.modulename,
|
||||||
timemodified: event.timemodified,
|
timemodified: event.timemodified,
|
||||||
repeatid: event.repeatid,
|
repeatid: event.repeatid,
|
||||||
|
visible: event.visible,
|
||||||
|
uuid: event.uuid,
|
||||||
|
sequence: event.sequence,
|
||||||
|
subscriptionid: event.subscriptionid,
|
||||||
notificationtime: e.notificationtime || -1
|
notificationtime: e.notificationtime || -1
|
||||||
};
|
};
|
||||||
|
|
||||||
return db.insertRecord(this.EVENTS_TABLE, eventRecord);
|
return db.insertRecord(AddonCalendarProvider.EVENTS_TABLE, eventRecord);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -539,7 +569,7 @@ export class AddonCalendarProvider {
|
||||||
|
|
||||||
event.notificationtime = time;
|
event.notificationtime = time;
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.EVENTS_TABLE, event).then(() => {
|
return site.getDb().insertRecord(AddonCalendarProvider.EVENTS_TABLE, event).then(() => {
|
||||||
return this.scheduleEventNotification(event, time);
|
return this.scheduleEventNotification(event, time);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -36,6 +36,7 @@ import { CoreSettingsDelegate } from '@core/settings/providers/delegate';
|
||||||
import { AddonMessagesSettingsHandler } from './providers/settings-handler';
|
import { AddonMessagesSettingsHandler } from './providers/settings-handler';
|
||||||
import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate';
|
import { AddonPushNotificationsDelegate } from '@addon/pushnotifications/providers/delegate';
|
||||||
import { CoreUtilsProvider } from '@providers/utils/utils';
|
import { CoreUtilsProvider } from '@providers/utils/utils';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -63,7 +64,7 @@ export class AddonMessagesModule {
|
||||||
userDelegate: CoreUserDelegate, cronDelegate: CoreCronDelegate, syncHandler: AddonMessagesSyncCronHandler,
|
userDelegate: CoreUserDelegate, cronDelegate: CoreCronDelegate, syncHandler: AddonMessagesSyncCronHandler,
|
||||||
network: Network, messagesSync: AddonMessagesSyncProvider, appProvider: CoreAppProvider,
|
network: Network, messagesSync: AddonMessagesSyncProvider, appProvider: CoreAppProvider,
|
||||||
localNotifications: CoreLocalNotificationsProvider, messagesProvider: AddonMessagesProvider,
|
localNotifications: CoreLocalNotificationsProvider, messagesProvider: AddonMessagesProvider,
|
||||||
sitesProvider: CoreSitesProvider, linkHelper: CoreContentLinksHelperProvider,
|
sitesProvider: CoreSitesProvider, linkHelper: CoreContentLinksHelperProvider, updateManager: CoreUpdateManagerProvider,
|
||||||
settingsHandler: AddonMessagesSettingsHandler, settingsDelegate: CoreSettingsDelegate,
|
settingsHandler: AddonMessagesSettingsHandler, settingsDelegate: CoreSettingsDelegate,
|
||||||
pushNotificationsDelegate: AddonPushNotificationsDelegate, utils: CoreUtilsProvider,
|
pushNotificationsDelegate: AddonPushNotificationsDelegate, utils: CoreUtilsProvider,
|
||||||
addContactHandler: AddonMessagesAddContactUserHandler, blockContactHandler: AddonMessagesBlockContactUserHandler) {
|
addContactHandler: AddonMessagesAddContactUserHandler, blockContactHandler: AddonMessagesBlockContactUserHandler) {
|
||||||
|
@ -111,5 +112,17 @@ export class AddonMessagesModule {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Allow migrating the table from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_messages_offline_messages',
|
||||||
|
newName: AddonMessagesOfflineProvider.MESSAGES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'textformat',
|
||||||
|
delete: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,10 @@ export class AddonMessagesOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected MESSAGES_TABLE = 'addon_messages_offline_messages';
|
static MESSAGES_TABLE = 'addon_messages_offline_messages';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.MESSAGES_TABLE,
|
name: AddonMessagesOfflineProvider.MESSAGES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'touserid',
|
name: 'touserid',
|
||||||
|
@ -72,7 +72,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteMessage(toUserId: number, message: string, timeCreated: number, siteId?: string): Promise<any> {
|
deleteMessage(toUserId: number, message: string, timeCreated: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.MESSAGES_TABLE, {
|
return site.getDb().deleteRecords(AddonMessagesOfflineProvider.MESSAGES_TABLE, {
|
||||||
touserid: toUserId,
|
touserid: toUserId,
|
||||||
smallmessage: message,
|
smallmessage: message,
|
||||||
timecreated: timeCreated
|
timecreated: timeCreated
|
||||||
|
@ -88,7 +88,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllDeviceOfflineMessages(siteId?: string): Promise<any> {
|
getAllDeviceOfflineMessages(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.MESSAGES_TABLE, {deviceoffline: 1});
|
return site.getDb().getRecords(AddonMessagesOfflineProvider.MESSAGES_TABLE, {deviceoffline: 1});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getMessages(toUserId: number, siteId?: string): Promise<any> {
|
getMessages(toUserId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.MESSAGES_TABLE, {touserid: toUserId});
|
return site.getDb().getRecords(AddonMessagesOfflineProvider.MESSAGES_TABLE, {touserid: toUserId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllMessages(siteId?: string): Promise<any> {
|
getAllMessages(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getAllRecords(this.MESSAGES_TABLE);
|
return site.getDb().getAllRecords(AddonMessagesOfflineProvider.MESSAGES_TABLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
deviceoffline: this.appProvider.isOnline() ? 0 : 1
|
deviceoffline: this.appProvider.isOnline() ? 0 : 1
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.MESSAGES_TABLE, entry).then(() => {
|
return site.getDb().insertRecord(AddonMessagesOfflineProvider.MESSAGES_TABLE, entry).then(() => {
|
||||||
return entry;
|
return entry;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -169,7 +169,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
data = { deviceoffline: value ? 1 : 0 };
|
data = { deviceoffline: value ? 1 : 0 };
|
||||||
|
|
||||||
messages.forEach((message) => {
|
messages.forEach((message) => {
|
||||||
promises.push(db.insertRecord(this.MESSAGES_TABLE, data));
|
promises.push(db.insertRecord(AddonMessagesOfflineProvider.MESSAGES_TABLE, data));
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(promises);
|
return Promise.all(promises);
|
||||||
|
|
|
@ -29,6 +29,7 @@ import { AddonModAssignPrefetchHandler } from './providers/prefetch-handler';
|
||||||
import { AddonModAssignSyncCronHandler } from './providers/sync-cron-handler';
|
import { AddonModAssignSyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModAssignSubmissionModule } from './submission/submission.module';
|
import { AddonModAssignSubmissionModule } from './submission/submission.module';
|
||||||
import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
|
import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -54,9 +55,61 @@ import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
|
||||||
export class AddonModAssignModule {
|
export class AddonModAssignModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModAssignModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModAssignModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModAssignPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModAssignPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModAssignSyncCronHandler) {
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModAssignSyncCronHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTablesMigration([
|
||||||
|
{
|
||||||
|
name: 'mma_mod_assign_submissions',
|
||||||
|
newName: AddonModAssignOfflineProvider.SUBMISSIONS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'assignmentid',
|
||||||
|
newName: 'assignid'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'submitted',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'submissionstatement',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'plugindata',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mma_mod_assign_submissions_grading',
|
||||||
|
newName: AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'assignmentid',
|
||||||
|
newName: 'assignid'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'addattempt',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'applytoall',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'outcomes',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'plugindata',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,11 +28,11 @@ export class AddonModAssignOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected SUBMISSIONS_TABLE = 'addon_mod_assign_submissions';
|
static SUBMISSIONS_TABLE = 'addon_mod_assign_submissions';
|
||||||
protected SUBMISSIONS_GRADES_TABLE = 'addon_mod_assign_submissions_grading';
|
static SUBMISSIONS_GRADES_TABLE = 'addon_mod_assign_submissions_grading';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.SUBMISSIONS_TABLE,
|
name: AddonModAssignOfflineProvider.SUBMISSIONS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'assignid',
|
name: 'assignid',
|
||||||
|
@ -74,7 +74,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
primaryKeys: ['assignid', 'userid']
|
primaryKeys: ['assignid', 'userid']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.SUBMISSIONS_GRADES_TABLE,
|
name: AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'assignid',
|
name: 'assignid',
|
||||||
|
@ -143,7 +143,8 @@ export class AddonModAssignOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.SUBMISSIONS_TABLE, {assignid: assignId, userid: userId});
|
return site.getDb().deleteRecords(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE,
|
||||||
|
{assignid: assignId, userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +160,8 @@ export class AddonModAssignOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.SUBMISSIONS_GRADES_TABLE, {assignid: assignId, userid: userId});
|
return site.getDb().deleteRecords(AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE,
|
||||||
|
{assignid: assignId, userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +203,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
*/
|
*/
|
||||||
protected getAllSubmissions(siteId?: string): Promise<any[]> {
|
protected getAllSubmissions(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.SUBMISSIONS_TABLE);
|
return db.getAllRecords(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE);
|
||||||
}).then((submissions) => {
|
}).then((submissions) => {
|
||||||
|
|
||||||
// Parse the plugin data.
|
// Parse the plugin data.
|
||||||
|
@ -221,7 +223,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
*/
|
*/
|
||||||
protected getAllSubmissionsGrade(siteId?: string): Promise<any[]> {
|
protected getAllSubmissionsGrade(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.SUBMISSIONS_GRADES_TABLE);
|
return db.getAllRecords(AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE);
|
||||||
}).then((submissions) => {
|
}).then((submissions) => {
|
||||||
|
|
||||||
// Parse the plugin data and outcomes.
|
// Parse the plugin data and outcomes.
|
||||||
|
@ -243,7 +245,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAssignSubmissions(assignId: number, siteId?: string): Promise<any[]> {
|
getAssignSubmissions(assignId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getRecords(this.SUBMISSIONS_TABLE, {assignid: assignId});
|
return db.getRecords(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE, {assignid: assignId});
|
||||||
}).then((submissions) => {
|
}).then((submissions) => {
|
||||||
|
|
||||||
// Parse the plugin data.
|
// Parse the plugin data.
|
||||||
|
@ -264,7 +266,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAssignSubmissionsGrade(assignId: number, siteId?: string): Promise<any[]> {
|
getAssignSubmissionsGrade(assignId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getRecords(this.SUBMISSIONS_GRADES_TABLE, {assignid: assignId});
|
return db.getRecords(AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE, {assignid: assignId});
|
||||||
}).then((submissions) => {
|
}).then((submissions) => {
|
||||||
|
|
||||||
// Parse the plugin data and outcomes.
|
// Parse the plugin data and outcomes.
|
||||||
|
@ -289,7 +291,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecord(this.SUBMISSIONS_TABLE, {assignid: assignId, userid: userId});
|
return site.getDb().getRecord(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE, {assignid: assignId, userid: userId});
|
||||||
}).then((submission) => {
|
}).then((submission) => {
|
||||||
|
|
||||||
// Parse the plugin data.
|
// Parse the plugin data.
|
||||||
|
@ -331,7 +333,8 @@ export class AddonModAssignOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecord(this.SUBMISSIONS_GRADES_TABLE, {assignid: assignId, userid: userId});
|
return site.getDb().getRecord(AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE,
|
||||||
|
{assignid: assignId, userid: userId});
|
||||||
}).then((submission) => {
|
}).then((submission) => {
|
||||||
|
|
||||||
// Parse the plugin data and outcomes.
|
// Parse the plugin data and outcomes.
|
||||||
|
@ -423,7 +426,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
submission.submissionstatement = acceptStatement ? 1 : 0;
|
submission.submissionstatement = acceptStatement ? 1 : 0;
|
||||||
submission.plugindata = submission.plugindata ? JSON.stringify(submission.plugindata) : '{}';
|
submission.plugindata = submission.plugindata ? JSON.stringify(submission.plugindata) : '{}';
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.SUBMISSIONS_TABLE, submission);
|
return site.getDb().insertRecord(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE, submission);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -458,7 +461,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
onlinetimemodified: timemodified
|
onlinetimemodified: timemodified
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.SUBMISSIONS_TABLE, entry);
|
return site.getDb().insertRecord(AddonModAssignOfflineProvider.SUBMISSIONS_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +500,7 @@ export class AddonModAssignOfflineProvider {
|
||||||
timemodified: now
|
timemodified: now
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.SUBMISSIONS_GRADES_TABLE, entry);
|
return site.getDb().insertRecord(AddonModAssignOfflineProvider.SUBMISSIONS_GRADES_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import { AddonModChoicePrefetchHandler } from './providers/prefetch-handler';
|
||||||
import { AddonModChoiceSyncProvider } from './providers/sync';
|
import { AddonModChoiceSyncProvider } from './providers/sync';
|
||||||
import { AddonModChoiceSyncCronHandler } from './providers/sync-cron-handler';
|
import { AddonModChoiceSyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModChoiceOfflineProvider } from './providers/offline';
|
import { AddonModChoiceOfflineProvider } from './providers/offline';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -46,10 +47,26 @@ export class AddonModChoiceModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModChoiceModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModChoiceModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModChoicePrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModChoicePrefetchHandler,
|
||||||
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModChoiceLinkHandler,
|
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModChoiceLinkHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModChoiceSyncCronHandler) {
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModChoiceSyncCronHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
contentLinksDelegate.registerHandler(linkHandler);
|
contentLinksDelegate.registerHandler(linkHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_choice_offline_responses',
|
||||||
|
newName: AddonModChoiceOfflineProvider.CHOICE_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'responses',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'deleting',
|
||||||
|
type: 'boolean'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,10 @@ import { CoreSitesProvider } from '@providers/sites';
|
||||||
export class AddonModChoiceOfflineProvider {
|
export class AddonModChoiceOfflineProvider {
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected CHOICE_TABLE = 'addon_mod_choice_responses';
|
static CHOICE_TABLE = 'addon_mod_choice_responses';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.CHOICE_TABLE,
|
name: AddonModChoiceOfflineProvider.CHOICE_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'choiceid',
|
name: 'choiceid',
|
||||||
|
@ -76,7 +76,7 @@ export class AddonModChoiceOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.CHOICE_TABLE, {choiceid: choiceId, userid: userId});
|
return site.getDb().deleteRecords(AddonModChoiceOfflineProvider.CHOICE_TABLE, {choiceid: choiceId, userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ export class AddonModChoiceOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getResponses(siteId?: string): Promise<any[]> {
|
getResponses(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.CHOICE_TABLE).then((records) => {
|
return site.getDb().getRecords(AddonModChoiceOfflineProvider.CHOICE_TABLE).then((records) => {
|
||||||
records.forEach((record) => {
|
records.forEach((record) => {
|
||||||
record.responses = JSON.parse(record.responses);
|
record.responses = JSON.parse(record.responses);
|
||||||
});
|
});
|
||||||
|
@ -127,7 +127,8 @@ export class AddonModChoiceOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecord(this.CHOICE_TABLE, {choiceid: choiceId, userid: userId}).then((record) => {
|
return site.getDb().getRecord(AddonModChoiceOfflineProvider.CHOICE_TABLE, {choiceid: choiceId, userid: userId})
|
||||||
|
.then((record) => {
|
||||||
record.responses = JSON.parse(record.responses);
|
record.responses = JSON.parse(record.responses);
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
|
@ -160,7 +161,7 @@ export class AddonModChoiceOfflineProvider {
|
||||||
timecreated: new Date().getTime()
|
timecreated: new Date().getTime()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.CHOICE_TABLE, entry);
|
return site.getDb().insertRecord(AddonModChoiceOfflineProvider.CHOICE_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import { AddonModDataOfflineProvider } from './providers/offline';
|
||||||
import { AddonModDataFieldsDelegate } from './providers/fields-delegate';
|
import { AddonModDataFieldsDelegate } from './providers/fields-delegate';
|
||||||
import { AddonModDataDefaultFieldHandler } from './providers/default-field-handler';
|
import { AddonModDataDefaultFieldHandler } from './providers/default-field-handler';
|
||||||
import { AddonModDataFieldModule } from './fields/field.module';
|
import { AddonModDataFieldModule } from './fields/field.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -62,7 +63,7 @@ export class AddonModDataModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModDataModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModDataModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModDataPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModDataPrefetchHandler,
|
||||||
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModDataLinkHandler,
|
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModDataLinkHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModDataSyncCronHandler,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModDataSyncCronHandler, updateManager: CoreUpdateManagerProvider,
|
||||||
approveLinkHandler: AddonModDataApproveLinkHandler, deleteLinkHandler: AddonModDataDeleteLinkHandler,
|
approveLinkHandler: AddonModDataApproveLinkHandler, deleteLinkHandler: AddonModDataDeleteLinkHandler,
|
||||||
showLinkHandler: AddonModDataShowLinkHandler, editLinkHandler: AddonModDataEditLinkHandler) {
|
showLinkHandler: AddonModDataShowLinkHandler, editLinkHandler: AddonModDataEditLinkHandler) {
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
|
@ -73,5 +74,21 @@ export class AddonModDataModule {
|
||||||
contentLinksDelegate.registerHandler(showLinkHandler);
|
contentLinksDelegate.registerHandler(showLinkHandler);
|
||||||
contentLinksDelegate.registerHandler(editLinkHandler);
|
contentLinksDelegate.registerHandler(editLinkHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_data_entry',
|
||||||
|
newName: AddonModDataOfflineProvider.DATA_ENTRY_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'fields',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'dataAndEntry',
|
||||||
|
delete: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,10 +27,10 @@ export class AddonModDataOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected DATA_ENTRY_TABLE = 'addon_mod_data_entry';
|
static DATA_ENTRY_TABLE = 'addon_mod_data_entry';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.DATA_ENTRY_TABLE,
|
name: AddonModDataOfflineProvider.DATA_ENTRY_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'dataid',
|
name: 'dataid',
|
||||||
|
@ -102,7 +102,8 @@ export class AddonModDataOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
|
deleteEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId, action: action});
|
return site.getDb().deleteRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId,
|
||||||
|
action: action});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +115,9 @@ export class AddonModDataOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllEntries(siteId?: string): Promise<any> {
|
getAllEntries(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getAllRecords(this.DATA_ENTRY_TABLE);
|
return site.getDb().getAllRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE);
|
||||||
|
}).then((entries) => {
|
||||||
|
return entries.map(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +130,9 @@ export class AddonModDataOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getDatabaseEntries(dataId: number, siteId?: string): Promise<any> {
|
getDatabaseEntries(dataId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.DATA_ENTRY_TABLE, {dataid: dataId});
|
return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId});
|
||||||
|
}).then((entries) => {
|
||||||
|
return entries.map(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,7 +147,10 @@ export class AddonModDataOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
|
getEntry(dataId: number, entryId: number, action: string, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId, action: action});
|
return site.getDb().getRecord(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId,
|
||||||
|
action: action});
|
||||||
|
}).then((entry) => {
|
||||||
|
return this.parseRecord(entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +164,9 @@ export class AddonModDataOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getEntryActions(dataId: number, entryId: number, siteId?: string): Promise<any> {
|
getEntryActions(dataId: number, entryId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId});
|
return site.getDb().getRecords(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, {dataid: dataId, entryid: entryId});
|
||||||
|
}).then((entries) => {
|
||||||
|
return entries.map(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,6 +218,18 @@ export class AddonModDataOfflineProvider {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse "fields" of an offline record.
|
||||||
|
*
|
||||||
|
* @param {any} record Record object
|
||||||
|
* @return {any} Record object with columns parsed.
|
||||||
|
*/
|
||||||
|
protected parseRecord(record: any): any {
|
||||||
|
record.fields = this.textUtils.parseJSON(record.fields);
|
||||||
|
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save an entry data to be sent later.
|
* Save an entry data to be sent later.
|
||||||
*
|
*
|
||||||
|
@ -233,11 +255,11 @@ export class AddonModDataOfflineProvider {
|
||||||
groupid: groupId,
|
groupid: groupId,
|
||||||
action: action,
|
action: action,
|
||||||
entryid: entryId,
|
entryid: entryId,
|
||||||
fields: fields,
|
fields: JSON.stringify(fields || []),
|
||||||
timemodified: timemodified
|
timemodified: timemodified
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.DATA_ENTRY_TABLE, entry);
|
return site.getDb().insertRecord(AddonModDataOfflineProvider.DATA_ENTRY_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import { AddonModFeedbackPrefetchHandler } from './providers/prefetch-handler';
|
||||||
import { AddonModFeedbackSyncProvider } from './providers/sync';
|
import { AddonModFeedbackSyncProvider } from './providers/sync';
|
||||||
import { AddonModFeedbackSyncCronHandler } from './providers/sync-cron-handler';
|
import { AddonModFeedbackSyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModFeedbackOfflineProvider } from './providers/offline';
|
import { AddonModFeedbackOfflineProvider } from './providers/offline';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -59,7 +60,7 @@ export class AddonModFeedbackModule {
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModFeedbackPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModFeedbackPrefetchHandler,
|
||||||
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModFeedbackLinkHandler,
|
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModFeedbackLinkHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModFeedbackSyncCronHandler,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModFeedbackSyncCronHandler,
|
||||||
analysisLinkHandler: AddonModFeedbackAnalysisLinkHandler,
|
analysisLinkHandler: AddonModFeedbackAnalysisLinkHandler, updateManager: CoreUpdateManagerProvider,
|
||||||
showEntriesLinkHandler: AddonModFeedbackShowEntriesLinkHandler,
|
showEntriesLinkHandler: AddonModFeedbackShowEntriesLinkHandler,
|
||||||
showNonRespondentsLinkHandler: AddonModFeedbackShowNonRespondentsLinkHandler,
|
showNonRespondentsLinkHandler: AddonModFeedbackShowNonRespondentsLinkHandler,
|
||||||
completeLinkHandler: AddonModFeedbackCompleteLinkHandler,
|
completeLinkHandler: AddonModFeedbackCompleteLinkHandler,
|
||||||
|
@ -73,5 +74,17 @@ export class AddonModFeedbackModule {
|
||||||
contentLinksDelegate.registerHandler(completeLinkHandler);
|
contentLinksDelegate.registerHandler(completeLinkHandler);
|
||||||
contentLinksDelegate.registerHandler(printLinkHandler);
|
contentLinksDelegate.registerHandler(printLinkHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_feedback_responses',
|
||||||
|
newName: AddonModFeedbackOfflineProvider.FEEDBACK_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'responses',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,10 +27,10 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected FEEDBACK_TABLE = 'addon_mod_feedback_answers';
|
static FEEDBACK_TABLE = 'addon_mod_feedback_answers';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.FEEDBACK_TABLE,
|
name: AddonModFeedbackOfflineProvider.FEEDBACK_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'feedbackid',
|
name: 'feedbackid',
|
||||||
|
@ -73,7 +73,7 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteFeedbackPageResponses(feedbackId: number, page: number, siteId?: string): Promise<any> {
|
deleteFeedbackPageResponses(feedbackId: number, page: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.FEEDBACK_TABLE, {feedbackid: feedbackId, page: page});
|
return site.getDb().deleteRecords(AddonModFeedbackOfflineProvider.FEEDBACK_TABLE, {feedbackid: feedbackId, page: page});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllFeedbackResponses(siteId?: string): Promise<any> {
|
getAllFeedbackResponses(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getAllRecords(this.FEEDBACK_TABLE).then((entries) => {
|
return site.getDb().getAllRecords(AddonModFeedbackOfflineProvider.FEEDBACK_TABLE).then((entries) => {
|
||||||
return entries.map((entry) => {
|
return entries.map((entry) => {
|
||||||
entry.responses = this.textUtils.parseJSON(entry.responses);
|
entry.responses = this.textUtils.parseJSON(entry.responses);
|
||||||
});
|
});
|
||||||
|
@ -102,12 +102,12 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getFeedbackResponses(feedbackId: number, siteId?: string): Promise<any> {
|
getFeedbackResponses(feedbackId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.FEEDBACK_TABLE, {feedbackid: feedbackId}).then((entries) => {
|
return site.getDb().getRecords(AddonModFeedbackOfflineProvider.FEEDBACK_TABLE, {feedbackid: feedbackId});
|
||||||
|
}).then((entries) => {
|
||||||
return entries.map((entry) => {
|
return entries.map((entry) => {
|
||||||
entry.responses = this.textUtils.parseJSON(entry.responses);
|
entry.responses = this.textUtils.parseJSON(entry.responses);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,12 +120,12 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getFeedbackPageResponses(feedbackId: number, page: number, siteId?: string): Promise<any> {
|
getFeedbackPageResponses(feedbackId: number, page: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.FEEDBACK_TABLE, {feedbackid: feedbackId, page: page}).then((entry) => {
|
return site.getDb().getRecord(AddonModFeedbackOfflineProvider.FEEDBACK_TABLE, {feedbackid: feedbackId, page: page});
|
||||||
|
}).then((entry) => {
|
||||||
entry.responses = this.textUtils.parseJSON(entry.responses);
|
entry.responses = this.textUtils.parseJSON(entry.responses);
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -161,7 +161,7 @@ export class AddonModFeedbackOfflineProvider {
|
||||||
timemodified: this.timeUtils.timestamp()
|
timemodified: this.timeUtils.timestamp()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.FEEDBACK_TABLE, entry);
|
return site.getDb().insertRecord(AddonModFeedbackOfflineProvider.FEEDBACK_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import { AddonModForumSyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModForumIndexLinkHandler } from './providers/index-link-handler';
|
import { AddonModForumIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModForumDiscussionLinkHandler } from './providers/discussion-link-handler';
|
import { AddonModForumDiscussionLinkHandler } from './providers/discussion-link-handler';
|
||||||
import { AddonModForumComponentsModule } from './components/components.module';
|
import { AddonModForumComponentsModule } from './components/components.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -50,11 +51,49 @@ export class AddonModForumModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModForumModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModForumModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModForumPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModForumPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModForumSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModForumSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModForumIndexLinkHandler, discussionHandler: AddonModForumDiscussionLinkHandler) {
|
indexHandler: AddonModForumIndexLinkHandler, discussionHandler: AddonModForumDiscussionLinkHandler,
|
||||||
|
updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
linksDelegate.registerHandler(indexHandler);
|
linksDelegate.registerHandler(indexHandler);
|
||||||
linksDelegate.registerHandler(discussionHandler);
|
linksDelegate.registerHandler(discussionHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTablesMigration([
|
||||||
|
{
|
||||||
|
name: 'mma_mod_forum_offline_discussions',
|
||||||
|
newName: AddonModForumOfflineProvider.DISCUSSIONS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'forumAndUser',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'options',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mma_mod_forum_offline_replies',
|
||||||
|
newName: AddonModForumOfflineProvider.REPLIES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'forumAndUser',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'discussionAndUser',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'options',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,12 +24,12 @@ import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
export class AddonModForumOfflineProvider {
|
export class AddonModForumOfflineProvider {
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected DISCUSSIONS_TABLE = 'addon_mod_forum_discussions';
|
static DISCUSSIONS_TABLE = 'addon_mod_forum_discussions';
|
||||||
protected REPLIES_TABLE = 'addon_mod_forum_replies';
|
static REPLIES_TABLE = 'addon_mod_forum_replies';
|
||||||
|
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.DISCUSSIONS_TABLE,
|
name: AddonModForumOfflineProvider.DISCUSSIONS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'forumid',
|
name: 'forumid',
|
||||||
|
@ -71,7 +71,7 @@ export class AddonModForumOfflineProvider {
|
||||||
primaryKeys: ['forumid', 'userid', 'timecreated']
|
primaryKeys: ['forumid', 'userid', 'timecreated']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.REPLIES_TABLE,
|
name: AddonModForumOfflineProvider.REPLIES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'postid',
|
name: 'postid',
|
||||||
|
@ -141,7 +141,7 @@ export class AddonModForumOfflineProvider {
|
||||||
timecreated: timeCreated,
|
timecreated: timeCreated,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.DISCUSSIONS_TABLE, conditions);
|
return site.getDb().deleteRecords(AddonModForumOfflineProvider.DISCUSSIONS_TABLE, conditions);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ export class AddonModForumOfflineProvider {
|
||||||
timecreated: timeCreated,
|
timecreated: timeCreated,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecord(this.DISCUSSIONS_TABLE, conditions).then((record) => {
|
return site.getDb().getRecord(AddonModForumOfflineProvider.DISCUSSIONS_TABLE, conditions).then((record) => {
|
||||||
record.options = this.textUtils.parseJSON(record.options);
|
record.options = this.textUtils.parseJSON(record.options);
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
|
@ -178,7 +178,7 @@ export class AddonModForumOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllNewDiscussions(siteId?: string): Promise<any[]> {
|
getAllNewDiscussions(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.DISCUSSIONS_TABLE).then(this.parseRecordOptions.bind(this));
|
return site.getDb().getRecords(AddonModForumOfflineProvider.DISCUSSIONS_TABLE).then(this.parseRecordOptions.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +214,8 @@ export class AddonModForumOfflineProvider {
|
||||||
userid: userId || site.getUserId(),
|
userid: userId || site.getUserId(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecords(this.DISCUSSIONS_TABLE, conditions).then(this.parseRecordOptions.bind(this));
|
return site.getDb().getRecords(AddonModForumOfflineProvider.DISCUSSIONS_TABLE, conditions)
|
||||||
|
.then(this.parseRecordOptions.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +249,7 @@ export class AddonModForumOfflineProvider {
|
||||||
timecreated: timeCreated || new Date().getTime()
|
timecreated: timeCreated || new Date().getTime()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.DISCUSSIONS_TABLE, data);
|
return site.getDb().insertRecord(AddonModForumOfflineProvider.DISCUSSIONS_TABLE, data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +268,7 @@ export class AddonModForumOfflineProvider {
|
||||||
userid: userId || site.getUserId(),
|
userid: userId || site.getUserId(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.REPLIES_TABLE, conditions);
|
return site.getDb().deleteRecords(AddonModForumOfflineProvider.REPLIES_TABLE, conditions);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +280,7 @@ export class AddonModForumOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllReplies(siteId?: string): Promise<any[]> {
|
getAllReplies(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.REPLIES_TABLE).then(this.parseRecordOptions.bind(this));
|
return site.getDb().getRecords(AddonModForumOfflineProvider.REPLIES_TABLE).then(this.parseRecordOptions.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,7 +316,8 @@ export class AddonModForumOfflineProvider {
|
||||||
userid: userId || site.getUserId(),
|
userid: userId || site.getUserId(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecords(this.REPLIES_TABLE, conditions).then(this.parseRecordOptions.bind(this));
|
return site.getDb().getRecords(AddonModForumOfflineProvider.REPLIES_TABLE, conditions)
|
||||||
|
.then(this.parseRecordOptions.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,7 +353,8 @@ export class AddonModForumOfflineProvider {
|
||||||
userid: userId || site.getUserId(),
|
userid: userId || site.getUserId(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecords(this.REPLIES_TABLE, conditions).then(this.parseRecordOptions.bind(this));
|
return site.getDb().getRecords(AddonModForumOfflineProvider.REPLIES_TABLE, conditions)
|
||||||
|
.then(this.parseRecordOptions.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,7 +389,7 @@ export class AddonModForumOfflineProvider {
|
||||||
timecreated: new Date().getTime()
|
timecreated: new Date().getTime()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.REPLIES_TABLE, data);
|
return site.getDb().insertRecord(AddonModForumOfflineProvider.REPLIES_TABLE, data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import { AddonModGlossarySyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModGlossaryIndexLinkHandler } from './providers/index-link-handler';
|
import { AddonModGlossaryIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModGlossaryEntryLinkHandler } from './providers/entry-link-handler';
|
import { AddonModGlossaryEntryLinkHandler } from './providers/entry-link-handler';
|
||||||
import { AddonModGlossaryComponentsModule } from './components/components.module';
|
import { AddonModGlossaryComponentsModule } from './components/components.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -50,11 +51,37 @@ export class AddonModGlossaryModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModGlossaryModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModGlossaryModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModGlossaryPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModGlossaryPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModGlossarySyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModGlossarySyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModGlossaryIndexLinkHandler, discussionHandler: AddonModGlossaryEntryLinkHandler) {
|
indexHandler: AddonModGlossaryIndexLinkHandler, discussionHandler: AddonModGlossaryEntryLinkHandler,
|
||||||
|
updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
linksDelegate.registerHandler(indexHandler);
|
linksDelegate.registerHandler(indexHandler);
|
||||||
linksDelegate.registerHandler(discussionHandler);
|
linksDelegate.registerHandler(discussionHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_glossary_add_entry',
|
||||||
|
newName: AddonModGlossaryOfflineProvider.ENTRIES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'glossaryAndConcept',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'glossaryAndUser',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'options',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'attachments',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,11 +25,11 @@ import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
export class AddonModGlossaryOfflineProvider {
|
export class AddonModGlossaryOfflineProvider {
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected ENTRIES_TABLE = 'addon_mod_glossary_entrues';
|
static ENTRIES_TABLE = 'addon_mod_glossary_entrues';
|
||||||
|
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.ENTRIES_TABLE,
|
name: AddonModGlossaryOfflineProvider.ENTRIES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'glossaryid',
|
name: 'glossaryid',
|
||||||
|
@ -96,7 +96,7 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
timecreated: timeCreated,
|
timecreated: timeCreated,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.ENTRIES_TABLE, conditions);
|
return site.getDb().deleteRecords(AddonModGlossaryOfflineProvider.ENTRIES_TABLE, conditions);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllNewEntries(siteId?: string): Promise<any[]> {
|
getAllNewEntries(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.ENTRIES_TABLE).then((records: any[]) => {
|
return site.getDb().getRecords(AddonModGlossaryOfflineProvider.ENTRIES_TABLE).then((records: any[]) => {
|
||||||
return records.map(this.parseRecord.bind(this));
|
return records.map(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -131,7 +131,8 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
timecreated: timeCreated,
|
timecreated: timeCreated,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecord(this.ENTRIES_TABLE, conditions).then(this.parseRecord.bind(this));
|
return site.getDb().getRecord(AddonModGlossaryOfflineProvider.ENTRIES_TABLE, conditions)
|
||||||
|
.then(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +151,7 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
userId: userId || site.getUserId(),
|
userId: userId || site.getUserId(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecords(this.ENTRIES_TABLE, conditions).then((records: any[]) => {
|
return site.getDb().getRecords(AddonModGlossaryOfflineProvider.ENTRIES_TABLE, conditions).then((records: any[]) => {
|
||||||
return records.map(this.parseRecord.bind(this));
|
return records.map(this.parseRecord.bind(this));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -172,7 +173,7 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
concept: concept,
|
concept: concept,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().getRecords(this.ENTRIES_TABLE, conditions).then((entries) => {
|
return site.getDb().getRecords(AddonModGlossaryOfflineProvider.ENTRIES_TABLE, conditions).then((entries) => {
|
||||||
if (!entries.length) {
|
if (!entries.length) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -229,7 +230,7 @@ export class AddonModGlossaryOfflineProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
return discardPromise.then(() => {
|
return discardPromise.then(() => {
|
||||||
return site.getDb().insertRecord(this.ENTRIES_TABLE, entry).then(() => false);
|
return site.getDb().insertRecord(AddonModGlossaryOfflineProvider.ENTRIES_TABLE, entry).then(() => false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -364,7 +364,7 @@ export class AddonModLessonIndexComponent extends CoreCourseModuleMainActivityCo
|
||||||
this.navCtrl.push('AddonModLessonPlayerPage', {
|
this.navCtrl.push('AddonModLessonPlayerPage', {
|
||||||
courseId: this.courseId,
|
courseId: this.courseId,
|
||||||
lessonId: this.lesson.id,
|
lessonId: this.lesson.id,
|
||||||
pageId: this.retakeToReview.pageId,
|
pageId: this.retakeToReview.pageid,
|
||||||
password: this.password,
|
password: this.password,
|
||||||
review: true,
|
review: true,
|
||||||
retake: this.retakeToReview.retake
|
retake: this.retakeToReview.retake
|
||||||
|
|
|
@ -28,6 +28,7 @@ import { AddonModLessonSyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModLessonIndexLinkHandler } from './providers/index-link-handler';
|
import { AddonModLessonIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModLessonGradeLinkHandler } from './providers/grade-link-handler';
|
import { AddonModLessonGradeLinkHandler } from './providers/grade-link-handler';
|
||||||
import { AddonModLessonReportLinkHandler } from './providers/report-link-handler';
|
import { AddonModLessonReportLinkHandler } from './providers/report-link-handler';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -53,7 +54,7 @@ export class AddonModLessonModule {
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModLessonPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModLessonPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModLessonSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModLessonSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModLessonIndexLinkHandler, gradeHandler: AddonModLessonGradeLinkHandler,
|
indexHandler: AddonModLessonIndexLinkHandler, gradeHandler: AddonModLessonGradeLinkHandler,
|
||||||
reportHandler: AddonModLessonReportLinkHandler) {
|
reportHandler: AddonModLessonReportLinkHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
|
@ -61,5 +62,71 @@ export class AddonModLessonModule {
|
||||||
linksDelegate.registerHandler(indexHandler);
|
linksDelegate.registerHandler(indexHandler);
|
||||||
linksDelegate.registerHandler(gradeHandler);
|
linksDelegate.registerHandler(gradeHandler);
|
||||||
linksDelegate.registerHandler(reportHandler);
|
linksDelegate.registerHandler(reportHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTablesMigration([
|
||||||
|
{
|
||||||
|
name: 'mma_mod_lesson_password',
|
||||||
|
newName: AddonModLessonProvider.PASSWORD_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'id',
|
||||||
|
newName: 'lessonid'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mma_mod_lesson_retakes',
|
||||||
|
newName: AddonModLessonOfflineProvider.RETAKES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'finished',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'outoftime',
|
||||||
|
type: 'boolean'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mma_mod_lesson_page_attempts',
|
||||||
|
newName: AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'lessonAndPage',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'lessonAndRetake',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'lessonAndRetakeAndType',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'lessonAndRetakeAndPage',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'data',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'correct',
|
||||||
|
type: 'boolean'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'userAnswer',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mma_mod_lesson_retakes_finished_sync',
|
||||||
|
newName: AddonModLessonSyncProvider.RETAKES_FINISHED_TABLE
|
||||||
|
}
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,11 +29,11 @@ export class AddonModLessonOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database. We use lowercase in the names to match the WS responses.
|
// Variables for database. We use lowercase in the names to match the WS responses.
|
||||||
protected RETAKES_TABLE = 'addon_mod_lesson_retakes';
|
static RETAKES_TABLE = 'addon_mod_lesson_retakes';
|
||||||
protected PAGE_ATTEMPTS_TABLE = 'addon_mod_lesson_page_attempts';
|
static PAGE_ATTEMPTS_TABLE = 'addon_mod_lesson_page_attempts';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.RETAKES_TABLE,
|
name: AddonModLessonOfflineProvider.RETAKES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'lessonid',
|
name: 'lessonid',
|
||||||
|
@ -68,7 +68,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.PAGE_ATTEMPTS_TABLE,
|
name: AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'lessonid',
|
name: 'lessonid',
|
||||||
|
@ -142,7 +142,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteAttempt(lessonId: number, retake: number, pageId: number, timemodified: number, siteId?: string): Promise<any> {
|
deleteAttempt(lessonId: number, retake: number, pageId: number, timemodified: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.PAGE_ATTEMPTS_TABLE, {
|
return site.getDb().deleteRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {
|
||||||
lessonid: lessonId,
|
lessonid: lessonId,
|
||||||
retake: retake,
|
retake: retake,
|
||||||
pageid: pageId,
|
pageid: pageId,
|
||||||
|
@ -160,7 +160,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteRetake(lessonId: number, siteId?: string): Promise<any> {
|
deleteRetake(lessonId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.RETAKES_TABLE, {lessonid: lessonId});
|
return site.getDb().deleteRecords(AddonModLessonOfflineProvider.RETAKES_TABLE, {lessonid: lessonId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +175,8 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteRetakeAttemptsForPage(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any> {
|
deleteRetakeAttemptsForPage(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake, pageid: pageId});
|
return site.getDb().deleteRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId,
|
||||||
|
retake: retake, pageid: pageId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +201,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
entry.outoftime = outOfTime ? 1 : 0;
|
entry.outoftime = outOfTime ? 1 : 0;
|
||||||
entry.timemodified = this.timeUtils.timestamp();
|
entry.timemodified = this.timeUtils.timestamp();
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.RETAKES_TABLE, entry);
|
return site.getDb().insertRecord(AddonModLessonOfflineProvider.RETAKES_TABLE, entry);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -213,7 +214,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllAttempts(siteId?: string): Promise<any> {
|
getAllAttempts(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.PAGE_ATTEMPTS_TABLE);
|
return db.getAllRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE);
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
return this.parsePageAttempts(attempts);
|
return this.parsePageAttempts(attempts);
|
||||||
});
|
});
|
||||||
|
@ -256,7 +257,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllRetakes(siteId?: string): Promise<any> {
|
getAllRetakes(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.RETAKES_TABLE);
|
return db.getAllRecords(AddonModLessonOfflineProvider.RETAKES_TABLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +298,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getLessonAttempts(lessonId: number, siteId?: string): Promise<any[]> {
|
getLessonAttempts(lessonId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId});
|
return site.getDb().getRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId});
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
return this.parsePageAttempts(attempts);
|
return this.parsePageAttempts(attempts);
|
||||||
});
|
});
|
||||||
|
@ -361,7 +362,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getRetake(lessonId: number, siteId?: string): Promise<any> {
|
getRetake(lessonId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.RETAKES_TABLE, {lessonid: lessonId});
|
return site.getDb().getRecord(AddonModLessonOfflineProvider.RETAKES_TABLE, {lessonid: lessonId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,7 +376,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getRetakeAttempts(lessonId: number, retake: number, siteId?: string): Promise<any[]> {
|
getRetakeAttempts(lessonId: number, retake: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake});
|
return site.getDb().getRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake});
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
return this.parsePageAttempts(attempts);
|
return this.parsePageAttempts(attempts);
|
||||||
});
|
});
|
||||||
|
@ -392,7 +393,8 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getRetakeAttemptsForPage(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any[]> {
|
getRetakeAttemptsForPage(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake, pageid: pageId});
|
return site.getDb().getRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake,
|
||||||
|
pageid: pageId});
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
return this.parsePageAttempts(attempts);
|
return this.parsePageAttempts(attempts);
|
||||||
});
|
});
|
||||||
|
@ -409,7 +411,8 @@ export class AddonModLessonOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getRetakeAttemptsForType(lessonId: number, retake: number, type: number, siteId?: string): Promise<any> {
|
getRetakeAttemptsForType(lessonId: number, retake: number, type: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake, type: type});
|
return site.getDb().getRecords(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, {lessonid: lessonId, retake: retake,
|
||||||
|
type: type});
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
return this.parsePageAttempts(attempts);
|
return this.parsePageAttempts(attempts);
|
||||||
});
|
});
|
||||||
|
@ -563,7 +566,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
useranswer: userAnswer ? JSON.stringify(userAnswer) : null,
|
useranswer: userAnswer ? JSON.stringify(userAnswer) : null,
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.PAGE_ATTEMPTS_TABLE, entry);
|
return site.getDb().insertRecord(AddonModLessonOfflineProvider.PAGE_ATTEMPTS_TABLE, entry);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (page.type == AddonModLessonProvider.TYPE_QUESTION) {
|
if (page.type == AddonModLessonProvider.TYPE_QUESTION) {
|
||||||
// It's a question page, set it as last question page attempted.
|
// It's a question page, set it as last question page attempted.
|
||||||
|
@ -591,7 +594,7 @@ export class AddonModLessonOfflineProvider {
|
||||||
entry.lastquestionpage = lastPage;
|
entry.lastquestionpage = lastPage;
|
||||||
entry.timemodified = this.timeUtils.timestamp();
|
entry.timemodified = this.timeUtils.timestamp();
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.RETAKES_TABLE, entry);
|
return site.getDb().insertRecord(AddonModLessonOfflineProvider.RETAKES_TABLE, entry);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,12 +58,12 @@ export class AddonModLessonSyncProvider extends CoreSyncBaseProvider {
|
||||||
protected componentTranslate: string;
|
protected componentTranslate: string;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected RETAKES_FINISHED_TABLE = 'addon_mod_lesson_retakes_finished_sync';
|
static RETAKES_FINISHED_TABLE = 'addon_mod_lesson_retakes_finished_sync';
|
||||||
protected tablesSchema = {
|
protected tablesSchema = {
|
||||||
name: this.RETAKES_FINISHED_TABLE,
|
name: AddonModLessonSyncProvider.RETAKES_FINISHED_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'lessonId',
|
name: 'lessonid',
|
||||||
type: 'INTEGER',
|
type: 'INTEGER',
|
||||||
primaryKey: true
|
primaryKey: true
|
||||||
},
|
},
|
||||||
|
@ -72,7 +72,7 @@ export class AddonModLessonSyncProvider extends CoreSyncBaseProvider {
|
||||||
type: 'INTEGER'
|
type: 'INTEGER'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'pageId',
|
name: 'pageid',
|
||||||
type: 'INTEGER'
|
type: 'INTEGER'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ export class AddonModLessonSyncProvider extends CoreSyncBaseProvider {
|
||||||
*/
|
*/
|
||||||
deleteRetakeFinishedInSync(lessonId: number, siteId?: string): Promise<any> {
|
deleteRetakeFinishedInSync(lessonId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.RETAKES_FINISHED_TABLE, {lessonId});
|
return site.getDb().deleteRecords(AddonModLessonSyncProvider.RETAKES_FINISHED_TABLE, {lessonid: lessonId});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
// Ignore errors, maybe there is none.
|
// Ignore errors, maybe there is none.
|
||||||
});
|
});
|
||||||
|
@ -120,7 +120,7 @@ export class AddonModLessonSyncProvider extends CoreSyncBaseProvider {
|
||||||
*/
|
*/
|
||||||
getRetakeFinishedInSync(lessonId: number, siteId?: string): Promise<any> {
|
getRetakeFinishedInSync(lessonId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.RETAKES_FINISHED_TABLE, {lessonId});
|
return site.getDb().getRecord(AddonModLessonSyncProvider.RETAKES_FINISHED_TABLE, {lessonid: lessonId});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
// Ignore errors, return undefined.
|
// Ignore errors, return undefined.
|
||||||
});
|
});
|
||||||
|
@ -164,10 +164,10 @@ export class AddonModLessonSyncProvider extends CoreSyncBaseProvider {
|
||||||
*/
|
*/
|
||||||
setRetakeFinishedInSync(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any> {
|
setRetakeFinishedInSync(lessonId: number, retake: number, pageId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().insertRecord(this.RETAKES_FINISHED_TABLE, {
|
return site.getDb().insertRecord(AddonModLessonSyncProvider.RETAKES_FINISHED_TABLE, {
|
||||||
lessonId: lessonId,
|
lessonid: lessonId,
|
||||||
retake: Number(retake),
|
retake: Number(retake),
|
||||||
pageId: Number(pageId),
|
pageid: Number(pageId),
|
||||||
timefinished: this.timeUtils.timestamp()
|
timefinished: this.timeUtils.timestamp()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -148,12 +148,12 @@ export class AddonModLessonProvider {
|
||||||
static LESSON_PAGE_ENDOFCLUSTER = 31;
|
static LESSON_PAGE_ENDOFCLUSTER = 31;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected PASSWORD_TABLE = 'addon_mod_lesson_password';
|
static PASSWORD_TABLE = 'addon_mod_lesson_password';
|
||||||
protected tablesSchema = {
|
protected tablesSchema = {
|
||||||
name: this.PASSWORD_TABLE,
|
name: AddonModLessonProvider.PASSWORD_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'lessonId',
|
name: 'lessonid',
|
||||||
type: 'INTEGER',
|
type: 'INTEGER',
|
||||||
primaryKey: true
|
primaryKey: true
|
||||||
},
|
},
|
||||||
|
@ -2072,7 +2072,7 @@ export class AddonModLessonProvider {
|
||||||
*/
|
*/
|
||||||
getStoredPassword(lessonId: number, siteId?: string): Promise<string> {
|
getStoredPassword(lessonId: number, siteId?: string): Promise<string> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.PASSWORD_TABLE, {lessonId}).then((entry) => {
|
return site.getDb().getRecord(AddonModLessonProvider.PASSWORD_TABLE, {lessonid: lessonId}).then((entry) => {
|
||||||
return entry.password;
|
return entry.password;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -3169,7 +3169,7 @@ export class AddonModLessonProvider {
|
||||||
*/
|
*/
|
||||||
removeStoredPassword(lessonId: number, siteId?: string): Promise<any> {
|
removeStoredPassword(lessonId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.PASSWORD_TABLE, {lessonId});
|
return site.getDb().deleteRecords(AddonModLessonProvider.PASSWORD_TABLE, {lessonid: lessonId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3184,12 +3184,12 @@ export class AddonModLessonProvider {
|
||||||
storePassword(lessonId: number, password: string, siteId?: string): Promise<any> {
|
storePassword(lessonId: number, password: string, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
const entry = {
|
const entry = {
|
||||||
lessonId: lessonId,
|
lessonid: lessonId,
|
||||||
password: password,
|
password: password,
|
||||||
timemodified: Date.now()
|
timemodified: Date.now()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.PASSWORD_TABLE, entry);
|
return site.getDb().insertRecord(AddonModLessonProvider.PASSWORD_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import { CoreComponentsModule } from '@components/components.module';
|
||||||
import { AddonModQuizAccessPasswordHandler } from './providers/handler';
|
import { AddonModQuizAccessPasswordHandler } from './providers/handler';
|
||||||
import { AddonModQuizAccessPasswordComponent } from './component/password';
|
import { AddonModQuizAccessPasswordComponent } from './component/password';
|
||||||
import { AddonModQuizAccessRuleDelegate } from '../../providers/access-rules-delegate';
|
import { AddonModQuizAccessRuleDelegate } from '../../providers/access-rules-delegate';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -42,7 +43,14 @@ import { AddonModQuizAccessRuleDelegate } from '../../providers/access-rules-del
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class AddonModQuizAccessPasswordModule {
|
export class AddonModQuizAccessPasswordModule {
|
||||||
constructor(accessRuleDelegate: AddonModQuizAccessRuleDelegate, handler: AddonModQuizAccessPasswordHandler) {
|
constructor(accessRuleDelegate: AddonModQuizAccessRuleDelegate, handler: AddonModQuizAccessPasswordHandler,
|
||||||
|
updateManager: CoreUpdateManagerProvider) {
|
||||||
accessRuleDelegate.registerHandler(handler);
|
accessRuleDelegate.registerHandler(handler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mod_quiz_access_password',
|
||||||
|
newName: AddonModQuizAccessPasswordHandler.PASSWORD_TABLE
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,13 +23,10 @@ import { AddonModQuizAccessPasswordComponent } from '../component/password';
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRuleHandler {
|
export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRuleHandler {
|
||||||
name = 'AddonModQuizAccessPassword';
|
|
||||||
ruleName = 'quizaccess_password';
|
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected PASSWORD_TABLE = 'mod_quiz_access_password';
|
static PASSWORD_TABLE = 'addon_mod_quiz_access_password';
|
||||||
protected tableSchema = {
|
protected tableSchema = {
|
||||||
name: this.PASSWORD_TABLE,
|
name: AddonModQuizAccessPasswordHandler.PASSWORD_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'id',
|
name: 'id',
|
||||||
|
@ -47,6 +44,9 @@ export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRule
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
name = 'AddonModQuizAccessPassword';
|
||||||
|
ruleName = 'quizaccess_password';
|
||||||
|
|
||||||
constructor(private sitesProvider: CoreSitesProvider) {
|
constructor(private sitesProvider: CoreSitesProvider) {
|
||||||
this.sitesProvider.createTableFromSchema(this.tableSchema);
|
this.sitesProvider.createTableFromSchema(this.tableSchema);
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRule
|
||||||
protected getPasswordEntry(quizId: number, siteId?: string): Promise<any> {
|
protected getPasswordEntry(quizId: number, siteId?: string): Promise<any> {
|
||||||
|
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.PASSWORD_TABLE, {id: quizId});
|
return site.getDb().getRecord(AddonModQuizAccessPasswordHandler.PASSWORD_TABLE, {id: quizId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRule
|
||||||
protected removePassword(quizId: number, siteId?: string): Promise<any> {
|
protected removePassword(quizId: number, siteId?: string): Promise<any> {
|
||||||
|
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.PASSWORD_TABLE, {id: quizId});
|
return site.getDb().deleteRecords(AddonModQuizAccessPasswordHandler.PASSWORD_TABLE, {id: quizId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ export class AddonModQuizAccessPasswordHandler implements AddonModQuizAccessRule
|
||||||
timemodified: Date.now()
|
timemodified: Date.now()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.PASSWORD_TABLE, entry);
|
return site.getDb().insertRecord(AddonModQuizAccessPasswordHandler.PASSWORD_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,10 @@ export class AddonModQuizOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected ATTEMPTS_TABLE = 'addon_mod_quiz_attempts';
|
static ATTEMPTS_TABLE = 'addon_mod_quiz_attempts';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.ATTEMPTS_TABLE,
|
name: AddonModQuizOfflineProvider.ATTEMPTS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'id', // Attempt ID.
|
name: 'id', // Attempt ID.
|
||||||
|
@ -141,7 +141,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllAttempts(siteId?: string): Promise<any[]> {
|
getAllAttempts(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.ATTEMPTS_TABLE);
|
return db.getAllRecords(AddonModQuizOfflineProvider.ATTEMPTS_TABLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAttemptById(attemptId: number, siteId?: string): Promise<any> {
|
getAttemptById(attemptId: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getRecord(this.ATTEMPTS_TABLE, {id: attemptId});
|
return db.getRecord(AddonModQuizOfflineProvider.ATTEMPTS_TABLE, {id: attemptId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecords(this.ATTEMPTS_TABLE, {quizid: quizId, userid: userId});
|
return site.getDb().getRecords(AddonModQuizOfflineProvider.ATTEMPTS_TABLE, {quizid: quizId, userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
entry.timemodified = now;
|
entry.timemodified = now;
|
||||||
entry.finished = finish ? 1 : 0;
|
entry.finished = finish ? 1 : 0;
|
||||||
|
|
||||||
return db.insertRecord(this.ATTEMPTS_TABLE, entry);
|
return db.insertRecord(AddonModQuizOfflineProvider.ATTEMPTS_TABLE, entry);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
// Attempt has been saved, now we need to save the answers.
|
// Attempt has been saved, now we need to save the answers.
|
||||||
return this.saveAnswers(quiz, attempt, questions, data, now, siteId);
|
return this.saveAnswers(quiz, attempt, questions, data, now, siteId);
|
||||||
|
@ -276,7 +276,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
|
|
||||||
// Remove the attempt.
|
// Remove the attempt.
|
||||||
promises.push(this.sitesProvider.getSiteDb(siteId).then((db) => {
|
promises.push(this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.deleteRecords(this.ATTEMPTS_TABLE, {id: attemptId});
|
return db.deleteRecords(AddonModQuizOfflineProvider.ATTEMPTS_TABLE, {id: attemptId});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return Promise.all(promises);
|
return Promise.all(promises);
|
||||||
|
@ -379,7 +379,7 @@ export class AddonModQuizOfflineProvider {
|
||||||
*/
|
*/
|
||||||
setAttemptCurrentPage(attemptId: number, page: number, siteId?: string): Promise<any> {
|
setAttemptCurrentPage(attemptId: number, page: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.updateRecords(this.ATTEMPTS_TABLE, {currentpage: page}, {id: attemptId});
|
return db.updateRecords(AddonModQuizOfflineProvider.ATTEMPTS_TABLE, {currentpage: page}, {id: attemptId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import { AddonModQuizIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModQuizGradeLinkHandler } from './providers/grade-link-handler';
|
import { AddonModQuizGradeLinkHandler } from './providers/grade-link-handler';
|
||||||
import { AddonModQuizReviewLinkHandler } from './providers/review-link-handler';
|
import { AddonModQuizReviewLinkHandler } from './providers/review-link-handler';
|
||||||
import { AddonModQuizComponentsModule } from './components/components.module';
|
import { AddonModQuizComponentsModule } from './components/components.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
// Access rules.
|
// Access rules.
|
||||||
import { AddonModQuizAccessDelayBetweenAttemptsModule } from './accessrules/delaybetweenattempts/delaybetweenattempts.module';
|
import { AddonModQuizAccessDelayBetweenAttemptsModule } from './accessrules/delaybetweenattempts/delaybetweenattempts.module';
|
||||||
|
@ -75,7 +76,7 @@ export class AddonModQuizModule {
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModQuizPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModQuizPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModQuizSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModQuizSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModQuizIndexLinkHandler, gradeHandler: AddonModQuizGradeLinkHandler,
|
indexHandler: AddonModQuizIndexLinkHandler, gradeHandler: AddonModQuizGradeLinkHandler,
|
||||||
reviewHandler: AddonModQuizReviewLinkHandler) {
|
reviewHandler: AddonModQuizReviewLinkHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
|
@ -83,5 +84,21 @@ export class AddonModQuizModule {
|
||||||
linksDelegate.registerHandler(indexHandler);
|
linksDelegate.registerHandler(indexHandler);
|
||||||
linksDelegate.registerHandler(gradeHandler);
|
linksDelegate.registerHandler(gradeHandler);
|
||||||
linksDelegate.registerHandler(reviewHandler);
|
linksDelegate.registerHandler(reviewHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mod_quiz_attempts',
|
||||||
|
newName: AddonModQuizOfflineProvider.ATTEMPTS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'quizAndUser',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'finished',
|
||||||
|
type: 'boolean'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,11 +32,11 @@ export class AddonModScormOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected ATTEMPTS_TABLE = 'addon_mod_scorm_offline_attempts';
|
static ATTEMPTS_TABLE = 'addon_mod_scorm_offline_attempts';
|
||||||
protected TRACKS_TABLE = 'addon_mod_scorm_offline_scos_tracks';
|
static TRACKS_TABLE = 'addon_mod_scorm_offline_scos_tracks';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.ATTEMPTS_TABLE,
|
name: AddonModScormOfflineProvider.ATTEMPTS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'scormid',
|
name: 'scormid',
|
||||||
|
@ -73,7 +73,7 @@ export class AddonModScormOfflineProvider {
|
||||||
primaryKeys: ['scormid', 'userid', 'attempt']
|
primaryKeys: ['scormid', 'userid', 'attempt']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: this.TRACKS_TABLE,
|
name: AddonModScormOfflineProvider.TRACKS_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'scormid',
|
name: 'scormid',
|
||||||
|
@ -156,7 +156,7 @@ export class AddonModScormOfflineProvider {
|
||||||
// Block the SCORM so it can't be synced.
|
// Block the SCORM so it can't be synced.
|
||||||
this.syncProvider.blockOperation(AddonModScormProvider.COMPONENT, scormId, 'changeAttemptNumber', site.id);
|
this.syncProvider.blockOperation(AddonModScormProvider.COMPONENT, scormId, 'changeAttemptNumber', site.id);
|
||||||
|
|
||||||
return db.updateRecords(this.ATTEMPTS_TABLE, newData, currentAttemptConditions).then(() => {
|
return db.updateRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE, newData, currentAttemptConditions).then(() => {
|
||||||
|
|
||||||
// Now update the attempt number of all the tracks and mark them as not synced.
|
// Now update the attempt number of all the tracks and mark them as not synced.
|
||||||
newData = {
|
newData = {
|
||||||
|
@ -164,9 +164,11 @@ export class AddonModScormOfflineProvider {
|
||||||
synced: 0
|
synced: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
return db.updateRecords(this.TRACKS_TABLE, newData, currentAttemptConditions).catch((error) => {
|
return db.updateRecords(AddonModScormOfflineProvider.TRACKS_TABLE, newData, currentAttemptConditions)
|
||||||
|
.catch((error) => {
|
||||||
// Failed to update the tracks, restore the old attempt number.
|
// Failed to update the tracks, restore the old attempt number.
|
||||||
return db.updateRecords(this.ATTEMPTS_TABLE, { attempt: attempt }, newAttemptConditions).then(() => {
|
return db.updateRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE, { attempt: attempt },
|
||||||
|
newAttemptConditions).then(() => {
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -216,7 +218,7 @@ export class AddonModScormOfflineProvider {
|
||||||
entry.snapshot = JSON.stringify(this.removeDefaultData(snapshot));
|
entry.snapshot = JSON.stringify(this.removeDefaultData(snapshot));
|
||||||
}
|
}
|
||||||
|
|
||||||
return db.insertRecord(this.ATTEMPTS_TABLE, entry).then(() => {
|
return db.insertRecord(AddonModScormOfflineProvider.ATTEMPTS_TABLE, entry).then(() => {
|
||||||
// Store all the data in userData.
|
// Store all the data in userData.
|
||||||
const promises = [];
|
const promises = [];
|
||||||
|
|
||||||
|
@ -258,10 +260,12 @@ export class AddonModScormOfflineProvider {
|
||||||
db = site.getDb();
|
db = site.getDb();
|
||||||
|
|
||||||
// Delete the attempt.
|
// Delete the attempt.
|
||||||
promises.push(db.deleteRecords(this.ATTEMPTS_TABLE, {scormid: scormId, userid: userId, attempt: attempt}));
|
promises.push(db.deleteRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE, {scormid: scormId, userid: userId,
|
||||||
|
attempt: attempt}));
|
||||||
|
|
||||||
// Delete all the tracks.
|
// Delete all the tracks.
|
||||||
promises.push(db.deleteRecords(this.TRACKS_TABLE, {scormid: scormId, userid: userId, attempt: attempt}));
|
promises.push(db.deleteRecords(AddonModScormOfflineProvider.TRACKS_TABLE, {scormid: scormId, userid: userId,
|
||||||
|
attempt: attempt}));
|
||||||
|
|
||||||
return Promise.all(promises);
|
return Promise.all(promises);
|
||||||
});
|
});
|
||||||
|
@ -331,7 +335,7 @@ export class AddonModScormOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllAttempts(siteId?: string): Promise<any[]> {
|
getAllAttempts(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
return this.sitesProvider.getSiteDb(siteId).then((db) => {
|
||||||
return db.getAllRecords(this.ATTEMPTS_TABLE);
|
return db.getAllRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE);
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
attempts.forEach((attempt) => {
|
attempts.forEach((attempt) => {
|
||||||
attempt.snapshot = this.textUtils.parseJSON(attempt.snapshot);
|
attempt.snapshot = this.textUtils.parseJSON(attempt.snapshot);
|
||||||
|
@ -354,7 +358,8 @@ export class AddonModScormOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecord(this.ATTEMPTS_TABLE, {scormid: scormId, userid: userId, attempt: attempt});
|
return site.getDb().getRecord(AddonModScormOfflineProvider.ATTEMPTS_TABLE, {scormid: scormId, userid: userId,
|
||||||
|
attempt: attempt});
|
||||||
}).then((entry) => {
|
}).then((entry) => {
|
||||||
entry.snapshot = this.textUtils.parseJSON(entry.snapshot);
|
entry.snapshot = this.textUtils.parseJSON(entry.snapshot);
|
||||||
|
|
||||||
|
@ -391,7 +396,7 @@ export class AddonModScormOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecords(this.ATTEMPTS_TABLE, {scormid: scormId, userid: userId});
|
return site.getDb().getRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE, {scormid: scormId, userid: userId});
|
||||||
}).then((attempts) => {
|
}).then((attempts) => {
|
||||||
attempts.forEach((attempt) => {
|
attempts.forEach((attempt) => {
|
||||||
attempt.snapshot = this.textUtils.parseJSON(attempt.snapshot);
|
attempt.snapshot = this.textUtils.parseJSON(attempt.snapshot);
|
||||||
|
@ -467,7 +472,7 @@ export class AddonModScormOfflineProvider {
|
||||||
conditions.synced = 1;
|
conditions.synced = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return site.getDb().getRecords(this.TRACKS_TABLE, conditions);
|
return site.getDb().getRecords(AddonModScormOfflineProvider.TRACKS_TABLE, conditions);
|
||||||
}).then((tracks) => {
|
}).then((tracks) => {
|
||||||
tracks.forEach((track) => {
|
tracks.forEach((track) => {
|
||||||
track.value = this.textUtils.parseJSON(track.value);
|
track.value = this.textUtils.parseJSON(track.value);
|
||||||
|
@ -704,11 +709,11 @@ export class AddonModScormOfflineProvider {
|
||||||
|
|
||||||
if (synchronous) {
|
if (synchronous) {
|
||||||
// The insert operation is always asynchronous, always return true.
|
// The insert operation is always asynchronous, always return true.
|
||||||
db.insertRecord(this.TRACKS_TABLE, entry);
|
db.insertRecord(AddonModScormOfflineProvider.TRACKS_TABLE, entry);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return db.insertRecord(this.TRACKS_TABLE, entry);
|
return db.insertRecord(AddonModScormOfflineProvider.TRACKS_TABLE, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -790,7 +795,7 @@ export class AddonModScormOfflineProvider {
|
||||||
|
|
||||||
this.logger.debug('Mark SCO ' + scoId + ' as synced for attempt ' + attempt + ' in SCORM ' + scormId);
|
this.logger.debug('Mark SCO ' + scoId + ' as synced for attempt ' + attempt + ' in SCORM ' + scormId);
|
||||||
|
|
||||||
return site.getDb().updateRecords(this.TRACKS_TABLE, {synced: 1}, {
|
return site.getDb().updateRecords(AddonModScormOfflineProvider.TRACKS_TABLE, {synced: 1}, {
|
||||||
scormid: scormId,
|
scormid: scormId,
|
||||||
userid: userId,
|
userid: userId,
|
||||||
attempt: attempt,
|
attempt: attempt,
|
||||||
|
@ -916,7 +921,8 @@ export class AddonModScormOfflineProvider {
|
||||||
snapshot: JSON.stringify(this.removeDefaultData(userData))
|
snapshot: JSON.stringify(this.removeDefaultData(userData))
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().updateRecords(this.ATTEMPTS_TABLE, newData, { scormid: scormId, userid: userId, attempt: attempt });
|
return site.getDb().updateRecords(AddonModScormOfflineProvider.ATTEMPTS_TABLE, newData, { scormid: scormId,
|
||||||
|
userid: userId, attempt: attempt });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import { AddonModScormIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModScormGradeLinkHandler } from './providers/grade-link-handler';
|
import { AddonModScormGradeLinkHandler } from './providers/grade-link-handler';
|
||||||
import { AddonModScormSyncProvider } from './providers/scorm-sync';
|
import { AddonModScormSyncProvider } from './providers/scorm-sync';
|
||||||
import { AddonModScormComponentsModule } from './components/components.module';
|
import { AddonModScormComponentsModule } from './components/components.module';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -50,12 +51,49 @@ export class AddonModScormModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModScormModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModScormModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModScormPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModScormPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModScormSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModScormSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModScormIndexLinkHandler, gradeHandler: AddonModScormGradeLinkHandler) {
|
indexHandler: AddonModScormIndexLinkHandler, gradeHandler: AddonModScormGradeLinkHandler,
|
||||||
|
updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
linksDelegate.registerHandler(indexHandler);
|
linksDelegate.registerHandler(indexHandler);
|
||||||
linksDelegate.registerHandler(gradeHandler);
|
linksDelegate.registerHandler(gradeHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTablesMigration([
|
||||||
|
{
|
||||||
|
name: 'mod_scorm_offline_attempts',
|
||||||
|
newName: AddonModScormOfflineProvider.ATTEMPTS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'snapshot',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'scormAndUser',
|
||||||
|
delete: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mod_scorm_offline_scos_tracks',
|
||||||
|
newName: AddonModScormOfflineProvider.TRACKS_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'value',
|
||||||
|
type: 'object'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'scormUserAttempt',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'scormUserAttemptSynced',
|
||||||
|
delete: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,10 @@ export class AddonModSurveyOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected SURVEY_TABLE = 'addon_mod_survey_answers';
|
static SURVEY_TABLE = 'addon_mod_survey_answers';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.SURVEY_TABLE,
|
name: AddonModSurveyOfflineProvider.SURVEY_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'surveyid',
|
name: 'surveyid',
|
||||||
|
@ -77,7 +77,7 @@ export class AddonModSurveyOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.SURVEY_TABLE, {surveyid: surveyId, userid: userId});
|
return site.getDb().deleteRecords(AddonModSurveyOfflineProvider.SURVEY_TABLE, {surveyid: surveyId, userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ export class AddonModSurveyOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllData(siteId?: string): Promise<any> {
|
getAllData(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getAllRecords(this.SURVEY_TABLE).then((entries) => {
|
return site.getDb().getAllRecords(AddonModSurveyOfflineProvider.SURVEY_TABLE).then((entries) => {
|
||||||
return entries.map((entry) => {
|
return entries.map((entry) => {
|
||||||
entry.answers = this.textUtils.parseJSON(entry.answers);
|
entry.answers = this.textUtils.parseJSON(entry.answers);
|
||||||
});
|
});
|
||||||
|
@ -125,12 +125,12 @@ export class AddonModSurveyOfflineProvider {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
userId = userId || site.getUserId();
|
userId = userId || site.getUserId();
|
||||||
|
|
||||||
return site.getDb().getRecord(this.SURVEY_TABLE, {surveyid: surveyId, userid: userId}).then((entry) => {
|
return site.getDb().getRecord(AddonModSurveyOfflineProvider.SURVEY_TABLE, {surveyid: surveyId, userid: userId});
|
||||||
|
}).then((entry) => {
|
||||||
entry.answers = this.textUtils.parseJSON(entry.answers);
|
entry.answers = this.textUtils.parseJSON(entry.answers);
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -171,7 +171,7 @@ export class AddonModSurveyOfflineProvider {
|
||||||
timecreated: new Date().getTime()
|
timecreated: new Date().getTime()
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.SURVEY_TABLE, entry);
|
return site.getDb().insertRecord(AddonModSurveyOfflineProvider.SURVEY_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import { AddonModSurveyPrefetchHandler } from './providers/prefetch-handler';
|
||||||
import { AddonModSurveySyncProvider } from './providers/sync';
|
import { AddonModSurveySyncProvider } from './providers/sync';
|
||||||
import { AddonModSurveySyncCronHandler } from './providers/sync-cron-handler';
|
import { AddonModSurveySyncCronHandler } from './providers/sync-cron-handler';
|
||||||
import { AddonModSurveyOfflineProvider } from './providers/offline';
|
import { AddonModSurveyOfflineProvider } from './providers/offline';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -48,10 +49,23 @@ export class AddonModSurveyModule {
|
||||||
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModSurveyModuleHandler,
|
constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModSurveyModuleHandler,
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModSurveyPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModSurveyPrefetchHandler,
|
||||||
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModSurveyLinkHandler,
|
contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModSurveyLinkHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModSurveySyncCronHandler) {
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModSurveySyncCronHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
contentLinksDelegate.registerHandler(linkHandler);
|
contentLinksDelegate.registerHandler(linkHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_survey_answers',
|
||||||
|
newName: AddonModSurveyOfflineProvider.SURVEY_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'answers',
|
||||||
|
type: 'object'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,10 @@ export class AddonModWikiOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected NEW_PAGES_TABLE = 'addon_mod_wiki_new_pages_store';
|
static NEW_PAGES_TABLE = 'addon_mod_wiki_new_pages_store';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.NEW_PAGES_TABLE,
|
name: AddonModWikiOfflineProvider.NEW_PAGES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'wikiid',
|
name: 'wikiid',
|
||||||
|
@ -117,7 +117,7 @@ export class AddonModWikiOfflineProvider {
|
||||||
userId = this.convertToPositiveNumber(userId);
|
userId = this.convertToPositiveNumber(userId);
|
||||||
groupId = this.convertToPositiveNumber(groupId);
|
groupId = this.convertToPositiveNumber(groupId);
|
||||||
|
|
||||||
return site.getDb().deleteRecords(this.NEW_PAGES_TABLE, {
|
return site.getDb().deleteRecords(AddonModWikiOfflineProvider.NEW_PAGES_TABLE, {
|
||||||
subwikiid: subwikiId,
|
subwikiid: subwikiId,
|
||||||
wikiid: wikiId,
|
wikiid: wikiId,
|
||||||
userid: userId,
|
userid: userId,
|
||||||
|
@ -135,7 +135,7 @@ export class AddonModWikiOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllNewPages(siteId?: string): Promise<any[]> {
|
getAllNewPages(siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getAllRecords(this.NEW_PAGES_TABLE);
|
return site.getDb().getAllRecords(AddonModWikiOfflineProvider.NEW_PAGES_TABLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ export class AddonModWikiOfflineProvider {
|
||||||
userId = this.convertToPositiveNumber(userId);
|
userId = this.convertToPositiveNumber(userId);
|
||||||
groupId = this.convertToPositiveNumber(groupId);
|
groupId = this.convertToPositiveNumber(groupId);
|
||||||
|
|
||||||
return site.getDb().getRecord(this.NEW_PAGES_TABLE, {
|
return site.getDb().getRecord(AddonModWikiOfflineProvider.NEW_PAGES_TABLE, {
|
||||||
subwikiid: subwikiId,
|
subwikiid: subwikiId,
|
||||||
wikiid: wikiId,
|
wikiid: wikiId,
|
||||||
userid: userId,
|
userid: userId,
|
||||||
|
@ -188,7 +188,7 @@ export class AddonModWikiOfflineProvider {
|
||||||
userId = this.convertToPositiveNumber(userId);
|
userId = this.convertToPositiveNumber(userId);
|
||||||
groupId = this.convertToPositiveNumber(groupId);
|
groupId = this.convertToPositiveNumber(groupId);
|
||||||
|
|
||||||
return site.getDb().getRecords(this.NEW_PAGES_TABLE, {
|
return site.getDb().getRecords(AddonModWikiOfflineProvider.NEW_PAGES_TABLE, {
|
||||||
subwikiid: subwikiId,
|
subwikiid: subwikiId,
|
||||||
wikiid: wikiId,
|
wikiid: wikiId,
|
||||||
userid: userId,
|
userid: userId,
|
||||||
|
@ -247,10 +247,10 @@ export class AddonModWikiOfflineProvider {
|
||||||
contentformat: 'html',
|
contentformat: 'html',
|
||||||
timecreated: now,
|
timecreated: now,
|
||||||
timemodified: now,
|
timemodified: now,
|
||||||
caneditpage: true
|
caneditpage: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.NEW_PAGES_TABLE, entry);
|
return site.getDb().insertRecord(AddonModWikiOfflineProvider.NEW_PAGES_TABLE, entry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import { AddonModWikiIndexLinkHandler } from './providers/index-link-handler';
|
||||||
import { AddonModWikiPageOrMapLinkHandler } from './providers/page-or-map-link-handler';
|
import { AddonModWikiPageOrMapLinkHandler } from './providers/page-or-map-link-handler';
|
||||||
import { AddonModWikiCreateLinkHandler } from './providers/create-link-handler';
|
import { AddonModWikiCreateLinkHandler } from './providers/create-link-handler';
|
||||||
import { AddonModWikiEditLinkHandler } from './providers/edit-link-handler';
|
import { AddonModWikiEditLinkHandler } from './providers/edit-link-handler';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -53,7 +54,8 @@ export class AddonModWikiModule {
|
||||||
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModWikiPrefetchHandler,
|
prefetchDelegate: CoreCourseModulePrefetchDelegate, prefetchHandler: AddonModWikiPrefetchHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonModWikiSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
cronDelegate: CoreCronDelegate, syncHandler: AddonModWikiSyncCronHandler, linksDelegate: CoreContentLinksDelegate,
|
||||||
indexHandler: AddonModWikiIndexLinkHandler, pageOrMapHandler: AddonModWikiPageOrMapLinkHandler,
|
indexHandler: AddonModWikiIndexLinkHandler, pageOrMapHandler: AddonModWikiPageOrMapLinkHandler,
|
||||||
createHandler: AddonModWikiCreateLinkHandler, editHandler: AddonModWikiEditLinkHandler) {
|
createHandler: AddonModWikiCreateLinkHandler, editHandler: AddonModWikiEditLinkHandler,
|
||||||
|
updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
moduleDelegate.registerHandler(moduleHandler);
|
moduleDelegate.registerHandler(moduleHandler);
|
||||||
prefetchDelegate.registerHandler(prefetchHandler);
|
prefetchDelegate.registerHandler(prefetchHandler);
|
||||||
|
@ -62,5 +64,21 @@ export class AddonModWikiModule {
|
||||||
linksDelegate.registerHandler(pageOrMapHandler);
|
linksDelegate.registerHandler(pageOrMapHandler);
|
||||||
linksDelegate.registerHandler(createHandler);
|
linksDelegate.registerHandler(createHandler);
|
||||||
linksDelegate.registerHandler(editHandler);
|
linksDelegate.registerHandler(editHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_mod_wiki_new_pages_store',
|
||||||
|
newName: AddonModWikiOfflineProvider.NEW_PAGES_TABLE,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'subwikiWikiUserGroup',
|
||||||
|
delete: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'caneditpage',
|
||||||
|
type: 'boolean'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import { AddonNotesComponentsModule } from './components/components.module';
|
||||||
import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate';
|
import { CoreCourseOptionsDelegate } from '@core/course/providers/options-delegate';
|
||||||
import { CoreCronDelegate } from '@providers/cron';
|
import { CoreCronDelegate } from '@providers/cron';
|
||||||
import { CoreUserDelegate } from '@core/user/providers/user-delegate';
|
import { CoreUserDelegate } from '@core/user/providers/user-delegate';
|
||||||
|
import { CoreUpdateManagerProvider } from '@providers/update-manager';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -42,10 +43,17 @@ import { CoreUserDelegate } from '@core/user/providers/user-delegate';
|
||||||
export class AddonNotesModule {
|
export class AddonNotesModule {
|
||||||
constructor(courseOptionsDelegate: CoreCourseOptionsDelegate, courseOptionHandler: AddonNotesCourseOptionHandler,
|
constructor(courseOptionsDelegate: CoreCourseOptionsDelegate, courseOptionHandler: AddonNotesCourseOptionHandler,
|
||||||
userDelegate: CoreUserDelegate, userHandler: AddonNotesUserHandler,
|
userDelegate: CoreUserDelegate, userHandler: AddonNotesUserHandler,
|
||||||
cronDelegate: CoreCronDelegate, syncHandler: AddonNotesSyncCronHandler) {
|
cronDelegate: CoreCronDelegate, syncHandler: AddonNotesSyncCronHandler, updateManager: CoreUpdateManagerProvider) {
|
||||||
|
|
||||||
// Register handlers.
|
// Register handlers.
|
||||||
courseOptionsDelegate.registerHandler(courseOptionHandler);
|
courseOptionsDelegate.registerHandler(courseOptionHandler);
|
||||||
userDelegate.registerHandler(userHandler);
|
userDelegate.registerHandler(userHandler);
|
||||||
cronDelegate.register(syncHandler);
|
cronDelegate.register(syncHandler);
|
||||||
|
|
||||||
|
// Allow migrating the tables from the old app to the new schema.
|
||||||
|
updateManager.registerSiteTableMigration({
|
||||||
|
name: 'mma_notes_offline_notes',
|
||||||
|
newName: AddonNotesOfflineProvider.NOTES_TABLE
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,10 @@ export class AddonNotesOfflineProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
// Variables for database.
|
// Variables for database.
|
||||||
protected NOTES_TABLE = 'addon_notes_offline_notes';
|
static NOTES_TABLE = 'addon_notes_offline_notes';
|
||||||
protected tablesSchema = [
|
protected tablesSchema = [
|
||||||
{
|
{
|
||||||
name: this.NOTES_TABLE,
|
name: AddonNotesOfflineProvider.NOTES_TABLE,
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
name: 'userid',
|
name: 'userid',
|
||||||
|
@ -79,7 +79,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
deleteNote(userId: number, content: string, timecreated: number, siteId?: string): Promise<any> {
|
deleteNote(userId: number, content: string, timecreated: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().deleteRecords(this.NOTES_TABLE, {
|
return site.getDb().deleteRecords(AddonNotesOfflineProvider.NOTES_TABLE, {
|
||||||
userid: userId,
|
userid: userId,
|
||||||
content: content,
|
content: content,
|
||||||
created: timecreated
|
created: timecreated
|
||||||
|
@ -95,7 +95,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getAllNotes(siteId?: string): Promise<any> {
|
getAllNotes(siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.NOTES_TABLE);
|
return site.getDb().getRecords(AddonNotesOfflineProvider.NOTES_TABLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getNote(userId: number, content: string, timecreated: number, siteId?: string): Promise<any> {
|
getNote(userId: number, content: string, timecreated: number, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecord(this.NOTES_TABLE, {
|
return site.getDb().getRecord(AddonNotesOfflineProvider.NOTES_TABLE, {
|
||||||
userid: userId,
|
userid: userId,
|
||||||
content: content,
|
content: content,
|
||||||
created: timecreated
|
created: timecreated
|
||||||
|
@ -127,7 +127,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getNotesForCourse(courseId: number, siteId?: string): Promise<any[]> {
|
getNotesForCourse(courseId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.NOTES_TABLE, {courseid: courseId});
|
return site.getDb().getRecords(AddonNotesOfflineProvider.NOTES_TABLE, {courseid: courseId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getNotesForUser(userId: number, siteId?: string): Promise<any[]> {
|
getNotesForUser(userId: number, siteId?: string): Promise<any[]> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.NOTES_TABLE, {userid: userId});
|
return site.getDb().getRecords(AddonNotesOfflineProvider.NOTES_TABLE, {userid: userId});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ export class AddonNotesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
getNotesWithPublishState(state: string, siteId?: string): Promise<any> {
|
getNotesWithPublishState(state: string, siteId?: string): Promise<any> {
|
||||||
return this.sitesProvider.getSite(siteId).then((site) => {
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
return site.getDb().getRecords(this.NOTES_TABLE, {publishstate: state});
|
return site.getDb().getRecords(AddonNotesOfflineProvider.NOTES_TABLE, {publishstate: state});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ export class AddonNotesOfflineProvider {
|
||||||
lastmodified: now
|
lastmodified: now
|
||||||
};
|
};
|
||||||
|
|
||||||
return site.getDb().insertRecord(this.NOTES_TABLE, data).then(() => {
|
return site.getDb().insertRecord(AddonNotesOfflineProvider.NOTES_TABLE, data).then(() => {
|
||||||
return data;
|
return data;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -132,7 +132,10 @@ export class SQLiteDBMock extends SQLiteDB {
|
||||||
|
|
||||||
tx.executeSql(query, params, (tx, results) => {
|
tx.executeSql(query, params, (tx, results) => {
|
||||||
resolve(results);
|
resolve(results);
|
||||||
}, reject);
|
}, (tx, error) => {
|
||||||
|
console.error(query, params, error);
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,18 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a table to be migrated to the new schema.
|
* Register several app tables to be migrated to the new schema.
|
||||||
|
*
|
||||||
|
* @param {CoreUpdateManagerMigrateTable[]} tables The tables to migrate.
|
||||||
|
*/
|
||||||
|
registerAppTablesMigration(tables: CoreUpdateManagerMigrateTable[]): void {
|
||||||
|
tables.forEach((table) => {
|
||||||
|
this.registerAppTableMigration(table);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register an app table to be migrated to the new schema.
|
||||||
*
|
*
|
||||||
* @param {CoreUpdateManagerMigrateTable} table The table to migrate.
|
* @param {CoreUpdateManagerMigrateTable} table The table to migrate.
|
||||||
*/
|
*/
|
||||||
|
@ -379,6 +390,26 @@ export class CoreUpdateManagerProvider implements CoreInitHandler {
|
||||||
this.appDBTables.push(table);
|
this.appDBTables.push(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register several site tables to be migrated to the new schema.
|
||||||
|
*
|
||||||
|
* @param {CoreUpdateManagerMigrateTable[]} tables The tables to migrate.
|
||||||
|
*/
|
||||||
|
registerSiteTablesMigration(tables: CoreUpdateManagerMigrateTable[]): void {
|
||||||
|
tables.forEach((table) => {
|
||||||
|
this.registerSiteTableMigration(table);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a site table to be migrated to the new schema.
|
||||||
|
*
|
||||||
|
* @param {CoreUpdateManagerMigrateTable} table The table to migrate.
|
||||||
|
*/
|
||||||
|
registerSiteTableMigration(table: CoreUpdateManagerMigrateTable): void {
|
||||||
|
this.siteDBTables.push(table);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Migrate all DBs and tables from the old format to SQLite.
|
* Migrate all DBs and tables from the old format to SQLite.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue