--- /dev/null
+use strict;
+use warnings;
+use Module::Build;
+use File::Spec;
+use File::Basename;
+use YAML qw/ Load /;
+
+my $class = Module::Build->subclass(
+ class => 'MTToiplanPluginDirectoryBuilder',
+ code => q{
+ # Don't make blib
+ # sub ACTION_code {};
+ # Don't make blib
+ sub ACTION_docs {};
+ # Don't make META.yml
+ sub ACTION_distmeta {
+ # no warning on ACTION_distdir
+ $_[0]->{metafile} = 'MANIFEST';
+ };
+ # Don't add MEATA.yml to MANIFEST
+ sub ACTION_manifest {
+ $_[0]->{metafile} = 'MANIFEST',
+ $_[0]->SUPER::ACTION_manifest(@_);
+ };
+ sub ACTION_test {
+ my $p = $_[0]->{properties};
+ unshift(
+ @INC,
+ File::Spec->catdir($p->{base_dir}, 'extlib'),
+ File::Spec->catdir($p->{base_dir}, '../../lib'),
+ File::Spec->catdir($p->{base_dir}, '../../extlib'),
+ );
+
+ $_[0]->SUPER::ACTION_test(@_);
+ };
+ sub ACTION_upload_google {
+ my ($self) = @_;
+ my $prj = 'toiplan-mtplugin-directory';
+ my $ver = $self->dist_version;
+ my $dist_dir = $self->dist_dir;
+ my $name = $self->dist_name;
+
+ $self->depends_on('dist');
+ #$self->_call_action('distdir');
+ $self->ACTION_distdir;
+ $self->depends_on('zipdist');
+ system(
+ "googlecode_upload.py -s 'Release $ver (TGZ)' -p $prj -l $name $dist_dir.tar.gz"
+ );
+ system(
+ "googlecode_upload.py -s 'Release $ver (ZIP)' -p $prj -l $name $dist_dir.zip"
+ );
+ unlink("$dist_dir.tar.gz");
+ unlink("$dist_dir.zip");
+ };
+
+ sub ACTION_zipdist {
+ my ($self) = @_;
+ my $dist_dir = $self->dist_dir;
+ $self->depends_on('distdir');
+ print "Creating $dist_dir.zip\n";
+ system("zip -r $dist_dir.zip $dist_dir") == 0 or die $?;
+ $self->delete_filetree($dist_dir);
+ }
+
+ sub ACTION_distdir {
+ my ($self) = @_;
+
+ $_[0]->SUPER::ACTION_distdir(@_);
+
+ my $dist_dir = $self->dist_dir;
+ rename($dist_dir, $self->{properties}{dist_name});
+ use File::Path;
+ use File::Spec;
+ use File::Basename;
+ my $plugins = File::Spec->catfile($dist_dir, 'plugins');
+ mkpath($plugins, 1, 0755);
+
+ my $new_dist_dir = File::Spec->catfile(
+ $plugins, $self->{properties}{dist_name}
+ );
+ rename($self->{properties}{dist_name}, $new_dist_dir);
+
+ foreach my $f (glob(File::Spec->catfile($new_dist_dir, 'LIC*'))) {
+ rename($f, File::Spec->catfile($dist_dir, basename($f)));
+ }
+
+ if (my @statics = glob(File::Spec->catfile($new_dist_dir, 'static/*'))) {
+ my $static = File::Spec->catfile(
+ $dist_dir, 'mt-static/plugins'
+ );
+ mkpath($static, 1, 0755);
+
+ my $d = File::Spec->catfile(
+ $static, $self->{properties}{dist_name}
+ );
+ mkpath($d, 1, 0755);
+
+ foreach my $f (@statics) {
+ rename($f, File::Spec->catfile($d, basename($f)));
+ }
+
+ rmdir(File::Spec->catfile($new_dist_dir, 'static'));
+ }
+ }
+ }
+);
+
+my $yaml_string = do {
+ open(my $fh, File::Spec->catfile(dirname(__FILE__), 'config.yaml'));
+ local $/;
+ <$fh>
+};
+$yaml_string =~ s/^(\s*)\*/$1App::\*/gm;
+my $yaml = Load($yaml_string);
+
+my $builder = $class->new(
+ dist_name => $yaml->{name},
+ dist_author => 'Movable Type ACME Plugin Project',
+ dist_version => $yaml->{version},
+ module_name => $yaml->{name} . '::App',
+ license => 'MIT License',
+ add_to_cleanup => [ $yaml->{name} . '-*' ],
+);
+
+$builder->create_build_script();
--- /dev/null
+Manifest - Managing manifest.
+Inspired by Acme::Bleach <http://search.cpan.org/dist/Acme-Bleach/>
+
+Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null
+config.yaml
+l10n/en_us.yaml
+l10n/ja.yaml
+lib/Manifest/App.pm
+lib/Manifest/L10N.pm
+lib/Manifest/L10N/en_us.pm
+lib/Manifest/L10N/ja.pm
+LICENSE
+php/block.mtifmanifesthadmodified.php
+php/block.mtmanifest.php
+php/block.mtmanifests.php
+php/function.mtmanifestparty.php
+php/init.manifest.php
+php/load_object.pl
+tmpl/config.tmpl
--- /dev/null
+^MANIFEST
+\bBuild.PL$
+#^Makefile
+#^META.yml$
+#^blib/
+#~$
+
+
+# Avoid version control files.
+\bRCS\b
+\bCVS\b
+,v$
+\B\.svn\b
+\B\.cvsignore$
+\B\.git
+
+# Avoid Makemaker generated and utility files.
+\bMakefile$
+\bblib
+\bMakeMaker-\d
+\bpm_to_blib$
+\bblibdirs$
+^MANIFEST\.SKIP$
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\bBuild.bat$
+\b_build
+
+# Avoid Devel::Cover generated files
+\bcover_db
+
+# Avoid temp and backup files.
+~$
+\.tmp$
+\.old$
+\.bak$
+\#$
+\.#
+\.rej$
+
+# Avoid OS-specific files/dirs
+# Mac OSX metadata
+\B\.DS_Store
+# Mac OSX SMB mount metadata files
+\B\._
+# Avoid archives of this distribution
+\bArchiveUploader-[\d\.\_]+
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# plugin name
+id: Manifest
+name: Manifest
+version: 0.0.1
+schema_version: 0.2
+
+# about this plugin
+description: <__trans phrase="Managing manifest">
+author_name: <__trans phrase="Movable Type ACME Plugin Project">
+author_link: http://mt-acme.sourceforge.jp/
+plugin_link: http://mt-acme.sourceforge.jp/manifest/
+doc_link: http://mt-acme.sourceforge.jp/manifest/
+
+# localization
+l10n_class: Manifest::L10N
+
+# object types
+object_types:
+ entry:
+ first_revision:
+ type: integer
+ not_null: 1
+ default: 0
+ label: First published revisions
+ party:
+ type: string
+ size: 255
+ not_null: 1
+ label: Political party
+ required: 1
+ revisioned: 1
+
+# settings
+config_template: config.tmpl
+settings:
+ enabled:
+ Default: 0
+
+# tag
+tags:
+ help_url: http://mt-acme.sourceforge.jp/manifest/tags#%t
+ block:
+ Manifests: $Manifest::Manifest::App::_hdlr_manifests
+ Manifest: $Manifest::Manifest::App::_hdlr_manifest
+ IfManifestHadModified?: $Manifest::Manifest::App::_hdlr_if_modified
+
+ ManifestAdditionalCategories: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAssets: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAtomID: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAudio: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthor: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorDisplayName: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorEmail: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorID: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorLink: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorNickname: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorURL: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorUsername: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorUserpic: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorUserpicAsset: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestAuthorUserpicURL: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBasename: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBlogDescription: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBlogID: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBlogName: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBlogURL: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestBody: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCategories: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCategory: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestClass: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestClassLabel: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCommentCount: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCreatedDate: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCustomFieldDescription: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCustomFieldName: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCustomFieldValue: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestCustomFields: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestDate: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestEditLink: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestEmbedCode: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestExcerpt: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestFlag: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestID: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfAllowComments: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfAllowPings: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfCategory: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfCommentsOpen: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfExtended: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestIfTagged: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestKeywords: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestLink: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestLinkURL: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestModifiedDate: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestMore: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestNext: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestPermalink: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestPhoto: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestPostType: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestPrevious: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestRank: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestRawPostType: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestRecommendVoteLink: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestRecommendedTotal: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestScore: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestScoreAvg: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestScoreCount: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestScoreHigh: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestScoreLow: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestStatus: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTags: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTitle: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTrackbackCount: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTrackbackData: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTrackbackID: $Manifest::Manifest::App::_hdlr_proxy
+ ManifestTrackbackLink: $Manifest::Manifest::App::_hdlr_proxy
+
+ function:
+ ManifestParty: $Manifest::Manifest::App::_hdlr_party
+
+# callback
+callbacks:
+ MT::App::CMS::template_param.edit_entry: $Manifest::Manifest::App::param_edit_entry
+ MT::App::CMS::template_param.list_entry: $Manifest::Manifest::App::param_list_entry
+ MT::App::CMS::pre_run: $Manifest::Manifest::App::pre_run
+ MT::Entry::pre_save: $Manifest::Manifest::App::pre_save
+ MT::Page::pre_save: $Manifest::Manifest::App::pre_save
+
+ api_save_filter.entry: $Manifest::Manifest::App::save_filter
+ cms_save_filter.entry: $Manifest::Manifest::App::save_filter
+ cms_delete_permission_filter.entry: $Manifest::Manifest::App::remove_filter
--- /dev/null
+entry: Manifest
+Entry: Manifest
+Entries: Manifests
+Manage Entries: Manage Manifests
+A saved version of this entry was auto-saved [_2]. <a href="[_1]">Recover auto-saved content</a>: A saved version of this manifest was auto-saved [_2]. <a href="[_1]">Recover auto-saved content</a>
+This entry has been saved.: This manifest has been saved.
+Create Entry: Create Manifest
--- /dev/null
+entry: マニフェスト
+Entry: マニフェスト
+Entries: マニフェスト
+Manage Entries: マニフェストの管理
+A saved version of this entry was auto-saved [_2]. <a href="[_1]">Recover auto-saved content</a>: マニフェストは自動保存され ています([_2])。<a href="[_1]">自動保存された内容を元に戻す</a>'
+This entry has been saved.: マニフェストを保 存しました。
+Create Entry: 新しいマニフェストを作成
+View Entry: マニフェストを見る
+Edit Entry: マニフェストを編集
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Manifest::App;
+use strict;
+use warnings;
+
+use utf8;
+use Encode;
+
+sub _hdlr_manifests {
+ my ($ctx, $args, $cond) = @_;
+ $ctx->tag('Entries', $args, $cond);
+}
+
+sub _hdlr_proxy {
+ my ($ctx, $args, $cond) = @_;
+ my $tag = lc($ctx->stash('tag'));
+ $tag =~ s/manifest/entry/;
+ $ctx->tag($tag, $args, $cond);
+}
+
+sub _hdlr_manifest {
+ my ($ctx, $args, $cond) = @_;
+ my $current = $ctx->{__stash}{entry};
+
+ if ($args->{revision} eq 'original') {
+ my $rev = $current->load_revision(
+ { rev_number => $current->first_revision }
+ );
+ if ( $rev && @$rev ) {
+ $ctx->{__stash}{entry} = $rev->[0];
+ }
+ }
+
+ my $result = $ctx->slurp($args, $cond);
+
+ $ctx->{__stash}{entry} = $current;
+
+ $result;
+}
+
+sub _hdlr_if_modified {
+ my ($ctx, $args, $cond) = @_;
+
+ my $entry = $ctx->stash('entry')
+ or return $ctx->_no_entry_error();
+ $entry->revision != $entry->first_revision;
+}
+
+sub _hdlr_party {
+ my ($ctx, $args) = @_;
+
+ my $entry = $ctx->stash('entry')
+ or return $ctx->_no_entry_error();
+ $entry->party;
+}
+
+sub enabled {
+ my $blog_id = shift;
+ if (! $blog_id) {
+ my $blog = MT->instance->blog
+ or return 0;
+ $blog_id = $blog->id;
+ }
+ my $plugin = MT->component('Manifest');
+ $plugin->get_config_value('enabled', 'blog:' . $blog_id);
+}
+
+sub pre_save {
+ my ($cb, $obj, $original) = @_;
+
+ if (! $obj->first_revision) {
+ require MT::Entry;
+ if ($obj->status == MT::Entry::RELEASE()) {
+ my $revision = $obj->revision || 0;
+ $obj->first_revision($revision + 1);
+ }
+ else {
+ $obj->first_revision(0);
+ }
+ }
+
+ if (! $obj->party) {
+ $obj->party('');
+ }
+
+ if ($obj->id && &enabled($obj->blog_id)) {
+ delete($obj->{changed_cols}->{'title'});
+ delete($obj->{changed_cols}->{'party'});
+ }
+
+ 1;
+}
+
+sub save_filter {
+ return 1 unless &enabled();
+
+ my ($cb, $app) = @_;
+ my $plugin = MT->component('Manifest');
+
+ my $party = $app->param('party') || '';
+ $party =~ s/ |\s//g;
+
+ if (! $party) {
+ return $cb->error($plugin->translate('Party is required.'));
+ }
+
+ 1;
+}
+
+sub remove_filter {
+ my ($cb, $app, $obj) = @_;
+ my $plugin = MT->component('Manifest');
+
+ if ($obj->id && &enabled($obj->blog_id)) {
+ return $cb->error($plugin->translate('The manifest is not editable.'));
+ }
+
+ 1;
+}
+
+sub pre_run {
+ return 1 unless &enabled();
+
+ my $plugin = MT->component('Manifest');
+ my $lh = MT->language_handle;
+
+ my $file = File::Spec->catfile(
+ $plugin->{full_path}, 'l10n', $lh->language_tag . '.yaml'
+ );
+ if (! -f $file) {
+ $file = File::Spec->catfile(
+ $plugin->{full_path}, 'l10n', 'en_us.yaml'
+ );
+ }
+
+ require YAML::Tiny;
+ my $yaml = YAML::Tiny->read($file);
+ my $map = $yaml->[0];
+ my $package = ref $lh;
+
+ eval(<<__EOE__);
+package $package;
+\$Lexicon{\$_} = \$map->{\$_} foreach (keys(%\$map));
+__EOE__
+}
+
+sub param_edit_entry {
+ return 1 unless &enabled();
+
+ my ($cb, $app, $param, $tmpl) = @_;
+
+ return 1 unless $app->param('_type') eq 'entry';
+
+ my $plugin = MT->component('Manifest');
+
+ push(@{ $param->{'field_loop'} }, {
+ 'field_id' => 'party',
+ 'lock_field' => '0',
+ 'field_name' => 'party',
+ 'show_field' => 1,
+ 'field_label' => $plugin->translate('Party'),
+ 'label_class' => 'top-label',
+ 'required' => '1',
+ 'field_html' => <<__EOF__,
+<input type="text" name="party" id="party" class="full-width" value="<mt:var name="party" escape="html" \>" mt:watch-change="1" autocomplete="off" />
+__EOF__
+ });
+
+ require MT::Entry;
+ return if (! $param->{id}) || ($param->{status} != MT::Entry::RELEASE());
+
+ my $confirm = $plugin->translate(
+ 'A manifest change is not recommended. \nMay I change really?'
+ );
+ my $cant_mod_title = $plugin->translate(
+ 'The title is not editable.'
+ );
+ my $cant_mod_party = $plugin->translate(
+ 'The party is not editable.'
+ );
+ $param->{'js_include'} ||= '';
+ $param->{'js_include'} .= <<__EOS__;
+<script type="text/javascript">
+jQuery(function(j) {
+ var messages = {
+ 'title': '$cant_mod_title',
+ 'party': '$cant_mod_party'
+ };
+
+ j('#title, #party').
+ attr('readonly', 'readonly').
+ click(function() {
+ alert(messages[this.id]);
+ });
+
+ j('button.delete').parent().hide();
+ j('button.publish, button.draft').click(function(ev) {
+ if (! window.confirm('$confirm')) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+ });
+});
+</script>
+__EOS__
+}
+
+sub param_list_entry {
+ return 1 unless &enabled();
+
+ my ($cb, $app, $param, $tmpl) = @_;
+
+ return 1 unless $app->mode eq 'list_entry';
+
+ $param->{'js_include'} ||= '';
+ $param->{'js_include'} .= <<__EOS__;
+<script type="text/javascript">
+jQuery(function(j) {
+ j('td.status-publish').parent().find('.cb input').hide();
+});
+</script>
+__EOS__
+}
+
+1;
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Manifest::L10N;
+use strict;
+use warnings;
+use base 'MT::Plugin::L10N';
+
+1;
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Manifest::L10N::en_us;
+
+use strict;
+use warnings;
+
+use base 'Manifest::L10N';
+use vars qw( %Lexicon );
+%Lexicon = ();
+
+1;
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Manifest::L10N::ja;
+
+use strict;
+use warnings;
+use base 'Manifest::L10N::en_us';
+use vars qw( %Lexicon );
+
+%Lexicon = (
+ 'Managing manifest' => 'マニフェストを管理します',
+ 'Enabled in this blog' => 'このブログでマニフェストを管理する',
+ 'Party' => '政党',
+ 'A manifest change is not recommended. \nMay I change really?' => 'マニフェストの変更は推奨されません。\n本当に変更してもよろしいですか?',
+ 'Party is required.' => '政党欄は必ず記入してください',
+ 'The title is not editable.' => 'タイトルは編集できません。',
+ 'The party is not editable.' => '政党は変更できません。',
+ 'The manifest is not editable.' => 'マニフェストは変更できません。',
+);
+
+1;
--- /dev/null
+<?php
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+function smarty_block_MTIfManifestHadModified($args, $content, &$ctx, &$repeat) {
+ if (!isset($content)) {
+ $entry = $ctx->stash('entry');
+ $meta = $entry->load_meta($entry);
+ $result = $entry->first_revision != $meta->revision;
+ return $ctx->_hdlr_if($args, $content, $ctx, $repeat, $result);
+ }
+ else {
+ return $ctx->_hdlr_if($args, $content, $ctx, $repeat);
+ }
+}
+
+?>
--- /dev/null
+<?php
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+function smarty_block_MTManifest($args, $content, &$ctx, &$repeat) {
+ $localvars = array('entry');
+ if ($args['revision'] == 'original') {
+ if (!isset($content)) {
+ $ctx->localize($localvars);
+ $current = $ctx->stash('entry');
+ $id = $current->id;
+ $rev = $current->first_revision;
+
+ $entry = new Entry;
+ if ($entry->Load($id)) {
+ $file = dirname(__FILE__) . '/load_object.pl';
+ $data = `/usr/bin/perl $file entry $id $rev`;
+ eval('$array = ' . $data);
+ foreach ($array as $k => $v) {
+ $entry->$k = $v;
+ }
+ $ctx->stash('entry', $entry);
+ }
+ }
+ else {
+ $ctx->restore($localvars);
+ }
+ }
+
+ return $content;
+}
+
+?>
--- /dev/null
+<?php
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+require_once('block.mtentries.php');
+function smarty_block_mtmanifests($args, $content, &$ctx, &$repeat) {
+ return smarty_block_mtentries($args, $content, $ctx, $repeat);
+}
+
+?>
--- /dev/null
+<?php
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+function smarty_function_mtmanifestparty($args, &$ctx) {
+ $entry = $ctx->stash('entry');
+ return $entry->party;
+}
+
+?>
--- /dev/null
+<?php
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+global $mt;
+$ctx = &$mt->context();
+$tags = array(
+ 'manifestadditionalcategories', 'manifestassets', 'manifestatomid',
+ 'manifestaudio', 'manifestauthor', 'manifestauthordisplayname',
+ 'manifestauthoremail', 'manifestauthorid', 'manifestauthorlink',
+ 'manifestauthornickname', 'manifestauthorurl', 'manifestauthorusername',
+ 'manifestauthoruserpic', 'manifestauthoruserpicasset', 'manifestauthoruserpicurl',
+ 'manifestbasename', 'manifestblogdescription', 'manifestblogid',
+ 'manifestblogname', 'manifestblogurl', 'manifestbody',
+ 'manifestcategories', 'manifestcategory', 'manifestclass',
+ 'manifestclasslabel', 'manifestcommentcount', 'manifestcreateddate',
+ 'manifestcustomfielddescription', 'manifestcustomfieldname', 'manifestcustomfieldvalue',
+ 'manifestcustomfields', 'manifestdate', 'manifesteditlink',
+ 'manifestembedcode', 'manifestexcerpt', 'manifestflag',
+ 'manifestid', 'manifestifallowcomments', 'manifestifallowpings',
+ 'manifestifcategory', 'manifestifcommentsopen', 'manifestifextended',
+ 'manifestiftagged', 'manifestkeywords', 'manifestlink',
+ 'manifestlinkurl', 'manifestmodifieddate', 'manifestmore',
+ 'manifestnext', 'manifestpermalink', 'manifestphoto',
+ 'manifestposttype', 'manifestprevious', 'manifestrank',
+ 'manifestrawposttype', 'manifestrecommendvotelink', 'manifestrecommendedtotal',
+ 'manifestscore', 'manifestscoreavg', 'manifestscorecount',
+ 'manifestscorehigh', 'manifestscorelow', 'manifeststatus',
+ 'manifesttags', 'manifesttitle', 'manifesttrackbackcount',
+ 'manifesttrackbackdata', 'manifesttrackbackid', 'manifesttrackbacklink',
+);
+foreach ($tags as $t) {
+ $p = new ManifestProxy($t);
+ $ctx->add_tag($t, array($p, 'tag'));
+}
+
+class ManifestProxy {
+ var $tag;
+ function ManifestProxy($tag) {
+ $this->tag = str_replace('manifest', 'entry', strtolower($tag));
+ }
+
+ function tag($args, &$ctx) {
+ return $ctx->tag($this->tag, $args);
+ }
+}
--- /dev/null
+# Copyright (c) 2009 Movable Type ACME Plugin Project, All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+use strict;
+use warnings;
+
+BEGIN {
+ use File::Basename;
+ chdir dirname(dirname(dirname(dirname(__FILE__))));
+}
+use lib 'lib', 'extlib';
+
+require MT::Bootstrap;
+require MT;
+use MT::Util qw( encode_php );
+
+my $mt = MT->new() or die MT->errstr;
+
+$mt->{vtbl} = { };
+$mt->{is_admin} = 0;
+$mt->{template_dir} = 'cms';
+$mt->{user_class} = 'MT::Author';
+$mt->{plugin_template_path} = 'tmpl';
+$mt->run_callbacks('init_app', $mt);
+
+
+my ($model, $id, $revision) = @ARGV;
+my $class = $mt->model($model);
+my $obj = $class->load($id);
+
+my $rev = $obj->load_revision(
+ { rev_number => $revision }
+);
+
+if ( $rev && @$rev ) {
+ $obj = $rev->[0];
+}
+
+print(
+ 'array(' .
+ join(",\n",
+ map("'$_' => '@{[ $obj->$_ ]}'", @{ &encode_php($obj->column_names) })
+ ) .
+ ");\n"
+);
--- /dev/null
+<mtapp:setting
+ id="manifest_enabled"
+ label="<__trans phrase="Enabled in this blog">"
+>
+<input type="checkbox" id="manifest_enabled" name="enabled" value="1" <mt:If name="enabled">checked="checked"</mt:If> />
+</mtapp:setting>