Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions www/addons/mod/data/controllers/entry.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ angular.module('mm.addons.mod_data')
* @name mmaModDataEntryCtrl
*/
.controller('mmaModDataEntryCtrl', function($scope, $stateParams, $mmaModData, mmaModDataComponent, $mmCourse, $q, $mmEvents,
$mmText, $translate, $mmUtil, $mmSite, $mmaModDataHelper, $mmGroups, $ionicScrollDelegate, mmaModDataEventEntryChanged) {
$mmText, $translate, $mmUtil, $mmSite, $mmaModDataHelper, $mmGroups, $ionicScrollDelegate, mmaModDataEventEntryChanged,
$ionicHistory) {

var module = $stateParams.module || {},
courseId = $stateParams.courseid,
Expand Down Expand Up @@ -174,8 +175,13 @@ angular.module('mm.addons.mod_data')
// Refresh entry on change.
entryChangedObserver = $mmEvents.on(mmaModDataEventEntryChanged, function(eventData) {
if (eventData.entryId == entryId && data.id == eventData.dataId && $mmSite.getId() == eventData.siteId) {
$scope.databaseLoaded = false;
return fetchEntryData(true);
if (eventData.deleted) {
// If deleted, go back.
$ionicHistory.goBack();
} else {
$scope.databaseLoaded = false;
return fetchEntryData(true);
}
}
});

Expand Down
3 changes: 3 additions & 0 deletions www/addons/mod/data/lang/en.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
{
"addentries": "Add entries",
"confirmdeleterecord": "Are you sure you want to delete this entry?",
"entrieslefttoadd": "You must add {{$a.entriesleft}} more entry/entries in order to complete this activity",
"entrieslefttoaddtoview": "You must add {{$a.entrieslefttoview}} more entry/entries before you can view other participants' entries.",
"errorapproving": "Error approving or unapproving entry.",
"errordeleting": "Error deleting the entry.",
"expired": "Sorry, this activity closed on {{$a}} and is no longer available",
"norecords": "No entries in database",
"notopenyet": "Sorry, this activity is not available until {{$a}}",
"recordapproved": "Entry approved",
"recorddeleted": "Entry deleted",
"recorddisapproved": "Entry unapproved",
"search": "Search"
}
1 change: 1 addition & 0 deletions www/addons/mod/data/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,5 @@ angular.module('mm.addons.mod_data', ['mm.core'])
$mmContentLinksDelegateProvider.registerLinkHandler('mmaModData:index', '$mmaModDataHandlers.indexLinksHandler');
$mmContentLinksDelegateProvider.registerLinkHandler('mmaModData:entry', '$mmaModDataHandlers.showEntryLinksHandler');
$mmContentLinksDelegateProvider.registerLinkHandler('mmaModData:approve', '$mmaModDataHandlers.approveEntryLinksHandler');
$mmContentLinksDelegateProvider.registerLinkHandler('mmaModData:delete', '$mmaModDataHandlers.deleteEntryLinksHandler');
});
22 changes: 21 additions & 1 deletion www/addons/mod/data/services/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ angular.module('mm.addons.mod_data')
* @param {Number} entryId Entry ID.
* @param {Boolean} approve Whether to approve (true) or unapprove the entry.
* @param {String} [siteId] Site ID. If not defined, current site.
* @return {Promise} Promise resolved when the database entry is retrieved.
* @return {Promise} Promise resolved when the action is done.
*/
self.approveEntry = function(entryId, approve, siteId) {
return $mmSitesManager.getSite(siteId).then(function(site) {
Expand All @@ -416,6 +416,26 @@ angular.module('mm.addons.mod_data')
});
};

/**
* Deletes an entry.
*
* @module mm.addons.mod_data
* @ngdoc method
* @name $mmaModData#deleteEntry
* @param {Number} entryId Entry ID.
* @param {String} [siteId] Site ID. If not defined, current site.
* @return {Promise} Promise resolved when the action is done.
*/
self.deleteEntry = function(entryId, siteId) {
return $mmSitesManager.getSite(siteId).then(function(site) {
var params = {
entryid: entryId
};

return site.write('mod_data_delete_entry', params);
});
};

/**
* Get the list of configured fields for the given database.
*
Expand Down
60 changes: 58 additions & 2 deletions www/addons/mod/data/services/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ angular.module('mm.addons.mod_data')
*/
.factory('$mmaModDataHandlers', function($mmCourse, $mmaModData, $state, $mmContentLinksHelper, $mmUtil, $mmEvents, $mmSite, $q,
mmaModDataComponent, $mmaModDataPrefetchHandler, mmCoreDownloading, mmCoreNotDownloaded, $mmContentLinkHandlerFactory,
mmCoreEventPackageStatusChanged, mmCoreOutdated, $mmCoursePrefetchDelegate, mmaModDataEventEntryChanged) {
mmCoreEventPackageStatusChanged, mmCoreOutdated, $mmCoursePrefetchDelegate, mmaModDataEventEntryChanged, $translate) {
var self = {};

/**
Expand Down Expand Up @@ -215,7 +215,7 @@ angular.module('mm.addons.mod_data')
}];
};

/**
/**
* Content links handler for database approve/disapprove entry.
* Match mod/data/view.php?d=6&approve=5 with a valid data id and entryid.
*
Expand Down Expand Up @@ -268,5 +268,61 @@ angular.module('mm.addons.mod_data')
}];
};

/**
* Content links handler for database delete entry.
* Match mod/data/view.php?d=6&delete=5 with a valid data id and entryid.
*
* @module mm.addons.mod_data
* @ngdoc method
* @name $mmaModDataHandlers#deleteEntryLinksHandler
*/
self.deleteEntryLinksHandler = $mmContentLinkHandlerFactory.createChild(
/\/mod\/data\/view\.php.*([\?\&](d|delete)=\d+)/, '$mmCourseDelegate_mmaModData');

// Check if the deleteEntryLinksHandler is enabled for a certain site. See $mmContentLinkHandlerFactory#isEnabled.
self.deleteEntryLinksHandler.isEnabled = $mmaModData.isPluginEnabled;

// Get actions to perform with the link. See $mmContentLinkHandlerFactory#getActions.
self.deleteEntryLinksHandler.getActions = function(siteIds, url, params, courseId) {
if (typeof params.d == 'undefined' || typeof params.delete == 'undefined') {
// Required fields not defined. Cannot treat the URL.
return false;
}

return [{
action: function(siteId) {
// Confirm before delete.
return $mmUtil.showConfirm($translate.instant('mma.mod_data.confirmdeleterecord')).then(function() {
var modal = $mmUtil.showModalLoading(),
dataId = parseInt(params.d, 10),
entryId = parseInt(params.delete, 10);

// Delete entry.
return $mmaModData.deleteEntry(entryId, siteId).catch(function(message) {
modal.dismiss();
$mmUtil.showErrorModal(message, 'mma.mod_data.errordeleting', true);

return $q.reject();
}).then(function() {
var promises = [];
promises.push($mmaModData.invalidateEntryData(dataId, entryId, siteId));
promises.push($mmaModData.invalidateEntriesData(dataId, siteId));

return $q.all(promises);
}).then(function() {
$mmEvents.trigger(mmaModDataEventEntryChanged, {dataId: dataId, entryId: entryId, siteId: siteId,
deleted: true});

modal.dismiss();
$mmUtil.showToast('mma.mod_data.recorddeleted', true, 3000);
}).finally(function() {
// Just in case. In fact we need to dismiss the modal before showing a toast or error message.
modal.dismiss();
});
});
}
}];
};

return self;
});