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
e3dd5809
Commit
e3dd5809
authored
Mar 19, 2019
by
Adrian Greeve
Browse files
Merge branch 'MDL-63144-master' of
git://github.com/rezaies/moodle
parents
c635e251
58182fa8
Changes
2
Hide whitespace changes
Inline
Side-by-side
mod/lti/lib.php
View file @
e3dd5809
...
...
@@ -631,15 +631,28 @@ function mod_lti_get_fontawesome_icon_map() {
*
* @param calendar_event $event
* @param \core_calendar\action_factory $factory
* @param int $userid User id to use for all capability checks, etc. Set to 0 for current user (default).
* @return \core_calendar\local\event\entities\action_interface|null
*/
function
mod_lti_core_calendar_provide_event_action
(
calendar_event
$event
,
\
core_calendar\action_factory
$factory
)
{
$cm
=
get_fast_modinfo
(
$event
->
courseid
)
->
instances
[
'lti'
][
$event
->
instance
];
\
core_calendar\action_factory
$factory
,
int
$userid
=
0
)
{
global
$USER
;
if
(
empty
(
$userid
))
{
$userid
=
$USER
->
id
;
}
$cm
=
get_fast_modinfo
(
$event
->
courseid
,
$userid
)
->
instances
[
'lti'
][
$event
->
instance
];
if
(
!
$cm
->
uservisible
)
{
// The module is not visible to the user for any reason.
return
null
;
}
$completion
=
new
\
completion_info
(
$cm
->
get_course
());
$completiondata
=
$completion
->
get_data
(
$cm
,
false
);
$completiondata
=
$completion
->
get_data
(
$cm
,
false
,
$userid
);
if
(
$completiondata
->
completionstate
!=
COMPLETION_INCOMPLETE
)
{
return
null
;
...
...
mod/lti/tests/lib_test.php
View file @
e3dd5809
...
...
@@ -131,6 +131,69 @@ class mod_lti_lib_testcase extends advanced_testcase {
$this
->
assertTrue
(
$actionevent
->
is_actionable
());
}
public
function
test_lti_core_calendar_provide_event_action_as_non_user
()
{
global
$CFG
;
$this
->
resetAfterTest
();
$this
->
setAdminUser
();
// Create the activity.
$course
=
$this
->
getDataGenerator
()
->
create_course
();
$lti
=
$this
->
getDataGenerator
()
->
create_module
(
'lti'
,
array
(
'course'
=>
$course
->
id
));
// Create a calendar event.
$event
=
$this
->
create_action_event
(
$course
->
id
,
$lti
->
id
,
\
core_completion\api
::
COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED
);
// Now, log out.
$CFG
->
forcelogin
=
true
;
// We don't want to be logged in as guest, as guest users might still have some capabilities.
$this
->
setUser
();
// Create an action factory.
$factory
=
new
\
core_calendar\action_factory
();
// Decorate action event.
$actionevent
=
mod_lti_core_calendar_provide_event_action
(
$event
,
$factory
);
// Confirm the event is not shown at all.
$this
->
assertNull
(
$actionevent
);
}
public
function
test_lti_core_calendar_provide_event_action_for_user
()
{
global
$CFG
;
$this
->
resetAfterTest
();
$this
->
setAdminUser
();
// Create the activity.
$course
=
$this
->
getDataGenerator
()
->
create_course
();
$lti
=
$this
->
getDataGenerator
()
->
create_module
(
'lti'
,
array
(
'course'
=>
$course
->
id
));
// Enrol a student in the course.
$student
=
$this
->
getDataGenerator
()
->
create_and_enrol
(
$course
,
'student'
);
// Create a calendar event.
$event
=
$this
->
create_action_event
(
$course
->
id
,
$lti
->
id
,
\
core_completion\api
::
COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED
);
// Now, log out.
$CFG
->
forcelogin
=
true
;
// We don't want to be logged in as guest, as guest users might still have some capabilities.
$this
->
setUser
();
// Create an action factory.
$factory
=
new
\
core_calendar\action_factory
();
// Decorate action event for the student.
$actionevent
=
mod_lti_core_calendar_provide_event_action
(
$event
,
$factory
,
$student
->
id
);
// Confirm the event was decorated.
$this
->
assertInstanceOf
(
'\core_calendar\local\event\value_objects\action'
,
$actionevent
);
$this
->
assertEquals
(
get_string
(
'view'
),
$actionevent
->
get_name
());
$this
->
assertInstanceOf
(
'moodle_url'
,
$actionevent
->
get_url
());
$this
->
assertEquals
(
1
,
$actionevent
->
get_item_count
());
$this
->
assertTrue
(
$actionevent
->
is_actionable
());
}
public
function
test_lti_core_calendar_provide_event_action_already_completed
()
{
global
$CFG
;
...
...
@@ -165,6 +228,85 @@ class mod_lti_lib_testcase extends advanced_testcase {
$this
->
assertNull
(
$actionevent
);
}
public
function
test_lti_core_calendar_provide_event_action_already_completed_as_non_user
()
{
global
$CFG
;
$this
->
resetAfterTest
();
$this
->
setAdminUser
();
$CFG
->
enablecompletion
=
1
;
// Create the activity.
$course
=
$this
->
getDataGenerator
()
->
create_course
(
array
(
'enablecompletion'
=>
1
));
$lti
=
$this
->
getDataGenerator
()
->
create_module
(
'lti'
,
array
(
'course'
=>
$course
->
id
),
array
(
'completion'
=>
2
,
'completionview'
=>
1
,
'completionexpected'
=>
time
()
+
DAYSECS
));
// Get some additional data.
$cm
=
get_coursemodule_from_instance
(
'lti'
,
$lti
->
id
);
// Create a calendar event.
$event
=
$this
->
create_action_event
(
$course
->
id
,
$lti
->
id
,
\
core_completion\api
::
COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED
);
// Mark the activity as completed.
$completion
=
new
completion_info
(
$course
);
$completion
->
set_module_viewed
(
$cm
);
// Now, log out.
$CFG
->
forcelogin
=
true
;
// We don't want to be logged in as guest, as guest users might still have some capabilities.
$this
->
setUser
();
// Create an action factory.
$factory
=
new
\
core_calendar\action_factory
();
// Decorate action event.
$actionevent
=
mod_lti_core_calendar_provide_event_action
(
$event
,
$factory
);
// Ensure result was null.
$this
->
assertNull
(
$actionevent
);
}
public
function
test_lti_core_calendar_provide_event_action_already_completed_for_user
()
{
global
$CFG
;
$this
->
resetAfterTest
();
$this
->
setAdminUser
();
$CFG
->
enablecompletion
=
1
;
// Create the activity.
$course
=
$this
->
getDataGenerator
()
->
create_course
(
array
(
'enablecompletion'
=>
1
));
$lti
=
$this
->
getDataGenerator
()
->
create_module
(
'lti'
,
array
(
'course'
=>
$course
->
id
),
array
(
'completion'
=>
2
,
'completionview'
=>
1
,
'completionexpected'
=>
time
()
+
DAYSECS
));
// Enrol 2 students in the course.
$student1
=
$this
->
getDataGenerator
()
->
create_and_enrol
(
$course
,
'student'
);
$student2
=
$this
->
getDataGenerator
()
->
create_and_enrol
(
$course
,
'student'
);
// Get some additional data.
$cm
=
get_coursemodule_from_instance
(
'lti'
,
$lti
->
id
);
// Create a calendar event.
$event
=
$this
->
create_action_event
(
$course
->
id
,
$lti
->
id
,
\
core_completion\api
::
COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED
);
// Mark the activity as completed for $student1.
$completion
=
new
completion_info
(
$course
);
$completion
->
set_module_viewed
(
$cm
,
$student1
->
id
);
// Now, log in as $student2.
$this
->
setUser
(
$student2
);
// Create an action factory.
$factory
=
new
\
core_calendar\action_factory
();
// Decorate action event for $student1.
$actionevent
=
mod_lti_core_calendar_provide_event_action
(
$event
,
$factory
,
$student1
->
id
);
// Ensure result was null.
$this
->
assertNull
(
$actionevent
);
}
/**
* Creates an action event.
*
...
...
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