Skip to content
Mitsuru Mutaguchi edited this page Oct 21, 2016 · 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()

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

その他

上記以外は、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;
}

ヘルパー

利用方法

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

ボタン群の表示 WorkflowHelper::buttons()

(使い方 例)

<?php echo $this->Workflow->buttons('FaqQuestion.status'); ?>

承認コメントリストの表示 WorkflowHelper::comments()

(使い方 例)

1.WorkflowCommentBehaviorの設定

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

2.Controllerでデータ取得

$comments = $this->FaqQuestion->getCommentsByContentKey($this->request->data['FaqQuestion']['key']);
$this->set('comments', $comments);

3.Viewファイルの指定

<?php echo $this->Workflow->comments(); ?>

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

(使い方 例)

1.テーブルにkeyフィールドが必要

2.WorkflowCommentBehaviorの設定

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

3.Viewファイルの指定

<?php echo $this->Workflow->inputComment('FaqQuestion.status'); ?>

4.登録処理

WorkflowCommentBehavior::beforeValidate()で入力チェックをし、WorkflowCommentBehavior::afterSave()で登録する

5.$this->reqest->data['Block']['key']が必須となる

<?php echo $this->Form->hidden('Block.key'); ?>

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

(使い方 例)

<?php echo $this->Workflow->label($faqQuestion['FaqQuestion']['status']); ?>

権限チェック

WorkflowHelper::canEdit()

コンテンツの編集権限チェック

(使い方 例)

<?php if ($this->Workflow->canEdit('FaqQuestion', $faqQuestion)) : ?>
	<div class="text-right">
		<?php echo $this->Button->editLink('', array('key' => $faqQuestion['FaqQuestion']['key']), array(
				'tooltip' => true,
				'iconSize' => 'btn-xs'
			)); ?>
	</div>
<?php endif; ?>
WorkflowHelper::canDelete()

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

(使い方 例)

<?php if ($this->request->params['action'] === 'edit' && $this->Workflow->canDelete('FaqQuestion', $this->data)) : ?>
	<div class="panel-footer text-right">
		<?php echo $this->element('FaqQuestions/delete_form'); ?>
	</div>
<?php endif; ?>