<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -6,7 +6,7 @@ This file documents the revision history for Perl extension Mango.
     - Updated XML::Atom PREREQ and test
     - Mango-&gt;share now uses module_dir and falls back to ../../share when using
         local INC files
-    - Added mango.pl to create app/config/data/components
+    - Added mango.pl to create app/config/data/components/database
 
 0.01000_06 Sep 09 20:01:22 2007
     - Fixed Template-&gt;share when Mango has never been installed</diff>
      <filename>Changes</filename>
    </modified>
    <modified>
      <diff>@@ -34,6 +34,7 @@ requires 'Catalyst::Plugin::Static::Simple';
 requires 'Catalyst::Action::RenderView';
 requires 'Catalyst::Action::REST' =&gt; '0.40';
 requires 'Catalyst::Plugin::Authentication' =&gt; '0.09999';
+requires 'Catalyst::Plugin::Authorization::Roles';
 requires 'Catalyst::Plugin::Session';
 requires 'Catalyst::Plugin::Session::State::Cookie';
 requires 'Catalyst::Plugin::Session::Store::File';</diff>
      <filename>Makefile.PL</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,9 @@ use strict;
 use warnings;
 
 BEGIN {
-    use Catalyst::Helper;
+    use base qw/Catalyst::Helper/;
     use Catalyst::Utils;
+    use DateTime;
     use Path::Class qw/file dir/;
     use YAML;
     use Mango::Schema;
@@ -12,46 +13,79 @@ BEGIN {
 
 sub mk_app {
     my ($self, $name) = @_;
-    my $helper = Catalyst::Helper-&gt;new;
+
+    ## set defaults
+    $self-&gt;{'adminuser'} ||= 'admin';
+    $self-&gt;{'adminpass'} ||= 'admin';
+    $self-&gt;{'adminrole'} ||= 'admin';
 
     ## make the Catalyst app
-    $helper-&gt;mk_app($name);
+    $self-&gt;SUPER::mk_app($name);
 
     ## add database
-    $self-&gt;add_database($helper);
+    $self-&gt;add_database;
 
     ## inject plugins
-    $self-&gt;add_plugins($helper);
+    $self-&gt;add_plugins;
 
     # add config
-    $self-&gt;add_config($helper);
+    $self-&gt;add_config;
 
     ## add contollers/models/views
-    $self-&gt;mk_stuff($helper);
+    $self-&gt;mk_stuff;
 
     return;
 };
 
 sub add_database {
-    my ($self, $helper) = @_;
-    my $dir = dir($helper-&gt;{'dir'}, 'data');
+    my $self = shift;
+    my $dir = dir($self-&gt;{'dir'}, 'data');
     my $file = file($dir, 'mango.db');
 
-    $helper-&gt;mk_dir($dir);
-
-    my $schema = Mango::Schema-&gt;connect(&quot;dbi:SQLite:$file&quot;);
-    $schema-&gt;deploy;
+    if (! -e $file) {
+        $self-&gt;mk_dir($dir);
+        my $adminuser = $self-&gt;{'adminuser'};
+        my $adminpass = $self-&gt;{'adminpass'};
+        my $adminrole = $self-&gt;{'adminrole'};
+
+        my $schema = Mango::Schema-&gt;connect(&quot;dbi:SQLite:$file&quot;);
+        $schema-&gt;deploy;
+        print &quot;created \&quot;$file\&quot;\n&quot;;
+
+        $schema-&gt;resultset('Users')-&gt;create({
+            id =&gt; 1,
+            username =&gt; $adminuser,
+            password =&gt; $adminpass,
+            created =&gt; DateTime-&gt;now,
+            updated =&gt; DateTime-&gt;now
+        });
+        print &quot;created admin user/pass ($adminuser:$adminpass)\n&quot;;
+
+        $schema-&gt;resultset('Roles')-&gt;create({
+            id =&gt; 1,
+            name =&gt; $adminrole,
+            description =&gt; 'Administrators',
+            created =&gt; DateTime-&gt;now,
+            updated =&gt; DateTime-&gt;now
+        });
+        print &quot;created admin role ($adminrole)\n&quot;;
+
+        $schema-&gt;resultset('UsersRoles')-&gt;create({
+            user_id =&gt; 1,
+            role_id =&gt; 1
+        });
+    };
 
     return;
 };
 
 sub add_plugins {
-    my ($self, $helper) = @_;
-    my $file = file($helper-&gt;{'mod'} . '.pm');
+    my $self = shift;
+    my $file = file($self-&gt;{'mod'} . '.pm');
     my $contents = $file-&gt;slurp;
 
     if ($contents !~ /\+Mango::Catalyst::Plugin/i) {
-        $contents =~ s/-Debug ConfigLoader/-Debug ConfigLoader Session Session::Store::File Session::State::Cookie +Mango::Catalyst::Plugin::I18N +Mango::Catalyst::Plugin::Authentication +Mango::Catalyst::Plugin::Forms/;
+        $contents =~ s/-Debug ConfigLoader/-Debug ConfigLoader Session Session::Store::File Session::State::Cookie +Mango::Catalyst::Plugin::I18N +Mango::Catalyst::Plugin::Authentication +Mango::Catalyst::Plugin::Forms Authorization::Roles/;
 
         my $io = $file-&gt;open('&gt;');
         $io-&gt;print($contents);
@@ -63,8 +97,8 @@ sub add_plugins {
 };
 
 sub add_config {
-    my ($self, $helper) = @_;
-    my $file = file($helper-&gt;{'dir'}, $helper-&gt;{'appprefix'} . '.yml');
+    my $self = shift;
+    my $file = file($self-&gt;{'dir'}, $self-&gt;{'appprefix'} . '.yml');
     my $config = YAML::LoadFile($file);
 
     $config-&gt;{'authentication'} = {
@@ -78,12 +112,13 @@ sub add_config {
                 },
                 store =&gt; {
                     class =&gt; '+Mango::Catalyst::Plugin::Authentication::Store'
-                }
+                },
             }
         }
     };
     $config-&gt;{'connection_info'} = ['dbi:SQLite:data/mango.db'];
     $config-&gt;{'default_view'} = 'XHTML';
+    $config-&gt;{'authorization'}-&gt;{'mango'}-&gt;{'admin_role'} = $self-&gt;{'adminrole'};
 
     YAML::DumpFile($file, $config);
 
@@ -91,27 +126,48 @@ sub add_config {
 };
 
 sub mk_stuff {
-    my ($self, $helper) = @_;
-    my $c = $helper-&gt;{'c'};
-    my $m = $helper-&gt;{'m'};
-    my $v = $helper-&gt;{'v'};
-
-    $helper-&gt;render_file('model_carts',     file($m, 'Carts.pm'));
-    $helper-&gt;render_file('model_orders',    file($m, 'Orders.pm'));
-    $helper-&gt;render_file('model_products',  file($m, 'Products.pm'));
-    $helper-&gt;render_file('model_profiles',  file($m, 'Profiles.pm'));
-    $helper-&gt;render_file('model_roles',     file($m, 'Roles.pm'));
-    $helper-&gt;render_file('model_users',     file($m, 'Users.pm'));
-    $helper-&gt;render_file('model_wishlists', file($m, 'Wishlists.pm'));
-
-    $helper-&gt;render_file('view_atom',  file($v, 'Atom.pm'));
-    $helper-&gt;render_file('view_html',  file($v, 'HTML.pm'));
-    $helper-&gt;render_file('view_rss',   file($v, 'RSS.pm'));
-    $helper-&gt;render_file('view_text',  file($v, 'Text.pm'));
-    $helper-&gt;render_file('view_xhtml', file($v, 'XHTML.pm'));
-
-    $helper-&gt;render_file('controller_cart',      file($c, 'Cart.pm'));
-    $helper-&gt;render_file('controller_wishlists', file($c, 'Wishlists.pm'));
+    my $self = shift;
+    my $c = $self-&gt;{'c'};
+    my $m = $self-&gt;{'m'};
+    my $v = $self-&gt;{'v'};
+
+    $self-&gt;render_file('model_carts',     file($m, 'Carts.pm'));
+    $self-&gt;render_file('model_orders',    file($m, 'Orders.pm'));
+    $self-&gt;render_file('model_products',  file($m, 'Products.pm'));
+    $self-&gt;render_file('model_profiles',  file($m, 'Profiles.pm'));
+    $self-&gt;render_file('model_roles',     file($m, 'Roles.pm'));
+    $self-&gt;render_file('model_users',     file($m, 'Users.pm'));
+    $self-&gt;render_file('model_wishlists', file($m, 'Wishlists.pm'));
+
+    $self-&gt;render_file('view_atom',  file($v, 'Atom.pm'));
+    $self-&gt;render_file('view_html',  file($v, 'HTML.pm'));
+    $self-&gt;render_file('view_rss',   file($v, 'RSS.pm'));
+    $self-&gt;render_file('view_text',  file($v, 'Text.pm'));
+    $self-&gt;render_file('view_xhtml', file($v, 'XHTML.pm'));
+
+    $self-&gt;mk_dir(dir($c, 'Admin'));
+    $self-&gt;mk_dir(dir($c, 'Admin', 'Products'));
+
+    $self-&gt;render_file('controller_admin',
+        file($c, 'Admin.pm'));
+    $self-&gt;render_file('controller_admin_roles',
+        file($c, 'Admin', 'Roles.pm'));
+    $self-&gt;render_file('controller_admin_users',
+        file($c, 'Admin', 'Users.pm'));
+    $self-&gt;render_file('controller_admin_products',
+        file($c, 'Admin', 'Products.pm'));
+    $self-&gt;render_file('controller_admin_products_attributes',
+        file($c, 'Admin', 'Products', 'Attributes.pm'));
+    $self-&gt;render_file('controller_cart',
+        file($c, 'Cart.pm'));
+    $self-&gt;render_file('controller_login',
+        file($c, 'Login.pm'));
+    $self-&gt;render_file('controller_logout',
+        file($c, 'Logout.pm'));
+    $self-&gt;render_file('controller_products',
+        file($c, 'Products.pm'));
+    $self-&gt;render_file('controller_wishlists',
+        file($c, 'Wishlists.pm'));
 };
 
 1;
@@ -255,4 +311,84 @@ BEGIN {
     use base qw/Mango::Catalyst::Controller::Wishlists/;
 };
 
+1;
+__controller_login__
+package [% name %]::Controller::Login;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Login/;
+};
+
+1;
+__controller_logout__
+package [% name %]::Controller::Logout;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Logout/;
+};
+
+1;
+__controller_products__
+package [% name %]::Controller::Products;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Products/;
+};
+
+1;
+__controller_admin__
+package [% name %]::Controller::Admin;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Admin/;
+};
+
+1;
+__controller_admin_roles__
+package [% name %]::Controller::Admin::Roles;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Admin::Roles/;
+};
+
+1;
+__controller_admin_users__
+package [% name %]::Controller::Admin::Users;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Admin::Users/;
+};
+
+1;
+__controller_admin_products__
+package [% name %]::Controller::Admin::Products;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Admin::Products/;
+};
+
+1;
+__controller_admin_products_attributes__
+package [% name %]::Controller::Admin::Products::Attributes;
+use strict;
+use warnings;
+
+BEGIN {
+    use base qw/Mango::Catalyst::Controller::Admin::Products::Attributes/;
+};
+
 1;
\ No newline at end of file</diff>
      <filename>lib/Catalyst/Helper/Mango.pm</filename>
    </modified>
    <modified>
      <diff>@@ -9,12 +9,18 @@ BEGIN {
     use Pod::Usage;
 };
 
-my $help    = 0;
-my $version = 0;
+my $help      = 0;
+my $version   = 0;
+my $adminuser;
+my $adminpass;
+my $adminrole;
 
 GetOptions(
-    'help|?'          =&gt; \$help,
-    'version'         =&gt; \$version
+    'help|?'     =&gt; \$help,
+    'version'    =&gt; \$version,
+    'admin-user' =&gt; \$adminuser,
+    'admin-pass' =&gt; \$adminpass,
+    'admin-role' =&gt; \$adminrole
 ) || pod2usage(1);
 
 if ($version) {
@@ -25,9 +31,15 @@ if ($version) {
 
 pod2usage(1) if ($help || !$ARGV[0]);
 
-Catalyst::Helper::Mango-&gt;mk_app($ARGV[0]);
+my $helper = Catalyst::Helper::Mango-&gt;new({
+    adminuser =&gt; $adminuser,
+    adminpass =&gt; $adminpass,
+    adminrole =&gt; $adminrole
+});
 
-print &quot;Created starter directories and files\n&quot;;
+$helper-&gt;mk_app($ARGV[0]);
+
+print &quot;created starter directories and files\n&quot;;
 
 1;
 __END__
@@ -42,8 +54,11 @@ mango [options] application-name
 
 Options:
 
-    --help       Show this message
-    --version    The installed version
+    --help          Show this message
+    --version       The installed version
+    --admin-user    The username for the admin account (Default: admin)
+    --admin-pass    The password for the admin account (Default: admin)
+    --admin-role    The name of the admin role (Default: admin)
 
 Example:
 
@@ -54,31 +69,70 @@ Example:
 The C&lt;mango.pl&gt; script creates a skeleton framework for a new Mango based
 application using the recommend style of subclassing for easy customization.
 
-    Created MyProject
-    Created MyProject\lib\MyProject
-    Created MyProject\lib\MyProject\Cart.pm
-    Created MyProject\lib\MyProject\Cart
-    Created MyProject\lib\MyProject\Cart\Item.pm
-    Created MyProject\lib\MyProject\Storage
-    Created MyProject\lib\MyProject\Storage\Cart.pm
-    Created MyProject\lib\MyProject\Storage\Cart
-    Created MyProject\lib\MyProject\Storage\Cart\Item.pm
-    Created MyProject\lib\MyProject\Order.pm
-    Created MyProject\lib\MyProject\Order
-    Created MyProject\lib\MyProject\Order\Item.pm
-    Created MyProject\lib\MyProject\Storage\Order.pm
-    Created MyProject\lib\MyProject\Storage\Order
-    Created MyProject\lib\MyProject\Storage\Order\Item.pm
-    Created MyProject\lib\MyProject\Checkout.pm
-    Created MyProject\t
-    Created MyProject\t\pod_syntax.t
-    Created MyProject\t\pod_spelling.t
-    Created MyProject\t\basic.t
-    Created MyProject\t\pod_coverage.t
-    Created MyProject\.cvsignore
-    Created MyProject\Makefile.PL
-    Created MyProject\MANIFEST
-    Created MyProject\script\myapp_handel.pl
+    created &quot;MyApp&quot;
+    created &quot;MyApp/script&quot;
+    created &quot;MyApp/lib&quot;
+    created &quot;MyApp/root&quot;
+    created &quot;MyApp/root/static&quot;
+    created &quot;MyApp/root/static/images&quot;
+    created &quot;MyApp/t&quot;
+    created &quot;MyApp/lib/MyApp&quot;
+    created &quot;MyApp/lib/MyApp/Model&quot;
+    created &quot;MyApp/lib/MyApp/View&quot;
+    created &quot;MyApp/lib/MyApp/Controller&quot;
+    created &quot;MyApp/myapp.yml&quot;
+    created &quot;MyApp/lib/MyApp.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Root.pm&quot;
+    created &quot;MyApp/README&quot;
+    created &quot;MyApp/Changes&quot;
+    created &quot;MyApp/t/01app.t&quot;
+    created &quot;MyApp/t/02pod.t&quot;
+    created &quot;MyApp/t/03podcoverage.t&quot;
+    created &quot;MyApp/root/static/images/catalyst_logo.png&quot;
+    created &quot;MyApp/root/static/images/btn_120x50_built.png&quot;
+    created &quot;MyApp/root/static/images/btn_120x50_built_shadow.png&quot;
+    created &quot;MyApp/root/static/images/btn_120x50_powered.png&quot;
+    created &quot;MyApp/root/static/images/btn_120x50_powered_shadow.png&quot;
+    created &quot;MyApp/root/static/images/btn_88x31_built.png&quot;
+    created &quot;MyApp/root/static/images/btn_88x31_built_shadow.png&quot;
+    created &quot;MyApp/root/static/images/btn_88x31_powered.png&quot;
+    created &quot;MyApp/root/static/images/btn_88x31_powered_shadow.png&quot;
+    created &quot;MyApp/root/favicon.ico&quot;
+    created &quot;MyApp/Makefile.PL&quot;
+    created &quot;MyApp/script/myapp_cgi.pl&quot;
+    created &quot;MyApp/script/myapp_fastcgi.pl&quot;
+    created &quot;MyApp/script/myapp_server.pl&quot;
+    created &quot;MyApp/script/myapp_test.pl&quot;
+    created &quot;MyApp/script/myapp_create.pl&quot;
+    created &quot;MyApp/data&quot;
+    created &quot;MyApp/data/mango.db&quot;
+    created admin user/pass (admin:admin)
+    created admin role (admin)
+    created &quot;MyApp/lib/MyApp/Model/Carts.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Orders.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Products.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Profiles.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Roles.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Users.pm&quot;
+    created &quot;MyApp/lib/MyApp/Model/Wishlists.pm&quot;
+    created &quot;MyApp/lib/MyApp/View/Atom.pm&quot;
+    created &quot;MyApp/lib/MyApp/View/HTML.pm&quot;
+    created &quot;MyApp/lib/MyApp/View/RSS.pm&quot;
+    created &quot;MyApp/lib/MyApp/View/Text.pm&quot;
+    created &quot;MyApp/lib/MyApp/View/XHTML.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin/Products&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin/Roles.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin/Users.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin/Products.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Admin/Products/Attributes.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Cart.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Login.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Logout.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Products.pm&quot;
+    created &quot;MyApp/lib/MyApp/Controller/Wishlists.pm&quot;
+    created starter directories and files
 
 See L&lt;Mango::Manual::QuickStart&gt; for more information on creating your first
 Mango based application.</diff>
      <filename>script/mango.pl</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>40954f76ce6e1de2e993375074f3b84dd9231405</id>
    </parent>
  </parents>
  <author>
    <name>claco</name>
    <email>claco@52a70e3a-55ec-0310-b14e-7917f69ecacc</email>
  </author>
  <url>http://github.com/claco/mango/commit/b9053071786aee7846e6413df6eaff6bf066d2cd</url>
  <id>b9053071786aee7846e6413df6eaff6bf066d2cd</id>
  <committed-date>2007-10-08T19:48:54-07:00</committed-date>
  <authored-date>2007-10-08T19:48:54-07:00</authored-date>
  <message> r2083@NP5660:  claco | 2007-10-08 22:54:00 -0400
 Mango helper now creates database, user/password/admin role


git-svn-id: http://svn.icantfocus.com/CPAN/Mango/trunk@1979 52a70e3a-55ec-0310-b14e-7917f69ecacc</message>
  <tree>9cb3ae52c4368bfd5fb3db26cac31d558aa98f69</tree>
  <committer>
    <name>claco</name>
    <email>claco@52a70e3a-55ec-0310-b14e-7917f69ecacc</email>
  </committer>
</commit>
