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

📄 cms.pm

📁 1. 记录每个帖子的访问人情况
💻 PM
📖 第 1 页 / 共 5 页
字号:
# Copyright 2001-2005 Six Apart.# SCRiPTMAFiA 2005 - THE DiRTY HANDS ON YOUR SCRiPTS## $Id: CMS.pm 12328 2005-05-23 21:28:30Z ezra $package MT::App::CMS;use strict;use Symbol;use File::Spec;use MT::Util qw( encode_html format_ts offset_time_list offset_time                 remove_html get_entry mark_odd_rows		 perl_sha1_digest_hex is_valid_email		 perl_sha1_digest encode_url dirify encode_js);use MT::App;use MT::Author qw(:constants);@MT::App::CMS::ISA = qw( MT::App );sub init {    my $app = shift;    $app->SUPER::init(@_) or return;    $app->add_methods(            'menu' => \&show_menu,            'save' => \&save_object,            'view' => \&edit_object,            'list' => \&list_objects,            'list_pings' => \&list_pings,            'list_entries' => \&list_entries,            'list_comments' => \&list_comments,            'list_commenters' => \&list_commenters,	    'save_commenter_perm' => \&save_commenter_perm,	    'approve_comment' => \&approve_comment,            'save_entries' => \&save_entries,            'save_entry' => \&save_entry,            'cfg_archives' => \&cfg_archives,            'cfg_prefs' => \&cfg_prefs,            'cfg_archives_save' => \&cfg_archives_save,	    'cfg_archives_add' => \&cfg_archives_add,            'cfg_archives_do_add' => \&cfg_archives_do_add,            'list_blogs' => \&list_blogs,            'list_cat' => \&list_categories,            'save_cat' => \&save_category,            'edit_placements' => \&edit_placements,            'save_placements' => \&save_placements,            'delete_confirm' => \&delete_confirm,            'delete' => \&delete,            'edit_permissions' => \&edit_permissions,            'save_permissions' => \&save_permissions,            'ping' => \&send_pings,            'rebuild' => \&rebuild_pages,            'start_rebuild' => \&start_rebuild_pages,            'rebuild_confirm' => \&rebuild_confirm,            'send_notify' => \&send_notify,            'start_upload' => \&start_upload,            'upload_file' => \&upload_file,            'start_upload_entry' => \&start_upload_entry,            'show_upload_html' => \&show_upload_html,            'logout' => \&logout,            'start_recover' => \&start_recover,            'recover' => \&recover_password,            'bookmarklets' => \&bookmarklets,            'make_bm_link' => \&make_bm_link,            'view_log' => \&view_log,            'reset_log' => \&reset_log,            'start_import' => \&start_import,            'search_replace' => \&search_replace,            'start_search_replace' => \&start_search_replace,            'export' => \&export,            'import' => \&do_import,            'pinged_urls' => \&pinged_urls,            'tb_cat_pings' => \&tb_cat_pings,            'show_entry_prefs' => \&show_entry_prefs,            'save_entry_prefs' => \&save_entry_prefs,            'reg_file' => \&reg_file,            'reg_bm_js' => \&reg_bm_js,            'category_add' => \&category_add,            'category_do_add' => \&category_do_add,            'cc_return' => \&cc_return,            'reset_blog_templates' => \&reset_blog_templates,            'set_dynamicity' => \&set_dynamicity,            'spam_confirm' => \&spam_confirm,    );    $app->{default_mode} = 'list_blogs';    $app->{template_dir} = 'cms';    $app->{plugin_template_path} = '';    my $mode = $app->{query}->param('__mode');    $app->{requires_login} = $mode && ($mode eq 'start_recover' ||        $mode eq 'recover' || $mode eq 'reg_bm_js') ?        0 : 1;    $app->{is_admin} = 1;    $app;}sub pre_run {    my $app = shift;    my $auth = $app->{author};    $app->set_language($auth->preferred_language)        if $auth && $auth->preferred_language;    $app->{breadcrumbs} = [ { bc_name => $app->translate('Main Menu'),                              bc_uri => $app->mt_uri } ];    ## Localize the label of the default text filter.    $MT::Text_filters{__default__}{label} =        $app->translate('Convert Line Breaks');    $app->SUPER::pre_run();}sub logout {    my $app = shift;    $app->log("User '" . $app->{author}->name . "' logged out");    delete $app->{author};    $app->bake_cookie(-name => 'mt_user', -value => '', -expires => '-1y');    $app->build_page('login.tmpl', { logged_out => 1,				 no_breadcrumbs => 1});}sub start_recover {    my $app = shift;    $app->add_breadcrumb($app->translate('Password Recovery'));    $app->build_page('recover.tmpl');}sub recover_password {    my $app = shift;    my $q = $app->{query};    my $name = $q->param('name');    my $author = MT::Author->load({ name => $name,				    type => AUTHOR});    $app->log("Invalid author name '$name' in password recovery attempt"),        return $app->error($app->translate(            "No such author with name '[_1]'", $name)) unless $author;    return $app->error($app->translate(        "Author has not set birthplace; cannot recover password"))        unless $author->hint;    my $hint = $q->param('hint');    $app->log("Invalid attempt to recover password (used birthplace '$hint')"),    return $app->error($app->translate(        "Birthplace '[_1]' does not match stored birthplace " .        "for this author", $hint)) unless $author->hint eq $hint;    return $app->error($app->translate("Author does not have email address"))        unless $author->email;    my @pool = ('a'..'z', 0..9);    my $pass;    for (1..8) { $pass .= $pool[ rand @pool ] }    $author->set_password($pass);    $author->save;    my %head = ( To => $author->email,		 From => $app->{cfg}->EmailAddressMain || $author->email,                 Subject => "Password Recovery" );    my $body = $app->translate('_USAGE_FORGOT_PASSWORD_1') .               "\n\n    $pass\n\n" .               $app->translate('_USAGE_FORGOT_PASSWORD_2') . "\n";    require Text::Wrap;    $Text::Wrap::columns = 72;    $body = Text::Wrap::wrap('', '', $body);    require MT::Mail;    MT::Mail->send(\%head, $body) or        return $app->error($app->translate(            "Error sending mail ([_1]); please fix the problem, then " .            "try again to recover your password.", MT::Mail->errstr));    $app->add_breadcrumb($app->translate('Password Recovery'));    $app->build_page('recover.tmpl', { recovered => 1,                                       email => $author->email });}sub is_authorized {    my $app = shift;    require MT::Permission;    my $blog_id = $app->{query}->param('blog_id');    return 1 unless $blog_id;    return unless my $author = $app->{author};    my $perms = $app->{perms} = MT::Permission->load({        author_id => $author->id,        blog_id => $blog_id });    $perms ? 1 :        $app->error($app->translate(            "You are not authorized to log in to this blog."));}sub build_page {    my $app = shift;    my($page, $param) = @_;    $param->{mt_version} = $MT::VERSION;    if (my $perms = $app->{perms}) {        $param->{can_post} = $perms->can_post;        $param->{can_upload} = $perms->can_upload;        $param->{can_edit_entries} =            $perms->can_post || $perms->can_edit_all_posts;        $param->{can_search_replace} = $perms->can_edit_all_posts;        $param->{can_edit_templates} = $perms->can_edit_templates;        $param->{can_edit_authors} = $perms->can_edit_authors;        $param->{can_edit_config} = $perms->can_edit_config;        $param->{can_rebuild} = $perms->can_rebuild;        $param->{can_edit_categories} = $perms->can_edit_categories;        $param->{can_edit_notifications} = $perms->can_edit_notifications;        $param->{has_manage_label} =            $perms->can_edit_templates  || $perms->can_edit_authors ||            $perms->can_edit_categories || $perms->can_edit_config;    }    my $blog_id = $app->{query}->param('blog_id');    if (my $auth = $app->{author}) {        $param->{author_id} = $auth->id;        $param->{author_name} = $auth->name;        my @perms = MT::Permission->load({ author_id => $auth->id });        my @data;        for my $perms (@perms) {            next unless $perms->role_mask;            my $blog = MT::Blog->load($perms->blog_id)		|| die "Couldn't load blog; perhaps you have not upgraded your MT database?";	    push @data, { top_blog_id => $blog->id,			  top_blog_name => $blog->name };	    $data[-1]{top_blog_selected} = 1		if $blog_id && $blog->id == $blog_id;        }        @data = sort { $a->{top_blog_name} cmp $b->{top_blog_name} } @data;        $param->{top_blog_loop} = \@data;    }    if ($blog_id && $page ne 'login.tmpl') {        my $blog = MT::Blog->load($blog_id);	if ($blog) {	    $param->{blog_name} = encode_html($blog->name);	    $param->{blog_id} = $blog->id;	    $param->{blog_url} = $blog->site_url;	} else {	    $app->error($app->translate("No such blog [_1]", $blog_id));	}    }    if ($app->{query}->param('is_bm')) {        $param->{is_bookmarklet} = 1;    }    if ($page eq 'login.tmpl') {        ## If it's a login screen, direct the user to where they were going        ## (query params including __mode and all) unless they were logging in,        ## logging out, or deleting something.        my $q = $app->{query};        if($q->param('__mode') && $q->param('__mode') ne 'logout' &&           $q->param('__mode') ne 'delete')        {            my @query = map { {name => $_, value => $q->param($_)}; }                grep { $_ ne 'username' && $_ ne 'password' } $q->param;            $param->{query_params} = \@query;        }    }     $param->{agent_mozilla} = ($ENV{HTTP_USER_AGENT} || '') =~ /gecko/i;    $param->{have_tangent} = eval { require MT::Tangent; 1 } ? 1 : 0;    $app->SUPER::build_page($page, $param);}sub get_newsbox_content {    my $app = shift;    my $newsbox_url = $app->{cfg}->NewsboxURL;    if ($newsbox_url && $newsbox_url ne 'disable') {        my $NEWSCACHE_TIMEOUT = 60 * 60 * 24;        require MT::Session;        my ($news_object) = ("");        my $retries = 0;        $news_object = MT::Session->load({ id => 'NW' });        if ($news_object &&            ($news_object->start() < (time - $NEWSCACHE_TIMEOUT))) {            $news_object->remove;            $news_object = undef;        }        return $news_object->data()            if ($news_object);        eval { require LWP::UserAgent;               require HTTP::Request;           } or return;                my $ua = new LWP::UserAgent(agent => 'Movable Type');        my $req = new HTTP::Request(GET => $newsbox_url);        my $resp = $ua->request($req);        return unless $resp->is_success();        my $result = $resp->content();                if ($result) {            $news_object = MT::Session->new();            $news_object->set_values({id => 'NW',                                      kind => 'NW',                                      start => time(),                                      data => $result});            $news_object->save();        }        return $result;    }}## Application methodssub list_blogs {    my $app = shift;    my $q = $app->{query};    require MT::Blog;    require MT::Permission;    require MT::Entry;    require MT::Comment;

⌨️ 快捷键说明

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