/** * ルーム内で該当パーミッションありのユーザ ゲット * - 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; }
/** * キューからメール送信 * * @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; }