0.15_27 commit r0_15_27
authorTony Cook <tony@develop-help.com>
Wed, 10 Aug 2005 06:49:09 +0000 (06:49 +0000)
committertony <tony@45cb6cf1-00bc-42d2-bb5a-07f51df49f94>
Wed, 10 Aug 2005 06:49:09 +0000 (06:49 +0000)
Makefile
schema/bse.sql
site/cgi-bin/bse.cfg
site/cgi-bin/modules/Article.pm
site/cgi-bin/modules/BSE/Edit/Article.pm
site/cgi-bin/modules/BSE/Formatter.pm
site/cgi-bin/modules/BSE/Shop/Util.pm
site/cgi-bin/modules/DevHelp/Tags.pm
site/cgi-bin/modules/Squirrel/Template.pm
site/cgi-bin/modules/Util.pm
site/docs/bse.pod

index 4450a4e..9533954 100755 (executable)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION=0.15_26
+VERSION=0.15_27
 DISTNAME=bse-$(VERSION)
 DISTBUILD=$(DISTNAME)
 DISTTAR=../$(DISTNAME).tar
index 5b1d222..2c5bfd0 100644 (file)
@@ -32,7 +32,7 @@ CREATE TABLE article (
   -- if this is blank then no page is generated
   -- this is combined with the base of the site to get the file
   -- written to during generation
-  link varchar(64) not null,
+  link varchar(255) not null,
   admin varchar(64) not null,
 
   -- if there are more child articles than this, display links/summaries
index 12fc491..ebf3e0d 100644 (file)
@@ -246,6 +246,7 @@ I=Index even if hidden
 N=Don't index even if listed
 C=Don't index this article or it's descendants
 R=Regenerate even if we're using JIT regen (dynamic pages only)
+F=Descendants inherit Always Dynamic
 
 [article 1]
 extra_templates=index.tmpl
index 7f712dd..a46b86f 100644 (file)
@@ -137,15 +137,9 @@ sub update_dynamic {
 
   $dynamic or $dynamic = $self->{force_dynamic};
 
-  unless ($dynamic) {
-    my @groups = $self->group_ids;
-    @groups and $dynamic = 1;
-  }
+  $dynamic or $dynamic = $self->is_access_controlled;
 
-  unless ($dynamic) {
-    my $parent = $self->parent;
-    $parent and $dynamic = $parent->is_dynamic;
-  }
+  $dynamic or $dynamic = $self->force_dynamic_inherited;
 
   $self->{cached_dynamic} = $dynamic;
 }
@@ -199,4 +193,30 @@ sub is_access_controlled {
   return $parent->is_access_controlled;
 }
 
+sub force_dynamic_inherited {
+  my ($self) = @_;
+
+  my $parent = $self->parent
+    or return 0;
+
+  $parent->{force_dynamic} && $parent->{flags} =~ /F/
+    and return 1;
+  
+  return $parent->force_dynamic_inherited;
+}
+
+sub link_to_filename {
+  my ($self, $cfg, $link) = @_;
+
+  defined $link or $link = $self->{link};
+
+  my $filename = $link;
+  $filename =~ s!/\w*$!!;
+  $filename =~ s{^\w+://[\w.-]+(?::\d+)?}{};
+  $filename = $Constants::CONTENTBASE . $filename;
+  $filename =~ s!//+!/!;
+  
+  return $filename;
+}
+
 1;
index 62645cf..3f97b8f 100644 (file)
@@ -1580,7 +1580,7 @@ sub save {
   }
 
   $article->{listed} = $cgi->param('listed')
-    if defined $cgi->param('listed') && 
+   if defined $cgi->param('listed') && 
       $req->user_can('edit_field_edit_listed', $article);
   $article->{release} = sql_date($cgi->param('release'))
     if defined $cgi->param('release') && 
@@ -1622,6 +1622,7 @@ sub save {
     }
   }
 
+  my $old_link = $article->{link};
   # this need to go last
   $article->update_dynamic($self->{cfg});
   if ($article->{link} && 
@@ -1632,10 +1633,14 @@ sub save {
 
   $article->save();
 
-  # if we changed dynamic status, we need to update it for the kids too
+  # fix the kids too
   my @extra_regen;
-  if ($article->is_dynamic != $old_dynamic) {
-    @extra_regen = $self->update_child_dynamic($article, $articles, $req);
+  @extra_regen = $self->update_child_dynamic($article, $articles, $req);
+  
+  if ($article->is_dynamic || $old_dynamic) {
+    if (!$old_dynamic and $old_link) {
+      unlink $article->link_to_filename($self->{cfg}, $old_link);
+    }
   }
 
   use Util 'generate_article';
@@ -1643,7 +1648,7 @@ sub save {
     generate_article($articles, $article);
     for my $regen_id (@extra_regen) {
       my $regen = $articles->getByPkey($regen_id);
-      Util::generate_low($articles, $article, $self->{cfg});
+      Util::generate_low($articles, $regen, $self->{cfg});
     }
   }
 
@@ -1659,6 +1664,7 @@ sub update_child_dynamic {
   while (@stack) {
     my $workart = pop @stack;
     my $old_dynamic = $workart->is_dynamic; # before update
+    my $old_link = $workart->{link};
     $workart->update_dynamic($cfg);
     if ($old_dynamic != $workart->is_dynamic) {
       # update the link
@@ -1668,6 +1674,9 @@ sub update_child_dynamic {
 
        my $uri = $editor->make_link($workart);
        $workart->setLink($uri);
+
+       $old_dynamic 
+         or unlink $workart->link_to_filename($cfg, $old_link);
       }
 
       # save dynamic cache change and link if that changed
index 2924ae8..8b5c380 100644 (file)
@@ -163,8 +163,9 @@ sub doclink {
   }
 
   $target = $target ? qq! target="$target"! : '';
+  my $title_attrib = escape_html($art->{title});
   
-  return qq!<a href="$url"$target>$title</a>!;
+  return qq!<a href="$url" title="$title_attrib"$target>$title</a>!;
 }
 
 sub replace {
index 4b4a04c..93e431a 100644 (file)
@@ -55,7 +55,7 @@ sub shop_cart_tags {
        my $value = $cart->[$item_index]{$_[0]};
        defined($value) or $value = $cart_prods->[$item_index]{$_[0]};
        defined($value) or $value = '';
-       $value;
+       escape_html($value);
      },
      extended =>
      sub { 
index 52e9828..1437123 100644 (file)
@@ -331,7 +331,7 @@ sub static {
 use constant DEBUG_GET_PARMS => 0;
 
 sub get_parms {
-  my ($class, $args, $acts, $templater) = @_;
+  my ($class, $args, $acts, $templater, $keep_unknown) = @_;
 
   my $orig = $args;
 
@@ -364,7 +364,12 @@ sub get_parms {
          print STDERR "  Available functions: ", join(",", sort keys %$acts),"\n";
          
        }
-       die "ENOIMPL '$func $subargs' in '$orig'\n";
+       if ($keep_unknown) {
+         push @out, [ $func, $subargs ];
+       }
+       else {
+         die "ENOIMPL '$func $subargs' in '$orig'\n";
+       }
       }
     }
     elsif ($args =~ s/^\s*\"((?:[^\"\\]|\\[\\\"]|\\)*)\"\s*//) {
@@ -387,5 +392,4 @@ sub get_parms {
   @out;
 }
 
-
 1;
index 955bc32..4f3e457 100644 (file)
@@ -218,6 +218,7 @@ sub with {
 sub cond {
   my ($self, $name, $args, $acts, $start, $true, $else, $false, $endif) = @_;
 
+  defined $args or $args = '';
   print STDERR "cond $name $args\n" if DEBUG;
 
   my $result =
@@ -236,7 +237,8 @@ sub cond {
        print STDERR " not found\n" if DEBUG > 1;
        $true = $self->replace_template($true, $acts) if length $true;
        $false = $self->replace_template($false, $acts) if length $false;
-       return "$start$true$else$false$endif";
+       length $args and $args = " " . $args;
+       return "$start$args:>$true$else$false$endif";
       }
     };
   if ($@) {
@@ -244,7 +246,8 @@ sub cond {
     if ($msg =~ /^ENOIMPL\b/) {
       $true = $self->replace_template($true, $acts) if length $true;
       $false = $self->replace_template($false, $acts) if length $false;
-      return "$start$true$else$false$endif";
+      length $args and $args = " " . $args;
+      return "$start$args:>$true$else$false$endif";
     }
     print STDERR "Eval error in cond: $msg\n";
     $msg =~ s/([<>&])/"&#".ord($1).";"/ge;
@@ -465,14 +468,14 @@ sub replace_template {
 
   # conditionals
   my $nesting = 0; # prevents loops if result is an if statement
-  1 while $template =~ s/(<:\s*if\s+(\w+)(?:\s+(.*?))?\s*:>)
+  1 while $template =~ s/(<:\s*if\s+(\w+))(?:\s+(.*?))?\s*:>
                           (.*?)
                          (<:\s*or\s+\2\s*:>)
                           (.*?)
                          (<:\s*eif\s+\2\s*:>)/
                         $self->cond($2, $3, $acts, $1, $4, $5, $6, $7) /sgex
                          && ++$nesting < 5;
-  $template =~ s/(<:\s*if([A-Z]\w*)(?:\s+(.*?))?\s*:>)
+  $template =~ s/(<:\s*if([A-Z]\w*))(?:\s+(.*?))?\s*:>
                   (.*?)
                  (<:\s*or\s*:>)
                   (.*?)
index 4c44351..c8923cd 100644 (file)
@@ -48,11 +48,7 @@ sub generate_low {
     }
   }
   else {
-    $outname = $article->{link};
-    $outname =~ s!/\w*$!!;
-    $outname =~ s{^\w+://[\w.-]+(?::\d+)?}{};
-    $outname = $CONTENTBASE . $outname;
-    $outname =~ s!//+!/!;
+    $outname = $article->link_to_filename($cfg);
   }
 
   my $genname = $article->{generator};
index 28f3288..b04c3e0 100644 (file)
@@ -10,6 +10,43 @@ Maybe I'll add some other bits here.
 
 =head1 CHANGES
 
+=head2 0.15_27
+
+=over
+
+=item *
+
+the article link column has been expanded to 255 characters
+
+=item *
+
+children are no longer always dynamic if their parent is.  They must
+now either inherit access controls or have the force_dynamic flag set
+in the article or in the config file to become dynamic (but see below.)
+
+=item *
+
+added the "Descendants inherit Always Dynamic" flag.  If this and the
+"Always dynamic" flag is set for an article then all descendants will
+be dynamic.
+
+=item *
+
+the doclink[] and popdoclink[] body text tags now include a HTML title
+attribute in the <a ...> tag.
+
+=item *
+
+children are now correctly regenerated when their dynamic parent is
+saved.
+
+=item *
+
+when an article turns from static to dynamic the static content is now
+removed.
+
+=back
+
 =head2 0.15_26
 
 =over