App-Office-Contacts-Import-vCards

 view release on metacpan or  search on metacpan

lib/App/Office/Contacts/Import/vCards/Controller/Import.pm  view on Meta::CPAN

package App::Office::Contacts::Import::vCards::Controller::Import;

use parent 'App::Office::Contacts::Import::vCards::Controller';
use strict;
use warnings;

use CGI;

use App::Office::Contacts::Import::vCards::Util::vCards;
use App::Office::Contacts::Util::Validator;

use Text::GenderFromName ();

use Text::vFile::toXML;

use Time::Elapsed;

# We don't use Moose because we isa CGI::Application.

our $VERSION = '1.12';

# -----------------------------------------------

sub check_validation
{
	my($self, $name, $result) = @_;

	my($status);

	if ($result -> success)
	{
		# The output from report_add() is too complex to display without further work,
		# so we rig the output to say OK.

		$status = $self -> param('view') -> person -> report_add($self -> param('user_id'), $result);
		$status = 'OK';
	}
	else
	{
		$status = $self -> param('db') -> util -> build_brief_error_report($result, $self -> param('template') );
	}

	return $status;

} # End of check_validation.

# -----------------------------------------------

sub display
{
	my($self) = @_;

	$self -> log(debug => 'Entered display');

	my($field_name) = 'vfile_name';
	my($vfile_name) = $self -> query -> param($field_name);

	if (! $vfile_name)
	{
		return $self -> param('view') -> viewer -> format([{name => 'No file name provided', status => 'Error'}])
	}

	# Build some of the progress report.
	# Note: This report, @progress, is not actually output.

	my($fh)        = $self -> query -> upload($field_name);
	my($mime_type) = ${$self -> query -> uploadInfo($vfile_name)}{'Content-Type'};

	my(@progress);

	push @progress, "file_name => $vfile_name";
	push @progress, 'file_size => ' . (-s $fh);
	push @progress, "mime_type => $mime_type";

	# Parse the VCF into XML and then into text.

	my($start_time) = time;
	my($xml)        = Text::vFile::toXML -> new(filehandle => $fh) -> to_xml;

	# We pass in $self as caller, so that when the callback is finally called,
	# from App::Office::Contacts::Import::vCards::Util::vCards, sub end_element,
	# $self can be the first parameter, which makes sub import_callback a real, live method.
	# That means that from inside the callback we can access the 5 params a few lines down.

	my($importer) = App::Office::Contacts::Import::vCards::Util::vCards -> new(callback => \&import_callback, caller => $self, xml => $xml);

	# Stash some things for validation.

	$self -> param(email_address_types => $self -> param('db') -> util -> get_email_address_types);
	$self -> param(phone_number_types  => $self -> param('db') -> util -> get_phone_number_types);
	$self -> param(titles              => $self -> param('db') -> util -> get_titles);
	$self -> param(template            => $self -> load_tmpl('update.report.tmpl') );
	$self -> param(vcard               => []); # Used by the callback to stockpile output.



( run in 1.881 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )