MDL-37565 fixed PDW plugin to calculate number of button rows
authorMarina Glancy <marina@moodle.com>
Thu, 11 Jul 2013 04:47:58 +0000 (14:47 +1000)
committerMarina Glancy <marina@moodle.com>
Thu, 11 Jul 2013 04:47:58 +0000 (14:47 +1000)
lib/editor/tinymce/plugins/pdw/lib.php

index dbac6cc..ad1eee3 100644 (file)
@@ -24,16 +24,43 @@ defined('MOODLE_INTERNAL') || die();
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 class tinymce_pdw extends editor_tinymce_plugin {
+    /**
+     * Adds pdw toggle button if there are more than one row of buttons in TinyMCE
+     *
+     * @param array $params TinyMCE init parameters array
+     * @param context $context Context where editor is being shown
+     * @param array $options Options for this editor
+     */
     protected function update_init_params(array &$params, context $context,
             array $options = null) {
 
-        // Add button before 'undo' in advancedbuttons1.
-        $this->add_button_before($params, 1, ' | ', '');
-        $this->add_button_before($params, 1, 'pdw_toggle', '');
-        $params['pdw_toggle_on'] = 1;
-        $params['pdw_toggle_toolbars'] = '2,3';
+        $rowsnumber = $this->count_rows($params);
+        if ($rowsnumber > 1) {
+            // Add button before 'undo' in advancedbuttons1.
+            $this->add_button_before($params, 1, ' | ', '');
+            $this->add_button_before($params, 1, 'pdw_toggle', '');
+            $params['pdw_toggle_on'] = 1;
+            $params['pdw_toggle_toolbars'] = join(',', range(2, $rowsnumber));
 
-        // Add JS file, which uses default name.
-        $this->add_js_plugin($params);
+            // Add JS file, which uses default name.
+            $this->add_js_plugin($params);
+        }
+    }
+
+    /**
+     * Counts the number of rows in TinyMCE editor
+     *
+     * @param array $params TinyMCE init parameters array
+     * @return int the maximum existing row number
+     */
+    private function count_rows(array &$params) {
+        for($i = 10; $i >= 1; $i--) {
+            $field = 'theme_advanced_buttons' . $i;
+            if (isset($params[$field])) {
+                return $i;
+            }
+        }
+        // This should not happen.
+        return 1;
     }
 }