Commit Graph

58 Commits

Author SHA1 Message Date
Jeremy Felt ba8d3fca8f Multisite: Fire the `ms_loaded` action after multisite's bootstrap has finished.
This allows code in `sunrise.php` and in core to know when multisite bootstrap is complete and when the `$current_site` and `$current_blog` globals are populated.

Fixes #37235.
Props flixos90.

Built from https://develop.svn.wordpress.org/trunk@37916


git-svn-id: http://core.svn.wordpress.org/trunk@37857 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-06-29 19:00:28 +00:00
Jeremy Felt 19f988840f Multisite: Wrap the main bootstrap process in a function
Introduce `ms_load_current_site_and_network`. This is used by core during the multisite bootstrap process to populate the `$current_site` and `$current_blog` globals based on a requested domain and path.

Return values from this function inform `ms-settings.php` as to whether a page view should continue, `ms_not_installed()` should fire, or a redirect to a new location should occur.

This was previously a procedural block in `ms-settings.php`. Wrapping this code and providing specific return values allows us to write tests that do not rely on the manual and repeated inclusion of `ms-settings.php`.

This should not be used by plugins or themes. Please.

See #34941.

Built from https://develop.svn.wordpress.org/trunk@37475


git-svn-id: http://core.svn.wordpress.org/trunk@37443 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-20 20:57:28 +00:00
Jeremy Felt 698ca25fb9 Multisite: Make `$current_site` and `$current_blog` explicitly global.
See #34941.

Built from https://develop.svn.wordpress.org/trunk@37226


git-svn-id: http://core.svn.wordpress.org/trunk@37192 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-04-17 05:12:26 +00:00
Jeremy Felt 0b69f2cd63 Multisite: Introduce the WP_Site class.
* A `WP_Site` object initially matches a row from `wp_blogs`.
* A site can be retrieved by its ID through `WP_Site::get_instance()`.
* Adds `sites` to the global cache group and captures instance lookups.
* The multisite bootstrap now ensures `$current_blog` is an instance of `WP_Site`.

Props johnjamesjacoby, jeremyfelt.
See #32450.

Built from https://develop.svn.wordpress.org/trunk@36393


git-svn-id: http://core.svn.wordpress.org/trunk@36360 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-01-25 21:51:26 +00:00
Jeremy Felt a9da055b5b MS: Populate `public` on empty `$current_blog` during subdomain activation.
Activation of a subdomain site is done through that new site's address. This address does not exist in the `wp_blogs` table until activation is complete.

In this case we need to make sure `public` is populated to avoid a PHP notice.

Props uglyrobot.
Fixes #24760.

Built from https://develop.svn.wordpress.org/trunk@35782


git-svn-id: http://core.svn.wordpress.org/trunk@35746 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-12-06 18:24:26 +00:00
Boone Gorges 0e7c1d3b14 Use `wp_installing()` instead of `WP_INSTALLING` constant.
The `WP_INSTALLING` constant is a flag that WordPress sets in a number of
places, telling the system that options should be fetched directly from the
database instead of from the cache, that WP should not ping wordpress.org for
updates, that the normal "not installed" checks should be bypassed, and so on.

A constant is generally necessary for this purpose, because the flag is
typically set before the WP bootstrap, meaning that WP functions are not yet
available.  However, it is possible - notably, during `wpmu_create_blog()` -
for the "installing" flag to be set after WP has already loaded. In these
cases, `WP_INSTALLING` would be set for the remainder of the process, since
there's no way to change a constant once it's defined. This, in turn, polluted
later function calls that ought to have been outside the scope of site
creation, particularly the non-caching of option data. The problem was
particularly evident in the case of the automated tests, where `WP_INSTALLING`
was set the first time a site was created, and remained set for the rest of the
suite.

The new `wp_installing()` function allows developers to fetch the current
installation status (when called without any arguments) or to set the
installation status (when called with a boolean `true` or `false`). Use of
the `WP_INSTALLING` constant is still supported; `wp_installing()` will default
to `true` if the constant is defined during the bootstrap.

Props boonebgorges, jeremyfelt.
See #31130.
Built from https://develop.svn.wordpress.org/trunk@34828


git-svn-id: http://core.svn.wordpress.org/trunk@34793 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-10-05 15:06:28 +00:00
Jeremy Felt a8771a3914 MS: Populate `site_name` property in a new `WP_Network`.
This allows us to reduce some extra handling in `ms-settings.php`. Requires [34777].

Props johnjamesjacoby for the initial patch.
See #31985.

Built from https://develop.svn.wordpress.org/trunk@34819


git-svn-id: http://core.svn.wordpress.org/trunk@34784 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-10-04 20:51:25 +00:00
Jeremy Felt 54512d64cb MS: Use `*_network_option()` functions throughout core.
Replaces all uses of `*_site_option()` with the corresponding "network" function.

This excludes one usage in `wp-admin/admin-footer.php` that needs more investigation.

Props spacedmonkey.
See #28290.

Built from https://develop.svn.wordpress.org/trunk@34778


git-svn-id: http://core.svn.wordpress.org/trunk@34743 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-10-02 19:08:26 +00:00
Jeremy Felt fa1e1a8850 Multisite: Implement the `get_by_path` method in `WP_Network`.
Move the internals of `get_network_by_path()` to `WP_Network()` and allow network objects to be retrieved by passing a requested domain and path.

Props johnjamesjacoby, jeremyfelt, drewapicture, wonderboymusic.
See #31985.

Built from https://develop.svn.wordpress.org/trunk@34099


git-svn-id: http://core.svn.wordpress.org/trunk@34067 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-13 23:40:24 +00:00
Jeremy Felt 16b4096779 Multisite: Introduce the `WP_Network` class.
A `WP_Network` object initially matches a row from `wp_site` and is populated with additional properties used by WordPress core. The first iteration is used to retrieve an existing network based on data passed to the class.

* A network can be retrieved by its ID through `WP_Network::get_instance()`, following in the steps of `WP_Post` and `WP_Comment`.
* A network object can be created or completed by passing initial properties in as a standard object to `new WP_Network()`.

Using these methods, we are now able to populate the global `$current_site` during load via this class.

Props johnjamesjacoby, jeremyfelt, drewapicture, wonderboymusic.
See #31985.

Built from https://develop.svn.wordpress.org/trunk@34097


git-svn-id: http://core.svn.wordpress.org/trunk@34065 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-13 23:31:26 +00:00
Jeremy Felt 52c3be1602 Multisite: Add action to handle network not found
`ms_network_not_found` fires when the global `$current_site` has not been filled and `ms_not_installed()` is about to fire. It cannot be used to populate `$current_site`, but can be used to capture the request and redirect or present a custom error.

Props rmccue.
Fixes #31702.

Built from https://develop.svn.wordpress.org/trunk@33990


git-svn-id: http://core.svn.wordpress.org/trunk@33959 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-10 05:06:24 +00:00
Jeremy Felt 7278744dd0 Multisite: Remove `$domain` and `$path` globals in `ms_not_installed()`
Further reduces the reliance on these unnecessary globals.

Fixes #27264.

Built from https://develop.svn.wordpress.org/trunk@33989


git-svn-id: http://core.svn.wordpress.org/trunk@33958 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-10 03:53:24 +00:00
Sergey Biryukov 7a47b7585d Move ms-load.php and ms-default-constants.php inclusion back to ms-settings.php to avoid breaking WP-CLI.
Use require_once() to allow for ms-settings.php to be included multiple times while testing.

props jeremyfelt.
see #27884.
Built from https://develop.svn.wordpress.org/trunk@28934


git-svn-id: http://core.svn.wordpress.org/trunk@28732 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-06-30 23:50:15 +00:00
Andrew Nacin 4695573f51 Add initial unit tests for multisite's bootstrap.
props jeremyfelt.
fixes #27884.

Built from https://develop.svn.wordpress.org/trunk@28910


git-svn-id: http://core.svn.wordpress.org/trunk@28709 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-06-29 22:51:16 +00:00
Andrew Nacin 5b63b112f3 Multisite: Fix case sensitivity regressions in 3.9.
props jeremyfelt.
fixes #27866.

Built from https://develop.svn.wordpress.org/trunk@28276


git-svn-id: http://core.svn.wordpress.org/trunk@28104 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-06 05:24:14 +00:00
Andrew Nacin c095ad4500 Multisite: Lowercase REQUEST_URI when matching paths.
props markjaquith, jeremyfelt.
fixes #26403.

Built from https://develop.svn.wordpress.org/trunk@27724


git-svn-id: http://core.svn.wordpress.org/trunk@27561 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-25 21:05:14 +00:00
Andrew Nacin 64f7d4168f Use wp_cache_add() instead of wp_cache_set() when we don't want an unconditional set.
props jeremyfelt.
see #27003.

Built from https://develop.svn.wordpress.org/trunk@27665


git-svn-id: http://core.svn.wordpress.org/trunk@27508 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 01:03:14 +00:00
Andrew Nacin e14237a109 Multisite load: Cache the main site lookup query.
props jeremyfelt.
see #27003.

Built from https://develop.svn.wordpress.org/trunk@27664


git-svn-id: http://core.svn.wordpress.org/trunk@27507 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 01:01:15 +00:00
Andrew Nacin 1bacefa353 Introduce a ms_site_not_found filter to replace NOBLOGREDIRECT.
Move some processing down below the point where we bail if there's no site. Add more documentation.

props jeremyfelt.
fixes #21143, see #27003.

Built from https://develop.svn.wordpress.org/trunk@27663


git-svn-id: http://core.svn.wordpress.org/trunk@27506 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 00:14:15 +00:00
Andrew Nacin 5dc0a56f26 Multisite load: Properly call wp_cache_set().
props gradyetc.
see #27003.

Built from https://develop.svn.wordpress.org/trunk@27406


git-svn-id: http://core.svn.wordpress.org/trunk@27253 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-05 06:27:14 +00:00
Andrew Nacin ffc4ca7b01 Introduce get_site_by_path() and further rewrite the site detection process for multisite.
This is the first big step to supporting arbitrary domains and paths. In this new approach, sites are detected first where possible, then the network is inferred. Allows filtering for arbitrary path segments, smooths out some weirdness, and removes various restrictions. A sunrise plugin could do much of its work by adding filters, if those are even needed.

see #27003.

Built from https://develop.svn.wordpress.org/trunk@27359


git-svn-id: http://core.svn.wordpress.org/trunk@27209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-02 22:25:14 +00:00
Andrew Nacin eae1d5641d Multisite: Add get_network_by_path() and wp_get_network() to begin cleanup of multisite load.
Tries to get network detection under control by simplifying wpmu_current_site(). It now also pops off each subdomain to find a more general match. Adds unit tests for get_network_by_path() and a new network factory for unit tests.

Much of this is likely to change in 3.9 as more of ms-load.php and ms-settings.php gets hacked to bits.

props jeremyfelt.
see #27003.

Built from https://develop.svn.wordpress.org/trunk@27178


git-svn-id: http://core.svn.wordpress.org/trunk@27040 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-02-13 23:07:14 +00:00
Ryan Boren f11317881a Resurrect the switched global. Some are still using it. see #21459
git-svn-id: http://core.svn.wordpress.org/trunk@21581 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-22 03:34:00 +00:00
ryan d286875515 switch_to_blog() and restore_current_blog() housekeeping.
wp-includes/admin-bar.php:

* Replace get_admin_url() and get_home_url() with admin_url() and home_url() and place them inside a switch/restore. Likewise replace current_user_can_for_blog() with current_user_can(). This avoids doing multiple switch restores.

wp-includes/ms-blogs.php:

* Deprecate the $validate argument to switch_to_blog(). This avoids a not very necessary call to get_blog_details(), possibly saving a few queries.
* Use $_wp_switched and $_wp_switched_stack instead of $switched and $switched_stack to make it less likely these globals will be stomped.
* Use GLOBALS to access blog_id and other globals. I've preferred this style lately since it makes it obvious a global is being used and avoids global blog_id being stomped by a local variable.
* Lose some is_object() checks. wp_get_current_user() always returns an object, for example.
* Call the new WP_Roles::reinit() method.

wp-includes/class-wp-xmlrpc-server.php:

* Replace current_user_can_for_blog() with current_user_can() and move it inside the switch/restore pair. This eliminates a switch/restore.

wp-includes/capabilities.php:

* Use array_keys() instead of $role => $data since $data is unused. I *think* this is a bit faster.
* Introduce WP_Roles::reinit(). This reinitializes WP_Roles and is used after switch_to_blog() has already update the blog ID in the wpdb object. If a global roles array is being used instead of the db, reinit is skipped.
* current_user_can_for_blog() now does a switch/restore. It didn't before meaning it could be reinitializing the user with the wrong role information for the current blog.

wp-includes/ms-settings.php:

* Define $_wp_switched_stack and $_wp_switched. This way switch_to_blog() and restore_current_blog() can rely on it being set.

wp-settings.php:

* Instantiate the WP_Roles global. This was it is always defined during init. To remove the WP_Roles checks from WP_Role and WP_User this would probably have to move before plugins are loaded, which might not be a good thing.

wp-includes/functions.php:

* Update wp_upload_dir() to reference _wp_switched.



git-svn-id: http://core.svn.wordpress.org/trunk@21485 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-08-09 16:28:15 +00:00
nacin 81ed9a7563 Introduce wp_load_translations_early(), which can be used before the locale is properly loaded in order to translate early error strings. Internationalize setup-config.php -- translators no longer have a reason to modify this file. fixes #18180.
git-svn-id: http://svn.automattic.com/wordpress/trunk@19760 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2012-01-26 20:34:27 +00:00
nacin e3117daaa8 Remove old $base/BASE MU check. props mdawaffe, fixes #18479.
git-svn-id: http://svn.automattic.com/wordpress/trunk@18568 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2011-08-18 22:27:30 +00:00
PeteMall f4e8cf9bb6 Address redirection loop with multiple networks and network admin. Props mwidmann, fixes #15591
git-svn-id: http://svn.automattic.com/wordpress/trunk@16633 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-11-30 20:45:40 +00:00
ryan 7119110439 Unset global variables when they are no longer needed.
git-svn-id: http://svn.automattic.com/wordpress/trunk@15747 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-10-07 20:12:49 +00:00
nacin 1852eae49f Deprecate VHOST in favor of a boolean, SUBDOMAIN_INSTALL. Core will keep VHOST defined for plugins' sake, but you should only define SUBDOMAIN_INSTALL. Throws a notice if VHOST is defined, and a warning if they somehow conflict. Sunrise can still handle them. fixes #11796.
git-svn-id: http://svn.automattic.com/wordpress/trunk@14452 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-05-04 20:48:28 +00:00
nacin f9df8a36ae s/blog/site/ in more places. props PeteMall, see #11644.
git-svn-id: http://svn.automattic.com/wordpress/trunk@14313 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-04-30 01:54:32 +00:00
dd32 442d41291a Tweak new strings for better typography. Props demetris. Fixes #12962
git-svn-id: http://svn.automattic.com/wordpress/trunk@14070 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-04-11 10:41:54 +00:00
nacin c449adb237 File-level phpdoc for multisite files.
git-svn-id: http://svn.automattic.com/wordpress/trunk@13998 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-04-04 13:29:35 +00:00
nbachiyski 70b7755535 Wrap transtable strings used in Network install in WP_I18N_SOMETHING, because translations still aren't loaded. Fixes #12357
git-svn-id: http://svn.automattic.com/wordpress/trunk@13797 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-03-22 06:51:49 +00:00
markjaquith 58d47426cc More pedantry. "Setup" is not a verb. http://notaverb.com/setup
git-svn-id: http://svn.automattic.com/wordpress/trunk@13725 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-03-17 04:39:50 +00:00
nacin 5be468ea5f Allow localhost in a multisite subdirectory install. More network.php improvements. see #12457 for localhost. see #11816
git-svn-id: http://svn.automattic.com/wordpress/trunk@13622 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-03-09 06:14:42 +00:00
nacin f210aed76d Move $base sanity check to from MS config template to ms-settings. see #11816
git-svn-id: http://svn.automattic.com/wordpress/trunk@13610 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-03-06 19:36:35 +00:00
wpmuguru 097b18b559 remove __( calls from ms startup, see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@13575 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-03-03 17:13:38 +00:00
wpmuguru 4dc6a43f96 always call set_blog_id after blog lookup, See #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@13421 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-26 00:05:11 +00:00
wpmuguru e50b8fa348 database code cleanup, See #12362
git-svn-id: http://svn.automattic.com/wordpress/trunk@13387 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-24 21:30:13 +00:00
wpmuguru c9df482e54 update wpdb blogid using setter, See #12362
git-svn-id: http://svn.automattic.com/wordpress/trunk@13386 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-24 21:07:23 +00:00
nacin 4451f3f64f Minor MS startup cleanups. See #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@13254 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-20 14:07:23 +00:00
nacin 20f50e7f06 Rename is_installed() to ms_not_installed(). See #12083
git-svn-id: http://svn.automattic.com/wordpress/trunk@13253 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-20 13:51:32 +00:00
ryan 98e8daa20a Add ability to query by domain and/or path to get_blog_details(). Improve blog details caching. Use get_blog_details() in ms-settings.php so queries are cached. see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@13126 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-13 23:09:54 +00:00
westi b20c3c41d4 Improve the implementation of the default constant defining functions for multisite. See #11881.
git-svn-id: http://svn.automattic.com/wordpress/trunk@13065 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-12 08:22:34 +00:00
wpmuguru b01479de37 reorganize code on ms startup. props nacin, see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@12921 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-02-01 20:26:08 +00:00
ryan 19c9d0bb79 Remove db error show/hide, suppress/unsuppress in ms bootstrap. see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@12901 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-01-29 19:16:07 +00:00
ryan 1b9caf7846 ms-settings cleanup. Props nacin. see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@12896 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-01-29 16:26:46 +00:00
ryan 394eba5eb1 Clean up cache re-init code in Multisite. Props nacin. fixes #12065
git-svn-id: http://svn.automattic.com/wordpress/trunk@12888 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-01-28 17:28:44 +00:00
wpmuguru 493a307cf7 rearrage multisite initialization, remove deprecated $wpmuBaseTablePrefix, props nacin, see #11881
git-svn-id: http://svn.automattic.com/wordpress/trunk@12885 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-01-28 16:09:52 +00:00
ryan cd57004569 Deprecate is_main_blog() for is_main_site(). see #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@12858 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2010-01-26 22:46:09 +00:00