⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addressbook.pm

📁 MovableType 4.23 英文版本的汉化包
💻 PM
字号:
package MT::CMS::AddressBook;use strict;use MT::Util qw( is_valid_email dirify );use MT::I18N qw( wrap_text );sub entry_notify {    my $app   = shift;    my $user  = $app->user;    my $perms = $app->permissions;    return $app->error( $app->translate("No permissions.") )      unless $perms->can_send_notifications;    my $q        = $app->param;    my $entry_id = $q->param('entry_id')      or return $app->error( $app->translate("No entry ID provided") );    require MT::Entry;    require MT::Blog;    my $entry = MT::Entry->load($entry_id)      or return $app->error(        $app->translate( "No such entry '[_1]'", $entry_id ) );    my $blog  = MT::Blog->load( $entry->blog_id );    my $param = {};    $param->{entry_id} = $entry_id;    return $app->load_tmpl( "dialog/entry_notify.tmpl", $param );}sub send_notify {    my $app = shift;    $app->validate_magic() or return;    my $q        = $app->param;    my $entry_id = $q->param('entry_id')      or return $app->error( $app->translate("No entry ID provided") );    require MT::Entry;    require MT::Blog;    my $entry = MT::Entry->load($entry_id)      or return $app->error(         $app->translate( "No such entry '[_1]'", $entry_id ) );    my $blog = MT::Blog->load( $entry->blog_id );    my $user = $app->user;    $app->blog($blog);    my $perms = $user->permissions($blog);    return $app->error( $app->translate("No permissions.") )      unless $perms->can_send_notifications;    my $author = $entry->author;    return $app->error(        $app->translate( "No email address for user '[_1]'", $author->name ) )      unless $author->email;    my $cols = 72;    my %params;    $params{blog} = $blog;    $params{entry} = $entry;    $params{author} = $author;    if ( $q->param('send_excerpt') ) {        $params{send_excerpt} = 1;    }    $params{message} = wrap_text( $q->param('message'), $cols, '', '' );    if ( $q->param('send_body') ) {        $params{send_body} = 1;    }    my $entry_editurl = $app->uri(        'mode' => 'view',        args   => {             '_type' => 'entry',            blog_id => $entry->blog_id,            id      => $entry->id,        }    );     if ( $entry_editurl =~ m|^/| ) {        my ($blog_domain) = $blog->archive_url =~ m|(.+://[^/]+)|;        $entry_editurl = $blog_domain . $entry_editurl;    }    $params{entry_editurl} = $entry_editurl;    my $addrs;    if ( $q->param('send_notify_list') ) {        require MT::Notification;        my $iter = MT::Notification->load_iter( { blog_id => $blog->id } );        while ( my $note = $iter->() ) {            next unless is_valid_email( $note->email );            $addrs->{ $note->email } = 1;        }    }    if ( $q->param('send_notify_emails') ) {        my @addr = split /[\n\r,]+/, $q->param('send_notify_emails');        for my $a (@addr) {            next unless is_valid_email($a);            $addrs->{$a} = 1;        }    }    keys %$addrs      or return $app->error(        $app->translate(            "No valid recipients found for the entry notification.")      );    my $body = $app->build_email( 'notify-entry.tmpl', \%params );    my $subj =      $app->translate( "[_1] Update: [_2]", $blog->name, $entry->title );    if ( !($app->current_language eq 'ja' || $app->current_language eq 'zh-cn' || $app->current_language eq 'zh-tw') ) {    # FIXME perhaps move to MT::I18N        $subj =~ s![\x80-\xFF]!!g;    }    my $address =      defined $author->nickname      ? $author->nickname . ' <' . $author->email . '>'      : $author->email;    my %head = (        id      => 'notify_entry',        To      => $address,        From    => $address,        Subject => $subj,    );    my $charset = $app->config('MailEncoding')      || $app->charset;    $head{'Content-Type'} = qq(text/plain; charset="$charset");    my $i = 1;    require MT::Mail;    MT::Mail->send( \%head, $body )      or return $app->error(        $app->translate(            "Error sending mail ([_1]); try another MailTransfer setting?",            MT::Mail->errstr        )      );    delete $head{To};    foreach my $email ( keys %{$addrs} ) {        next unless $email;        if ( $app->config('EmailNotificationBcc') ) {            push @{ $head{Bcc} }, $email;            if ( $i++ % 20 == 0 ) {                MT::Mail->send( \%head, $body )                  or return $app->error(                    $app->translate("Error sending mail ([_1]); try another MailTransfer setting?",                        MT::Mail->errstr                    )                  );                @{ $head{Bcc} } = ();            }        }        else {            $head{To} = $email;            MT::Mail->send( \%head, $body )              or return $app->error(                $app->translate("Error sending mail ([_1]); try another MailTransfer setting?",                    MT::Mail->errstr                )              );            delete $head{To};        }    }    if ( $head{Bcc} && @{ $head{Bcc} } ) {        MT::Mail->send( \%head, $body )          or return $app->error(            $app->translate(                "Error sending mail ([_1]); try another MailTransfer setting?",                MT::Mail->errstr            )          );    }    $app->redirect(        $app->uri(            'mode' => 'view',            args   => {                '_type'      => $entry->class,                blog_id      => $entry->blog_id,                id           => $entry->id,                saved_notify => 1            }        )    );}sub export {    my $app   = shift;    my $user  = $app->user;    my $perms = $app->permissions;    my $blog  = $app->blog      or return $app->error( $app->translate("Please select a blog.") );    return $app->error( $app->translate("Permission denied.") )      unless $user->is_superuser      || ( $perms && $perms->can_edit_notifications );    $app->validate_magic() or return;    $| = 1;    my $enc = $app->config('ExportEncoding');    $enc = $app->config('LogExportEncoding') if ( !$enc );    $enc = ( $app->charset || '' ) if ( !$enc );    my $not_class = $app->model('notification');    my $iter = $not_class->load_iter( { blog_id => $blog->id },        { 'sort' => 'created_on', 'direction' => 'ascend' } );    my $file = '';    $file = dirify( $blog->name ) . '-' if $blog;    $file = "Blog-" . $blog->id . '-' if $file eq '-';    $file .= "notifications_list.csv";    $app->{no_print_body} = 1;    $app->set_header( "Content-Disposition" => "attachment; filename=$file" );    $app->send_http_header(        $enc        ? "text/csv; charset=$enc"        : 'text/csv'    );    while ( my $note = $iter->() ) {        $app->print( $note->email . "\n" );    }}sub can_save {    my ( $eh, $app, $id ) = @_;    my $perms = $app->permissions;    return $perms->can_edit_notifications;}sub save_filter {    my $eh    = shift;    my ($app) = @_;    my $email = lc $app->param('email');    $email =~ s/(^\s+|\s+$)//gs;    my $blog_id = $app->param('blog_id');    if ( !is_valid_email($email) ) {        return $eh->error(            $app->translate(                "The value you entered was not a valid email address")        );    }    require MT::Notification;    # duplicate check    my $notification_iter =      MT::Notification->load_iter( { blog_id => $blog_id } );    while ( my $obj = $notification_iter->() ) {        if (   ( lc( $obj->email ) eq $email )            && ( $obj->id ne $app->param('id') ) )        {            return $eh->error(                $app->translate("The e-mail address you entered is already on the Notification List for this blog."                )            );        }    }    return 1;}sub post_delete {    my ( $eh, $app, $obj ) = @_;    $app->log(        {            message => $app->translate("Subscriber '[_1]' (ID:[_2]) deleted from address book by '[_3]'",                $obj->email, $obj->id, $app->user->name            ),            level    => MT::Log::INFO(),            class    => 'system',            category => 'delete'        }    );}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -