diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 3840366ad..923790e1e 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -12,6 +12,8 @@ - Fixed a problem with JSON formatting in spectre config transaction. - Changed Manage Revisions screen to order revisions by descending revision date. + - URLs that would have been created like page.html/article.html are now + created like page/article.html to make them look more realistic. - fix: Fixing bad link on the Event page to the search engine. Added a new Event template variable called urlSearch to handle it. (perlDreamer Consulting, LLC) - fix: Set default groupIdEditEvent to groupIdEdit during upgrade (perlDreamer Consulting, LLC) diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index baef6b216..7f5809572 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -385,12 +385,17 @@ Any text string. Most likely will have been the Asset's name or title. sub fixUrl { my $self = shift; my $url = shift; + + # build a URL from the parent unless ($url) { $url = $self->getParent->get("url"); $url =~ s/(.*)\..*/$1/; $url .= '/'.$self->getValue("menuTitle"); } $url = $self->session->url->urlize($url); + + # fix urls used by uploads and extras + # and those beginning with http my @badUrls = ($self->session->config->get("extrasURL"), $self->session->config->get("uploadsURL")); foreach my $badUrl (@badUrls) { if ($badUrl =~ /^http/) { @@ -402,15 +407,26 @@ sub fixUrl { $url = "_".$url; } } + + # urls can't be longer than 250 characters if (length($url) > 250) { $url = substr($url,220); } + + # remove multiple extensions from the url if there are some + while ($url =~ m{^(.*)\.\w+(/.*)$}) { + $url =~ s{^(.*)\.\w+(/.*)$}{$1$2}ig; + } + + # add automatic extension if we're supposed to if ($self->session->setting->get("urlExtension") ne "" #don't add an extension if one isn't set && !($url =~ /\./) #don't add an extension of the url already contains a dot && $self->get("url") eq $self->getId # only add it if we're creating a new url ) { $url .= ".".$self->session->setting->get("urlExtension"); } + + # check to see if the url already exists or not, and increment it if it does if ($self->urlExists($self->session, $url, {assetId=>$self->getId})) { my @parts = split(/\./,$url); if ($parts[0] =~ /(.*)(\d+$)/) {