Skip to content

Commit 9141f82

Browse files
committed
Simplify sections preferences code (MDL-74977)
1 parent 07c048c commit 9141f82

1 file changed

Lines changed: 16 additions & 78 deletions

File tree

lib.php

Lines changed: 16 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ public function get_sections_preferences(): array {
647647
return $coursesections;
648648
}
649649

650-
$sectionpreferences = $this->fmt_set_get_sections_preferences();
650+
$sectionpreferences = $this->get_sections_preferences_by_preference();
651651

652652
foreach ($sectionpreferences as $preference => $sectionids) {
653653
if (!empty($sectionids) && is_array($sectionids)) {
@@ -670,29 +670,6 @@ public function get_sections_preferences(): array {
670670
* @return array of preferences indexed by preference name
671671
*/
672672
public function get_sections_preferences_by_preference(): array {
673-
return $this->fmt_set_get_sections_preferences();
674-
}
675-
676-
/**
677-
* Set the format section preferences.
678-
*
679-
* @param string $preferencename preference name
680-
* @param int[] $sectionids affected section IDs
681-
*
682-
*/
683-
public function set_sections_preference(string $preferencename, array $sectionids): void {
684-
$this->fmt_set_get_sections_preferences($preferencename, $sectionids);
685-
}
686-
687-
/**
688-
* Set and return the format section preferences.
689-
*
690-
* @param string|null $preferencename preference name
691-
* @param int[]|null $sectionids affected section IDs
692-
* @return array of preferences indexed by section ID
693-
*
694-
*/
695-
protected function fmt_set_get_sections_preferences(?string $preferencename = null, ?array $sectionids = null): array {
696673

697674
$course = $this->get_course();
698675
$sectionsextra = $this->fmt_get_sections_extra();
@@ -708,23 +685,23 @@ protected function fmt_set_get_sections_preferences(?string $preferencename = nu
708685
if ($prefname != 'fmtcollapsedset') {
709686
foreach ($sectids as $i => $sectionid) {
710687
if (!isset($sectionsextra[$sectionid])) {
711-
unset($sectids[$i]);
688+
$sectionpreferences[$prefname][$i] = 0;
712689
} else if ($prefname == 'contentcollapsed') {
713690
$contentcollapsedindexed[$sectionid] = true;
714691
}
715692
}
716693
}
717694
}
718695

719-
// Try autocollapsing content.
696+
// Figure out autocollapse changes.
720697
$sectionidsold = $sectionpreferences['contentcollapsed'] ?? null;
721698
$collapsedset = $collapsedsetold;
722699
$autocollapsedchanged = false;
723700
foreach ($sectionsextra as $sectionid => $sectionextra) {
724701
$section = $sectionextra->sectionbase;
725702
if (
726-
$sectionid > $collapsedsetold
727-
&& $sectionextra->levelsan >= FORMAT_MULTITOPIC_SECTION_LEVEL_TOPIC
703+
($sectionid > $collapsedsetold)
704+
&& ($sectionextra->levelsan >= FORMAT_MULTITOPIC_SECTION_LEVEL_TOPIC)
728705
&& ((($section->collapsible != '') ? $section->collapsible : $course->collapsible) != '0')
729706
&& !isset($contentcollapsedindexed[$sectionid])
730707
) {
@@ -737,10 +714,12 @@ protected function fmt_set_get_sections_preferences(?string $preferencename = nu
737714
$collapsedset = max($collapsedset, $sectionid);
738715
}
739716
$sectionpreferences['fmtcollapsedset'] = [ $collapsedset ];
717+
718+
// Try writing autocollapse changes.
740719
$collapsedsetupdated = false;
741720
if ($autocollapsedchanged) {
742721
try {
743-
$this->fmt_set_sections_preferences_sub($sectionpreferences);
722+
$this->persist_to_user_preference($sectionpreferences);
744723
$collapsedsetupdated = true;
745724
} catch (coding_exception $e) {
746725
if (isset($sectionidsold)) {
@@ -751,71 +730,30 @@ protected function fmt_set_get_sections_preferences(?string $preferencename = nu
751730
}
752731
}
753732

754-
// Try writing specified changes.
755-
$error = null;
756-
if ($preferencename) {
757-
$sectionidsold = $sectionpreferences[$preferencename] ?? null;
758-
$sectionpreferences[$preferencename] = $sectionids;
733+
// If nothing else, try writing last seen section.
734+
if (!$collapsedsetupdated && ($collapsedset > $collapsedsetold)) {
759735
try {
760-
$this->fmt_set_sections_preferences_sub($sectionpreferences);
761-
$collapsedsetupdated = true;
736+
$this->persist_to_user_preference($sectionpreferences);
762737
} catch (coding_exception $e) {
763-
$error = $e; // We may want to rethrow this.
764-
}
765-
766-
// Try writing specified changes without last seen section.
767-
if (
768-
$error && isset($sectionidsold) && count($sectionids) < count($sectionidsold)
769-
&& !$collapsedsetupdated && $collapsedset > $collapsedsetold
770-
) {
771-
$error = null;
772738
if ($collapsedsetold > 0) {
773739
$sectionpreferences['fmtcollapsedset'] = [ $collapsedsetold ];
774740
} else {
775741
unset($sectionpreferences['fmtcollapsedset']);
776742
}
777-
try {
778-
$this->fmt_set_sections_preferences_sub($sectionpreferences);
779-
} catch (coding_exception $e) {
780-
$error = $e; // We will want to rethrow this.
781-
}
782-
}
783-
784-
if ($error) {
785-
if (isset($sectionidsold)) {
786-
$sectionpreferences[$preferencename] = $sectionidsold;
787-
} else {
788-
unset($sectionpreferences[$preferencename]);
789-
}
790-
}
791-
}
792-
793-
// If nothing else, try writing last seen section.
794-
if (!$collapsedsetupdated && $collapsedset > $collapsedsetold) {
795-
$sectionpreferences['fmtcollapsedset'] = [ $collapsedset ];
796-
try {
797-
$this->fmt_set_sections_preferences_sub($sectionpreferences);
798-
$collapsedsetupdated = true;
799-
} catch (coding_exception $e) {
800-
// Do nothing, because there's nothing we can do.
801-
$collapsedsetupdated = false;
802743
}
803744
}
804745

805-
if ($error) {
806-
throw $error;
807-
}
808-
809746
return $sectionpreferences;
810747
}
811748

812749
/**
813-
* Set the format section preferences, given all preferences indexed by preference.
814-
*
815-
* @param array $sectionpreferences of preferences indexed by preference
750+
* Persist the section preferences to the user preferences.
816751
*
752+
* @param array $sectionpreferences the section preferences
817753
*/
818-
protected function fmt_set_sections_preferences_sub(array $sectionpreferences): void {
754+
protected function persist_to_user_preference(
755+
array $sectionpreferences,
756+
): void {
819757
global $USER;
820758
$course = $this->get_course();
821759
set_user_preference('coursesectionspreferences_' . $course->id, json_encode($sectionpreferences), $USER->id);

0 commit comments

Comments
 (0)