/**
  * send message
  *
  * Available options:
  *
  *  * type      : The message type   (default: 'message')
  *  * identifier: The identifier of foreign table (default: 0)
  *  * is_read   : A default value of is_read flag (default: false)
  *  * fromMember: The message sender (default: my member object)
  *
  * @param mixed   $toMembers  a Member instance or array of Member instance
  * @param string  $subject    a subject of the message
  * @param string  $body       a body of the message
  * @param array   $options    options
  * @return SendMessageData
  */
 public static function sendMessage($toMembers, $subject, $body, $options = array())
 {
     $options = array_merge(array('type' => 'message', 'identifier' => 0, 'is_read' => false), $options);
     if ($toMembers instanceof Member) {
         $toMembers = array($toMembers);
     } elseif (!is_array($toMembers)) {
         throw new InvalidArgumentException();
     }
     $sendMessageData = new SendMessageData();
     if (!isset($options['fromMember'])) {
         $options['fromMember'] = sfContext::getInstance()->getUser()->getMember();
     }
     $sendMessageData->setMember($options['fromMember']);
     $sendMessageData->setSubject($subject);
     $sendMessageData->setBody($body);
     $sendMessageData->setForeignId($options['identifier']);
     $sendMessageData->setMessageType(Doctrine::getTable('MessageType')->getMessageTypeIdByName($options['type']));
     $sendMessageData->setIsSend(1);
     foreach ($toMembers as $member) {
         $send = new MessageSendList();
         $send->setSendMessageData($sendMessageData);
         $send->setMember($member);
         $send->setIsRead($options['is_read']);
         $send->save();
     }
     return $sendMessageData;
 }