Index: /trunk/doc/Subdomains.txt =================================================================== --- /trunk/doc/Subdomains.txt (revision 616) +++ /trunk/doc/Subdomains.txt (revision 616) @@ -0,0 +1,36 @@ +By default, Lyceum structures blog urls as "directories": + + http://blogs.example.com/catblog + http://blogs.example.com/monkeyblog + +Lyceum can also structure blog urls using subdomains: + + http://catblog.blogs.example.com/ + http://monkeyblog.blogs.example.com/ + +Here is how to do that: + +1] Go through the installation instructions in Installation.txt. + +2] In your wp-config.php, set SUBDOMAINS to 'true', and MAINDOMAIN to the top portion of your domain. In the examples about, MAINDOMAIN would be 'blogs.example.com'. + +3] Set a wildcard DNS entry for your domain, using the DNS server that you use for all your other DNS entries. If you are doing it by hand, the entry will look something like this: + +*.blogs.example.com. IN A 123.456.789.123 + +4] Configure apache to have a Wildcard Subdomain Virtual Host (I just made up that term). It will look something like this: + + + ServerName blogs.example.com + ServerAlias * + + ServerAdmin webmaster@example.com + DocumentRoot /var/www/html + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + Index: /trunk/src/config/wp-config-sample.php =================================================================== --- /trunk/src/config/wp-config-sample.php (revision 596) +++ /trunk/src/config/wp-config-sample.php (revision 616) @@ -11,4 +11,9 @@ // Something like '/portal.php' or '/lyceum/portal.php' define('PORTAL', "/web/path/to/portal.php"); + +// Subdomain options +// See doc/Installation.txt and doc/Subdomains.txt for more info +define('SUBDOMAINS', false); +define('MAINDOMAIN', 'blogs.example.com'); //log files Index: /trunk/src/lib/wp-includes/template-functions-general.php =================================================================== --- /trunk/src/lib/wp-includes/template-functions-general.php (revision 602) +++ /trunk/src/lib/wp-includes/template-functions-general.php (revision 616) @@ -32,7 +32,7 @@ if ('' == $user_ID) - $link = '' . __('Login') . ''; - else - $link = '' . __('Logout') . ''; + $link = '' . __('Login') . ''; + else + $link = '' . __('Logout') . ''; echo apply_filters('loginout', $link); Index: /trunk/src/lib/wp-includes/classes.php =================================================================== --- /trunk/src/lib/wp-includes/classes.php (revision 613) +++ /trunk/src/lib/wp-includes/classes.php (revision 616) @@ -1439,5 +1439,31 @@ } } else { - $rules .= " + if(SUBDOMAINS) + $rules.=" + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + + RewriteRule ^profile/? wp-admin/profile.php?b=system&%{QUERY_STRING} [L] + RewriteRule ^login/? wp-login.php?%{QUERY_STRING} [L] + RewriteRule ^register/? wp-register.php?%{QUERY_STRING} [L] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + + RewriteRule ^admin/?$ wp-admin/index.php? + RewriteRule ^admin/?([^/]+php)\??(.*) wp-admin/$1?%{QUERY_STRING} [L] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + + ### do we need these two conditions? ### + RewriteCond %{REQUEST_URI} !^(.+)/admin(.*) + RewriteCond %{REQUEST_URI} !^(.+)/index.php(.*) + + RewriteRule (.*) /index.php?$1 [L,QSA]\n"; + + + + else $rules .= " RewriteCond %{REQUEST_FILENAME} !-f Index: /trunk/src/lib/wp-includes/functions.php =================================================================== --- /trunk/src/lib/wp-includes/functions.php (revision 613) +++ /trunk/src/lib/wp-includes/functions.php (revision 616) @@ -2323,12 +2323,14 @@ global $user_ID, $wpdb, $table_prefix; $blogs = $wpdb->get_results(" - SELECT DISTINCT $wpdb->blogs.id, $wpdb->blogs.slug, option_value as blogname, status + SELECT DISTINCT $wpdb->blogs.id, blognametable.option_value AS blogname, bloghometable.option_value AS home, status FROM $wpdb->blogs - INNER JOIN $wpdb->options ON ($wpdb->blogs.id = $wpdb->options.blog) + INNER JOIN $wpdb->options AS blognametable ON ($wpdb->blogs.id = blognametable.blog) + INNER JOIN $wpdb->options AS bloghometable ON ($wpdb->blogs.id = bloghometable.blog) INNER JOIN $wpdb->usermeta ON ($wpdb->blogs.id = $wpdb->usermeta.blog) WHERE status = 'active' AND meta_key = '{$table_prefix}capabilities' AND - option_name = 'blogname' AND + blognametable.option_name = 'blogname' AND + bloghometable.option_name = 'home' AND user_id = '$user_ID' "); Index: /trunk/src/lib/wp-settings.php =================================================================== --- /trunk/src/lib/wp-settings.php (revision 613) +++ /trunk/src/lib/wp-settings.php (revision 616) @@ -145,12 +145,30 @@ //TODO use cache if (!isset($blogdata)){ - if (!isset($_REQUEST['b'])) - header('Location: '.PORTAL );//redirect to public portal - else { - $blogdata = $wpdb->get_row("SELECT * FROM `$wpdb->blogs` WHERE `slug`='{$_REQUEST['b']}'"); -// trace('$blogdata', array_print($blogdata)); - $blog = $blogdata->id; - $blogstatus = $blogdata->status; - } + if(SUBDOMAINS) { + $host=$_SERVER['HTTP_HOST']; + if(($pos=strpos($host, '.'.MAINDOMAIN))!==false) { + $theslug=substr($host, 0, $pos); + $blogdata = $wpdb->get_row("SELECT * FROM `$wpdb->blogs` WHERE `slug`='{$theslug}'"); + //trace('$blogdata', array_print($blogdata)); + $blog = $blogdata->id; + $blogstatus = $blogdata->status; + + } else { + if(!(strpos($_SERVER['REQUEST_URI'], '/system-admin')===0 + or strpos($_SERVER['REQUEST_URI'], '/wp-')===0)) + header('Location: '.PORTAL); + } + } else { // if(SUBDOMAINS) + if (!isset($_REQUEST['b'])) + header('Location: '.PORTAL);//redirect to public portal + else { + $blogdata = $wpdb->get_row("SELECT * FROM `$wpdb->blogs` WHERE `id`='{$_REQUEST['b']}'"); + //trace('$blogdata', array_print($blogdata)); + $blog = $blogdata->id; + $blogstatus = $blogdata->status; + } + + } + } if (!isset($blog)) Index: /trunk/src/lib/wp-admin/admin-header.php =================================================================== --- /trunk/src/lib/wp-admin/admin-header.php (revision 613) +++ /trunk/src/lib/wp-admin/admin-header.php (revision 616) @@ -71,5 +71,5 @@ echo ''. __('My Account') . ''; else - echo ''. __('My Account') . ''; + echo ''. __('My Account') . ''; $myblogs = get_userblogs(); @@ -79,5 +79,5 @@ echo ' • '.$b->blogname.''; else - echo ' • '.$b->blogname.''; + echo ' • '.$b->blogname.''; } Index: /trunk/src/lib/wp-admin/upgrade-schema.php =================================================================== --- /trunk/src/lib/wp-admin/upgrade-schema.php (revision 613) +++ /trunk/src/lib/wp-admin/upgrade-schema.php (revision 616) @@ -224,11 +224,10 @@ umask($old_umask); - $guessurl = get_option('siteurl'); - -// add_option('siteurl', $guessurl . '/' . $blog, __('Blog web address')); - add_option('home', $guessurl . '/' . $wpdb->get_var("SELECT slug FROM $wpdb->blogs WHERE id = '$blog'")); - // in case it is set, but blank, update "home" -// if ( !__get_option('home') ) update_option('home', $guessurl); - + $slug = $wpdb->get_var("SELECT slug FROM $wpdb->blogs WHERE id = '$blog'"); + if (SUBDOMAINS) + $home = 'http://' . $slug . '.' . MAINDOMAIN; + else + $home = get_option('siteurl') . '/' . $slug; + add_option('home', $home); add_option('blogname', __('My Weblog'), __('Blog title')); add_option('blogdescription', __('Just another Lyceum weblog'), __('Short tagline')); Index: /trunk/src/lyceum/portal.php =================================================================== --- /trunk/src/lyceum/portal.php (revision 613) +++ /trunk/src/lyceum/portal.php (revision 616) @@ -81,12 +81,12 @@ echo "

My Blogs

"; - if ($myblogs) + if ($myblogs) { foreach ($myblogs as $b) - echo "slug\">$b->blogname
"; - else + echo "home."\">$b->blogname
"; + } else echo "You do not have permissions on any blogs. Click Register above to make a username and a blog."; $blogs = $wpdb->get_results(" - SELECT DISTINCT $wpdb->blogs.slug, option_value as blogname, status + SELECT DISTINCT $wpdb->blogs.id, $wpdb->blogs.slug, option_value as blogname, status FROM $wpdb->blogs INNER JOIN $wpdb->options ON ($wpdb->blogs.id = $wpdb->options.blog) @@ -102,6 +102,11 @@ echo "

All Blogs

"; if ($blogs) - foreach ($blogs as $b) - echo "slug\">$b->blogname
"; + if(SUBDOMAINS) + foreach ($blogs as $b) + echo "slug.".MAINDOMAIN."\">$b->blogname
"; + else + foreach ($blogs as $b) + echo "id\">$b->blogname
"; + else echo "The system does not yet have any blogs"; Index: /trunk/src/lyceum/wp-admin/options.php =================================================================== --- /trunk/src/lyceum/wp-admin/options.php (revision 613) +++ /trunk/src/lyceum/wp-admin/options.php (revision 616) @@ -85,8 +85,11 @@ $slug = $_POST['slug']; $oldslug = $wpdb->get_var("SELECT slug FROM $wpdb->blogs WHERE id = '$blogdata->id'"); -trace('$oldslug', $oldslug); if ($slug != $oldslug){ $wpdb->query("UPDATE $wpdb->blogs SET slug = '$slug' WHERE id = '$blogdata->id'"); - update_option('home', get_option('siteurl') . '/' . $slug); + if (SUBDOMAINS) + $home = 'http://' . $slug . '.' . MAINDOMAIN; + else + $home = get_option('siteurl') . '/' . $slug; + update_option('home', $home); $any_changed++; }