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 )