164 lines
5 KiB
Perl
164 lines
5 KiB
Perl
|
|
#!/usr/bin/perl
|
||
|
|
#
|
||
|
|
# DW::Controller::Importer
|
||
|
|
#
|
||
|
|
# This controller is to view details about the import queue
|
||
|
|
#
|
||
|
|
# Authors:
|
||
|
|
# Afuna <coder.dw@afunamatata.com>
|
||
|
|
#
|
||
|
|
# Copyright (c) 2011 by Dreamwidth Studios, LLC.
|
||
|
|
#
|
||
|
|
# This program is free software; you may redistribute it and/or modify it under
|
||
|
|
# the same terms as Perl itself. For a copy of the license, please reference
|
||
|
|
# 'perldoc perlartistic' or 'perldoc perlgpl'.
|
||
|
|
#
|
||
|
|
|
||
|
|
package DW::Controller::Importer;
|
||
|
|
|
||
|
|
use strict;
|
||
|
|
|
||
|
|
use DW::Controller;
|
||
|
|
use DW::Routing;
|
||
|
|
use DW::Template;
|
||
|
|
use DW::Controller::Admin;
|
||
|
|
|
||
|
|
use DW::Logic::Importer;
|
||
|
|
|
||
|
|
# viewing the queue and details for a specific import
|
||
|
|
DW::Routing->register_string( "/admin/importer/queue/index", \&queue_controller );
|
||
|
|
DW::Routing->register_string( "/admin/importer/details/index", \&detail_controller );
|
||
|
|
|
||
|
|
DW::Controller::Admin->register_admin_page(
|
||
|
|
'/',
|
||
|
|
path => 'importer/queue',
|
||
|
|
ml_scope => '/admin/importer.tt',
|
||
|
|
privs => ['siteadmin:theschwartz']
|
||
|
|
);
|
||
|
|
|
||
|
|
# view overall import history
|
||
|
|
DW::Routing->register_string( "/admin/importer/history/index", \&history_controller );
|
||
|
|
|
||
|
|
DW::Controller::Admin->register_admin_page(
|
||
|
|
'/',,
|
||
|
|
path => 'importer/history',
|
||
|
|
ml_scope => '/admin/importer/history.tt',
|
||
|
|
privs => ['siteadmin:importhistory']
|
||
|
|
);
|
||
|
|
|
||
|
|
sub queue_controller {
|
||
|
|
my ( $ok, $rv ) = controller( privcheck => ["siteadmin:theschwartz"] );
|
||
|
|
return $rv unless $ok;
|
||
|
|
|
||
|
|
my $vars = {};
|
||
|
|
my $sclient = LJ::theschwartz();
|
||
|
|
my @joblist = $sclient->list_jobs(
|
||
|
|
{
|
||
|
|
funcname => [
|
||
|
|
qw( DW::Worker::ContentImporter::LiveJournal::Bio
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Tags
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Entries
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Comments
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Userpics
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Friends
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::FriendGroups
|
||
|
|
DW::Worker::ContentImporter::LiveJournal::Verify
|
||
|
|
)
|
||
|
|
]
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
my @latest;
|
||
|
|
my @jobs;
|
||
|
|
foreach my $job (@joblist) {
|
||
|
|
my $funcname = $job->funcname;
|
||
|
|
my $arg = $job->arg;
|
||
|
|
my $u = LJ::load_userid( $arg->{userid} );
|
||
|
|
my $latest_id = DW::Logic::Importer->get_import_data_for_user($u)->[0]->[0];
|
||
|
|
|
||
|
|
push @latest, [ $u, $latest_id ];
|
||
|
|
|
||
|
|
push @jobs,
|
||
|
|
{
|
||
|
|
type => $funcname,
|
||
|
|
user => $u->ljuser_display,
|
||
|
|
username => $u->username,
|
||
|
|
importid => { job => $arg->{import_data_id}, latest => $latest_id },
|
||
|
|
};
|
||
|
|
}
|
||
|
|
$vars->{jobs} = \@jobs;
|
||
|
|
|
||
|
|
return DW::Template->render_template( 'admin/importer.tt', $vars );
|
||
|
|
}
|
||
|
|
|
||
|
|
sub detail_controller {
|
||
|
|
my ( $ok, $rv ) = controller( privcheck => ["siteadmin:theschwartz"] );
|
||
|
|
return $rv unless $ok;
|
||
|
|
|
||
|
|
my $get = DW::Request->get->get_args;
|
||
|
|
my $user = $get->{user};
|
||
|
|
|
||
|
|
my $u = LJ::load_user($user);
|
||
|
|
return error_ml("error.invaliduser") unless $u;
|
||
|
|
|
||
|
|
my $items = DW::Logic::Importer->get_queued_imports($u);
|
||
|
|
my $data = DW::Logic::Importer->get_import_data( $u, keys %$items );
|
||
|
|
|
||
|
|
# 1. iterate over every import to get the user/host info
|
||
|
|
# 2. iterate over every job in that import to add the user/host info
|
||
|
|
foreach my $row (@$data) {
|
||
|
|
my ( $importid, $host, $user, $usejournal ) = @$row;
|
||
|
|
my $source = sprintf( "%s@%s", $usejournal || $user, $host );
|
||
|
|
|
||
|
|
foreach my $key ( keys %{ $items->{$importid} } ) {
|
||
|
|
$items->{$importid}->{$key}->{source} = $source;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
my $vars = { username => $u->ljuser_display, import_items => $items };
|
||
|
|
|
||
|
|
if ( scalar keys %{ $items || {} } > 1 ) {
|
||
|
|
$vars->{errmsg} = ".error.toomanypending";
|
||
|
|
}
|
||
|
|
|
||
|
|
return DW::Template->render_template( 'admin/importer/detail.tt', $vars );
|
||
|
|
}
|
||
|
|
|
||
|
|
sub history_controller {
|
||
|
|
my ( $ok, $rv ) = controller( privcheck => ["siteadmin:importhistory"] );
|
||
|
|
return $rv unless $ok;
|
||
|
|
|
||
|
|
my $r = DW::Request->get;
|
||
|
|
my $get = $r->get_args;
|
||
|
|
my $user = $get->{user};
|
||
|
|
|
||
|
|
my $vars = {};
|
||
|
|
|
||
|
|
if ( defined $user ) {
|
||
|
|
my $u = LJ::load_user($user);
|
||
|
|
return error_ml("error.invaliduser") unless $u;
|
||
|
|
|
||
|
|
my $items = DW::Logic::Importer->get_all_import_items($u);
|
||
|
|
my $data = DW::Logic::Importer->get_import_data( $u, keys %$items );
|
||
|
|
|
||
|
|
# 1. iterate over every import to get the user/host info
|
||
|
|
# 2. iterate over every job in that import to add the user/host info
|
||
|
|
foreach my $row (@$data) {
|
||
|
|
my ( $importid, $host, $user, $usejournal ) = @$row;
|
||
|
|
my $source = sprintf( "%s@%s", $usejournal || $user, $host );
|
||
|
|
|
||
|
|
foreach my $key ( keys %{ $items->{$importid} } ) {
|
||
|
|
$items->{$importid}->{$key}->{source} = $source;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$vars->{username} = $u->ljuser_display;
|
||
|
|
$vars->{import_items} = $items;
|
||
|
|
$vars->{formdata} = $r->get_args;
|
||
|
|
}
|
||
|
|
|
||
|
|
return DW::Template->render_template( 'admin/importer/history.tt', $vars );
|
||
|
|
}
|
||
|
|
|
||
|
|
1;
|