MDL-26501 mod_glossary: fixes to tabs management

This commit is contained in:
Marina Glancy
2015-06-02 11:25:27 +01:00
committed by Dan Poltawski
parent 223d6cb3bf
commit 29645f9745
6 changed files with 49 additions and 29 deletions
+2 -2
View File
@@ -261,7 +261,7 @@ echo '<table width="90%" align="center" class="generalbox">';
// Get all glossary tabs.
$glossarytabs = glossary_get_all_tabs();
// Extract showtabs value in an array.
$visibletabs = glossary_get_visible_tabs($displayformat->showtabs);
$visibletabs = glossary_get_visible_tabs($displayformat);
$size = min(10, count($glossarytabs));
?>
<select id="visibletabs" name="visibletabs[]" size="<?php echo $size ?>" multiple="multiple">
@@ -277,7 +277,7 @@ foreach ($glossarytabs as $tabkey => $tabvalue) {
<option value="<?php echo $tabkey ?>"><?php echo $tabvalue ?></option>
<?php
}
}
}
?>
</select>
</td>
+32 -14
View File
@@ -917,10 +917,11 @@ function glossary_get_available_formats() {
$gf->name = $format;
$gf->popupformatname = $format;
$gf->visible = 1;
$DB->insert_record("glossary_formats",$gf);
$id = $DB->insert_record('glossary_formats', $gf);
$rec = $DB->get_record('glossary_formats', array('id' => $id));
}
if(is_null($rec->showtabs)) {
if (empty($rec->showtabs)) {
glossary_set_default_visible_tabs($rec);
}
}
@@ -3061,24 +3062,28 @@ function glossary_get_completion_state($course,$cm,$userid,$type) {
function glossary_extend_navigation($navigation, $course, $module, $cm) {
global $CFG, $DB;
$glossarytabs = $DB->get_field('glossary_formats', 'showtabs', array('name' => $module->displayformat));
$displayformat = $DB->get_record('glossary_formats', array('name' => $module->displayformat));
// Get visible tabs for the format and check if the menu needs to be displayed.
$showtabs = glossary_get_visible_tabs($glossarytabs);
$showtabs = glossary_get_visible_tabs($displayformat);
foreach ($showtabs as $showtabkey => $showtabvalue) {
switch($showtabvalue) {
case GLOSSARY_STANDARD :
$navigation->add(get_string('standardview', 'glossary'), new moodle_url('/mod/glossary/view.php', array('id' => $cm->id, 'mode' => 'letter')));
$navigation->add(get_string('standardview', 'glossary'), new moodle_url('/mod/glossary/view.php',
array('id' => $cm->id, 'mode' => 'letter')));
break;
case GLOSSARY_CATEGORY :
$navigation->add(get_string('categoryview', 'glossary'), new moodle_url('/mod/glossary/view.php', array('id' => $cm->id, 'mode' => 'cat')));
$navigation->add(get_string('categoryview', 'glossary'), new moodle_url('/mod/glossary/view.php',
array('id' => $cm->id, 'mode' => 'cat')));
break;
case GLOSSARY_DATE :
$navigation->add(get_string('dateview', 'glossary'), new moodle_url('/mod/glossary/view.php', array('id' => $cm->id, 'mode' => 'date')));
$navigation->add(get_string('dateview', 'glossary'), new moodle_url('/mod/glossary/view.php',
array('id' => $cm->id, 'mode' => 'date')));
break;
case GLOSSARY_AUTHOR :
$navigation->add(get_string('authorview', 'glossary'), new moodle_url('/mod/glossary/view.php', array('id' => $cm->id, 'mode' => 'author')));
$navigation->add(get_string('authorview', 'glossary'), new moodle_url('/mod/glossary/view.php',
array('id' => $cm->id, 'mode' => 'author')));
break;
}
}
@@ -3230,8 +3235,8 @@ function glossary_page_type_list($pagetype, $parentcontext, $currentcontext) {
/**
* Return list of all glossary tabs.
* @return array
* @throws coding_exception
* @return array
*/
function glossary_get_all_tabs() {
@@ -3244,7 +3249,7 @@ function glossary_get_all_tabs() {
/**
* Set 'showtabs' value for glossary formats
* @param $glossaryformat
* @param stdClass $glossaryformat record from 'glossary_formats' table
*/
function glossary_set_default_visible_tabs($glossaryformat) {
global $DB;
@@ -3255,25 +3260,38 @@ function glossary_set_default_visible_tabs($glossaryformat) {
break;
case GLOSSARY_DICTIONARY:
$showtabs = 'standard';
// Special code for upgraded instances that already had categories set up
// in this format - enable "category" tab.
// In new instances only 'standard' tab will be visible.
if ($DB->record_exists_sql("SELECT 1
FROM {glossary} g, {glossary_categories} gc
WHERE g.id = gc.glossaryid and g.displayformat = ?",
array(GLOSSARY_DICTIONARY))) {
$showtabs .= ',category';
}
break;
case GLOSSARY_FULLWITHOUTAUTHOR:
$showtabs = 'standard,category,date';
break;
default:
$showtabs = 'standard,author,category,date';
$showtabs = 'standard,category,date,author';
break;
}
$DB->set_field('glossary_formats', 'showtabs', $showtabs, array('id' => $glossaryformat->id));
$glossaryformat->showtabs = $showtabs;
}
/**
* Convert 'showtabs' string to array
* @param $glossarytabs
* @param stdClass $displayformat record from 'glossary_formats' table
* @return array
*/
function glossary_get_visible_tabs($glossarytabs) {
$showtabs = preg_split('/,/', $glossarytabs, -1, PREG_SPLIT_NO_EMPTY);
function glossary_get_visible_tabs($displayformat) {
if (empty($displayformat->showtabs)) {
glossary_set_default_visible_tabs($displayformat);
}
$showtabs = preg_split('/,/', $displayformat->showtabs, -1, PREG_SPLIT_NO_EMPTY);
return $showtabs;
}
+7 -4
View File
@@ -21,7 +21,7 @@
}
// Get visible tabs for the format and check tab needs to be displayed.
$dt = glossary_get_visible_tabs($dp->showtabs);
$dt = glossary_get_visible_tabs($dp);
if (in_array(GLOSSARY_STANDARD, $dt)) {
$browserow[] = new tabobject(GLOSSARY_STANDARD_VIEW,
@@ -62,12 +62,15 @@
$tabrows[] = $toolsrow;
}
?>
<div class="glossarydisplay">
<?php if ($showcommonelements) { print_tabs($tabrows, $tab, $inactive, $activated); } ?>
<?php
if ($showcommonelements && (count($tabrows[0]) > 1)) {
print_tabs($tabrows, $tab, $inactive, $activated);
}
?>
<div class="entrybox">
@@ -117,4 +120,4 @@
break;
}
echo html_writer::empty_tag('hr');
?>
?>
+3 -1
View File
@@ -17,9 +17,11 @@ Feature: Glossary entries can be organised in categories
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
And the following "activities" exist:
| activity | name | intro | displayformat | course | idnumber |
| glossary | MyGlossary | Test glossary description | encyclopedia | C1 | glossary1 |
And the following "activities" exist:
| activity | name | intro | course | idnumber |
| glossary | MyGlossary | Test glossary description | C1 | glossary1 |
| label | name | check autolinking of CategoryAutoLinks and CategoryNoLinks text | C1 | label1 |
# Log in as admin and enable autolinking filter
And I log in as "admin"
@@ -16,12 +16,11 @@ Feature: Glossary entries can be searched or browsed by alphabet, category, date
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
And the following "activities" exist:
| activity | name | intro | displayformat | course | idnumber |
| glossary | Test glossary name | Test glossary description | fullwithauthor | C1 | g1 |
And I log in as "teacher1"
And I follow "Course 1"
And I turn editing mode on
And I add a "Glossary" to section "1" and I fill the form with:
| Name | Test glossary name |
| Description | Test glossary description |
And I follow "Test glossary name"
And I add a glossary entries category named "The ones I like"
And I add a glossary entries category named "All for you"
+2 -4
View File
@@ -73,14 +73,11 @@ if ($page != 0 && $offset == 0) {
$offset = $page * $entriesbypage;
}
// Get visible tabs for this glossary format.
$glossarytabs = $DB->get_field('glossary_formats', 'showtabs', array('name' => $glossary->displayformat));
$showtabs = glossary_get_visible_tabs($glossarytabs);
/// setting the default values for the display mode of the current glossary
/// only if the glossary is viewed by the first time
if ( $dp = $DB->get_record('glossary_formats', array('name'=>$glossary->displayformat)) ) {
/// Based on format->defaultmode, we build the defaulttab to be showed sometimes
$showtabs = glossary_get_visible_tabs($dp);
switch ($dp->defaultmode) {
case 'cat':
$defaulttab = GLOSSARY_CATEGORY_VIEW;
@@ -122,6 +119,7 @@ if ( $dp = $DB->get_record('glossary_formats', array('name'=>$glossary->displayf
}
} else {
$defaulttab = GLOSSARY_STANDARD_VIEW;
$showtabs = array($defaulttab);
$printpivot = 1;
if ( $mode == '' and $hook == '' and $show == '') {
$mode = 'letter';