예제 #1
0
 /**
  * ルーム内で該当パーミッションありのユーザ ゲット
  * - MailQueueUser に 承認者達をsaveするために必要
  *
  * @param string $permissionKey パーミッションキー
  * @param string $roomId ルームID
  * @return array
  */
 public function getRolesRoomsUsersByPermission($permissionKey, $roomId = null)
 {
     $this->loadModels(array('RolesRoomsUser' => 'Rooms.RolesRoomsUser'));
     if ($roomId === null) {
         $roomId = Current::read('Room.id');
     }
     $WorkflowComponent = new WorkflowComponent(new ComponentCollection());
     $permissions = $WorkflowComponent->getBlockRolePermissions(array($permissionKey), $roomId);
     foreach ($permissions['BlockRolePermissions'][$permissionKey] as $key => $roomRolePermission) {
         if (!$roomRolePermission['value']) {
             unset($permissions['BlockRolePermissions'][$permissionKey][$key]);
         }
     }
     //		$permissions = $WorkflowComponent->getRoomRolePermissions(array($permissionKey),
     //			DefaultRolePermission::TYPE_ROOM_ROLE,
     //			$roomId);
     //		foreach ($permissions['RoomRolePermission'][$permissionKey] as $key => $roomRolePermission) {
     //			if (!$roomRolePermission['value']) {
     //				unset($permissions['RoomRolePermission'][$permissionKey][$key]);
     //			}
     //		}
     $roleKeys = array_keys($permissions['BlockRolePermissions'][$permissionKey]);
     //$roleKeys = array_keys($permissions['RoomRolePermission'][$permissionKey]);
     $conditions = array('Room.id' => $roomId, 'RolesRoom.role_key' => $roleKeys);
     $rolesRoomsUsers = $this->RolesRoomsUser->getRolesRoomsUsers($conditions);
     return $rolesRoomsUsers;
 }
예제 #2
0
 /**
  * キューからメール送信
  *
  * @param array $mailQueueUser メール配信先データ
  * @param int $mailQueueLanguageId キューの言語ID
  * @return bool|string|array false:エラー|送信メール文|送信メール文配列
  */
 public function sendQueueMail($mailQueueUser, $mailQueueLanguageId)
 {
     if ($this->body == '') {
         $logMessage = 'Mail body is empty.';
         LogError($logMessage . ' [' . __METHOD__ . '] ' . __FILE__ . ' (line ' . __LINE__ . ')');
         return false;
     }
     // 改行対応
     $this->brReplace();
     // --- 3パターン対応
     $roomId = Hash::get($mailQueueUser, 'room_id');
     $userId = Hash::get($mailQueueUser, 'user_id');
     $toAddress = Hash::get($mailQueueUser, 'to_address');
     if ($roomId === null && $userId === null && $toAddress === null) {
         $logMessage = 'Mail delivery destination is empty.';
         LogError($logMessage . ' [' . __METHOD__ . '] ' . __FILE__ . ' (line ' . __LINE__ . ')');
         return false;
     }
     $messages = null;
     if (isset($roomId)) {
         // --- ルーム単位でメール配信
         $blockKey = $mailQueueUser['block_key'];
         $sendRoomPermission = $mailQueueUser['send_room_permission'];
         $WorkflowComponent = new WorkflowComponent(new ComponentCollection());
         $permissions = $WorkflowComponent->getBlockRolePermissions(array($sendRoomPermission), $roomId, $blockKey);
         $permRoleKeys = Hash::extract($permissions['BlockRolePermissions'][$sendRoomPermission], '{s}[value=1]');
         $roleKeys = Hash::extract($permRoleKeys, '{n}.role_key');
         $conditions = array('Room.id' => $roomId, 'RolesRoom.role_key' => $roleKeys);
         $rolesRoomsUsers = $this->RolesRoomsUser->getRolesRoomsUsers($conditions);
         $rolesRoomsUserIds = Hash::extract($rolesRoomsUsers, '{n}.RolesRoomsUser.user_id');
         // 送らないユーザIDをルーム配信ユーザIDから排除
         $notSendRoomUserIds = Hash::get($mailQueueUser, 'not_send_room_user_ids');
         $notSendRoomUserIds = explode('|', $notSendRoomUserIds);
         $userIds = array_diff($rolesRoomsUserIds, $notSendRoomUserIds);
         $users = $this->User->find('all', array('recursive' => -1, 'conditions' => array('id' => $userIds), 'callbacks' => false));
         $messages = $this->__sendUserEmails($users, $mailQueueLanguageId);
     } elseif (isset($userId)) {
         // --- user単位でメール配信
         $user = $this->User->find('first', array('recursive' => -1, 'conditions' => array('id' => $userId), 'callbacks' => false));
         $messages = $this->__sendUserEmails(array($user), $mailQueueLanguageId);
     } elseif (isset($toAddress)) {
         // --- メールアドレス単位でメール配信
         $this->setFrom($mailQueueLanguageId);
         parent::to($toAddress);
         parent::subject($this->subject);
         $messages = parent::send($this->body);
     }
     return $messages;
 }