Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
moodle
moodle
Commits
76fb0443
Commit
76fb0443
authored
Oct 02, 2012
by
Adrian Greeve
Browse files
MDL-34448 - mod/data - Fixing separate groups viewing all entries.
parent
5d6285c2
Changes
5
Hide whitespace changes
Inline
Side-by-side
mod/data/lib.php
View file @
76fb0443
...
...
@@ -3426,21 +3426,28 @@ function data_page_type_list($pagetype, $parentcontext, $currentcontext) {
/**
* Get all of the record ids from a database activity.
*
* @param int $dataid The dataid of the database module.
* @return array $idarray An array of record ids
* @param int $dataid The dataid of the database module.
* @param object $selectdata Contains an additional sql statement for the
* where clause for group and approval fields.
* @param array $params Parameters that coincide with the sql statement.
* @return array $idarray An array of record ids
*/
function
data_get_all_recordids
(
$dataid
)
{
function
data_get_all_recordids
(
$dataid
,
$selectdata
=
''
,
$params
=
null
)
{
global
$DB
;
$initsql
=
'SELECT c.recordid
FROM {data_fields} f,
{data_content} c
WHERE f.dataid = :dataid
AND f.id = c.fieldid
GROUP BY c.recordid'
;
$initrecord
=
$DB
->
get_recordset_sql
(
$initsql
,
array
(
'dataid'
=>
$dataid
));
$initsql
=
'SELECT r.id
FROM {data_records} r
WHERE r.dataid = :dataid'
;
if
(
$selectdata
!=
''
)
{
$initsql
.
=
$selectdata
;
$params
=
array_merge
(
array
(
'dataid'
=>
$dataid
),
$params
);
}
else
{
$params
=
array
(
'dataid'
=>
$dataid
);
}
$initsql
.
=
' GROUP BY r.id'
;
$initrecord
=
$DB
->
get_recordset_sql
(
$initsql
,
$params
);
$idarray
=
array
();
foreach
(
$initrecord
as
$data
)
{
$idarray
[]
=
$data
->
record
id
;
$idarray
[]
=
$data
->
id
;
}
// Close the record set and free up resources.
$initrecord
->
close
();
...
...
@@ -3585,8 +3592,7 @@ function data_get_advanced_search_sql($sort, $data, $recordids, $selectdata, $so
}
else
{
list
(
$insql
,
$inparam
)
=
$DB
->
get_in_or_equal
(
array
(
'-1'
),
SQL_PARAMS_NAMED
);
}
$nestfromsql
.
=
' AND c.recordid '
.
$insql
.
$groupsql
;
$nestfromsql
=
"
$nestfromsql
$selectdata
"
;
$nestfromsql
.
=
' AND c.recordid '
.
$insql
.
$selectdata
.
$groupsql
;
$sqlselect
[
'sql'
]
=
"
$nestselectsql
$nestfromsql
$sortorder
"
;
$sqlselect
[
'params'
]
=
$inparam
;
return
$sqlselect
;
...
...
mod/data/tests/fixtures/test_data_records.csv
View file @
76fb0443
id,userid,groupid,dataid,timecreated,timemodified,approved
1,1,0,1,1234567891,1234567892,1
2,2,
0
,1,1234567891,1234567892,1
3,3,
0
,1,1234567891,1234567892,1
4,4,
0
,1,1234567891,1234567892,1
5,5,
0
,1,1234567891,1234567892,1
6,6,
0
,1,1234567891,1234567892,1
2,2,
1
,1,1234567891,1234567892,1
3,3,
2
,1,1234567891,1234567892,1
4,4,
1
,1,1234567891,1234567892,1
5,5,
1
,1,1234567891,1234567892,1
6,6,
2
,1,1234567891,1234567892,1
7,7,0,1,1234567891,1234567892,1
8,8,
0
,1,1234567891,1234567892,1
9,9,
0
,1,1234567891,1234567892,1
10,10,
0
,1,1234567891,1234567892,1
11,11,
0
,1,1234567891,1234567892,1
12,12,
0
,1,1234567891,1234567892,1
13,13,
0
,1,1234567891,1234567892,1
8,8,
2
,1,1234567891,1234567892,1
9,9,
1
,1,1234567891,1234567892,1
10,10,
1
,1,1234567891,1234567892,1
11,11,
1
,1,1234567891,1234567892,1
12,12,
2
,1,1234567891,1234567892,1
13,13,
2
,1,1234567891,1234567892,1
14,14,0,1,1234567891,1234567892,1
15,15,
0
,1,1234567891,1234567892,1
15,15,
2
,1,1234567891,1234567892,1
16,16,0,1,1234567891,1234567892,1
17,17,
0
,1,1234567891,1234567892,1
18,18,
0
,1,1234567891,1234567892,1
17,17,
1
,1,1234567891,1234567892,1
18,18,
2
,1,1234567891,1234567892,1
19,19,0,1,1234567891,1234567892,1
20,20,
0
,1,1234567891,1234567892,1
20,20,
1
,1,1234567891,1234567892,1
21,21,0,1,1234567891,1234567892,1
22,22,
0
,1,1234567891,1234567892,1
22,22,
2
,1,1234567891,1234567892,1
23,23,0,1,1234567891,1234567892,1
24,24,
0
,1,1234567891,1234567892,1
25,25,
0
,1,1234567891,1234567892,1
24,24,
2
,1,1234567891,1234567892,1
25,25,
2
,1,1234567891,1234567892,1
26,26,0,1,1234567891,1234567892,1
27,27,
0
,1,1234567891,1234567892,1
28,28,
0
,1,1234567891,1234567892,1
27,27,
1
,1,1234567891,1234567892,1
28,28,
2
,1,1234567891,1234567892,1
29,29,0,1,1234567891,1234567892,1
30,30,
0
,1,1234567891,1234567892,1
30,30,
2
,1,1234567891,1234567892,1
31,31,0,1,1234567891,1234567892,1
32,32,
0
,1,1234567891,1234567892,1
33,33,
0
,1,1234567891,1234567892,1
34,34,
0
,1,1234567891,1234567892,1
35,35,
0
,1,1234567891,1234567892,1
32,32,
1
,1,1234567891,1234567892,1
33,33,
1
,1,1234567891,1234567892,1
34,34,
2
,1,1234567891,1234567892,1
35,35,
1
,1,1234567891,1234567892,1
36,36,0,1,1234567891,1234567892,1
37,37,0,1,1234567891,1234567892,1
38,38,
0
,1,1234567891,1234567892,1
39,39,
0
,1,1234567891,1234567892,1
40,40,
0
,1,1234567891,1234567892,1
38,38,
2
,1,1234567891,1234567892,1
39,39,
1
,1,1234567891,1234567892,1
40,40,
1
,1,1234567891,1234567892,1
41,41,0,1,1234567891,1234567892,1
42,42,
0
,1,1234567891,1234567892,1
42,42,
1
,1,1234567891,1234567892,1
43,43,0,1,1234567891,1234567892,1
44,44,
0
,1,1234567891,1234567892,1
44,44,
1
,1,1234567891,1234567892,1
45,45,0,1,1234567891,1234567892,1
46,46,0,1,1234567891,1234567892,1
47,47,
0
,1,1234567891,1234567892,1
47,47,
1
,1,1234567891,1234567892,1
48,48,0,1,1234567891,1234567892,1
49,49,0,1,1234567891,1234567892,1
50,50,
0
,1,1234567891,1234567892,1
50,50,
1
,1,1234567891,1234567892,1
51,51,0,1,1234567891,1234567892,1
52,52,0,1,1234567891,1234567892,1
53,53,
0
,1,1234567891,1234567892,1
54,54,
0
,1,1234567891,1234567892,1
53,53,
1
,1,1234567891,1234567892,1
54,54,
1
,1,1234567891,1234567892,1
55,55,0,1,1234567891,1234567892,1
56,56,
0
,1,1234567891,1234567892,1
57,57,
0
,1,1234567891,1234567892,1
58,58,
0
,1,1234567891,1234567892,1
59,59,
0
,1,1234567891,1234567892,1
60,60,
0
,1,1234567891,1234567892,1
56,56,
2
,1,1234567891,1234567892,1
57,57,
2
,1,1234567891,1234567892,1
58,58,
2
,1,1234567891,1234567892,1
59,59,
1
,1,1234567891,1234567892,1
60,60,
1
,1,1234567891,1234567892,1
61,61,0,1,1234567891,1234567892,1
62,62,
0
,1,1234567891,1234567892,1
62,62,
2
,1,1234567891,1234567892,1
63,63,0,1,1234567891,1234567892,1
64,64,0,1,1234567891,1234567892,1
65,65,
0
,1,1234567891,1234567892,1
66,66,
0
,1,1234567891,1234567892,1
65,65,
1
,1,1234567891,1234567892,1
66,66,
1
,1,1234567891,1234567892,1
67,67,0,1,1234567891,1234567892,1
68,68,0,1,1234567891,1234567892,1
69,69,
0
,1,1234567891,1234567892,1
70,70,
0
,1,1234567891,1234567892,1
69,69,
2
,1,1234567891,1234567892,1
70,70,
2
,1,1234567891,1234567892,1
71,71,0,1,1234567891,1234567892,1
72,72,
0
,1,1234567891,1234567892,1
73,73,
0
,1,1234567891,1234567892,1
72,72,
1
,1,1234567891,1234567892,1
73,73,
1
,1,1234567891,1234567892,1
74,74,0,1,1234567891,1234567892,1
75,75,0,1,1234567891,1234567892,1
76,76,
0
,1,1234567891,1234567892,1
77,77,
0
,1,1234567891,1234567892,1
76,76,
2
,1,1234567891,1234567892,1
77,77,
2
,1,1234567891,1234567892,1
78,78,0,1,1234567891,1234567892,1
79,79,
0
,1,1234567891,1234567892,1
80,80,
0
,1,1234567891,1234567892,1
79,79,
1
,1,1234567891,1234567892,1
80,80,
1
,1,1234567891,1234567892,1
81,81,0,1,1234567891,1234567892,1
82,82,
0
,1,1234567891,1234567892,1
83,83,
0
,1,1234567891,1234567892,1
84,84,
0
,1,1234567891,1234567892,1
85,85,
0
,1,1234567891,1234567892,1
82,82,
1
,1,1234567891,1234567892,1
83,83,
1
,1,1234567891,1234567892,1
84,84,
1
,1,1234567891,1234567892,1
85,85,
1
,1,1234567891,1234567892,1
86,86,0,1,1234567891,1234567892,1
87,87,0,1,1234567891,1234567892,1
88,88,0,1,1234567891,1234567892,1
89,89,
0
,1,1234567891,1234567892,1
90,90,
0
,1,1234567891,1234567892,
1
91,91,
0
,1,1234567891,1234567892,
1
92,92,0,1,1234567891,1234567892,
1
93,93,
0
,1,1234567891,1234567892,
1
94,94,
0
,1,1234567891,1234567892,
1
95,95,
0
,1,1234567891,1234567892,
1
96,96,
0
,1,1234567891,1234567892,
1
97,97,0,1,1234567891,1234567892,
1
98,98,
0
,1,1234567891,1234567892,
1
99,99,
0
,1,1234567891,1234567892,
1
100,100,0,1,1234567891,1234567892,
1
89,89,
1
,1,1234567891,1234567892,1
90,90,
1
,1,1234567891,1234567892,
0
91,91,
2
,1,1234567891,1234567892,
0
92,92,0,1,1234567891,1234567892,
0
93,93,
2
,1,1234567891,1234567892,
0
94,94,
1
,1,1234567891,1234567892,
0
95,95,
1
,1,1234567891,1234567892,
0
96,96,
1
,1,1234567891,1234567892,
0
97,97,0,1,1234567891,1234567892,
0
98,98,
1
,1,1234567891,1234567892,
0
99,99,
2
,1,1234567891,1234567892,
0
100,100,0,1,1234567891,1234567892,
0
mod/data/tests/search_test.php
View file @
76fb0443
...
...
@@ -70,6 +70,11 @@ class data_advanced_search_sql_test extends advanced_testcase {
*/
public
$datarecordcount
=
100
;
/**
* @var int $groupdatarecordcount The number of records in the database in groups 0 and 1.
*/
public
$groupdatarecordcount
=
75
;
/**
* @var array $datarecordset Expected record IDs.
*/
...
...
@@ -80,6 +85,11 @@ class data_advanced_search_sql_test extends advanced_testcase {
*/
public
$finalrecord
=
array
();
/**
* @var int $approvedatarecordcount The number of approved records in the database.
*/
public
$approvedatarecordcount
=
89
;
/**
* Set up function. In this instance we are setting up database
* records to be used in the unit tests.
...
...
@@ -169,6 +179,13 @@ class data_advanced_search_sql_test extends advanced_testcase {
* Test 4: data_get_advanced_search_sql provides an array which contains an sql string to be used for displaying records
* to the user when they use the advanced search criteria and the parameters that go with the sql statement. This test
* takes that information and does a search on the database, returning a record.
*
* Test 5: Returning to data_get_all_recordids(). Here we are ensuring that the total amount of record ids is reduced to
* match the group conditions that are provided. There are 25 entries which relate to group 2. They are removed
* from the total so we should only have 75 records total.
*
* Test 6: data_get_all_recordids() again. This time we are testing approved database records. We only want to
* display the records that have been approved. In this record set we have 89 approved records.
*/
function
test_advanced_search_sql_section
()
{
global
$DB
;
...
...
@@ -193,5 +210,16 @@ class data_advanced_search_sql_test extends advanced_testcase {
$allparams
=
array_merge
(
$html
[
'params'
],
array
(
'dataid'
=>
$this
->
recorddata
->
id
));
$records
=
$DB
->
get_records_sql
(
$html
[
'sql'
],
$allparams
);
$this
->
assertEquals
(
$records
,
$this
->
finalrecord
);
// Test 5
$groupsql
=
" AND (r.groupid = :currentgroup OR r.groupid = 0)"
;
$params
=
array
(
'currentgroup'
=>
1
);
$recordids
=
data_get_all_recordids
(
$this
->
recorddata
->
id
,
$groupsql
,
$params
);
$this
->
assertEquals
(
$this
->
groupdatarecordcount
,
count
(
$recordids
));
// Test 6
$approvesql
=
' AND r.approved=1 '
;
$recordids
=
data_get_all_recordids
(
$this
->
recorddata
->
id
,
$approvesql
,
$params
);
$this
->
assertEquals
(
$this
->
approvedatarecordcount
,
count
(
$recordids
));
}
}
mod/data/view.php
View file @
76fb0443
...
...
@@ -321,6 +321,13 @@
groups_print_activity_menu
(
$cm
,
$returnurl
);
$currentgroup
=
groups_get_activity_group
(
$cm
);
$groupmode
=
groups_get_activity_groupmode
(
$cm
);
// If a student is not part of a group and seperate groups is enabled, we don't
// want them seeing all records.
if
(
$currentgroup
==
0
&&
$groupmode
==
1
&&
!
has_capability
(
'mod/data:manageentries'
,
$context
))
{
$canviewallrecords
=
false
;
}
else
{
$canviewallrecords
=
true
;
}
// detect entries not approved yet and show hint instead of not found error
if
(
$record
and
$data
->
approval
and
!
$record
->
approved
and
$record
->
userid
!=
$USER
->
id
and
!
has_capability
(
'mod/data:manageentries'
,
$context
))
{
...
...
@@ -465,7 +472,13 @@ if ($showactivity) {
$groupselect
=
" AND (r.groupid = :currentgroup OR r.groupid = 0)"
;
$params
[
'currentgroup'
]
=
$currentgroup
;
}
else
{
$groupselect
=
' '
;
if
(
$canviewallrecords
)
{
$groupselect
=
' '
;
}
else
{
// If separate groups are enabled and the user isn't in a group or
// a teacher, manager, admin etc, then just show them entries for 'All participants'.
$groupselect
=
" AND r.groupid = 0"
;
}
}
// Init some variables to be used by advanced search
...
...
@@ -590,10 +603,19 @@ if ($showactivity) {
$sqlmax
=
"SELECT
$count
FROM
$tables
$where
$groupselect
$approveselect
"
;
// number of all recoirds user may see
$allparams
=
array_merge
(
$params
,
$advparams
);
$recordids
=
data_get_all_recordids
(
$data
->
id
);
// Provide initial sql statements and parameters to reduce the number of total records.
$selectdata
=
$groupselect
.
$approveselect
;
$initialparams
=
array
();
if
(
$currentgroup
)
{
$initialparams
[
'currentgroup'
]
=
$params
[
'currentgroup'
];
}
if
(
!
$approvecap
&&
$data
->
approval
&&
isloggedin
())
{
$initialparams
[
'myid1'
]
=
$params
[
'myid1'
];
}
$recordids
=
data_get_all_recordids
(
$data
->
id
,
$selectdata
,
$initialparams
);
$newrecordids
=
data_get_advance_search_ids
(
$recordids
,
$search_array
,
$data
->
id
);
$totalcount
=
count
(
$newrecordids
);
$selectdata
=
$groupselect
.
$approveselect
;
if
(
!
empty
(
$advanced
))
{
$advancedsearchsql
=
data_get_advanced_search_sql
(
$sort
,
$data
,
$newrecordids
,
$selectdata
,
$sortorder
);
...
...
mod/upgrade.txt
View file @
76fb0443
...
...
@@ -8,11 +8,13 @@ new features:
* mod/xxx/adminlib.php may now include 'plugininfo_yoursubplugintype' class definition
used by plugin_manager; it is recommended to store extra admin settings classes in this file
optional - no changes needed:
* mod_lesson_renderer::header() now accepts an additional parameter $extrapagetitle
* mod/data/lib.php data_get_all_recordids() now has two new optional variables: $selectdata and $params.
=== 2.3 ===
required changes in code:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment