@@ -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