📄 cms.pm
字号:
my $author = $app->{author}; my @perms = MT::Permission->load({ author_id => $author->id }); my %perms = map { $_->blog_id => $_ } @perms; my @blogs = MT::Blog->load; my $data = []; my %param; my $i = 1; for my $blog (@blogs) { my $blog_id = $blog->id; my $perms = $perms{ $blog_id }; next unless $perms && $perms->role_mask; $param{can_edit_authors} = 1 if $perms->can_edit_authors; my $row = { id => $blog->id, name => encode_html($blog->name), description => $blog->description, site_url => $blog->site_url }; $row->{is_odd} = $i++ % 2 ? 1 : 0; $row->{num_entries} = MT::Entry->count({ blog_id => $blog_id }); $row->{num_comments} = MT::Comment->count({ blog_id => $blog_id }); $row->{num_authors} = 0; my $iter = MT::Permission->load_iter({ blog_id => $blog_id }); while (my $p = $iter->()) { $row->{num_authors}++ if ($p->can_post); } $row->{can_edit_entries} = $perms->can_post||$perms->can_edit_all_posts; $row->{can_edit_templates} = $perms->can_edit_templates; $row->{can_edit_config} = $perms->can_edit_config; push @$data, $row; } $param{blog_loop} = $data; $param{can_create_blog} = $author->can_create_blog; $param{can_view_log} = $author->can_view_log; $param{saved_deleted} = $q->param('saved_deleted'); if ($author->can_create_blog()) { $param{blog_count} = MT::Blog->count(); $param{blog_count_plural} = $param{blog_count} != 1; $param{author_count} = MT::Author->count({type => AUTHOR}); $param{author_count_plural} = $param{author_count} != 1; $param{can_view_blog_count} = 1; } $data = []; for my $plugin (@MT::Plugins) { my $plugin_name = remove_html($plugin->name()); $plugin->{description} = remove_html($plugin->{description}); (my $cgi_path = $app->{cfg}->CGIPath) =~ s|/$||; my $plugin_page = ($cgi_path . '/' . $plugin->envelope . '/' . $plugin->config_link()) if $plugin->{config_link}; my $row = { plugin_name => $plugin_name, plugin_page => $plugin_page, plugin_desc => $plugin->description(), plugin_doc_link => $plugin->doc_link() }; push @$data, $row; } $param{plugin_loop} = $data; $param{news_html} = $app->get_newsbox_content(); $param{no_breadcrumbs} = 1; $app->build_page('list_blog.tmpl', \%param);}sub bookmarklets { my $app = shift; $app->add_breadcrumb($app->translate('QuickPost')); $app->build_page('bookmarklets.tmpl');}sub make_bm_link { my $app = shift; my %param = ( have_link => 1 ); my @show = $app->{query}->param('show'); my $height = 440; my %show = map { $_ => 1 } @show; $height += 50 if $show{t}; # trackback $height += 40 if $show{ac}; # allow comments $height += 20 if $show{ap}; # allow pings $height += 40 if $show{cb}; # convert breaks $height += 50 if $show{c}; # category $height += 80 if $show{e}; # excerpt $height += 80 if $show{k}; # keywords $height += 80 if $show{m}; # more text $param{bm_show} = join ',', @show; $param{bm_height} = $height; $param{bm_js} = _bm_js($app->base . $app->uri, $param{bm_show}, $height); $app->add_breadcrumb($app->translate('QuickPost')); $app->build_page('bookmarklets.tmpl', \%param);}sub _bm_js { my($uri, $show, $height) = @_; qq!javascript:d=document;w=window;t='';if(d.selection)t=d.selection.createRange().text;else{if(d.getSelection)t=d.getSelection();else{if(w.getSelection)t=w.getSelection()}}void(w.open('$uri?is_bm=1&bm_show=$show&__mode=view&_type=entry&link_title='+escape(d.title)+'&link_href='+escape(d.location.href)+'&text='+escape(t),'_blank','scrollbars=yes,width=400,height=$height,status=yes,resizable=yes,scrollbars=yes'))!;}sub view_log { my $app = shift; my $author = $app->{author}; return $app->error($app->translate("Permission denied.")) unless $author->can_view_log; my @log; require MT::Log; my $iter = MT::Log->load_iter(undef, { 'sort' => 'created_on' }); my $i = 1; while (my $log = $iter->()) { my $row = { log_message => $log->message, log_ip => $log->ip }; $row->{created_on_formatted} = format_ts("%Y.%m.%d %H:%M:%S", $log->created_on); $row->{is_odd} = $i++ % 2 ? 1 : 0; push @log, $row; } $log[-1]{is_last} = 1 if @log; my %param = ( log_entry_loop => \@log ); $param{'reset'} = $app->{query}->param('reset'); $app->add_breadcrumb($app->translate('Activity Log')); $app->build_page('view_log.tmpl', \%param);}sub reset_log { my $app = shift; my $author = $app->{author}; return $app->error($app->translate("Permission denied.")) unless $author->can_view_log; $app->validate_magic() or return; require MT::Log; MT::Log->remove_all; $app->redirect($app->uri . '?__mode=view_log&reset=1');}sub start_import { my $app = shift; my $blog_id = $app->{query}->param('blog_id'); my %param; require MT::Category; my $iter = MT::Category->load_iter({ blog_id => $blog_id }); my @data; while (my $cat = $iter->()) { push @data, { category_id => $cat->id, category_label => $cat->label }; } @data = sort { $a->{category_label} cmp $b->{category_label} } @data; $param{category_loop} = \@data; my $blog = MT::Blog->load($blog_id); $app->add_breadcrumb($blog->name, $app->uri . '?__mode=menu&blog_id=' . $blog->id); $app->add_breadcrumb($app->translate('Import/Export')); $param{nav_import} = 1; $app->build_page('import.tmpl', \%param);}sub show_menu { my $app = shift; my $perms = $app->{perms} or return $app->error($app->translate("No permissions")); require MT::Comment; require MT::TBPing; require MT::Trackback; require MT::Permission; require MT::Entry; my $blog_id = $app->{query}->param('blog_id'); my $iter = MT::Entry->load_iter({ blog_id => $blog_id }, { 'sort' => 'created_on', direction => 'descend', limit => 5 }); my @e_data; my $i = 1; my $author_id = $app->{author}->id; while (my $entry = $iter->()) { my $row = { entry_id => $entry->id, entry_blog_id => $entry->blog_id, }; unless ($row->{entry_title} = $entry->title) { my $title = remove_html($entry->text); $row->{entry_title} = substr($title||"", 0, 22) . '...'; } else { $row->{entry_title} = substr($row->{entry_title}, 0, 22) . '...' if $row->{entry_title} && $row->{entry_title} =~ m(\S{22,}); } $row->{entry_title} = encode_html($row->{entry_title}, 1); $row->{entry_created_on} = format_ts("%Y.%m.%d", $entry->created_on); $row->{is_odd} = $i++ % 2; $row->{has_edit_access} = $perms->can_edit_all_posts || $entry->author_id == $author_id; push @e_data, $row; } $iter = MT::Comment->load_iter({ blog_id => $blog_id }, { 'sort' => 'created_on', direction => 'descend', limit => 5 }); my @c_data; $i = 1; while (my $comment = $iter->()) { my $row = { comment_id => $comment->id, comment_author => $comment->author, comment_blog_id => $comment->blog_id, }; $row->{comment_author} = substr($row->{comment_author}, 0, 22) . '...' if $row->{comment_author} && $row->{comment_author} =~ m(\S{22,}); $row->{comment_created_on} = format_ts("%Y.%m.%d", $comment->created_on); my $entry = MT::Entry->load($comment->entry_id); $row->{has_edit_access} = $perms->can_edit_all_posts || $entry->author_id == $author_id; $row->{is_odd} = $i++ % 2; push @c_data, $row; } $iter = MT::TBPing->load_iter({ blog_id => $blog_id }, { 'sort' => 'created_on', direction => 'descend', limit => 5 }); my @p_data; $i = 1; while (my $ping = $iter->()) { my $row = { ping_id => $ping->id, ping_title => $ping->title || '[No title]', ping_url => $ping->source_url, ping_blog_id => $ping->blog_id, }; $row->{ping_title} = substr($row->{ping_title}, 0, 22) . '...' if $row->{ping_title} =~ m(\S{22,}); $row->{ping_created_on} = format_ts("%Y.%m.%d", $ping->created_on); #my $tb = MT::Trackback->load($ping->tb_id); #my $entry = MT::Entry->load($tb->entry_id); #$row->{has_edit_access} = $perms->can_edit_all_posts || # $entry->author_id == $author_id; #$row->{ping_entry_id} = $entry->id; $row->{is_odd} = $i++ % 2; push @p_data, $row; } require MT::Blog; my $blog = MT::Blog->load($blog_id); mark_odd_rows(\@e_data); mark_odd_rows(\@c_data); mark_odd_rows(\@p_data); my %param = (entry_loop => \@e_data, comment_loop => \@c_data, ping_loop => \@p_data); use MT::Entry qw(HOLD RELEASE FUTURE); my $future_entry = MT::Entry->load({blog_id => $blog_id, author_id => $author_id, status => FUTURE}); ##if ($future_entry && (!$app->{author}->remote_auth_username ## || !$blog->mt_update_key)) { ## $param{remote_services_warning} = 1; ##} if (defined($MT::PluginActions{'blog'})) { $param{plugin_action_loop} = $MT::PluginActions{'blog'}; } $param{blog_description} = $blog->description; $param{welcome} = $blog->welcome_msg; $param{num_entries} = MT::Entry->count({ blog_id => $blog_id }); $param{num_comments} = MT::Comment->count({ blog_id => $blog_id }); $param{num_authors} = 0; $iter = MT::Permission->load_iter({ blog_id => $blog_id }); while (my $p = $iter->()) { $param{num_authors}++ if $p->can_post; } $app->add_breadcrumb($blog->name, ''); $app->build_page('menu.tmpl', \%param);} my %API = ( author => 'MT::Author', comment => 'MT::Comment', entry => 'MT::Entry', template => 'MT::Template', blog => 'MT::Blog', notification => 'MT::Notification', templatemap => 'MT::TemplateMap', category => 'MT::Category', banlist => 'MT::IPBanList', ping => 'MT::TBPing', ping_cat => 'MT::TBPing', ); sub edit_object { my $app = shift; my %param = $_[0] ? %{ $_[0] } : (); my $q = $app->{query}; my $type = $q->param('_type'); my $blog_id = $q->param('blog_id'); my $id = $q->param('id'); my $perms = $app->{perms}; return $app->error($app->translate("No permissions")) if !$perms && $id && $type ne 'author'; if ($id && ($type eq 'blog' && !$perms->can_edit_config) || ($type eq 'template' && !$perms->can_edit_templates)) { return $app->error($app->translate("Permission denied.")); } if ($type eq 'blog' && !$id && !$app->{author}->can_create_blog) { return $app->error($app->translate("Permission denied.")); } if ($type eq 'entry' && !$id && !$q->param('is_bm')) { return $app->error($app->translate("Permission denied.")) unless $perms->can_post; } if ($type eq 'author' && $app->{author}->id != $id) { return $app->error($app->translate("Permission denied.")); } if ($type eq 'category' && !$perms->can_edit_categories()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -