App-Office-CMS
view release on metacpan or search on metacpan
lib/App/Office/CMS/Database/Design.pm view on Meta::CPAN
my($action) = $$design{exact_match} ? 'update' : 'add';
$self -> save_design_record($action, $design);
if ($action eq 'add')
{
$self -> db -> session -> param(edit_design_id => $$design{id});
# Every design has a default homepage, and an asset and content.
my($homepage) = $self -> db -> page -> add_homepage($site, $design);
}
return $design;
} # End of add.
# -----------------------------------------------
sub build_search_result
{
my($self, $match, $result, $site, $design) = @_;
$self -> log(debug => 'build_search_result()');
my($id_pair) = "$$site{id}-$$design{id}";
push @$result,
{
design_id => $$design{id},
design_name => $$design{name},
id_pair => $id_pair,
match => $match,
page_name => '-',
site_id => $$site{id},
site_name => $$site{name},
};
} # End of build_search_result.
# -----------------------------------------------
sub delete
{
my($self, $site, $design) = @_;
$self -> log(debug => "delete($$site{name}, $$design{name})");
$self -> db -> simple -> delete('designs', {id => $$design{id} });
my($message) = "Deleted design '$$design{name}' for site '$$site{name}'";
if ($self -> db -> get_design_count == 0)
{
# This assumes the design's site_id field is valid,
# or (same thing) the site's id field is valid.
$self -> log(debug => "Using site_id of design: $$site{id}");
# Defaults:
# o Menu orientation: 4 - Vertical
# o Doc root: /
my($os_type_id) = $self -> db -> get_default_os_type_id;
my($default_design) = $self -> db -> build_default_design($$site{id}, 'Default', 4, $os_type_id, File::Spec -> tmpdir, '/');
$message .= '. No designs left, so a default design has been generated';
$self -> add($site, $default_design);
}
return $message;
} # End of delete.
# -----------------------------------------------
sub duplicate
{
my($self, $site, $design) = @_;
$self -> log(debug => "duplicate($$site{name}, $$design{name} => $$site{new_name})");
$self -> log(debug => '-' x 50);
$self -> log(debug => "Site: $_ => $$site{$_}") for sort keys %$site;
$self -> log(debug => '-' x 50);
$self -> log(debug => "Design: $_ => $$design{$_}") for sort keys %$design;
$self -> log(debug => '-' x 50);
my($message);
if ($$site{exact_match} && $$design{exact_match})
{
# Do this first, since we overwrite $$design{name} below.
my($attr) = {};
$$attr{old_design_name} = $$design{name};
$$attr{new_design_name} = $$site{new_name}; # Not $$design{new_name}.
$$attr{old_site_id} = $$site{id};
$$attr{new_site_id} = $$site{id};
$message = "Duplicated design '$$design{name}' to '$$site{new_name}'";
# 1: Write a new design record.
# We can't call add() because it does too much.
# We save the original id so we can find its pages.
# After the save, $$design{id} is the new design's id.
$$attr{old_design_id} = $$design{id};
$$design{name} = $$site{new_name}; # Not $$design{new_name}.
$self -> save_design_record('add', $design);
# Emulate duplicate_designs(), as called by Site.duplicate().
$$attr{design_id2new_id} = {};
$$attr{design_id2new_id}{$$attr{old_design_id} } = $$design{id};
$$attr{new_site_id} = $$site{id};
# 2: Write all the corresponding page and menu records.
# We return the map of old page ids to their new ids, for this design.
$self -> db -> page -> duplicate_pages($attr);
( run in 1.697 second using v1.01-cache-2.11-cpan-39bf76dae61 )