App-Office-CMS
view release on metacpan or search on metacpan
lib/App/Office/CMS/Database.pm view on Meta::CPAN
package App::Office::CMS::Database;
use strict;
use warnings;
use App::Office::CMS::Database::Asset;
use App::Office::CMS::Database::Content;
use App::Office::CMS::Database::Design;
use App::Office::CMS::Database::Event;
use App::Office::CMS::Database::Menu;
use App::Office::CMS::Database::Page;
use App::Office::CMS::Database::Site;
use App::Office::CMS::Util::Config;
use App::Office::CMS::Util::Logger;
use DBI;
use DBIx::Admin::CreateTable;
use DBIx::Simple;
use File::Slurper 'read_lines';
use Moo;
use Try::Tiny;
use Types::Standard qw/Any HashRef/;
has asset =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Asset',
);
has config =>
(
is => 'rw',
isa => HashRef,
);
has content =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Content',
);
has dbh =>
(
is => 'rw',
isa => Any,
);
has design =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Design',
);
has event =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Event',
);
has event_type_name2id_map =>
(
is => 'rw',
isa => HashRef,
);
has logger =>
(
is => 'rw',
isa => Any,
);
has menu =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Menu',
);
has page =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Page',
);
has session =>
(
is => 'rw',
isa => Any,
);
has simple =>
(
is => 'rw',
isa => Any,
);
has site =>
(
is => 'rw',
isa => Any, # 'App::Office::CMS::Database::Site',
);
our $VERSION = '0.93';
# -----------------------------------------------
sub BUILD
{
my($self) = @_;
my($config) = $self -> config;
my($attr) =
{
AutoCommit => $$config{AutoCommit},
RaiseError => $$config{RaiseError},
};
if ( ($$config{dsn} =~ /SQLite/i) && $$config{sqlite_unicode})
{
$$attr{sqlite_unicode} = 1;
}
$self -> dbh(DBI -> connect($$config{dsn}, $$config{username}, $$config{password}, $attr) );
=pod
use Modern::Perl;
use DBI;
use Exception::Class::DBI;
my $dbh = DBI->connect('DBI:mysql:test', 'user', pass, {
PrintError => 0,
RaiseError => 0,
HandleError => Exception::Class::DBI->handler,
});
eval {
$dbh->do('insert into non_extistent_table values(1)')
};
if (my $e = Exception::Class->caught('Exception::Class::DBI')) {
say $e->err;
say $e->errstr;
} else {
# Check for other exceptions as required
}
=cut
if ($$config{dsn} =~ /SQLite/i)
{
$self -> dbh -> do('PRAGMA foreign_keys = ON');
}
$self -> asset(App::Office::CMS::Database::Asset -> new(db => $self) );
$self -> content(App::Office::CMS::Database::Content -> new(db => $self) );
$self -> design(App::Office::CMS::Database::Design -> new(db => $self) );
$self -> event(App::Office::CMS::Database::Event -> new(db => $self) );
$self -> logger(App::Office::CMS::Util::Logger -> new(db => $self) );
$self -> menu(App::Office::CMS::Database::Menu -> new(db => $self) );
$self -> page(App::Office::CMS::Database::Page -> new(db => $self) );
$self -> simple(DBIx::Simple -> new($self -> dbh) );
$self -> site(App::Office::CMS::Database::Site -> new(db => $self) );
return $self;
} # End of BUILD.
# --------------------------------------------------
sub build_context
{
my($self, $site_id, $design_id) = @_;
$self -> log(debug => "build_context($site_id, $design_id)");
return "$site_id/$design_id";
} # End of build_context.
# --------------------------------------------------
sub build_default_asset
{
my($self, $page) = @_;
$self -> log(debug => 'build_default_asset()');
my($home_asset) = ${$self -> config}{homepage_template};
my($asset_type) = $self -> asset -> get_asset_types;
$asset_type = [grep{$$_{file_name} =~ /$home_asset/} @$asset_type];
if ($#$asset_type != 0)
{
die "Error: asset_types table must have precisely one template called '$home_asset'";
}
# Note: Hide $asset_path from user.
try
{
my($asset_path) = ${$self -> config}{page_template_path} . "/$home_asset";
my($asset) = read_lines($asset_path);
}
catch
{
die "Error: Homepage template file '$home_asset' is missing";
};
return
{
asset_type_id => $$asset_type[0]{id},
design_id => $$page{design_id},
page_id => $$page{id}, # For a default page, this is undef.
site_id => $$page{site_id},
};
} # End of build_default_asset.
# --------------------------------------------------
( run in 1.456 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )