1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
# Movable Type (r) Open Source (C) 2001-2012 Six Apart, Ltd.
# This program is distributed under the terms of the
# GNU General Public License, version 2.
#
# $Id$
package MT::CMS::Page;
use strict;
use MT::CMS::Entry;
sub edit {
require MT::CMS::Entry;
MT::CMS::Entry::edit(@_);
}
sub save_pages {
my $app = shift;
return $app->forward('save_entries');
}
sub can_view {
my ( $eh, $app, $id, $objp ) = @_;
my $perms = $app->permissions;
if ( !$id
&& !$perms->can_do('create_new_page') )
{
return 0;
}
if ($id) {
my $obj = $objp->force();
return 0 if $obj->is_entry;
if ( !$app->user->permissions( $obj->blog_id )
->can_do('open_page_edit_screen') )
{
return 0;
}
}
1;
}
sub can_save {
my ( $eh, $app, $id ) = @_;
unless ( ref $id ) {
$id = MT->model('page')->load($id)
or return;
}
return unless $id->isa('MT::Page');
my $author = $app->user;
return $author->permissions( $id->blog_id )->can_do('save_page');
}
sub can_delete {
my ( $eh, $app, $obj ) = @_;
my $author = $app->user;
return 1 if $author->is_superuser();
unless ( ref $obj ) {
$obj = MT->model('page')->load($obj)
or return;
}
return unless $obj->isa('MT::Page');
my $perms = $app->permissions;
if ( !$perms || $perms->blog_id != $obj->blog_id ) {
$perms = $author->permissions( $obj->blog_id );
}
return $perms && $perms->can_do('delete_page');
}
sub pre_save {
require MT::CMS::Entry;
MT::CMS::Entry::pre_save(@_);
}
sub post_save {
require MT::CMS::Entry;
MT::CMS::Entry::post_save(@_);
}
sub post_delete {
require MT::CMS::Entry;
MT::CMS::Entry::post_delete(@_);
}
sub CMSPostSave_page {
require MT::CMS::Entry;
MT::CMS::Entry::post_save(@_);
}
sub cms_pre_load_filtered_list {
my ( $cb, $app, $filter, $load_options, $cols ) = @_;
my $user = $app->user;
return if $user->is_superuser;
my $load_blog_ids = $load_options->{blog_ids} || undef;
require MT::Permission;
my $iter = MT::Permission->load_iter(
{ author_id => $user->id,
( $load_blog_ids
? ( blog_id => $load_blog_ids )
: ( blog_id => { 'not' => 0 } )
),
}
);
my $blog_ids;
while ( my $perm = $iter->() ) {
if ( $perm->can_do('manage_pages') ) {
push @$blog_ids, $perm->blog_id;
}
}
my $terms = $load_options->{terms} || {};
$terms->{blog_id} = $blog_ids
if $blog_ids;
$load_options->{terms} = $terms;
}
1;
|