]> git.decadent.org.uk Git - maypole.git/commitdiff
removed Maypole::Model->description,
authorSimon Cozens <simon@simon-cozens.org>
Sun, 16 Jan 2005 18:47:28 +0000 (18:47 +0000)
committerSimon Cozens <simon@simon-cozens.org>
Sun, 16 Jan 2005 18:47:28 +0000 (18:47 +0000)
fixed overidability of classmetadata in View,
fix Maypole::Model::CDBI->related_class,
fix edit/addnew templates & do_edit action

git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@332 48953598-375a-da11-a14b-00016c27c3ee

12 files changed:
Changes
META.yml
lib/Apache/MVC.pm
lib/CGI/Maypole.pm
lib/Maypole.pm
lib/Maypole/Application.pm
lib/Maypole/Manual/View.pod
lib/Maypole/Model/Base.pm
lib/Maypole/Model/CDBI.pm
lib/Maypole/View/Base.pm
templates/factory/addnew
templates/factory/edit

diff --git a/Changes b/Changes
index e81f2fab99b6324f14cc9cd0602b3fd7c5321399..a05fbc664c3419f903352cb357b03fee5af2de60 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,10 +2,23 @@ This file documents the revision history for Perl extension Maypole.
 For information about current developments and future releases, see:
     http://maypole.perl.org/?TheRoadmap
 
-2.0X  XXX
+2.07  Sun Jan 16 18:45:00 2005
+    Internal changes:
+    - Removed Maypole::Model->description. It didn't work as expected and
+      clashed with 'description' columns in the database
+
     Fixes:
     - Model->process() shouldn't set $r->objects() to a list with a single,
       undefined element
+    - Fixed overriding $r->template_args->{classmetadata} in M::V::Base
+      (Thanks to Dave Howorth for spotting the mistake)
+    - #9473: Maypole::Model::CDBI->related_class (Thanks David Baird)
+    - #9434: M::M::CDBI->search generated "uninitialized value" warnings
+
+    Templates:
+    - The addnew template will attempt to prefill form fields with request
+      parameters
+    - edit template includes 'addnew' if there is no object to edit
 
 2.06  Wed Dec 29 01:30:00 2004
     Fixes:
index 5b5ce58ec4e4c626990fb83f122c18a91bad851b..d19d2ac70bb65937e26a77ca23598a5601dd6f28 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -1,7 +1,7 @@
 # http://module-build.sourceforge.net/META-spec.html
 #XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
 name:         Maypole
-version:      2.06
+version:      2.07
 version_from: lib/Maypole.pm
 installdirs:  site
 requires:
index 6bbe9b61cc4e0330773d1dea16b841ddedf5043f..45dd897ec0ac0abf65502c4d3222bc6595640871 100644 (file)
@@ -1,6 +1,6 @@
 package Apache::MVC;
 
-our $VERSION = '2.06';
+our $VERSION = '2.07';
 
 use strict;
 use warnings;
index 9c025ec462ce28490675ed90e276b9c756879230..e002cf2d2ddc47099d291fedd849496219bf7d9f 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use CGI::Simple;
 use Maypole::Headers;
 
-our $VERSION = '2.06';
+our $VERSION = '2.07';
 
 sub run {
     my $self = shift;
index 75d159e6ea58cfc659929efbece9989d09df8a0f..7f1e9d33ee3034e397195bf9ee64362a9f99a1d1 100644 (file)
@@ -7,7 +7,7 @@ use Maypole::Config;
 use Maypole::Constants;
 use Maypole::Headers;
 
-our $VERSION = '2.06';
+our $VERSION = '2.07';
 
 __PACKAGE__->mk_classdata($_) for qw( config init_done view_object );
 __PACKAGE__->mk_accessors(
@@ -186,8 +186,7 @@ sub exception { return ERROR }
 sub parse_path {
     my $self = shift;
     $self->{path} ||= "frontpage";
-    my @pi = split /\//, $self->{path};
-    shift @pi while @pi and !$pi[0];
+    my @pi = $self->{path} =~ m{([^/]+)/?}g;
     $self->{table}  = shift @pi;
     $self->{action} = shift @pi;
     $self->{action} ||= "index";
index 01dd6148f49806baee4cb5929c327f669b8bdf31..18cd589fccf03e0f62f15c21047e2cbd5db76bda 100644 (file)
@@ -7,7 +7,7 @@ use Maypole;
 use Maypole::Config;
 
 our @ISA;
-our $VERSION = '2.06';
+our $VERSION = '2.07';
 
 sub import {
     my ( $self, @plugins ) = @_;
index 5477d050719635b33847af694f08f3f62a6a9445..38ba8e71c50162d149529cc011f412db5761010a 100644 (file)
@@ -385,10 +385,6 @@ that class. That is, for the C<beer> table, C<classmetadata.cgi.style>
 should be a C<HTML::Element> object containing a drop-down list of
 beer styles.
 
-TODO =item C<description>
-TODO
-TODO This is the human-readable description provided by a class.
-
 =item C<related_accessors>
 
 This is a list of accessors which can be called on an object to get
index 3375dfd26fba523b126e784c93e32a9779b8cfb6..678c3994f3b5e9d07dd90b1788342becebf90978 100644 (file)
@@ -169,14 +169,6 @@ sub column_names {
     } $class->columns;
 }
 
-=head2 description
-
-A description of the class to be passed to the template.
-
-=cut
-
-sub description { "A poorly defined class" }
-
 =head2 is_public
 
 should return true if a certain action is supported, or false otherwise. 
index ac89318827f01c41b2b3f8d2702a2fa89204e14b..4ed0aa68b331179ace9c43f7ec516c9338a2759a 100644 (file)
@@ -82,8 +82,13 @@ sub related {
 
 sub related_class {
     my ( $self, $r, $accessor ) = @_;
-    my $related = $self->related->{$accessor};
-    if ( my $mapping = $related->{args}->{mapping} ) {
+
+    my $related = $self->meta_info( has_many => $accessor ) ||
+                  $self->meta_info( has_a    => $accessor ) ||
+                  return;
+
+    my $mapping = $related->{args}->{mapping};
+    if ( @$mapping ) {
         return $related->{foreign_class}->meta_info('has_a')->{ $$mapping[0] }
           ->{foreign_class};
     }
@@ -123,12 +128,8 @@ sub do_edit : Exported {
         $r->{template_args}{cgi_params} = $r->{params};
         $r->{template_args}{errors}     = \%errors;
 
-        if ($creating) {
-            undef $obj;
-            $r->template("addnew");
-        } else {
-            $r->template("edit");
-        }
+        undef $obj if $creating;
+        $r->template("edit");
     }
     else {
         $r->{template} = "view";
@@ -171,7 +172,8 @@ sub search : Exported {
     my $oper   = "like";                                # For now
     my %params = %{ $r->{params} };
     my %values = map { $_ => { $oper, $params{$_} } }
-      grep { length ($params{$_}) and $fields{$_} } keys %params;
+      grep { defined $params{$_} && length ($params{$_}) && $fields{$_} }
+      keys %params;
 
     $r->template("list");
     if ( !%values ) { return $self->list($r) }
index f7881a2e27106c9bc7bd536993ba3d4ff0c23232..312d38ba24aeeb3f3e70809776a788433751a5f2 100644 (file)
@@ -35,9 +35,8 @@ sub vars {
           # ...
     );
     if ($class) {
-        my $classmeta = $args{classmetadata} ||= {};
+        my $classmeta = $r->template_args->{classmetadata} ||= {};
         $classmeta->{name}              ||= $class;
-        $classmeta->{description}       ||= $class->description;
         $classmeta->{table}             ||= $class->table;
         $classmeta->{columns}           ||= [ $class->display_columns ];
         $classmeta->{list_columns}      ||= [ $class->list_columns ];
@@ -57,9 +56,7 @@ sub vars {
     }
 
     # Overrides
-    local $r->{template_args} = $r->{template_args};
-    delete $r->{template_args}{classmetadata}; # already overrides
-    %args = ( %args, %{ $r->{template_args} || {} } );
+    %args = ( %args, %{ $r->template_args || {} } );
     %args;
 }
 
index a6027ce2de4ddbd71731f0886526cfa6bd1ac7ca..f530bc99383105fa608e453fe43375ae4c6af986 100644 (file)
@@ -18,8 +18,19 @@ table.
     [% FOR col = classmetadata.columns %]
         [% NEXT IF col == "id" %]
             <label><span class="field">[% classmetadata.colnames.$col %]</span>
-            [% classmetadata.cgi.$col.as_XML; %]
+            [% 
+            SET elem = classmetadata.cgi.$col.clone;
+            IF elem.tag == "textarea";
+                elem = elem.push_content(request.param(col));
+            ELSE;
+                elem.attr("value", request.param(col));
+            END;
+            elem.as_XML; %]
            </label>
+        [% IF errors.$col %]
+           <span class="error">[% errors.$col %]</span>
+        [% END %]
+
     [% END; %]
     <input type="submit" name="create" value="create"/>
 </fieldset>
index 5feb34eb0d128153daff76b41158495ca0497162..d114897f9c98552b9ecbff22a94fa0fce616926b 100644 (file)
@@ -3,7 +3,7 @@
 =head1 edit
 
 This is the edit page. It edits the passed-in object, by displaying a
-form similar to L<add_new> but with the current values filled in.
+form similar to L<addnew> but with the current values filled in.
 
 =cut
 
@@ -11,6 +11,7 @@ form similar to L<add_new> but with the current values filled in.
 [% PROCESS macros %]
 [% INCLUDE header %]
 [% INCLUDE title %]
+[% IF objects.length %]
 <div id="title">Edit a [% classmetadata.moniker %]</div>
 [% FOR item = objects; %]
 <form action="[% base %]/[% item.table %]/do_edit/[% item.id %]" method="post">
@@ -30,5 +31,7 @@ form similar to L<add_new> but with the current values filled in.
     "</fieldset></form>";
     
     END %]
-
+[% ELSE %]
+[% INCLUDE addnew %]
+[% END %]
 [% INCLUDE footer %]