Commit Graph

42 Commits

Author SHA1 Message Date
Weston Ruter
e158ff27de Customizer: Fix scalability performance problem for previewing multidimensional settings.
As the number of multidimensional settings (serialized options and theme mods) increase for a given ID base (e.g. a widget of a certain type), the number of calls to the `multidimensional` methods on `WP_Customize_Setting` increase exponentially, and the time for the preview to refresh grows in time exponentially as well.

To improve performance, this change reduces the number of filters needed to preview the settings off of a multidimensional root from N to 1. This improves performance from `O(n^2)` to `O(n)`, but the linear increase is so low that the performance is essentially `O(1)` in comparison. This is achieved by introducing the concept of an "aggregated multidimensional" setting, where the root value of the multidimensional serialized setting value gets cached in a static array variable shared across all settings.

Also improves performance by only adding preview filters if there is actually a need to do so: there is no need to add a filter if there is an initial value and if there is no posted value for a given setting (if it is not dirty).

Fixes #32103.


git-svn-id: https://develop.svn.wordpress.org/trunk@35007 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-10 09:05:04 +00:00
Weston Ruter
84e475dd80 Customizer: Ensure WP_Customize_Setting::update() returns boolean value.
Adds unit tests for `WP_Customize_Setting::save()` (and `WP_Customize_Setting::update()`), along with the actions `customize_update_{$type}`, and `customize_save_{$id_base}` which they trigger.

Fixes #34140.


git-svn-id: https://develop.svn.wordpress.org/trunk@34838 602fd350-edb4-49c9-b593-d223f7449a82
2015-10-05 21:57:32 +00:00
Scott Taylor
38038ccba3 Add Customizer docs.
Props ericlewis.
See #33503.


git-svn-id: https://develop.svn.wordpress.org/trunk@33911 602fd350-edb4-49c9-b593-d223f7449a82
2015-09-05 19:52:17 +00:00
Weston Ruter
dbcb95c022 Customizer: Ensure that all existing menus are shown in the Custom Menu widget's dropdown.
* Ensure that a Custom Menu widget selecting a newly-inserted menu gets updated to use the new menu ID upon Save & Publish.
* Dynamically update the visibility of the Custom Menu widget's "no menus" message when the number of menus changes between 0 and 1+.
* Send all dirty Customized settings in `update-widget` Ajax request and `preview()` them so that the widget update/form callbacks have access to any data dependencies in the current Customizer session (such as newly created unsaved menus).
* Update link in Custom Menu widget to point to Menus panel as opposed to Menus admin page, when in the Customizer.
* Fix an issue with extra space at top immediately after creating new menu.
* Fix doubled `update-widget` Ajax requests when changing select dropdown; prevent initial from being aborted.
* Add missing `wp_get_nav_menus()` hooks to preview Customizer updates/inserts for `nav_menu` settings; includes tests.
* Update `wp_get_nav_menu_object()` to allow a menu object to be passed in (and thus passed through).

Props westonruter, adamsilverstein.
Fixes #32814.


git-svn-id: https://develop.svn.wordpress.org/trunk@33488 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-29 16:02:08 +00:00
Aaron Jorbin
385b98d828 Use explicit variable variable syntax
PHP7 introduces a backwards compatable change to variable varibale syntax that requires us to use curly brackets to maintain the syntax between php5 and php7.  For more info, see https://wiki.php.net/rfc/uniform_variable_syntax#semantic_differences_in_existing_syntax for the semantic differences.  

Props ocean90
Fixes #31982



git-svn-id: https://develop.svn.wordpress.org/trunk@33427 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-26 18:03:58 +00:00
Weston Ruter
9e383a560a Customizer: Introduce customize_nav_menu_available_item_types and customize_nav_menu_available_items filters.
Allows for new available menu item types/objects to be registered in addition to filtering the available items that are returned for each menu item type/object.

Props valendesigns, imath, westonruter.
See #32832.
Fixes #32708.


git-svn-id: https://develop.svn.wordpress.org/trunk@33366 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-22 20:28:03 +00:00
Weston Ruter
65f5a16611 Customizer: Improve performance of menus by caching results of wp_setup_nav_menu_item() calls.
Also fixes property list in phpdoc for `wp_setup_nav_menu_item()`.

Fixes #32769.


git-svn-id: https://develop.svn.wordpress.org/trunk@33256 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-14 07:08:40 +00:00
Drew Jaynes
d762023715 Fix syntax and add missing @access tags to a variety of methods and properties in WP_Customize_Nav_Menu_Item_Setting added in 4.3.
See [32806]. See #32891.


git-svn-id: https://develop.svn.wordpress.org/trunk@33221 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-13 21:00:29 +00:00
Weston Ruter
a21c6e76d6 Customizer: Fix saving menus with empty names or names that are already used.
Adds validation for initially-supplied nav menu name, blocking empty names from being supplied. If later an empty name is supplied and the nav menu is saved, the name "(unnamed)" will be supplied instead and supplied back to the client. If a name is supplied for the menu which is currently used by another menu, then the name conflict is resolved by adding a numerical counter similar to how `post_name` conflicts are resolved. Includes unit tests.

Fixes #32760.



git-svn-id: https://develop.svn.wordpress.org/trunk@33071 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-03 20:46:48 +00:00
Dominik Schilling (ocean90)
1bc98482f1 Customizer: Escape original title of menu items.
see #32576.

git-svn-id: https://develop.svn.wordpress.org/trunk@32893 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-20 19:54:47 +00:00
Scott Taylor
8a7b906bee Add missing access modifiers in class-wp-customize-setting.php.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32878 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-19 22:07:12 +00:00
Scott Taylor
89328eb69f Customizer et al, use elseif in PHP, not else if.
This was corrected via brute force in [31090].

See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32874 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-19 22:00:33 +00:00
Dominik Schilling (ocean90)
c0a66eba79 Add menu management to the Customizer.
This brings in the Menu Customizer plugin: https://wordpress.org/plugins/menu-customizer/.

props celloexpressions, westonruter, valendesigns, voldemortensen, ocean90, adamsilverstein, kucrut, jorbin, designsimply, afercia, davidakennedy, obenland.
see #32576.

git-svn-id: https://develop.svn.wordpress.org/trunk@32806 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-16 22:07:08 +00:00
Aaron Jorbin
a4fed87d43 Restore [32732] as it wasn't the actual cause of test failures as those failures where fixed separately.
See #32732



git-svn-id: https://develop.svn.wordpress.org/trunk@32767 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-14 18:55:16 +00:00
Aaron Jorbin
84ee11c768 Revert [32732] since it is causing the tests to break
See #32732



git-svn-id: https://develop.svn.wordpress.org/trunk@32766 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-14 18:42:50 +00:00
Scott Taylor
6c8e2e1ab0 WP_Customize_Setting::is_current_blog_previewed() should only return false, not false or void. The one invocation of the method only loosely checks the return value.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32732 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-12 17:28:46 +00:00
Scott Taylor
39ef6a72c5 Use void instead of null where appropriate when pipe-delimiting @return types. If a @return only contains void, remove it.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32568 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-24 05:39:47 +00:00
Scott Taylor
febd12c957 Clean up @global doc blocks/imports for class-wp-customizer-*.php and friends.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32542 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-22 05:05:19 +00:00
Scott Taylor
9333337992 In class-wp-customize-*, clarify/add some @param/@return blocks. Disambiguate some functions that are trying to return the void response of another function they call internally.
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32535 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-21 22:04:29 +00:00
Drew Jaynes
1f3341f11a Add missing @access tags to two DocBlocks in WP_Customize_Setting.
See [31707]. See #31888.


git-svn-id: https://develop.svn.wordpress.org/trunk@32034 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-05 15:16:32 +00:00
Dominik Schilling (ocean90)
32a124a884 Customizer: Return the original value when filtering theme mods/options and the current blog has changed.
props westonruter.
fixes #31428.

git-svn-id: https://develop.svn.wordpress.org/trunk@31707 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-10 23:04:12 +00:00
Dominik Schilling (ocean90)
63502a8a01 Customizer: Fix previewing and applying widgets when previewing another theme.
* Unset `wp_get_sidebars_widgets()`' non-admin cache var `$_wp_sidebars_widgets` in Customize theme preview.
* Add `WP_Customize_Setting::$dirty` so that settings can be initially-dirty when the Customizer loads.
* Mark `old_sidebars_widgets_data` setting initially-dirty.
* Mark all `sidebars_widgets` settings as initially-dirty during theme switch.

props westonruter.
see #31484.

git-svn-id: https://develop.svn.wordpress.org/trunk@31705 602fd350-edb4-49c9-b593-d223f7449a82
2015-03-10 22:38:30 +00:00
Drew Jaynes
6a3e9b10c3 Add a missing file header and clean up class DocBlocks in wp-includes/class-wp-customize-setting.php.
* Adds a file header separate from the `WP_Customize_Setting` class block
* Fixes formatting for the `WP_Customize_Setting`, `WP_Customize_Filter_Setting`, `WP_Customize_Header_Image_Setting`, and `WP_Customize_Background_Image_Setting` class DocBlocks.

See #31446.


git-svn-id: https://develop.svn.wordpress.org/trunk@31543 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-25 08:17:25 +00:00
Dominik Schilling (ocean90)
2518bbbb1f Customizer: Introduce an API to create WP_Customize_Settings for dynamically-created settings.
* Introduce WP_Customize_Manager::add_dynamic_settings() to register dynamically-created settings.
* Introduce `customize_dynamic_setting_args` filter to pass an array of args to a dynamic setting's constructor.
* Add unit tests for WP_Customize_Manager and WP_Customize_Widgets.
* See WP_Customize_Widgets as an example.

props westonruter.
fixes #30936.

git-svn-id: https://develop.svn.wordpress.org/trunk@31370 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-08 23:10:05 +00:00
Dominik Schilling (ocean90)
8bc9ad756d Ensure that WP_Customize_Setting::value() returns default value for setting if not dirty.
There was regression introduced by #28580 where only changed (dirty) settings now are POST'ed to the Customizer preview.

* Allow WP_Customize_Manager::post_value() to accept a second $default argument.
* Introduce WP_Customize_Manager::unsanitized_post_values() for accessing previously-private member variable _post_values.
* Do require_once instead of require for Customizer classes.
* Add unit tests for WP_Customize_Manager and WP_Customize_Setting.

props westonruter.
fixes #30988.

git-svn-id: https://develop.svn.wordpress.org/trunk@31329 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-03 10:14:28 +00:00
Scott Taylor
349e5cb318 Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value. Constructors do not have meaningful return values, anything that is returned from here is discarded.
See #30799.


git-svn-id: https://develop.svn.wordpress.org/trunk@31126 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-10 06:53:48 +00:00
Scott Taylor
101e00314d In Customizer classes:
* `public final function` methods should be `final public function` - confusing Hack and aligns with PSR2
* Some methods were missing access modifiers

See #30799.


git-svn-id: https://develop.svn.wordpress.org/trunk@31083 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-08 06:01:08 +00:00
Scott Taylor
5817aa262d Improve various @param docs for src/wp-includes/class-wp-customize*.php.
See #30224.


git-svn-id: https://develop.svn.wordpress.org/trunk@30676 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-30 23:32:31 +00:00
Drew Jaynes (DrewAPicture)
e587324180 Docs Formatting: Backtick-escape inline code for all remaining dynamic hook docs in wp-includes/*.
Affects DocBlocks for the following hooks:
* `auth_post_meta_{$meta_key}`
* `term_links-$taxonomy`
* `customize_render_control_ . $this->id`
* `customize_render_panel_{$this->id}`
* `customize_render_section_{$this->id}`
* `customize_preview_{$this->id}`
* `customize_save_ . $this->id_data[ 'base' ]`
* `customize_update_ . $this->type`
* `customize_value_ . $this->id_data[ 'base' ]`
* `customize_sanitize_js_{$this->id}`
* `comment_form_field_{$name}`
* `comment_{$old_status}_to_{$new_status}`
* `comment_{$new_status}_{$comment->comment_type}`
* `extra_{$context}_headers`
* `get_template_part_{$slug}`
* `get_the_generator_{$type}`
* `get_{$adjacent}_post_join`
* `get_{$adjacent}_post_where`
* `get_{$adjacent}_post_sort`
* `{$adjacent}_post_rel_link`
* `{$adjacent}_post_link`
* `{$adjacent}_image_link`
* `blog_option_{$option}`
* `$permastructname . _rewrite_rules`
* `{$type}_template`
* `theme_mod_{$name}`
* `pre_set_theme_mod_$name`
* `current_theme_supports-{$feature}`
* `get_user_option_{$option}`
* `edit_user_{$field}`
* `pre_user_{$field}`
* `user_{$field}`

See #30552.


git-svn-id: https://develop.svn.wordpress.org/trunk@30656 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-30 12:09:56 +00:00
Drew Jaynes (DrewAPicture)
1af1cc4792 4.1 Docs Audit: Fix DocBlock formatting for the customize_preview_{$this->type} hook.
See #30469.


git-svn-id: https://develop.svn.wordpress.org/trunk@30609 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-28 11:12:46 +00:00
Drew Jaynes (DrewAPicture)
3cc10d77a0 Remove redundant and erroneous @uses tag from most core inline documentation.
Per our inline documentation standards, no further use of the `@uses` tag is recommended as used and used-by relationships can be derived through other means. This removes most uses of the tag in core documentation, with remaining tags to be converted to `@global` or `@see` as they apply.

Fixes #30191.


git-svn-id: https://develop.svn.wordpress.org/trunk@30105 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-30 01:04:55 +00:00
Dominik Schilling (ocean90)
12c39b7f4a Customizer: Introduce customize_preview_$setting->type action to handle multiple settings of the same type.
props celloexpressions.
fixes #29165.

git-svn-id: https://develop.svn.wordpress.org/trunk@29948 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-17 21:20:42 +00:00
Dominik Schilling (ocean90)
c4f784ba8e Correct the documentation for the customize_save_* action.
props celloexpressions.
see #29165.

git-svn-id: https://develop.svn.wordpress.org/trunk@29509 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-15 19:48:16 +00:00
Sergey Biryukov
ccdfdb2c8e Allow for easier adding of custom class variables when extending WP_Customize_Section or WP_Customize_Setting.
props rhurling.
fixes #27315.

git-svn-id: https://develop.svn.wordpress.org/trunk@28827 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-24 22:55:56 +00:00
Sergey Biryukov
566fd5da8d Pass WP_Customize_Setting instance to 'customize_save_*' action.
props danielbachhuber.
fixes #27979.

git-svn-id: https://develop.svn.wordpress.org/trunk@28769 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-17 23:57:19 +00:00
Sergey Biryukov
f1172ba195 Pass WP_Customize_Setting instance to 'customize_preview_*' and 'customize_update_*' actions.
props dustyn, DrewAPicture.
fixes #27979.

git-svn-id: https://develop.svn.wordpress.org/trunk@28767 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-17 23:34:31 +00:00
Scott Taylor
8bb3b642ec Add missing access modifiers to methods/members in WP_Customize_*.
See #27881, #22234.


git-svn-id: https://develop.svn.wordpress.org/trunk@28509 602fd350-edb4-49c9-b593-d223f7449a82
2014-05-19 05:44:49 +00:00
Scott Taylor
9ad07c8c28 In wp-includes/class-wp-customize-setting.php, break is unreachable after return.
See #27882.


git-svn-id: https://develop.svn.wordpress.org/trunk@28319 602fd350-edb4-49c9-b593-d223f7449a82
2014-05-06 18:33:03 +00:00
Drew Jaynes
ce4ed49390 Inline documentation for hooks in wp-includes/class-wp-customize-setting.php.
Props kpdesign for the cleanup.
Fixes #27295


git-svn-id: https://develop.svn.wordpress.org/trunk@27432 602fd350-edb4-49c9-b593-d223f7449a82
2014-03-06 14:03:23 +00:00
Andrew Nacin
a206152c10 Update the Customizer API inline docs.
props ericlewis.
fixes #27065.


git-svn-id: https://develop.svn.wordpress.org/trunk@27398 602fd350-edb4-49c9-b593-d223f7449a82
2014-03-04 20:20:28 +00:00
Drew Jaynes
647f80595d Remove all @package and @subpackage PHPDoc tags not at the file- or class-levels in core.
See #27200.


git-svn-id: https://develop.svn.wordpress.org/trunk@27262 602fd350-edb4-49c9-b593-d223f7449a82
2014-02-25 17:13:08 +00:00
Andrew Nacin
b43712e0f7 New develop.svn.wordpress.org repository based on the old core.svn repository.
* All WordPress files move to a src/ directory.
 * New task runner (Grunt), configured to copy a built WordPress to build/.
 * svn:ignore and .gitignore for Gruntfile.js, wp-config.php, and node.js.
 * Remove Akismet external from develop.svn. Still exists in core.svn.
 * Drop minified files from src/. The build process will now generate these.

props koop.
see #24976.

and see http://wp.me/p2AvED-1AI.



git-svn-id: https://develop.svn.wordpress.org/trunk@25001 602fd350-edb4-49c9-b593-d223f7449a82
2013-08-07 05:25:25 +00:00