diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index 340a0002620f24672cd0fc0c26fea23b49265e21..8c39d43b55cc9ba3fa6532a61f03569e57e90e34 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -446,13 +446,19 @@ function unl_cron() { $sites_to_create = array(); foreach ($data as $site) { - $path = $site->department . '/' . $site->site_name; - $path = strtolower($path); - $path = strtr($path, array(' ' => '')); - - $db_prefix = $site->site_name; - $db_prefix = strtolower($db_prefix); - $db_prefix = strtr($db_prefix, array(' ' => '')); + $department = $site->department; + $department = strtr($department, array(' ' => '')); + $department = strtolower($department); + $department = preg_replace('/[^[a-z0-9]/', '', $department); + + $site_name = $site->site_name; + $site_name = strtr($site_name, array(' ' => '')); + $site_name = strtolower($site_name); + $site_name = preg_replace('/[^[a-z0-9]/', '', $site_name); + + $path = $department . '/' . $site_name; + + $db_prefix = unl_create_db_prefix($site); $path = 'incubator/' . $path; @@ -461,9 +467,9 @@ function unl_cron() { 'uri' => url($path), 'clean_url' => TRUE, 'db_prefix' => $db_prefix, - 'site_admin' => $site->site_admin, - 'migration_url' => $site->migration_url, - 'migration_path' => $site->migration_path, + 'site_admin' => $site->site_admin ? $site->site_admin : '', + 'migration_url' => $site->migration_url ? $site->migration_url : '', + 'migration_path' => $site->migration_path ? $site->migration_path : '', ); if (variable_get('unl_wdn_registry_production')) { @@ -490,3 +496,28 @@ function unl_cron() { } } + +// Creates a db_prefix short enough to not go over MySQL's max table name length +function unl_create_db_prefix($site) { + $parent_prefix = '_' . $GLOBALS['databases']['default']['default']['prefix']; + + $site_name = strtolower($site->site_name); + $site_name = preg_replace('/[^[a-z0-9]/', '', $site_name); + $site_name = explode(' ', $site_name); + foreach ($site_name as $site_word) { + $site_words[$site_word] = strlen($site_word); + } + do { + $db_prefix = ''; + $found = FALSE; + foreach ($site_words as $site_word => $length) { + $db_prefix .= substr($site_word, 0, $length); + if (max($site_words) == $length && !$found) { + $found = TRUE; + $site_words[$site_word] = $length-1; + } + } + } while (strlen($db_prefix . $parent_prefix) > 32); + + return $db_prefix; +}