Skip to content

Commit

Permalink
MDL-45893 user_menu: revised based on action_menu
Browse files Browse the repository at this point in the history
  • Loading branch information
Jetha Chan committed Sep 25, 2014
1 parent 272fec3 commit d24b8e5
Show file tree
Hide file tree
Showing 16 changed files with 507 additions and 12 deletions.
3 changes: 3 additions & 0 deletions lang/en/moodle.php
Original file line number Diff line number Diff line change
Expand Up @@ -1034,6 +1034,7 @@
$string['log_excel_date_format'] = 'yyyy mmmm d h:mm';
$string['loggedinas'] = 'You are logged in as {$a}';
$string['loggedinasguest'] = 'You are currently using guest access';
$string['loggedinfrom'] = 'from {$a}';
$string['loggedinnot'] = 'You are not logged in.';
$string['login'] = 'Log in';
$string['loginalready'] = 'You are already logged in';
Expand Down Expand Up @@ -1548,6 +1549,7 @@
$string['rolerenaming'] = 'Role renaming';
$string['rolerenaming_help'] = 'This setting allows the displayed names for roles used in the course to be changed. Only the displayed name is changed - role permissions are not affected. New role names will appear on the course participants page and elsewhere within the course. If the renamed role is one that the administrator has selected as a course manager role, then the new role name will also appear as part of the course listings.';
$string['roles'] = 'Roles';
$string['roleviewas'] = 'You are viewing as a {$a}';
$string['rss'] = 'RSS';
$string['rssarticles'] = 'Number of RSS recent articles';
$string['rsserror'] = 'Error reading RSS data';
Expand Down Expand Up @@ -1905,6 +1907,7 @@
$string['usernameoremail'] = 'Enter either username or email address';
$string['usernotconfirmed'] = 'Could not confirm {$a}';
$string['userpic'] = 'User picture';
$string['userrevert'] = 'Revert to your own account';
$string['users'] = 'Users';
$string['userselectorautoselectunique'] = 'If only one user matches the search, select them automatically';
$string['userselectorpreserveselected'] = 'Keep selected users, even if they no longer match the search';
Expand Down
131 changes: 131 additions & 0 deletions lib/outputrenderers.php
Original file line number Diff line number Diff line change
Expand Up @@ -2897,6 +2897,137 @@ public function tree_block_contents($items, $attrs = array()) {
return html_writer::tag('ul', implode("\n", $lis), $attrs);
}

/**
* Construct a user menu, returning HTML that can be echoed out by a
* layout file.
*
* @param stdClass $user A user object, usually $USER.
* @param bool $withlinks true if a dropdown should be built.
* @return string HTML fragment.
*/
public function user_menu($user = null, $withlinks = null) {
global $USER, $CFG;

if (is_null($user)) {
$user = $USER;
}

// Note: this behaviour is intended to match that of core_renderer::login_info,
// but should not be considered to be good practice; layout options are
// intended to be theme-specific. Please don't copy this snippet anywhere else.
if (is_null($withlinks)) {
$withlinks = empty($this->page->layout_options['nologinlinks']);
}

$returnstr = "";

// If during initial install, return the empty return string.
if (during_initial_install()) {
return $returnstr;
}

// If not logged in, show the typical not-logged-in string.
if (!isloggedin()) {
$returnstr = get_string('loggedinnot', 'moodle');
$loginpage = ((string)$this->page->url === get_login_url());
if (!$loginpage) {
$loginurl = get_login_url();
$returnstr .= " (<a href=\"$loginurl\">" . get_string('login') . '</a>)';
}
return html_writer::tag(
'span',
$returnstr
);
}

// Get some navigation opts.
require_once($CFG->dirroot . '/user/lib.php');
$opts = user_get_user_navigation_info($user, $this->page, $this->page->course);

$avatarclasses = "avatars";
$avatarcontents = html_writer::span($opts->metadata['useravatar'], 'avatar current');
$usertextcontents = $opts->metadata['userfullname'];

// Other user.
if ($opts->metadata['asotheruser']) {
$avatarcontents .= html_writer::span(
$opts->metadata['realuseravatar'],
'avatar realuser'
);
$usertextcontents = $opts->metadata['realuserfullname'];
$usertextcontents .= html_writer::tag(
'span',
get_string(
'loggedinas',
'moodle',
html_writer::span(
$opts->metadata['userfullname'],
'value'
)
),
array('class' => 'meta viewingas')
);
}

// Role.
if ($opts->metadata['asotherrole']) {
$role = core_text::strtolower(preg_replace('#[ ]+#', '-', trim($opts->metadata['rolename'])));
$usertextcontents .= html_writer::span(
get_string(
'roleviewas',
'moodle',
html_writer::span(
$opts->metadata['rolename'],
'value'
)
),
'meta role role-' . $role
);
}

// MNet.
if ($opts->metadata['asmnetuser']) {
$mnet = strtolower(preg_replace('#[ ]+#', '-', trim($opts->metadata['mnetidprovidername'])));
$usertextcontents .= html_writer::span(
get_string(
'loggedinfrom',
'moodle',
html_writer::span(
$opts->metadata['mnetidprovidername'],
'value'
)
),
'meta mnet mnet-' . $mnet
);
}

$returnstr .= html_writer::span(
html_writer::span($avatarcontents, $avatarclasses) . html_writer::span($usertextcontents, 'usertext'),
'userbutton'
);

$am = new action_menu();
$am->initialise_js($this->page);
$am->set_menu_trigger($returnstr);
$am->set_alignment(action_menu::TR, action_menu::BR);
if ($withlinks) {
foreach ($opts->navitems as $key => $value) {
$al = new action_menu_link_secondary(
$value->url,
new pix_icon($value->pix, $value->title, null),
$value->title,
array('class' => 'icon')
);
$am->add($al);
}
}

return html_writer::div(
$this->render($am),
'usermenu'
);
}

/**
* Return the navbar content so that it can be echoed out by the layout
*
Expand Down
2 changes: 1 addition & 1 deletion theme/base/layout/frontpage.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
<div id="page-header" class="clearfix">
<h1 class="headermain"><?php echo $PAGE->heading ?></h1>
<div class="headermenu"><?php
echo $OUTPUT->login_info();
echo $OUTPUT->user_menu();
echo $OUTPUT->lang_menu();
echo $PAGE->headingmenu;
?></div>
Expand Down
4 changes: 1 addition & 3 deletions theme/base/layout/general.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,7 @@
<?php if ($hasheading) { ?>
<h1 class="headermain"><?php echo $PAGE->heading ?></h1>
<div class="headermenu"><?php
if ($haslogininfo) {
echo $OUTPUT->login_info();
}
echo $OUTPUT->user_menu();
if (!empty($PAGE->layout_options['langmenu'])) {
echo $OUTPUT->lang_menu();
}
Expand Down
88 changes: 88 additions & 0 deletions theme/base/style/core.css
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,94 @@ a.skip:active {position: static;display: block;}
.headermenu {float:right;margin:10px;font-size:0.8em;text-align:right;}
#course-header {clear:both;}

/**
* User menu
*/
.usermenu {
border: 1px solid #333;
padding: 4px 6px;
margin: 0.5em 0em;
}
.usermenu .toggle-display {
outline: none;
}
.usermenu .userbutton {
background: #fff;
color: #000;
display: inline-block;
font-size: 15px;
}
.usermenu .userbutton > * {
display: inline-block;
vertical-align: middle;
}
.usermenu .userbutton .avatars {
display: inline-block;
vertical-align: middle;
}
.usermenu .userbutton .usertext {
display: inline-block;
text-align: left;
}
.usermenu .userbutton .usertext .meta{
display: block;
font-size: 12px;
}
.usermenu .userbutton .usertext .meta .value {
font-weight: bold;
}
.usermenu .moodle-actionmenu .toggle-display.textmenu .caret {
display: none;
}
.jsenabled .usermenu .moodle-actionmenu[data-enhanced] .toggle-display.textmenu {
margin-left: 0;
padding-left: 0;
}
.jsenabled.dir-rtl .usermenu .moodle-actionmenu[data-enhanced] .toggle-display.textmenu {
margin-right: 0;
margin-left: 4px;
}
.jsenabled .usermenu .moodle-actionmenu[data-enhanced] .toggle-display.textmenu .caret {
display: inline-block;
margin-top: 0;
vertical-align: middle;
}
.userloggedinas .usermenu .userbutton .avatars .avatar {
display: inline-block;
vertical-align:middle;
overflow: hidden;
}
.userloggedinas .usermenu .userbutton .avatars .avatar img {
width: inherit;
height: inherit;
}
.userloggedinas .usermenu .userbutton .avatars .avatar.current {
position: relative;
top: 4px;
left: 4px;
width: 20px;
height: 20px;
margin-top: 11px;
border: 1px solid #ddd;
border-radius: 10px;
box-shadow: -2px -2px 16px rgba(0,0,0,0.25);
}
.dir-ltr .usermenu .userbutton .avatars {
margin-right: 6px;
}
.dir-rtl .usermenu .userbutton {
margin-right: -4px;
}
.dir-rtl .usermenu .userbutton .avatars {
margin-left: 6px;
}
.dir-ltr.userloggedinas .usermenu .userbutton .avatars .avatar.current {
margin-right: -34px;
}
.dir-rtl.userloggedinas .usermenu .userbutton .avatars .avatar.current {
margin-left: -22px;
}

/**
* Navbar
*/
Expand Down
2 changes: 1 addition & 1 deletion theme/bootstrapbase/layout/columns1.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
<?php echo $OUTPUT->custom_menu(); ?>
<ul class="nav pull-right">
<li><?php echo $OUTPUT->page_heading_menu(); ?></li>
<li class="navbar-text"><?php echo $OUTPUT->login_info() ?></li>
<li class="navbar-text"><?php echo $OUTPUT->user_menu() ?></li>
</ul>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion theme/bootstrapbase/layout/columns2.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
<?php echo $OUTPUT->custom_menu(); ?>
<ul class="nav pull-right">
<li><?php echo $OUTPUT->page_heading_menu(); ?></li>
<li class="navbar-text"><?php echo $OUTPUT->login_info() ?></li>
<li class="navbar-text"><?php echo $OUTPUT->user_menu() ?></li>
</ul>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion theme/bootstrapbase/layout/columns3.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
<?php echo $OUTPUT->custom_menu(); ?>
<ul class="nav pull-right">
<li><?php echo $OUTPUT->page_heading_menu(); ?></li>
<li class="navbar-text"><?php echo $OUTPUT->login_info() ?></li>
<li class="navbar-text"><?php echo $OUTPUT->user_menu(); ?></li>
</ul>
</div>
</div>
Expand Down
3 changes: 2 additions & 1 deletion theme/bootstrapbase/layout/popup.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
<?php echo $OUTPUT->custom_menu(); ?>
<ul class="nav pull-right">
<li><?php echo $OUTPUT->page_heading_menu(); ?></li>
<li class="navbar-text"><?php echo $OUTPUT->login_info() ?></li>
<li class="navbar-text"><?php echo $OUTPUT->user_menu(); ?></li>
</ul>
</div>
</div>
Expand All @@ -75,6 +75,7 @@
<div class="breadcrumb-button"><?php echo $OUTPUT->page_heading_button(); ?></div>
</div>
<?php echo $OUTPUT->page_heading(); ?>
<?php echo $OUTPUT->user_menu(); ?>
<div id="course-header">
<?php echo $OUTPUT->course_header(); ?>
</div>
Expand Down
Loading

0 comments on commit d24b8e5

Please sign in to comment.