public function decorateCommunityIntroductionBody(SendMessageData $message)
 {
     $id = $message->getForeignId();
     $community = Doctrine::getTable('Community')->find($id);
     if (!$community) {
         return $message->body;
     }
     $params = array('fromMember' => $message->getMember(), 'message' => $message->body, 'community' => $community);
     return opMessageSender::decorateBySpecifiedTemplate('communityIntroductionMessage', $params);
 }
 public function saveSendList(SendMessageData $message)
 {
     $send_member_id = $this->getValue('send_member_id');
     $send = Doctrine::getTable('MessageSendList')->getMessageByReferences($send_member_id, $message->getId());
     if (!$send) {
         $send = new MessageSendList();
         $send->setSendMessageData($message);
         $send->setMemberId($send_member_id);
         $send->save();
     }
 }
 protected function executeTransaction($conn, $arguments = array(), $options = array())
 {
     $members = Doctrine::getTable('Member')->findAll(Doctrine::HYDRATE_ARRAY);
     $memberIds = array_map(create_function('$m', 'return (int)$m[\'id\'];'), $members);
     foreach ($memberIds as $id) {
         for ($i = 0; $i < $options['number']; ++$i) {
             $sendTo = self::fetchRandomMemberId($id, $memberIds);
             $mes = new SendMessageData();
             $mes->setMemberId($id);
             $mes->setSubject('subject');
             $mes->setBody('body');
             $mes->setIsSend(true);
             $mes->setMessageTypeId(1);
             $mes->save();
             $mes->free();
             $messageSendList = new MessageSendList();
             $messageSendList->setMemberId($sendTo);
             $messageSendList->setSendMessageData($mes);
             $messageSendList->save();
             $messageSendList->free();
             $this->logSection('send message', sprintf("%s - %s", $id, $sendTo));
         }
     }
 }
 /**
  * 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;
 }
  protected function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager($this->configuration);
    $this->conn = $databaseManager->getDatabase('doctrine')->getDoctrineConnection();

    $sql = 'SELECT id FROM member WHERE is_active != 0';
    $where = array();
    if ( $options['min'] && $options['max']  && $options['min'] <= $options['max'])
    {
        $sql .= ' AND id BETWEEN ? AND ?';
        $where = array(intval($options['min']),intval($options['max']));
    }
    $memberIds = $this->conn->fetchColumn($sql, $where);

    $sql = 'SELECT max(id) FROM member WHERE is_active != 0';
    $maxmemberId = $this->conn->fetchOne($sql);

    foreach ($memberIds as $id)
    {
      for ($i=0; $i<$options['number']; ++$i)
      {
        // 送り先は、id1~存在する最大のidからランダムに選出
        $sendTo = rand(1,$maxmemberId);
        $mes = new SendMessageData();
        $mes->setMemberId($id);
        $mes->setSubject('subject');
        $mes->setBody('body');

        // 一定割合で下書き
        $rate = $options['draftrate'];
        if ($rate != 0 && rand(1,100) <= $rate )
        {
          $mes->setIsSend(false);
        } else {
          $mes->setIsSend(true);
        }
        $mes->setMessageTypeId(1);
        $mes->save();

        $messageSendList = new MessageSendList();
        $messageSendList->setMemberId($sendTo);
        $messageSendList->setSendMessageData($mes);
        $messageSendList->save();

        $mesid = $mes->getId();
        $messageSendListid = $messageSendList->getId();

        $mes->free();
        $messageSendList->free();

        $this->logSection('send message', sprintf("%s - %s", $id, $sendTo));

        // 同時にあしあとをつける
        if ($options['footprint'] > 0)
        {
          $r_date = date('Y-m-d');
          for ($j=0 ; $j < $options['footprint'] ; ++$j) { 
              $ashi = new Ashiato();
              $ashi->setMemberIdFrom($id);
              $ashi->setMemberIdTo($sendTo);
              $ashi->setRDate($r_date);
              $ashi->save();
          }
          $ashi->free();
        }

        // 一定割合でゴミ箱へ
        $rate = $options['dustrate'];
        if ($rate != 0 && rand(1,100) <= $rate )
        {
            // 送信者がゴミ箱
            $deleted_message = new DeletedMessage();
            $deleted_message->setMemberId($id);
            $deleted_message->setMessageSendListId($messageSendListid);
            $deleted_message->save();

            // 受信者がゴミ箱
            $rec_deleted_message = new DeletedMessage();
            $rec_deleted_message->setMemberId($sendTo);
            $rec_deleted_message->setMessageId($mesid);
            $rec_deleted_message->save();

            $deleted_message->free();
            $rec_deleted_message->free();

            $this->logSection('delete message', sprintf("%s - %s", $id, $sendTo));
        }

      }
    }
  }
<?php

include dirname(__FILE__) . '/../../bootstrap/unit.php';
include dirname(__FILE__) . '/../../bootstrap/database.php';
$t = new lime_test(null, new lime_output_color());
$replyMessage = new SendMessageData();
$replyMessage->setReturnMessageId(5);
$form = new SendMessageForm($replyMessage);
$t->is($form->getDefault('subject'), 'Re:test subject');
$t->is($form->getDefault('body'), "> test body\n> test line");
$replyMessage = new SendMessageData();
$replyMessage->setReturnMessageId(6);
$form = new SendMessageForm($replyMessage);
$t->is($form->getDefault('subject'), 'Re:');
$t->is($form->getDefault('body'), "");
$sendMessage = new SendMessageData();
$form = new SendMessageForm($sendMessage);
$t->isnt($form->getDefault('subject'), 'Re:');
$t->is($form->getDefault('body'), "");
 public function decorateFriendLinkBody(SendMessageData $message)
 {
     $params = array('fromMember' => $message->getMember(), 'message' => $message->body);
     return opMessageSender::decorateBySpecifiedTemplate('friendLinkMessage', $params);
 }