コード例 #1
0
 /**
  * 申請・承認・差戻し連絡メール送信
  *
  * @param   array $setting
  * @param   array   $approvalData
  * @param   array   $postData
  * @param   array   $approvalType
  * @return  boolean
  * @access  public
  */
 private function _sendApprovalMail($setting, $approvalData = null, $postData, $approvalType)
 {
     /* インポート */
     //コンポーネント
     /* TODO メール送信にBcEmailComponentを使用する
        App::import('Component', 'BcEmail');
        */
     //モデル
     App::import('Model', 'User');
     $userModel = new User();
     //サイト設定
     App::import('Model', 'SiteConfig');
     $siteConfigModel = new SiteConfig();
     $siteConfigs = $siteConfigModel->find('first', array('conditions' => array('SiteConfig.name' => 'email')));
     /* 情報の整理 */
     //タイプ
     $type = $setting['ApprovalLevelSetting']['type'];
     //------------------------------
     // 固定ページ
     //------------------------------
     if ($type == 'page') {
         //承認タイプによって内容を変更する
         switch ($approvalType) {
             case 1:
                 $approvalTypeVal = '承認申請';
                 $firstMes = '表題の固定ページについて、前段階の承認権限者より承認が下りました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             case 2:
                 $approvalTypeVal = '差戻通知';
                 $firstMes = '表題の固定ページについて、次段階の承認権限者より差戻しがありました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             case 3:
                 $approvalTypeVal = '承認申請';
                 $firstMes = '表題の固定ページについて、作成者より承認申請がありました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             default:
                 break;
         }
         //メールを送るべき相手の段階
         if (!empty($approvalData)) {
             //ただし差戻し後の申請段階だとpass_stageが0になっている。
             //申請時のメールは常に第1段階に権限者へ渡る。
             if ($approvalType == 3) {
                 $passStage = 1;
             } else {
                 $passStage = $approvalData['ApprovalPage']['pass_stage'];
             }
             //新規作成時は1段目の権限者に送る。
         } else {
             $passStage = 1;
         }
         //タイトルの確認
         $title = $postData['Page']['title'];
         //送信先のタイプ
         if ($passStage != 0) {
             //最初の段階でなければgroupかuserかを取得
             $approverType = $setting['ApprovalLevelSetting']['level' . $passStage . '_type'];
         } else {
             $approverType = 'user';
             //最初の段階まで戻っていれば作成者(user)にメールする。
         }
         //最初の申請前の段階まで戻った時は作成者に送る
         //そうでなければ権限者に送る。
         if ($approvalData['ApprovalPage']['next_approver_id'] != 0) {
             //送信先のユーザーを特定する。
             if ($approverType == 'user') {
                 //ユーザーID
                 $userID = $setting['ApprovalLevelSetting']['level' . $passStage . '_approver_id'];
                 //ユーザー情報の取得
                 $userData = $userModel->findById($userID);
             } else {
                 //グループID
                 $groupID = $setting['ApprovalLevelSetting']['level' . $passStage . '_approver_id'];
                 $userDatas = $userModel->find('all', array('conditions' => array('User.user_group_id' => $groupID)));
             }
             //申請の前まで戻ってしまった場合。
         } else {
             $userID = $postData['Page']['author_id'];
             $userData = $userModel->findById($userID);
         }
         //メッセージの取得
         $mailData['message'] = '';
         if (!empty($postData['Approval']['approval_comment'])) {
             $mailData['message'] = $postData['Approval']['approval_comment'];
         }
         /* メール送信設定 */
         // TODO BcEmailComponentを使って送信する。
         mb_language("japanese");
         mb_internal_encoding("UTF-8");
         $subject = "【" . $approvalTypeVal . "】" . $title;
         $from = $siteConfigs['SiteConfig']['value'];
         //メールの内容作成
         $body = $firstMes . "■申し送り事項" . "\n" . $mailData['message'] . "\n" . "\n" . "以上";
         //送信処理
         if ($approverType == 'user') {
             if (!empty($userData['User']['email'])) {
                 //メールの送信処理実行
                 $to = $userData['User']['email'];
                 mb_send_mail($to, $subject, $body, "From:" . $from);
             }
             //グループだったら全員にループしつつメールする。
         } elseif ($approverType == 'group') {
             if (!empty($userDatas)) {
                 foreach ($userDatas as $data) {
                     if (!empty($data['User']['email'])) {
                         //メールの送信処理実行
                         $to = $userData['User']['email'];
                         mb_send_mail($to, $subject, $body, "From:" . $from);
                     }
                 }
             }
         }
         //------------------------------
         // ブログ
         //------------------------------
     } else {
         //承認タイプによって内容を変更する
         switch ($approvalType) {
             case 1:
                 $approvalTypeVal = '承認申請';
                 $firstMes = '表題のブログ記事について、前段階の承認権限者より承認が下りました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             case 2:
                 $approvalTypeVal = '差戻通知';
                 $firstMes = '表題のブログ記事について、次段階の承認権限者より差戻しがありました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             case 3:
                 $approvalTypeVal = '承認申請';
                 $firstMes = '表題のブログ記事について、作成者より承認申請がありました。' . "\n";
                 $firstMes .= '内容をお確かめのうえ、承認処理をお願いします。' . "\n" . "\n";
                 break;
             default:
                 break;
         }
         //メールを送るべき相手の段階(0の時は作成者に送ることになる)
         if (!empty($approvalData)) {
             //ただし差戻し後の申請段階だとpass_stageが0になっている。
             //申請時のメールは常に第1段階に権限者へ渡る。
             if ($approvalType == 3) {
                 $passStage = 1;
             } else {
                 $passStage = $approvalData['ApprovalPost']['pass_stage'];
             }
             //新規作成時は1段目の権限者に送る。
         } else {
             $passStage = 1;
         }
         //タイトルの確認
         $title = $postData['BlogPost']['name'];
         //送信先のタイプ
         if ($passStage != 0) {
             //最初の段階でなければgroupかuserかを取得
             $approverType = $setting['ApprovalLevelSetting']['level' . $passStage . '_type'];
         } else {
             $approverType = 'user';
             //最初の段階まで戻っていれば作成者(user)にメールする。
         }
         //echo $passStage;exit();
         //申請の前段階まで戻った場合は作成者にメールする。
         //そうでなければ、権限者へメールする。
         if ($approvalData['ApprovalPost']['next_approver_id'] != 0) {
             //送信先のユーザーを特定する。
             if ($approverType == 'user') {
                 //ユーザーID
                 $userID = $setting['ApprovalLevelSetting']['level' . $passStage . '_approver_id'];
                 //ユーザー情報の取得
                 $userData = $userModel->findById($userID);
             } else {
                 //グループID
                 $groupID = $setting['ApprovalLevelSetting']['level' . $passStage . '_approver_id'];
                 $userDatas = $userModel->find('all', array('conditions' => array('User.user_group_id' => $groupID)));
             }
             //申請の前段階まで戻ってしまった
         } else {
             $userID = $postData['BlogPost']['user_id'];
             $userData = $userModel->findById($userID);
         }
         //メッセージの取得
         $mailData['message'] = '';
         if (!empty($postData['Approval']['approval_comment'])) {
             $mailData['message'] = $postData['Approval']['approval_comment'];
         }
         /* メール送信設定 */
         // TODO BcEmailComponentを使って送信する。
         mb_language("japanese");
         mb_internal_encoding("UTF-8");
         $subject = "【" . $approvalTypeVal . "】" . $title;
         $from = $siteConfigs['SiteConfig']['value'];
         //メールの内容作成
         $body = $firstMes . "■申し送り事項" . "\n" . $mailData['message'] . "\n" . "\n" . "以上";
         //送信処理
         if ($approverType == 'user') {
             if (!empty($userData['User']['email'])) {
                 //メールの送信処理実行
                 $to = $userData['User']['email'];
                 mb_send_mail($to, $subject, $body, "From:" . $from);
             }
             //グループだったら全員にループしつつメールする。
         } elseif ($approverType == 'group') {
             if (!empty($userDatas)) {
                 foreach ($userDatas as $data) {
                     if (!empty($data['User']['email'])) {
                         //メールの送信処理実行
                         $to = $userData['User']['email'];
                         mb_send_mail($to, $subject, $body, "From:" . $from);
                     }
                 }
             }
         }
     }
 }