-
Notifications
You must be signed in to change notification settings - Fork 2
Home
ワークフローに関連するプラグイン。
コンテンツのワークフロー関連で使用するコンポーネント。
const STATUS_PUBLISHED = '1';
const STATUS_APPROVED = '2';
const STATUS_IN_DRAFT = '3';
const STATUS_DISAPPROVED = '4';
登録アクションでリクエストパラメータ(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');
}
ブロックのパーミッションを取得するメソッド。主にブロックの権限設定で使用する
Blocksプラグインの権限設定
上記以外は、Workflow/Controller/Component/WorkflowComponent.phpを参照して下さい。
public $actsAs = array(
'Workflow.Workflow',
);
(使い方 例)
$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
));
権限によって、コンテンツの閲覧できる条件(conditionsのみ)を取得する
(使い方 例)
$query['conditions'] = $this->BbsArticle->getWorkflowConditions(array(
'BbsArticleTree.parent_id' => null,
'BbsArticle.bbs_id' => $this->viewVars['bbs']['id'],
));
コンテンツのステータスに関するバリデーションを設定する。各プラグインは何もする必要はない。
ビヘイビアを設定したModelに対して、ワークフロー関連のフィールドのデータを更新する。各プラグインは何もする必要はない。
コンテンツの閲覧権限チェック
(使い方 例)
if (! $this->FaqQuestion->canReadWorkflowContent()) {
$this->throwBadRequest();
return false;
}
コンテンツの作成権限チェック
(使い方 例)
if (! $this->FaqQuestion->canCreateWorkflowContent()) {
$this->throwBadRequest();
return false;
}
コンテンツの編集権限チェック
(使い方 例)
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;
}
コンテンツの削除権限チェック(※一度でも公開した場合は、公開権限があるユーザのみ削除可能とする)
(使い方 例)
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',
);
(使い方 例)
<?php echo $this->Workflow->buttons('FaqQuestion.status'); ?>
(使い方 例)
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(); ?>
(使い方 例)
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'); ?>
(使い方 例)
<?php echo $this->Workflow->label($faqQuestion['FaqQuestion']['status']); ?>
コンテンツの編集権限チェック
(使い方 例)
<?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; ?>
コンテンツの削除権限チェック(※一度でも公開した場合は、公開権限があるユーザのみ削除可能とする)
(使い方 例)
<?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; ?>