Skip to content

Commit

Permalink
MDL-82500 my: Move CTA from the menu to buttons
Browse files Browse the repository at this point in the history
The icons have been updated to make them more consistent abroad Moodle and
take advantage of the benefits of FontAwesome 6.

One of the icons that have been changed is the cog, that has been replaced by
ellipsis or pen (depending on the context). So now, the My courses page had
two ellipsis in the same context (one with a caret), which is confusing.

This commit removes the actions from the first menu and moves them to buttons
as suggested by the UX team.
  • Loading branch information
sarjona committed Aug 2, 2024
1 parent 8a6e856 commit b020902
Show file tree
Hide file tree
Showing 9 changed files with 232 additions and 102 deletions.
64 changes: 26 additions & 38 deletions blocks/myoverview/classes/output/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -503,83 +503,71 @@ public function export_for_zero_state_template(renderer_base $output) {

$nocoursesimg = $output->image_url('courses', 'block_myoverview');

$buttons = [];
$coursecat = \core_course_category::user_top();
if ($coursecat) {
// Manage courses button.
if ($categorytomanage = \core_course_category::get_nearest_editable_subcategory($coursecat, ['manage'])) {
$managebutton = new \single_button(
new \moodle_url('/course/management.php', ['category' => $categorytomanage->id]),
get_string('managecourses'),
);
$buttons[] = $managebutton->export_for_template($output);
}

// Request a course button.
$category = \core_course_category::get_nearest_editable_subcategory($coursecat, ['moodle/course:request']);
if ($category && $category->can_request_course()) {
// Add Request a course button.
$button = new \single_button(
$requestbutton = new \single_button(
new \moodle_url('/course/request.php', ['category' => $category->id]),
get_string('requestcourse'),
'post',
\single_button::BUTTON_PRIMARY
);
$buttons[] = $requestbutton->export_for_template($output);
return $this->generate_zero_state_data(
$nocoursesimg,
[$button->export_for_template($output)],
['title' => 'zero_request_title', 'intro' => 'zero_request_intro']
$buttons,
['title' => 'zero_request_title', 'intro' => 'zero_request_intro'],
);
}

$totalcourses = $DB->count_records_select('course', 'category > 0');
if (!$totalcourses && ($category = \core_course_category::get_nearest_editable_subcategory($coursecat, ['create']))) {
// Add Quickstart guide and Create course buttons.
// Quickstart guide and Create course buttons.
if ($category = \core_course_category::get_nearest_editable_subcategory($coursecat, ['create'])) {
$quickstarturl = $CFG->coursecreationguide;
if ($quickstarturl) {
if (!$totalcourses && $quickstarturl) {
$quickstartbutton = new \single_button(
new \moodle_url($quickstarturl, ['lang' => current_language()]),
get_string('viewquickstart', 'block_myoverview'),
'get',
);
$buttons = [$quickstartbutton->export_for_template($output)];
// Add the Quickstart button in the first position.
array_unshift($buttons, $quickstartbutton->export_for_template($output));
}

$createbutton = new \single_button(
new \moodle_url('/course/edit.php', ['category' => $category->id]),
get_string('createcourse', 'block_myoverview'),
'post',
\single_button::BUTTON_PRIMARY
\single_button::BUTTON_PRIMARY,
);
$buttons[] = $createbutton->export_for_template($output);
return $this->generate_zero_state_data(
$nocoursesimg,
$buttons,
['title' => 'zero_nocourses_title', 'intro' => 'zero_nocourses_intro']
);
}

if ($categorytocreate = \core_course_category::get_nearest_editable_subcategory($coursecat, ['create'])) {
$createbutton = new \single_button(
new \moodle_url('/course/edit.php', ['category' => $categorytocreate->id]),
get_string('createcourse', 'block_myoverview'),
'post',
\single_button::BUTTON_PRIMARY
);
$buttons = [$createbutton->export_for_template($output)];
if ($categorytomanage = \core_course_category::get_nearest_editable_subcategory($coursecat, ['manage'])) {
// Add a Manage course button.
$managebutton = new \single_button(
new \moodle_url('/course/management.php', ['category' => $categorytomanage->id]),
get_string('managecourses')
);
$buttons[] = $managebutton->export_for_template($output);
return $this->generate_zero_state_data(
$nocoursesimg,
array_reverse($buttons),
['title' => 'zero_default_title', 'intro' => 'zero_default_intro']
);
}
$title = $totalcourses ? 'zero_default_title' : 'zero_nocourses_title';
$intro = $totalcourses ? 'zero_default_intro' : 'zero_nocourses_intro';
return $this->generate_zero_state_data(
$nocoursesimg,
$buttons,
['title' => 'zero_default_title', 'intro' => 'zero_default_intro']
['title' => $title, 'intro' => $intro],
);
}

}

return $this->generate_zero_state_data(
$nocoursesimg,
[],
$buttons,
['title' => 'zero_default_title', 'intro' => 'zero_default_intro']
);
}
Expand Down
1 change: 1 addition & 0 deletions lang/en/deprecated.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,4 @@ reviewbadge,core_badges
myisamproblem,core_error
newpasswordtext,core
cannotsetpassword,core_error
coursemanagementoptions,core_my
4 changes: 3 additions & 1 deletion lang/en/my.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

$string['coursemanagementoptions'] = 'Course management options';
$string['error:dashboardisdisabled'] = 'The Dashboard has been disabled by an administrator.';
$string['mymoodle'] = 'Dashboard';
$string['nocourses'] = 'No course information to show.';
Expand All @@ -42,3 +41,6 @@
$string['resetpage'] = 'Reset page to default';
$string['reseterror'] = 'There was an error resetting your page';
$string['privacy:metadata:core_my:preference:user_home_page_preference'] = 'The user home page preference.';

// Deprecated since Moodle 4.5.
$string['coursemanagementoptions'] = 'Course management options';
28 changes: 15 additions & 13 deletions my/courses.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,21 @@
// Add course management if the user has the capabilities for it.
$coursecat = core_course_category::user_top();
$coursemanagemenu = [];
if ($coursecat && ($category = core_course_category::get_nearest_editable_subcategory($coursecat, ['create']))) {
// The user has the capability to create course.
$coursemanagemenu['newcourseurl'] = new moodle_url('/course/edit.php', ['category' => $category->id]);
}
if ($coursecat && ($category = core_course_category::get_nearest_editable_subcategory($coursecat, ['manage']))) {
// The user has the capability to manage the course category.
$coursemanagemenu['manageurl'] = new moodle_url('/course/management.php', ['categoryid' => $category->id]);
}
if ($coursecat) {
$category = core_course_category::get_nearest_editable_subcategory($coursecat, ['moodle/course:request']);
if ($category && $category->can_request_course()) {
$coursemanagemenu['courserequesturl'] = new moodle_url('/course/request.php', ['categoryid' => $category->id]);

// Only display the action menu if the user has courses (otherwise, the buttons will be displayed in the zero state).
if (count(enrol_get_all_users_courses($USER->id, true)) > 0) {
if ($coursecat && ($category = core_course_category::get_nearest_editable_subcategory($coursecat, ['create']))) {
// The user has the capability to create course.
$coursemanagemenu['newcourseurl'] = new moodle_url('/course/edit.php', ['category' => $category->id]);
}
if ($coursecat && ($category = core_course_category::get_nearest_editable_subcategory($coursecat, ['manage']))) {
// The user has the capability to manage the course category.
$coursemanagemenu['manageurl'] = new moodle_url('/course/management.php', ['categoryid' => $category->id]);
}
if ($coursecat) {
$category = core_course_category::get_nearest_editable_subcategory($coursecat, ['moodle/course:request']);
if ($category && $category->can_request_course()) {
$coursemanagemenu['courserequesturl'] = new moodle_url('/course/request.php', ['categoryid' => $category->id]);
}
}
}
if (!empty($coursemanagemenu)) {
Expand Down
22 changes: 12 additions & 10 deletions my/templates/dropdown.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,21 @@
}
}}
<div class="btn-group{{#manageurl}} course-manage{{/manageurl}}{{#courserequesturl}} course-request{{/courserequesturl}}">
<!-- Set as a link to appease BrowserKit behat. -->
<a href="#" class="btn btn-link btn-icon icon-size-3 rounded-circle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{#str}}coursemanagementoptions, my{{/str}}">
<i class="fa fa-ellipsis-v text-dark py-2" aria-hidden="true"></i>
</a>
<div class="dropdown-menu dropdown-menu-right">
{{#newcourseurl}}
<a class="dropdown-item" href="{{newcourseurl}}">{{#str}}newcourse, core{{/str}}</a>
{{/newcourseurl}}
<div class="my-action-buttons my-action-buttons-right">
{{#manageurl}}
<a class="dropdown-item" href="{{manageurl}}">{{#str}}managecourses, core{{/str}}</a>
<form action="{{manageurl}}" method="post" id="managecoursesform">
<button type="submit" class="btn btn-outline-primary m-1 w-100">{{#str}} managecourses {{/str}}</button>
</form>
{{/manageurl}}
{{#newcourseurl}}
<form action="{{newcourseurl}}" method="post" id="newcourseform">
<button type="submit" class="btn btn-primary m-1 w-100">{{#str}} createcourse, block_myoverview {{/str}}</button>
</form>
{{/newcourseurl}}
{{#courserequesturl}}
<a class="dropdown-item" href="{{courserequesturl}}">{{#str}}requestcourse, core{{/str}}</a>
<form action="{{courserequesturl}}" method="post" id="courserequestform">
<button type="submit" class="btn btn-primary m-1 w-100">{{#str}} requestcourse {{/str}}</button>
</form>
{{/courserequesturl}}
</div>
</div>
Loading

0 comments on commit b020902

Please sign in to comment.