CMF Placeful Workflowをいじる

CMF PlacefulWorkflowを使って特定のフォルダ配下をAnonymousが閲覧できないようにしてみます。

既存のワークフローはどうなっているのか?

まずは既存のワークフローを確認してみます。デフォルトでは「plone_workflow」と「folder_workflow」という2つのワークフローが用意されています。ワークフローには「状態」があり、それぞれの「状態」には「遷移」(誰がどの状態に変化させることができるかということ)があります。

folder_workflow

フォルダーワークフローには「private」「published」「visible」という状態があります。

 

「private」状態(anonymousユーザには見えない)
この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「visible」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
「published」状態(anonymousユーザにも見える)
 この状態にあるコンテンツは、「メンバー」によって「private」の状態に、あるいは「メンバー」によって「visible」の状態にすることができます。
「visible」状態 (anonymousユーザにも見える)*初期状態
この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「private」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。

 

plone_workflow

フォルダーワークフローには「pending」「private」「published」「visible」という状態があります。

「pending」状態(anonymousユーザには見えない)
この状態にあるコンテンツは、「レビューワ」によって「published」または「visible」の状態に、あるいは「メンバー」によって「visible」または「private」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。
「private」状態(anonymousユーザには見えない)
この状態にあるコンテンツは、「メンバー」によって「visible」の状態にすることができます。逆に言えば、例えばいきなり「published」の状態にすることはできません(publishedにしたい場合は、一度visibleにしてからpublishedにすることになる)。
「published」状態(anonymousユーザにも見える)
 この状態にあるコンテンツは、「レビューワ」または「メンバー」によって「visible」の状態にすることができます。逆に言えば例えばいきなり「private」の状態にすることはできません(privateにしたい場合は、一度visibleにしてからprivateにすることになる)。
「visible」状態 (anonymousユーザにも見える)*初期状態
この状態にあるコンテンツは、「レビューワ」によって「published」の状態に、あるいは「メンバー」によって「private」または「pending」の状態にすることができます。逆に言えば、例えば「メンバー」によって「published」の状態にすることはできません。

これらのワークフローの「状態」や「遷移」については、ZMIのportal_workflowの「content」タブをクリックして各ワークフローを表示したときに見える「state」タブや「transitions」タブから確認することができます。

states of plone_workflow

 

また各状態にはパーミッションが設定してあり(各状態の「permission」タブから確認できる)、これによってanonymousユーザに見えるか見えないかが決まります。

permission settings

 

どんなワークフローにするのか?

それではどのようにカスタマイズしたらよいでしょう?「anonymousユーザには見えないようにしたい」という前提がありますが、これだけでは少し物足りないのでもう少しルールを増やしてみたいと思います。例えばこんなのはどうでしょう。

  • 状態は「private」「pending」「published」の3つ
  • コンテンツの初期状態はprivateとする(基本的にはanonymousユーザには見せない)
  • anonymousユーザに見せたいコンテンツについてはレビューワにお伺いを立てて(pending状態にする)、承認されたらpublishedとする。ただしお伺いを取りやめたり、レビューワがリジェクトした場合はprivateに戻る

plone_workflowに似ていますが、「visible」状態はありません。ということで以上の要件に合うようにplone_workflowをカスタマイズしてみたいと思います。

実際にカスタマイズする

plone_workflowのコピー、リネーム

まずは元となるplone_workflowをコピー&ペーストして、自分の好きな名前にします。ここではprivate_workflowという名前にしました。以下このprivate_workflowを編集していきます。

plone_workflowのコピー&ペースト&リネーム

 

初期状態をprivateに変更し、visible状態を削除

plone_workflowの初期状態は「visible」ですが、今回編集していくprivate_workflowでは初期状態がprivateとなるので変更します。「private」のチェックボックスにチェックを入れて画面下部の「Set Initial State」ボタンを押せば、privateが初期状態となります(星マークが付いたハズです)。ついでにお役ご免となったvisible状態を削除します。

privateを初期状態にセット

 

private状態の遷移を変更

既存のprivate状態に割り当てられている遷移は「show」です。これは「メンバー」がコンテンツを「visible」にできるというものですが、これでは今回の要件には合いません。そこでprivate状態のコンテンツの遷移を「submit」にしてやります。showのチェックをはずし、submitにチェックをいれたら画面下部の「Save Change」ボタンを押します。これでprivate状態のコンテンツは「pending」状態にのみ変更できることになります。

適切な遷移をセット

 

pending状態の遷移を変更

次にpending状態の遷移を変更します。pendign状態のコンテンツがたどる道は以下の3つとします。

  • reject: レビューワによるリジェクト→private状態へ
  • publish: レビューワによる承認→published状態へ
  • retract: メンバーによる撤回→private状態へ

既存のpending状態には上記の3つ以外に「hide」という遷移がありますが、今回は使わないので削除します。pending状態をクリックしてhideのチェックを外してセーブしましょう。

また上記の3つの遷移のうちrejectとretractについては、この遷移によって「private」状態に移らせるために、「Destination State」を「private」にしておきます。

遷移を編集

 

published状態の遷移を変更

最後にpublished状態の遷移の変更ですが、特に変更する必要はありません。

さてこれでprivate_workflowの完成です。次はサイト中の特定のフォルダ以下にこのワークフローを適用したいと思います。

CMF Placeful Workflow

実はここまでやってきたワークフローの編集作業はCMF Placeful Workflowの機能をいじっていたわけではなく、DC Workflowというプロダクトの機能をいじっていたのです(ホントかな…)。

CMF Placeful WorkflowはこのDC Workflowを拡張して、特定の場所に特定のワークフローを割り当てるという機能を提供してくれます。DC Workflowは基本的にコンテンツタイプベースでワークフローを設定していたので、例えば特定のフォルダ以下に特定のワークフローを設定すると言ったロケーションベースの設定は難しかったわけです。そこでロケーションベースのワークフロー設定を簡単に行うためのプロダクトとしてCMF Placeful Workflowが登場したのだと思います(ウソかもしれない)。「Placefull *」という名前の由来もそういった機能から来ているのだと思います。

* 日本語では「位置依存型」と訳されていますが、ちょっとわかりにくいですね。かといってなかなか良い単語もパッと思いつきませんが。

CMF Placeful Workflowの設定

ワークフローポリシーの作成

設定は「サイト設定→アドオンプロダクトの設定」から行いますが、ここでまずは「ワークフローポリシー」を作成します。「ワークフローポリシー」というのは、例えば「フォルダはfolder_workflow、ドキュメントはplone_workflow、…」といったようにコンテンツタイプごとに設定したワークフローのセットのことです。

デフォルトではワークフローポリシーがありませんので新規に作成しますが、ゼロから作るのはめんどうなので、「Duplicate another policy」のドロップダウンメニューから「Global Workflow」を選んでおきます。ちなみにこの「Global Workflow」というのは、ZMIのportal_workflowの最初の画面である「Workflows by type」を参照しているようです。

ワークフローポリシーを作成

 

ワークフローポリシーの編集

次に今追加したワークフローポリシーを編集します。タイトルとか説明とかはテキトーでいいですが、「デフォルトワークフロー」は必ず変更してください。「Global Workflow」をコピーした場合、デフォルトではplone_workflowが選択されていると思いますが、これを先ほど作った「private_workflow」に変更します。これで基本的にコンテンツにprivate_workflowが適用されることになります。

あとはコンテンツタイプ別に設定されているワークフローを変更してやるだけです。(Default)が指定されているものは勝手にprivate_workflowが割り当てられるのでそのままでOK。folder_workflowやplone_workflowが指定されているものはプルダウンメニューから(Default)かprivate_workflowを選んでやります。最後にセーブするのを忘れないように…。

ワークフローポリシーを編集

 

ワークフローポリシーを特定フォルダ以下に適用

作成したワークフローポリシーを特定フォルダ以下に適用するには、当該フォルダの「状態」ボタンから「ポリシー」を選びます。

特定のフォルダにポリシーをセットする

 

すると以下のような画面になりますので、クリックして次の画面にいきます。

フォルダにポリシーを追加

 

上下に二つの設定部がありますが、当該フォルダも含めてポリシーを適用するかどうかが異なりますので適当に設定してやればよいでしょう。

現在のフォルダを含むか含まないか

 

Plone 2.1.3でCMF Placeful Workflowを使う

以下の環境で使うことができました。

  • Python 2.3.5
  • Zope 2.8.6
  • Plone 2.1.3
  • CMF Placeful Workflow 0.4.8
トラックバック用URL:
http://nagosui.org:8080/Nagosui/COREBlog2/use-cmf-placeful-workflow/tbping

Re:CMF Placeful Workflowをいじる

投稿者 あきこ 投稿日時: 2006年08月10日 11時27分

nyusukeさま、こんにちは。
MLでPlacefulWorkFlowの件で投稿させていただいたものです。
私もインストールしてみたんですが、思いっきり1.0releaseを入れてしまい、エラーで動きませんでした。
Plone2.1.3の場合は、0.4.8じゃないとダメなんですね...。

まだ上手く使えてなかったところに、nyusukeさまのこの記事を発見し、大変助かりました。
ありがとうございました!

Re:CMF Placeful Workflowをいじる

投稿者 nyusuke 投稿日時: 2006年08月11日 00時49分

あきこさんの出力量はすごいですね…
負けずに出力していきたいと思います。

Re:CMF Placeful Workflowをいじる

投稿者 yusuke 投稿日時: 2006年11月28日 14時31分

いつも参考にさせていただいております。
今、社内自己申告システムをploneで構築しようと計画しておりますが、下記のようなワークフローは、どのようにすれば実現可能でしょうか?

1.本人が編集・申告
2.直属チームの上司が編集・承認または、却下
3.所属課課長が編集・承認または、却下
4.所属部部長が編集・承認または、却下
5.人事部で回収確認

事前に管理者が設定した特定の直属上司に申請できるように設定することは、可能なのでしょうか?

ご回答よろしくお願いいたします。

Re:CMF Placeful Workflowをいじる

投稿者 nyusuke 投稿日時: 2006年11月29日 23時31分

うーん、できるできないでいえばできる気はしますが、
MLに投げてみた方がいいと思います(*´Д`)

コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

このBlogについて
Plone, Zope, Pythonなどのトピックについてのメモです。
カテゴリ
Plone (99)
Plone Products (23)
COREBlog2 (31)
COREBlog1 (29)
ReadingCOREBlog (7)
Zope (66)
Turbogears (18)
Django (12)
Python (26)
Linux (32)
Nagosui (13)
Design (34)
Misc (49)
moblog (5)
最近のエントリ
Plone3.2+その他もろもろのレシピ nyusuke 2009年01月07日
さらばファッキンKDDI nyusuke 2008年12月10日
Xoopsのテーマをいじる1 nyusuke 2008年12月08日
第13回名古屋大学吹奏楽団定期演奏会 nyusuke 2008年12月07日
最近のコメント
Re:WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007年06月01日
Re:WebデザイナーのためのDjangoはじめの一歩 pateo 2007年05月31日
Re:東海Python Workshop 01終了 nyusuke 2007年05月31日
Re:東海Python Workshop 01終了 kfuruhata 2007年05月30日
Geek Test
I am 30% Geek.
Geek? Yes, but at least I got social skills.
You probably work in computers, or a history deptartment at a college. You never really fit in with the "normal" crowd. But you have friends, and this is a good thing.