Skip to content
Shohei Nakajima edited this page Sep 14, 2015 · 20 revisions

Workflowプラグインのガイドライン

ワークフローに関連するプラグイン。

コンポーネント

コンテンツのワークフロー関連で使用するコンポーネント。

定数

const STATUS_PUBLISHED = '1';
const STATUS_APPROVED = '2';
const STATUS_IN_DRAFT = '3';
const STATUS_DISAPPROVED = '4';

WorkflowComponent::parseStatus()

登録アクションでリクエストパラメータ(request->data)からステータスをパースするメソッド

(例)

if ($this->request->isPost() || $this->request->isPut()) {
	$data = $this->data;
	$data['Announcement']['status'] = $this->Workflow->parseStatus();
	unset($data['Announcement']['id']);

	if ($this->Announcement->saveAnnouncement($data)) {
		$this->redirect(NetCommonsUrl::backToPageUrl());
		return;
	}
	$this->NetCommons->handleValidationError($this->Announcement->validationErrors);

} else {
	if (! $this->request->data = $this->Announcement->getAnnouncement()) {
		$this->request->data = $this->Announcement->createAll();
	}
	$this->request->data['Frame'] = Current::read('Frame');
}

WorkflowComponent::getBlockRolePermissions()

ブロックのパーミッションを取得するメソッド。主にブロックの権限設定で使用する

後で、リンク張る

その他

上記以外は、Workflow/Controller/Component/WorkflowComponent.phpを参照して下さい。

ビヘイビア

利用方法

public $actsAs = array(
	'Workflow.Workflow',
);

コンテンツの取得(WorkflowBehavior::getWorkflowContents())

(使い方 例)

$conditions = array(
	'FaqQuestion.faq_id' => $this->viewVars['faq']['id'],
);
if (isset($this->params['named']['category_id'])) {
	$conditions['FaqQuestion.category_id'] = $this->params['named']['category_id'];
}
$faqQuestions = $this->FaqQuestion->getWorkflowContents('all', array(
	'recursive' => 0,
	'conditions' => $conditions
));

条件の取得(WorkflowBehavior::getWorkflowConditions())

権限によって、コンテンツの閲覧できる条件(conditionsのみ)を取得する

(使い方 例)

$query['conditions'] = $this->BbsArticle->getWorkflowConditions(array(
	'BbsArticleTree.parent_id' => null,
	'BbsArticle.bbs_id' => $this->viewVars['bbs']['id'],
));

登録時のバリデーション(WorkflowBehavior::beforeValidate())

コンテンツのステータスに関するバリデーションを設定する。各プラグインは何もする必要はない。

コンテンツの登録(WorkflowBehavior::beforeSave())

ビヘイビアを設定したModelに対して、ワークフロー関連のフィールドのデータを更新する。各プラグインは何もする必要はない。

権限チェック

WorkflowBehavior::canReadWorkflowContent()・・・コンテンツの閲覧権限チェック

(使い方 例)

if (! $this->FaqQuestion->canReadWorkflowContent()) {
	$this->throwBadRequest();
	return false;
}

WorkflowBehavior::canCreateWorkflowContent()・・・コンテンツの作成権限チェック

(使い方 例)

if (! $this->FaqQuestion->canCreateWorkflowContent()) {
	$this->throwBadRequest();
	return false;
}

WorkflowBehavior::canEditWorkflowContent()・・・コンテンツの編集権限チェック

(使い方 例)

1.データ取得

$faqQuestion = $this->FaqQuestion->getWorkflowContents('first', array(
	'recursive' => 0,
	'conditions' => array(
		$this->FaqQuestion->alias . '.faq_id' => $this->viewVars['faq']['id'],
		$this->FaqQuestion->alias . '.key' => $faqQuestionKey
	)
));

2.権限チェック

if (! $this->FaqQuestion->canEditWorkflowContent($faqQuestion)) {
	$this->throwBadRequest();
	return false;
}

WorkflowBehavior::canDeleteWorkflowContent()・・・コンテンツの削除権限チェック(※一度でも公開した場合は、公開権限があるユーザのみ削除可能とする)

(使い方 例)

1.データ取得

$faqQuestion = $this->FaqQuestion->getWorkflowContents('first', array(
	'recursive' => -1,
	'conditions' => array(
		$this->FaqQuestion->alias . '.faq_id' => $this->data['FaqQuestion']['faq_id'],
		$this->FaqQuestion->alias . '.key' => $this->data['FaqQuestion']['key']
	)
));

2.権限チェック

if (! $this->FaqQuestion->canDeleteWorkflowContent($faqQuestion)) {
	$this->throwBadRequest();
	return false;
}

ヘルパ

ボタン群(WorkflowHelper::buttons())

(使い方 例)

コメントリスト(WorkflowHelper::comments())

(使い方 例)

コメント入力欄(WorkflowHelper::inputComment())

(使い方 例)

ステータスラベル(WorkflowHelper::label())

(使い方 例)

権限チェック

(使い方 例)

WorkflowHelper::canEdit()・・・コンテンツの編集権限チェック

(使い方 例)

WorkflowHelper::canDelete()・・・コンテンツの削除権限チェック(※一度でも公開した場合は、公開権限があるユーザのみ削除可能とする)

(使い方 例)

Clone this wiki locally