| 2809 | | sub core_search_apis { |
|---|
| 2810 | | my $app = shift; |
|---|
| 2811 | | my $q = $app->param; |
|---|
| 2812 | | my $blog_id = $q->param('blog_id'); |
|---|
| 2813 | | my $author = $app->user; |
|---|
| 2814 | | my @perms; |
|---|
| 2815 | | if ( !$blog_id ) { |
|---|
| 2816 | | if ( !$author->is_superuser() ) { |
|---|
| 2817 | | require MT::Permission; |
|---|
| 2818 | | @perms = MT::Permission->load( { author_id => $author->id } ); |
|---|
| 2819 | | } |
|---|
| 2820 | | } |
|---|
| 2821 | | else { |
|---|
| 2822 | | @perms = ( $app->permissions ) |
|---|
| 2823 | | or return $app->error( $app->translate("No permissions") ); |
|---|
| 2824 | | } |
|---|
| 2825 | | return { |
|---|
| 2826 | | 'entry' => { |
|---|
| 2827 | | 'order' => 100, |
|---|
| 2828 | | 'permission' => 'create_post,publish_post,edit_all_posts', |
|---|
| 2829 | | 'label' => 'Entries', |
|---|
| 2830 | | 'perm_check' => sub { |
|---|
| 2831 | | grep { $_->can_edit_entry( $_[0], $author ) } @perms; |
|---|
| 2832 | | }, |
|---|
| 2833 | | 'search_cols' => { |
|---|
| 2834 | | 'title' => sub { $app->translate('Title') }, |
|---|
| 2835 | | 'text' => sub { $app->translate('Entry Body') }, |
|---|
| 2836 | | 'text_more' => sub { $app->translate('Extended Entry') }, |
|---|
| 2837 | | 'keywords' => sub { $app->translate('Keywords') }, |
|---|
| 2838 | | 'excerpt' => sub { $app->translate('Excerpt') }, |
|---|
| 2839 | | 'basename' => sub { $app->translate('Basename') }, |
|---|
| 2840 | | }, |
|---|
| 2841 | | 'replace_cols' => [qw(title text text_more keywords excerpt)], |
|---|
| 2842 | | 'can_replace' => 1, |
|---|
| 2843 | | 'can_search_by_date' => 1, |
|---|
| 2844 | | 'date_column' => 'authored_on', |
|---|
| 2845 | | }, |
|---|
| 2846 | | 'comment' => { |
|---|
| 2847 | | 'order' => 200, |
|---|
| 2848 | | 'permission' => 'publish_post,create_post,edit_all_posts,manage_feedback', |
|---|
| 2849 | | 'label' => 'Comments', |
|---|
| 2850 | | 'perm_check' => sub { |
|---|
| 2851 | | require MT::Entry; |
|---|
| 2852 | | my $entry = MT::Entry->load( $_[0]->entry_id ); |
|---|
| 2853 | | grep { $_->can_edit_entry( $entry, $author ) } @perms; |
|---|
| 2854 | | }, |
|---|
| 2855 | | 'search_cols' => { |
|---|
| 2856 | | 'url' => sub { $app->translate('URL') }, |
|---|
| 2857 | | 'text' => sub { $app->translate('Comment Text') }, |
|---|
| 2858 | | 'email' => sub { $app->translate('Email Address') }, |
|---|
| 2859 | | 'ip' => sub { $app->translate('IP Address') }, |
|---|
| 2860 | | 'author' => sub { $app->translate('Name') }, |
|---|
| 2861 | | }, |
|---|
| 2862 | | 'replace_cols' => [qw(text)], |
|---|
| 2863 | | 'can_replace' => 1, |
|---|
| 2864 | | 'can_search_by_date' => 1, |
|---|
| 2865 | | }, |
|---|
| 2866 | | 'ping' => { |
|---|
| 2867 | | 'order' => 300, |
|---|
| 2868 | | 'permission' => 'create_post,publish_post,edit_all_posts,manage_feedback', |
|---|
| 2869 | | 'label' => 'TrackBacks', |
|---|
| 2870 | | 'perm_check' => sub { |
|---|
| 2871 | | my $ping = shift; |
|---|
| 2872 | | my $tb = MT::Trackback->load( $ping->tb_id ); |
|---|
| 2873 | | if ( $tb->entry_id ) { |
|---|
| 2874 | | require MT::Entry; |
|---|
| 2875 | | my $entry = MT::Entry->load( $tb->entry_id ); |
|---|
| 2876 | | return |
|---|
| 2877 | | grep { $_->can_edit_entry( $entry, $author ) } @perms; |
|---|
| 2878 | | } |
|---|
| 2879 | | elsif ( $tb->category_id ) { |
|---|
| 2880 | | return grep { $_->can_edit_categories } @perms; |
|---|
| 2881 | | } |
|---|
| 2882 | | }, |
|---|
| 2883 | | 'search_cols' => { |
|---|
| 2884 | | 'title' => sub { $app->translate('Title') }, |
|---|
| 2885 | | 'excerpt' => sub { $app->translate('Excerpt') }, |
|---|
| 2886 | | 'source_url' => sub { $app->translate('Source URL') }, |
|---|
| 2887 | | 'ip' => sub { $app->translate('IP Address') }, |
|---|
| 2888 | | 'blog_name' => sub { $app->translate('Blog Name') }, |
|---|
| 2889 | | }, |
|---|
| 2890 | | 'replace_cols' => [qw(title excerpt)], |
|---|
| 2891 | | 'can_replace' => 1, |
|---|
| 2892 | | 'can_search_by_date' => 1, |
|---|
| 2893 | | }, |
|---|
| 2894 | | 'page' => { |
|---|
| 2895 | | 'order' => 400, |
|---|
| 2896 | | 'permission' => 'manage_pages', |
|---|
| 2897 | | 'label' => 'Pages', |
|---|
| 2898 | | 'perm_check' => sub { |
|---|
| 2899 | | grep { $_->can_manage_pages( $_[0], $author ) } @perms; |
|---|
| 2900 | | }, |
|---|
| 2901 | | 'search_cols' => { |
|---|
| 2902 | | 'title' => sub { $app->translate('Title') }, |
|---|
| 2903 | | 'text' => sub { $app->translate('Page Body') }, |
|---|
| 2904 | | 'text_more' => sub { $app->translate('Extended Page') }, |
|---|
| 2905 | | 'keywords' => sub { $app->translate('Keywords') }, |
|---|
| 2906 | | 'excerpt' => sub { $app->translate('Excerpt') }, |
|---|
| 2907 | | 'basename' => sub { $app->translate('Basename') }, |
|---|
| 2908 | | }, |
|---|
| 2909 | | 'replace_cols' => [qw(title text text_more keywords excerpt)], |
|---|
| 2910 | | 'can_replace' => 1, |
|---|
| 2911 | | 'can_search_by_date' => 1, |
|---|
| 2912 | | 'date_column' => 'authored_on', |
|---|
| 2913 | | 'results_table_template' => '<mt:include name="include/entry_table.tmpl">', |
|---|
| 2914 | | }, |
|---|
| 2915 | | 'template' => { |
|---|
| 2916 | | 'order' => 500, |
|---|
| 2917 | | 'permission' => 'edit_templates', |
|---|
| 2918 | | 'label' => 'Templates', |
|---|
| 2919 | | 'perm_check' => sub { |
|---|
| 2920 | | my ($obj) = @_; |
|---|
| 2921 | | |
|---|
| 2922 | | # are there any perms that match this object and |
|---|
| 2923 | | # allow template editing? |
|---|
| 2924 | | my @check = grep { |
|---|
| 2925 | | $_->blog_id == $obj->blog_id |
|---|
| 2926 | | && $_->can_edit_templates |
|---|
| 2927 | | } @perms; |
|---|
| 2928 | | return @check; |
|---|
| 2929 | | |
|---|
| 2930 | | }, |
|---|
| 2931 | | 'search_cols' => { |
|---|
| 2932 | | 'name' => sub { $app->translate('Template Name') }, |
|---|
| 2933 | | 'text' => sub { $app->translate('Text') }, |
|---|
| 2934 | | 'linked_file' => sub { $app->translate('Linked Filename') }, |
|---|
| 2935 | | 'outfile' => sub { $app->translate('Output Filename') }, |
|---|
| 2936 | | }, |
|---|
| 2937 | | 'replace_cols' => [qw(name text linked_file outfile)], |
|---|
| 2938 | | 'can_replace' => 1, |
|---|
| 2939 | | 'can_search_by_date' => 0, |
|---|
| 2940 | | }, |
|---|
| 2941 | | 'asset' => { |
|---|
| 2942 | | 'order' => 600, |
|---|
| 2943 | | 'permission' => 'manage_assets', |
|---|
| 2944 | | 'label' => 'Assets', |
|---|
| 2945 | | 'perm_check' => sub { |
|---|
| 2946 | | 1; |
|---|
| 2947 | | }, |
|---|
| 2948 | | 'search_cols' => { |
|---|
| 2949 | | 'file_name' => sub { $app->translate('Filename') }, |
|---|
| 2950 | | 'description' => sub { $app->translate('Description') }, |
|---|
| 2951 | | 'label' => sub { $app->translate('Label') }, |
|---|
| 2952 | | }, |
|---|
| 2953 | | 'replace_cols' => [], |
|---|
| 2954 | | 'can_replace' => 0, |
|---|
| 2955 | | 'can_search_by_date' => 1, |
|---|
| 2956 | | 'setup_terms_args' => sub { |
|---|
| 2957 | | my ($terms, $args, $blog_id) = @_; |
|---|
| 2958 | | $terms->{class} = '*'; |
|---|
| 2959 | | $terms->{blog_id} = $blog_id if $blog_id; |
|---|
| 2960 | | } |
|---|
| 2961 | | }, |
|---|
| 2962 | | 'log' => { |
|---|
| 2963 | | 'order' => 700, |
|---|
| 2964 | | 'permission' => "view_blog_log", |
|---|
| 2965 | | 'system_permission' => "view_log", |
|---|
| 2966 | | 'label' => 'Activity Log', |
|---|
| 2967 | | 'perm_check' => sub { |
|---|
| 2968 | | my ($obj) = @_; |
|---|
| 2969 | | return 1 if $author->can_view_log; |
|---|
| 2970 | | my $perm = $author->permissions( $obj->blog_id ); |
|---|
| 2971 | | return $perm->can_view_blog_log; |
|---|
| 2972 | | }, |
|---|
| 2973 | | 'search_cols' => { |
|---|
| 2974 | | 'ip' => sub { $app->translate('Log Message') }, |
|---|
| 2975 | | 'message' => sub { $app->translate('IP Address') }, |
|---|
| 2976 | | }, |
|---|
| 2977 | | 'can_replace' => 0, |
|---|
| 2978 | | 'can_search_by_date' => 1, |
|---|
| 2979 | | 'setup_terms_args' => sub { |
|---|
| 2980 | | my ($terms, $args, $blog_id) = @_; |
|---|
| 2981 | | $terms->{class} = '*'; |
|---|
| 2982 | | $terms->{blog_id} = $blog_id if $blog_id; |
|---|
| 2983 | | } |
|---|
| 2984 | | }, |
|---|
| 2985 | | 'author' => { |
|---|
| 2986 | | 'order' => 800, |
|---|
| 2987 | | 'system_permission' => 'administer', |
|---|
| 2988 | | 'label' => 'Users', |
|---|
| 2989 | | 'perm_check' => sub { |
|---|
| 2990 | | return 1 if $author->is_superuser; |
|---|
| 2991 | | if ($blog_id) { |
|---|
| 2992 | | my $perm = $author->permissions($blog_id); |
|---|
| 2993 | | return $perm->can_administer_blog; |
|---|
| 2994 | | } |
|---|
| 2995 | | return 0; |
|---|
| 2996 | | }, |
|---|
| 2997 | | 'search_cols' => { |
|---|
| 2998 | | 'name' => sub { $app->translate('Username') }, |
|---|
| 2999 | | 'nickname' => sub { $app->translate('Display Name') }, |
|---|
| 3000 | | 'email' => sub { $app->translate('Email Address') }, |
|---|
| 3001 | | 'url' => sub { $app->translate('URL') }, |
|---|
| 3002 | | }, |
|---|
| 3003 | | 'can_replace' => 0, |
|---|
| 3004 | | 'can_search_by_date' => 0, |
|---|
| 3005 | | 'setup_terms_args' => sub { |
|---|
| 3006 | | my ($terms, $args, $blog_id) = @_; |
|---|
| 3007 | | if ($blog_id) { |
|---|
| 3008 | | $args->{'join'} = |
|---|
| 3009 | | MT::Permission->join_on( 'author_id', |
|---|
| 3010 | | { blog_id => $blog_id } ); |
|---|
| 3011 | | } |
|---|
| 3012 | | else { |
|---|
| 3013 | | $terms->{'type'} = MT::Author::AUTHOR(); |
|---|
| 3014 | | } |
|---|
| 3015 | | }, |
|---|
| 3016 | | 'results_table_template' => ' |
|---|
| 3017 | | <mt:if name="blog_id"> |
|---|
| 3018 | | <mt:include name="include/member_table.tmpl"> |
|---|
| 3019 | | <mt:else> |
|---|
| 3020 | | <mt:include name="include/author_table.tmpl"> |
|---|
| 3021 | | </mt:if>', |
|---|
| 3022 | | }, |
|---|
| 3023 | | 'blog' => { |
|---|
| 3024 | | 'order' => 900, |
|---|
| 3025 | | 'system_permission' => 'administer', |
|---|
| 3026 | | 'label' => 'Blogs', |
|---|
| 3027 | | 'perm_check' => sub { |
|---|
| 3028 | | return 1 if $author->is_superuser; |
|---|
| 3029 | | my ($obj) = @_; |
|---|
| 3030 | | my $perm = $author->permissions( $obj->id ); |
|---|
| 3031 | | $perm |
|---|
| 3032 | | && ( $perm->can_administer_blog || $perm->can_edit_config ); |
|---|
| 3033 | | }, |
|---|
| 3034 | | 'search_cols' => { |
|---|
| 3035 | | 'name' => sub { $app->translate('Name') }, |
|---|
| 3036 | | 'site_url' => sub { $app->translate('Site URL') }, |
|---|
| 3037 | | 'site_path' => sub { $app->translate('Site Root') }, |
|---|
| 3038 | | 'description' => sub { $app->translate('Description') }, |
|---|
| 3039 | | }, |
|---|
| 3040 | | 'replace_cols' => [qw(name site_url site_path description)], |
|---|
| 3041 | | 'can_replace' => $author->is_superuser(), |
|---|
| 3042 | | 'can_search_by_date' => 0, |
|---|
| 3043 | | 'view' => 'system', |
|---|
| 3044 | | 'setup_terms_args' => sub { |
|---|
| 3045 | | my ($terms, $args, $blog_id) = @_; |
|---|
| 3046 | | $args->{sort} = 'name'; |
|---|
| 3047 | | $args->{direction} = 'ascend'; |
|---|
| 3048 | | } |
|---|
| 3049 | | } |
|---|
| 3050 | | }; |
|---|
| 3051 | | |
|---|
| 3052 | | } |
|---|
| 3053 | | |
|---|