diff --git a/backup/moodle2/backup_data_stepslib.php b/backup/moodle2/backup_data_stepslib.php
index 385e66b..a190eb5 100644
--- a/backup/moodle2/backup_data_stepslib.php
+++ b/backup/moodle2/backup_data_stepslib.php
@@ -43,7 +43,7 @@ class backup_data_activity_structure_step extends backup_activity_structure_step
'requiredentries', 'requiredentriestoview', 'maxentries', 'rssarticles',
'singletemplate', 'listtemplate', 'listtemplateheader', 'listtemplatefooter',
'addtemplate', 'rsstemplate', 'rsstitletemplate', 'csstemplate',
- 'jstemplate', 'asearchtemplate', 'approval', 'scale',
+ 'jstemplate', 'asearchtemplate', 'approval', 'manageapproved', 'scale',
'assessed', 'assesstimestart', 'assesstimefinish', 'defaultsort',
'defaultsortdir', 'editany', 'notification'));
diff --git a/db/install.xml b/db/install.xml
index c4a5c2c..3eea246 100644
--- a/db/install.xml
+++ b/db/install.xml
@@ -31,6 +31,7 @@
+
diff --git a/db/upgrade.php b/db/upgrade.php
index c5251ea..e4ac969 100644
--- a/db/upgrade.php
+++ b/db/upgrade.php
@@ -150,5 +150,20 @@ function xmldb_data_upgrade($oldversion) {
upgrade_mod_savepoint(true, 2015030900, 'data');
}
+ if ($oldversion < 2015061904) {
+
+ // Define field manageapproved to be added to data.
+ $table = new xmldb_table('data');
+ $field = new xmldb_field('manageapproved', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '1', 'approval');
+
+ // Conditionally launch add field manageapproved.
+ if (!$dbman->field_exists($table, $field)) {
+ $dbman->add_field($table, $field);
+ }
+
+ // Data savepoint reached.
+ upgrade_mod_savepoint(true, 2015061904, 'data');
+ }
+
return true;
}
diff --git a/lang/en/data.php b/lang/en/data.php
index f9ec9dc..4e776e4 100644
--- a/lang/en/data.php
+++ b/lang/en/data.php
@@ -214,6 +214,8 @@ $string['latlongotherfields'] = 'Other fields';
$string['list'] = 'View list';
$string['listtemplate'] = 'List template';
$string['longitude'] = 'Longitude';
+$string['manageapproved'] = 'Manage approved entries';
+$string['manageapproved_help'] = 'If disabled, approved entries are not editable and deletable by its owner. This setting only takes effect if approval required is set to yes. Default is yes.';
$string['mapexistingfield'] = 'Map to {$a}';
$string['mapnewfield'] = 'Create a new field';
$string['mappingwarning'] = 'All old fields not mapped to a new field will be lost and all data in that field will be removed.';
diff --git a/lib.php b/lib.php
index 9bd39ce..3d7ee74 100644
--- a/lib.php
+++ b/lib.php
@@ -1229,9 +1229,6 @@ function data_print_template($template, $records, $data, $search='', $page=0, $r
}
$jumpurl = new moodle_url($jumpurl, array('page' => $page, 'sesskey' => sesskey()));
- // Check whether this activity is read-only at present
- $readonly = data_in_readonly_period($data);
-
foreach ($records as $record) { // Might be just one for the single template
// Replacing tags
@@ -1249,7 +1246,7 @@ function data_print_template($template, $records, $data, $search='', $page=0, $r
// Replacing special tags (##Edit##, ##Delete##, ##More##)
$patterns[]='##edit##';
$patterns[]='##delete##';
- if ($canmanageentries || (!$readonly && data_isowner($record->id))) {
+ if (data_user_can_manage_entry($record->id, $data, $context)) {
$replacement[] = '
';
$replacement[] = '