/** * 承認選択フォーム出力 * 承認設定がある場合に必要なメッセージを出力する。 * * @return void * @access public */ public function formAfterForm(CakeEvent $event) { //ブログ&固定ページ共通で、申し送り事項の表示処理を差し込む。 //差し戻し、承認の時のみ、申し送り入力欄を表示する。 $approval_comment_toggle = $this->_getHiddenCommentFormCode(); //処理を実行するのは、ブログと固定ページ //--------------------------------- // ブログ投稿フォーム //--------------------------------- if ($event->data['id'] == 'BlogPostForm') { // BcFormHelperを利用する為、Viewを取得 $View = $event->subject(); //ブログのコンテンツIDを取得する。 $blogContentId = $View->request->params['pass'][0]; //承認レベル設定モデルを取得する。 App::import('Model', 'Approval.ApprovalLevelSetting'); $approvalLevelSetting = new ApprovalLevelSetting(); //カテゴリの設定を優先する if (!empty($View->data['BlogPost']['blog_category_id'])) { $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => $View->data['BlogPost']['blog_category_id'], 'ApprovalLevelSetting.type' => 'blog', 'ApprovalLevelSetting.publish' => 1))); } if (empty($settingData)) { $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.blog_content_id' => $blogContentId, 'ApprovalLevelSetting.type' => 'blog', 'ApprovalLevelSetting.publish' => 1))); } //セッション情報からログイン中のユーザー情報を取得する。 App::uses('CakeSession', 'Model/Datasource'); $Session = new CakeSession(); $user = $Session->read('Auth.User'); //設定情報を確認する。 if (!empty($settingData)) { //新規作成の場合は、保留か承認申請かに内容を変更する。 if ($View->request->params['action'] == 'admin_add') { $options = array(0 => '保留', 3 => '承認を申請する'); //承認設定のある新規作成は誰でも書けるので、常に表示する。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); //編集(edit)の場合 } else { //現在の承認済段階を確認する。 //承認情報・承認待ちモデルを取得する。 App::import('Model', 'Approval.ApprovalPost'); $approvalPost = new ApprovalPost(); //承認情報・承認待ちモデルからデータを探す $approvalPostData = $approvalPost->find('first', array('conditions' => array('ApprovalPost.post_id' => $View->request->params['pass'][1]))); //データがある場合 if (!empty($approvalPostData)) { //通過済みの承認ステージ $pass_stage = $approvalPostData['ApprovalPost']['pass_stage']; if (empty($pass_stage)) { $pass_stage = 0; } //現在のステージを確認する(最終承認後はそれ以上ない) if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $nowStage = $approvalPostData['ApprovalPost']['pass_stage']; } else { $nowStage = $approvalPostData['ApprovalPost']['pass_stage'] + 1; } //現在の承認権限者タイプ $nowApprovalType = $settingData['ApprovalLevelSetting']['level' . $nowStage . '_type']; //編集モードの場合でも、next_approver_idが0の時は、却下で戻ってきたもの。 if ($pass_stage == 0) { //権限者の確認 switch ($nowApprovalType) { case 'user': if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['id']) { //承認権限があるかどうかを判定する。 $now_stage = $pass_stage + 1; //ユーザー情報を確認する。 $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄(最終承認の時は無視する) $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } else { //自分が権限者でない場合 //却下で戻ってきたものの場合は、改めて申請できるので表示する。 if ($approvalPostData['ApprovalPost']['next_approver_id'] == 0) { $options = array(0 => '保留', 3 => '承認を申請する'); //最初の段階まで戻っていれば、誰もが申請できる。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } break; case 'group': if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['UserGroup']['id']) { //承認権限があるかどうかを判定する。 $now_stage = $pass_stage + 1; //ユーザー情報を確認する。 $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } else { //自分が権限者でない場合 //却下で戻ってきたものの場合は、改めて申請できるので表示する。 if ($approvalPostData['ApprovalPost']['next_approver_id'] == 0) { $options = array(0 => '保留', 3 => '承認を申請する'); //最初の段階まで戻っていれば、誰もが申請できる。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } break; default: break; } //却下または第1段階ではなく、承認待ちの状態の場合 } else { $now_stage = $pass_stage + 1; //権限者の確認 switch ($nowApprovalType) { case 'user': //権限者の確認 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['id']) { //もしも最終段階まで来ていれば「承認する」はいらない。 if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $options = array(0 => '承認状態を維持', 2 => '差し戻す'); } else { $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); } $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } break; case 'group': //権限者の確認 if ($approvalPostData['ApprovalPost']['next_approver_id'] == $user['UserGroup']['id']) { //もしも最終段階まで来ていれば「承認する」はいらない。 if ($approvalPostData['ApprovalPost']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $options = array(0 => '承認状態を維持', 2 => '差し戻す'); } else { $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); } $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } break; } } //データがない場合は、新規作成後に承認機能を付与した場合。 } else { $options = array(0 => '保留', 3 => '承認を申請する'); //データがないため新規作成と同じく、だれにでも表示する。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } } //--------------------------------- // 固定ページ投稿フォーム //--------------------------------- } elseif ($event->data['id'] == 'PageForm') { // BcFormHelperを利用する為、Viewを取得 $View = $event->subject(); //承認レベル設定モデルを取得する。 App::import('Model', 'Approval.ApprovalLevelSetting'); $approvalLevelSetting = new ApprovalLevelSetting(); //カテゴリの設定を優先する if (!empty($View->data['Page']['page_category_id'])) { $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => $View->data['Page']['page_category_id'], 'ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.publish' => 1))); } if (empty($settingData)) { $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.category_id' => 0, 'ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.publish' => 1))); } //セッション情報からログイン中のユーザー情報を取得する。 App::uses('CakeSession', 'Model/Datasource'); $Session = new CakeSession(); $user = $Session->read('Auth.User'); //設定情報を確認する。 if (!empty($settingData)) { //新規作成の場合は、保留か承認申請かに内容を変更する。 if ($View->request->params['action'] == 'admin_add') { $options = array(0 => '保留', 3 => '承認を申請する'); //承認設定のある新規作成は誰でも書けるので、常に表示する。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'id' => 'test', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); //編集(edit)の場合 } else { //現在の承認済段階を確認する。 //承認情報・承認待ちモデルを取得する。 App::import('Model', 'Approval.ApprovalPage'); $approvalPage = new ApprovalPage(); //承認情報・承認待ちモデルからデータを探す $approvalPageData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $View->request->params['pass'][0]))); //データがある場合 if (!empty($approvalPageData)) { //通過済みの承認ステージ $pass_stage = $approvalPageData['ApprovalPage']['pass_stage']; if (empty($pass_stage)) { $pass_stage = 0; } //現在のステージを確認する(最終承認後はそれ以上ない) if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $nowStage = $approvalPageData['ApprovalPage']['pass_stage']; } else { $nowStage = $approvalPageData['ApprovalPage']['pass_stage'] + 1; } //現在の承認権限者タイプ $nowApprovalType = $settingData['ApprovalLevelSetting']['level' . $nowStage . '_type']; //編集モードの場合でも、next_approver_idが0の時は、却下で戻ってきたもの。 if ($pass_stage == 0) { //権限者の確認 switch ($nowApprovalType) { case 'user': if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['id']) { //承認権限があるかどうかを判定する。 $now_stage = $pass_stage + 1; //ユーザー情報を確認する。 $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } else { //自分が権限者でない場合 //却下で戻ってきたものの場合は、改めて申請できるので表示する。 if ($approvalPageData['ApprovalPage']['next_approver_id'] == 0) { $options = array(0 => '保留', 3 => '承認を申請する'); //最初の段階まで戻っていれば、誰もが申請できる。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } break; case 'group': if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['UserGroup']['id']) { //承認権限があるかどうかを判定する。 $now_stage = $pass_stage + 1; //ユーザー情報を確認する。 $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } else { //自分が権限者でない場合 //却下で戻ってきたものの場合は、改めて申請できるので表示する。 if ($approvalPageData['ApprovalPage']['next_approver_id'] == 0) { $options = array(0 => '保留', 3 => '承認を申請する'); //最初の段階まで戻っていれば、誰もが申請できる。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } break; default: break; } //却下または第1段階ではなく、承認待ちの状態の場合 } else { $now_stage = $pass_stage + 1; //権限者の確認 switch ($nowApprovalType) { case 'user': //権限者の確認 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['id']) { //もしも最終段階まで来ていれば「承認する」はいらない。 if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $options = array(0 => '承認状態を維持', 2 => '差し戻す'); } else { $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); } $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } break; case 'group': //権限者の確認 if ($approvalPageData['ApprovalPage']['next_approver_id'] == $user['UserGroup']['id']) { //もしも最終段階まで来ていれば「承認する」はいらない。 if ($approvalPageData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $options = array(0 => '承認状態を維持', 2 => '差し戻す'); } else { $options = array(0 => '保留', 1 => '承認する', 2 => '差し戻す'); } $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } break; } } //データがない場合は、新規作成後に承認機能を付与した場合。 } else { $options = array(0 => '保留', 3 => '承認を申請する'); //データがないため新規作成と同じく、だれにでも表示する。 $event->data['fields'][] = array('title' => '承認設定', 'input' => $View->BcForm->input('Approval.approval_flag', array('type' => 'select', 'options' => $options))); //申送入力欄 $event->data['fields'][] = array('title' => '申し送り事項', 'input' => $View->BcForm->textarea('Approval.approval_comment') . $approval_comment_toggle); } } } } return true; }
/** * 固定ページ保存前 * * @return void * @access public */ public function pageBeforeSave(CakeEvent $event) { //--------------------------------- // モデル・セッションの呼び出し //--------------------------------- //承認待ちモデルを取得する。 App::import('Model', 'Approval.ApprovalPage'); $approvalPage = new ApprovalPage(); //承認レベル設定モデルを取得する。 App::import('Model', 'Approval.ApprovalLevelSetting'); $approvalLevelSetting = new ApprovalLevelSetting(); //セッション情報からログイン中のユーザー情報を取得する。 App::uses('CakeSession', 'Model/Datasource'); $Session = new CakeSession(); $user = $Session->read('Auth.User'); //呼び出し元のモデルを取得する $PagePost = $event->subject(); //--------------------------------- // 設定情報の確認 //--------------------------------- //カテゴリID(優先)、コンテンツIDの両方を確認する。 $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.category_id' => $PagePost->data['Page']['page_category_id']))); //カテゴリの設定がなければ固定ページ全体で設定があるかどうかを確認する。 if (empty($settingData)) { $settingData = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.category_id' => 0))); } //--------------------------------- // 承認処理開始 //--------------------------------- //設定がされてない場合はスルーする if (empty($settingData)) { return true; //設定はあるが、利用しない:0の場合もスルーする } elseif ($settingData['ApprovalLevelSetting']['publish'] == 0) { return true; //設定があり、かつ利用する:1場合のみ処理に入る。 } else { /* 除外処理(承認処理を行うにも関わらずフラグが届いていない。)*/ if (empty($PagePost->data['Approval'])) { return false; } //承認・保留・拒否に関わらず、カテゴリが変更になった場合、新しいカテゴリの承認フローを1からへる必要がある。 //現在のデータ取得 if (!empty($PagePost->data['Page']['id'])) { $approvalData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $PagePost->data['Page']['id']))); } //新規作成の時などはデータがないので、ある場合のみ処理。 if (!empty($approvalData)) { //カテゴリの変更を検知 if ($approvalData['ApprovalPage']['page_category_id'] != $PagePost->data['Page']['page_category_id']) { //変更後のカテゴリに承認設定があるかどうかを確認する。 $newCategorySetting = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.publish' => 1, 'ApprovalLevelSetting.type' => 'page', 'ApprovalLevelSetting.category_id' => $PagePost->data['Page']['page_category_id']))); //カテゴリ個別の設定がない場合は、ブログ全体を確かめる。 if (empty($newCategorySetting)) { $newCategorySetting = $approvalLevelSetting->find('first', array('conditions' => array('ApprovalLevelSetting.publish' => 1, 'ApprovalLevelSetting.type' => 'page'))); } //ブログ全体にも設定がない場合は、承認設定がないので現在の承認段階フローの記録を消して通過させる。 if (empty($newCategorySetting)) { //削除実行 $this->ApprovalPage->delete($approvalData['ApprovalPage']['id']); //通過させる。 return true; //何かしらの承認設定があった場合 } else { //新しい承認設定のもと、申請前段階まで戻す。 $approvalData['ApprovalPage']['page_category_id'] = $PagePost->data['Page']['page_category_id']; $approvalData['ApprovalPage']['next_approver_id'] = 0; $approvalData['ApprovalPage']['pass_stage'] = 0; $PagePost->data['Page']['status'] = 0; if ($this->ApprovalPage->save($approvalData)) { return true; } else { return false; } } } } /* 承認フラグを確認する。*/ // 0:保留 // 1:承認または承認申請(次の段階へ) // 2:拒否(1つ戻す) //------------------------------ // 0:保留の時 //------------------------------ if ($PagePost->data['Approval']['approval_flag'] == 0) { //承認情報データの取得 if (!empty($PagePost->data['Page']['id'])) { //現状の確認 $approvalData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $PagePost->data['Page']['id']))); //もしも最終段階まで来ていれば、承認状態。 if ($settingData['ApprovalLevelSetting']['last_stage'] != $approvalData['ApprovalPage']['pass_stage']) { $PagePost->data['Page']['status'] = 0; } //新規作成時 } else { $PagePost->data['Page']['status'] = 0; } return true; //スルーする。 //------------------------------ // 1:承認の時(承認申請後の場合) //------------------------------ } elseif ($PagePost->data['Approval']['approval_flag'] == 1) { //すでに承認申請後なので、この段階では必ず既存データがある。 if (!empty($PagePost->data['Page']['id'])) { //承認情報データの取得 $approvalData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $PagePost->data['Page']['id']))); /* 現状の確認を行う */ //現在の承認済段階を確認する。 if (!empty($approvalData['ApprovalPage']['pass_stage'])) { $pass_stage = $approvalData['ApprovalPage']['pass_stage']; } if (empty($pass_stage)) { //null $pass_stage = 0; } //現在の承認ステージ(通過ステージに1足したもの) $now_stage = $pass_stage + 1; //最終的に必要な承認ステージ数 $last_stage = $settingData['ApprovalLevelSetting']['last_stage']; //現在のステージの権限者ID(ユーザーもしくはグループのIDが入っている) $approverId = $settingData['ApprovalLevelSetting']['level' . $now_stage . '_approver_id']; //ログイン中のユーザーのIDとグループID $loginUserId = $user['id']; $loginUserGroupId = $user['UserGroup']['id']; /* 取得した情報から承認権限の確認を行う */ //権限者タイプ(type:user or group)の確認と権限チェック switch ($settingData['ApprovalLevelSetting']['level' . $now_stage . '_type']) { //承認権限者がユーザー単位で設定されている場合 case 'user': /* 権限なし */ //現在のユーザーが権限者ではない場合 if ($approverId != $loginUserId) { //強制的に非公開設定 $PagePost->data['Page']['status'] = 0; /* 権限あり */ //承認権限を持っている場合 } elseif ($approverId == $loginUserId) { /* データの整理を行う */ //現在の承認ステージ $now = $pass_stage + 1; //次の承認ステージ $next_stage = $now + 1; //ブログ投稿記事の情報を取得する。 $post['ApprovalPage'] = $PagePost->data['Page']; $post['ApprovalPage']['post_id'] = $PagePost->data['Page']['id']; $post['ApprovalPage']['id'] = $approvalData['ApprovalPage']['id']; $post['ApprovalPage']['pass_stage'] = $now; //もしもこれが最終権限でなければ、次のステージ権限者を保存しておく。 if ($settingData['ApprovalLevelSetting']['last_stage'] != $now) { $post['ApprovalPage']['next_approver_id'] = $settingData['ApprovalLevelSetting']['level' . $next_stage . '_approver_id']; } /* 承認の記録を保存する */ //承認情報DBへ保存する。 if ($approvalPage->save($post)) { //最終承認まで行っていない場合は、強制非公開にする。 if ($post['ApprovalPage']['pass_stage'] < $last_stage) { $PagePost->data['Page']['status'] = 0; //メールの送信(最終までいけば送信は不要) $this->_sendApprovalMail($settingData, $approvalData, $PagePost->data, 1); } return true; } } break; //承認権限者がグループ単位で設定されている場合 //承認権限者がグループ単位で設定されている場合 case 'group': /* 権限なし */ //承認権限がない場合、常に非公開 if ($approverId != $loginUserGroupId) { $PagePost->data['Page']['status'] = 0; /* 権限あり */ //承認権限を持っている場合 } else { /* データの整理を行う */ //現在の承認ステージ $now = $pass_stage + 1; //次の承認ステージ $next_stage = $now + 1; //ブログ投稿記事の情報を取得する。 $post['ApprovalPage'] = $PagePost->data['Page']; $post['ApprovalPage']['page_id'] = $PagePost->data['Page']['id']; $post['ApprovalPage']['id'] = $approvalData['ApprovalPage']['id']; $post['ApprovalPage']['pass_stage'] = $now; //もしもこれが最終権限でなければ、次のステージ権限者を保存しておく。 if ($settingData['ApprovalLevelSetting']['last_stage'] != $now) { $post['ApprovalPage']['next_approver_id'] = $settingData['ApprovalLevelSetting']['level' . $next_stage . '_approver_id']; } /* 承認の記録を保存する */ //承認情報DBへ保存する。 if ($approvalPage->save($post)) { //pass_stageがlast_stageより大きくなければ(最終承認まで行っていない)、非公開は続行。 if ($post['ApprovalPage']['pass_stage'] < $last_stage) { $PagePost->data['Page']['status'] = 0; //メールの送信(最終までいけば送信は不要) $this->_sendApprovalMail($settingData, $approvalData, $PagePost->data, 1); } return true; } } break; default: break; } } //------------------------------ // 2:却下の時 //------------------------------ } elseif ($PagePost->data['Approval']['approval_flag'] == 2) { /* 現在の状況を取得 */ $approvalData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $PagePost->data['Page']['id']))); /* 承認却下の処理実行 */ //すでに承認を1段階以上受けている場合 if ($approvalData['ApprovalPage']['pass_stage'] != 0) { //次の権限者を1段階前に戻す $prevStage = $approvalData['ApprovalPage']['pass_stage'] - 1; if ($prevStage == 0) { //-1した結果、0なら申請まで戻る。 $approvalData['ApprovalPage']['next_approver_id'] = 0; } else { $approvalData['ApprovalPage']['next_approver_id'] = $settingData['ApprovalLevelSetting']['level' . $prevStage . '_approver_id']; } //通過ステージを1段階戻す。もしも最終段階まで承認が終わっていれば2つ戻す if ($approvalData['ApprovalPage']['pass_stage'] == $settingData['ApprovalLevelSetting']['last_stage']) { $approvalData['ApprovalPage']['pass_stage'] = $approvalData['ApprovalPage']['pass_stage'] - 2; if ($approvalData['ApprovalPage']['pass_stage'] < 0) { $approvalData['ApprovalPage']['pass_stage'] = 0; } } else { $approvalData['ApprovalPage']['pass_stage'] = $approvalData['ApprovalPage']['pass_stage'] - 1; } //第1段階で却下された場合、次の権限者は0にする。 } else { $approvalData['ApprovalPage']['next_approver_id'] = 0; } /* 却下の記録を保存する */ //承認情報DBを更新する if ($approvalPage->save($approvalData)) { //常に非公開状態(承認が下るまでは非公開にする) $PagePost->data['Page']['status'] = 0; //メールの送信 $this->_sendApprovalMail($settingData, $approvalData, $PagePost->data, 2); return true; } //------------------------------ // 申請(新規登録or最初まで却下されてきた場合) //------------------------------ } elseif ($PagePost->data['Approval']['approval_flag'] == 3) { //現在の承認情報データの取得 //(一度却下されたあとの場合はデータが存在する。) if (!empty($PagePost->data['Page']['id'])) { $approvalData = $approvalPage->find('first', array('conditions' => array('ApprovalPage.page_id' => $PagePost->data['Page']['id']))); } //すでに承認情報データがある(却下されて最初の段階まで戻った場合) if (!empty($approvalData)) { //承認情報DBへデータを挿入する。 $post['ApprovalPage'] = $PagePost->data['Page']; //IDだけは一旦捨てる。 $post['ApprovalPage']['id'] = $approvalData['ApprovalPage']['id']; //申請段階のため通過ステージは0にする $post['ApprovalPage']['pass_stage'] = 0; //申請段階のため次のステージは必ず1 $post['ApprovalPage']['next_approver_id'] = $settingData['ApprovalLevelSetting']['level1_approver_id']; //承認申請を行う段階で選択されたカテゴリを取得する。 if (!empty($PagePost->data['Page']['page_category_id'])) { $post['ApprovalPage']['next_approver_id'] = $PagePost->data['Page']['page_category_id']; } /* 申請の記録を保存する */ if ($approvalPage->save($post)) { //常に非公開状態(承認が下るまでは非公開にする) $PagePost->data['Page']['status'] = 0; //メールの送信 $this->_sendApprovalMail($settingData, $approvalData, $PagePost->data, 3); return true; } //承認情報データがない場合 } else { //承認情報DBへデータを挿入する。 $post['ApprovalPage'] = $PagePost->data['Page']; //idがある場合(一度保留を経て申請)。 if (!empty($PagePost->data['Page']['id'])) { $post['ApprovalPage']['page_id'] = $PagePost->data['Page']['id']; //idがない場合(新規作成) } else { //ブログの最終IDを取得する。getLastInsertID();が効かない・・・ App::import('Model', 'Page'); $pageModel = new Page(); $pageLastData = $pageModel->find('first', array('order' => array('Page.id DESC'))); $post['ApprovalPage']['page_id'] = (int) $pageLastData['Page']['id'] + 1; } $post['ApprovalPage']['id'] = ''; unset($post['ApprovalPage']['id']); //申請段階のため通過ステージは0にする $post['ApprovalPage']['pass_stage'] = 0; //申請段階のため次のステージは必ず1 $post['ApprovalPage']['next_approver_id'] = $settingData['ApprovalLevelSetting']['level1_approver_id']; /* 申請の記録を保存する */ if ($approvalPage->save($post)) { //常に非公開状態(承認が下るまでは非公開にする) $PagePost->data['Page']['status'] = 0; //メールの送信 $this->_sendApprovalMail($settingData, null, $PagePost->data, 3); return true; } } //------------------------------ // それ以外 //------------------------------ } else { return false; } } }