4 |
use warnings; |
use warnings; |
5 |
|
|
6 |
use base qw(Jifty::Object Class::Accessor::Fast); |
use base qw(Jifty::Object Class::Accessor::Fast); |
7 |
__PACKAGE__->mk_accessors( qw(site uid) ); |
__PACKAGE__->mk_accessors( qw(instance uid) ); |
8 |
|
|
9 |
use DBI; |
use DBI; |
10 |
use Data::Dump qw/dump/; |
use Data::Dump qw/dump/; |
11 |
use Carp qw/confess/; |
use Carp qw/confess/; |
12 |
|
use Jifty; |
13 |
|
|
14 |
our $debug = 0; |
our $debug = 0; |
15 |
|
|
21 |
|
|
22 |
=head2 new |
=head2 new |
23 |
|
|
24 |
my $strix = Strix->new({ site => 'os-test0604-zg' }); |
my $strix = Strix->new({ instance => 'os-test0604-zg' }); |
25 |
|
|
26 |
=head2 dbh |
=head2 dbh |
27 |
|
|
28 |
my $dbh = Strix->dbh( $site_name ); |
my $dbh = Strix->dbh( $strix_instance ); |
29 |
|
|
30 |
my $dbh = $strix->dbh; |
my $dbh = $strix->dbh; |
31 |
|
|
32 |
=cut |
=cut |
33 |
|
|
34 |
|
our $instance_dbh; |
35 |
|
|
36 |
sub dbh { |
sub dbh { |
37 |
my $self = shift; |
my $self = shift; |
38 |
|
|
39 |
my $site = shift || $self->site || confess "no site"; |
my $instance = shift || ref($self) && $self->instance || confess "no instance"; |
40 |
|
|
41 |
|
return $instance_dbh->{$instance} if $instance_dbh->{$instance}; |
42 |
|
|
43 |
my $config = Jifty->config->app('strix') or die "need strix config"; |
my $config = Jifty->config->app('strix') or die "need strix config"; |
44 |
my $database = $config->{database} or die "no strix.database in config"; |
my $database = $config->{database} or die "no strix.database in config"; |
46 |
Jifty->log->debug("using config ", dump( $database )); |
Jifty->log->debug("using config ", dump( $database )); |
47 |
|
|
48 |
my $dsn = |
my $dsn = |
49 |
'DBI:Pg:dbname=' . $site . |
'DBI:Pg:dbname=' . $instance . |
50 |
';host=' . $database->{host} . |
';host=' . $database->{host} . |
51 |
';port=' . $database->{port}; |
';port=' . $database->{port}; |
52 |
|
|
53 |
Jifty->log->info("Connect to site $site with dsn $dsn"); |
Jifty->log->info("Connect to instance $instance with dsn $dsn"); |
54 |
|
|
55 |
my $dbh = DBI->connect( $dsn, $database->{user}, $database->{passwd} ) or die $DBI::errstr; |
my $dbh = DBI->connect( $dsn, $database->{user}, $database->{passwd} ) or die $DBI::errstr; |
56 |
|
|
57 |
|
$instance_dbh->{$instance} = $dbh; |
58 |
|
|
59 |
|
warn "## instance_dbh = ",dump( $instance_dbh ) if $debug; |
60 |
|
|
61 |
return $dbh; |
return $dbh; |
62 |
} |
} |
63 |
|
|
117 |
}); |
}); |
118 |
$sth->execute( $category->{template_id} ); |
$sth->execute( $category->{template_id} ); |
119 |
|
|
120 |
|
sub module_args { |
121 |
|
my $row = shift; |
122 |
|
return undef unless $row->{module_args}; |
123 |
|
my $args; |
124 |
|
foreach my $a ( split(/\&/, $row->{module_args} ) ) { |
125 |
|
$args->{$1} = $2 if $a =~ m/^(.+)=(.+)$/; |
126 |
|
} |
127 |
|
return $args; |
128 |
|
} |
129 |
|
|
130 |
while (my $row = $sth->fetchrow_hashref() ) { |
while (my $row = $sth->fetchrow_hashref() ) { |
131 |
warn dump( $row ) if $debug; |
warn dump( $row ) if $debug; |
132 |
push @{ $page->{free} }, { $row->{name} => $row->{module_args} }; |
push @{ $page->{free} }, { $row->{name} => module_args( $row ) }; |
133 |
} |
} |
134 |
|
|
135 |
warn "### pre layout...\n" if $debug; |
warn "### pre layout...\n" if $debug; |
149 |
|
|
150 |
while (my $row = $sth->fetchrow_hashref() ) { |
while (my $row = $sth->fetchrow_hashref() ) { |
151 |
warn dump( $row ) if $debug; |
warn dump( $row ) if $debug; |
152 |
push @{ $page->{pre}->{ $row->{pos} } }, { $row->{name} => $row->{module_args} }; |
push @{ $page->{pre}->{ $row->{pos} } }, { $row->{name} => module_args( $row ) }; |
153 |
} |
} |
154 |
|
|
155 |
warn "### post layout...\n" if $debug; |
warn "### post layout...\n" if $debug; |
164 |
|
|
165 |
while (my $row = $sth->fetchrow_hashref() ) { |
while (my $row = $sth->fetchrow_hashref() ) { |
166 |
warn dump( $row ) if $debug; |
warn dump( $row ) if $debug; |
167 |
push @{ $page->{post}->{ $row->{pozicija} } }, { $row->{name} => $row->{module_args} }; |
push @{ $page->{post}->{ $row->{pozicija} } }, { $row->{name} => module_args( $row ) }; |
168 |
} |
} |
169 |
|
|
170 |
return $page; |
return $page; |
239 |
@pos = splice( @pos, 0, $depth ); |
@pos = splice( @pos, 0, $depth ); |
240 |
$pos[ $depth - 1 ]++; |
$pos[ $depth - 1 ]++; |
241 |
|
|
242 |
warn "## category depth = $depth pos = ",dump( @pos ); |
warn "## category depth = $depth pos = ",dump( @pos ) if $debug; |
243 |
|
|
244 |
my $code = '$navigation'; |
my $code = '$navigation'; |
245 |
map { $code .= '->[' . ( $_ - 1 ) . ']->{children}' } @pos; |
map { $code .= '->[' . ( $_ - 1 ) . ']->{children}' } @pos; |
246 |
$code =~ s/->{children}$//; |
$code =~ s/->{children}$//; |
247 |
warn "## category code: $code\n"; |
warn "## category code: $code\n" if $debug; |
248 |
eval $code . '= $node'; |
eval $code . '= $node'; |
249 |
if ( $@ ) { |
if ( $@ ) { |
250 |
warn "SKIPPED CATEGORY: $@ ",dump( $kat ); |
warn "SKIPPED CATEGORY: $@ ",dump( $kat ); |
278 |
|
|
279 |
my $ms_depth = $ms->{depth} + $depth; |
my $ms_depth = $ms->{depth} + $depth; |
280 |
my $p = $pos[ $ms_depth - 1 ]++; |
my $p = $pos[ $ms_depth - 1 ]++; |
281 |
warn "## multistatic depth = $ms_depth pos = ",dump( @pos ); |
warn "## multistatic depth = $ms_depth pos = ",dump( @pos ) if $debug; |
282 |
|
|
283 |
my $ms_code = $code . '->{children}->[ ' . $p . '] = $node'; |
my $ms_code = $code . '->{children}->[ ' . $p . '] = $node'; |
284 |
warn "## multistatic code: $ms_code\n"; |
warn "## multistatic code: $ms_code\n" if $debug; |
285 |
eval $ms_code; |
eval $ms_code; |
286 |
if ( $@ ) { |
if ( $@ ) { |
287 |
warn "SKIPPED MULTISTATIC: $@ ",dump( $ms ); |
warn "SKIPPED MULTISTATIC: $@ ",dump( $ms ); |