protected function executeTransaction($conn, $arguments = array(), $options = array())
 {
     $members = Doctrine::getTable('Member')->findAll(Doctrine::HYDRATE_ARRAY);
     if (count($members) < $options['number']) {
         throw new Exception('Too few members. Please run "opKdt:generate-member" first.');
     }
     $memberIds = array_map(create_function('$m', 'return (int)$m[\'id\'];'), $members);
     foreach ($memberIds as $id) {
         $friendIds = array_map(create_function('$id', 'return (int)$id;'), Doctrine::getTable('MemberRelationship')->getFriendMemberIds($id));
         $friendIds[] = (int) $id;
         $candidate = array_diff($memberIds, $friendIds);
         shuffle($candidate);
         $candidateSlices = array_slice($candidate, 0, $options['number']);
         foreach ($candidateSlices as $memberIdTo) {
             $mr1 = new MemberRelationship();
             $mr1->setMemberIdFrom($id);
             $mr1->setMemberIdTo($memberIdTo);
             $mr1->setIsFriend(true);
             $mr1->save();
             $mr1->free();
             $mr2 = new MemberRelationship();
             $mr2->setMemberIdFrom($memberIdTo);
             $mr2->setMemberIdTo($id);
             $mr2->setIsFriend(true);
             $mr2->save();
             $mr2->free();
             $this->logSection('make friends', sprintf("%s - %s", $id, $memberIdTo));
         }
     }
 }
  protected function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager($this->configuration);

    $n = (int)$options['number'];
    $link = $options['link'];
    if (!is_null($link))
    {
      $linkMember = Doctrine::getTable('Member')->find($link);
      if (!$linkMember)
      {
        throw new Exception("not found member: ".$link);
      }
    }

    for ($i = 0; $i < $n; $i++)
    {
      $member = new Member();
      $member->setName('dummy');
      $member->setIsActive(self::fetchRandomNotActive($options['notactivemember-rate'], $n));
      $member->save();

      $member->setName(sprintf($options['name-format'], $member->getId()));
      $member->save();

      $address = sprintf($options['mail-address-format'], $member->getId());
      $member->setConfig('pc_address', $address);
      $member->setConfig('mobile_address', $address);

      $password = preg_replace("/%d/", $member->getId(), $options['password-format'], 1);
      $member->setConfig('password', md5($password));

      $this->logSection('member+', $member->getName());
      if (isset($linkMember))
      {
        $memberRelationship1 = new MemberRelationship();
        $memberRelationship1->setMember($member);
        $memberRelationship1->setMemberRelatedByMemberIdFrom($linkMember);
        $memberRelationship1->setIsFriend(true);
        $memberRelationship1->save();

        $memberRelationship2 = new MemberRelationship();
        $memberRelationship2->setMember($linkMember);
        $memberRelationship2->setMemberRelatedByMemberIdFrom($member);
        $memberRelationship2->setIsFriend(true);
        $memberRelationship2->save();
        $this->logSection('friend link', sprintf("%s - %s", $linkMember->getId(), $member->getId()));
      }
    }
  }
 protected function executeTransaction($conn, $arguments = array(), $options = array())
 {
     $n = (int) $options['number'];
     $link = $options['link'];
     if (null !== $link) {
         $linkMember = Doctrine::getTable('Member')->find($link);
         if (!$linkMember) {
             throw new Exception("not found member: " . $link);
         }
     }
     for ($i = 0; $i < $n; $i++) {
         $member = new Member();
         $member->setName('dummy');
         $member->setIsActive(true);
         $member->save();
         $member->setName(sprintf($options['name-format'], $member->getId()));
         $member->save();
         $address = sprintf($options['mail-address-format'], $member->getId());
         self::setMemberConfig($member->id, 'pc_address', $address);
         self::setMemberConfig($member->id, 'mobile_address', $address);
         $password = preg_replace("/%d/", $member->getId(), $options['password-format'], 1);
         self::setMemberConfig($member->id, 'password', md5($password));
         $this->logSection('member+', $member->getName());
         if (isset($linkMember)) {
             $memberRelationship1 = new MemberRelationship();
             $memberRelationship1->setMemberIdTo($member->id);
             $memberRelationship1->setMemberIdFrom($linkMember->id);
             $memberRelationship1->setIsFriend(true);
             $memberRelationship1->save();
             $memberRelationship1->free(true);
             $memberRelationship2 = new MemberRelationship();
             $memberRelationship2->setMemberIdTo($linkMember->id);
             $memberRelationship2->setMemberIdFrom($member->id);
             $memberRelationship2->setIsFriend(true);
             $memberRelationship2->save();
             $memberRelationship2->free(true);
             $this->logSection('friend link', sprintf("%s - %s", $linkMember->getId(), $member->getId()));
         }
         $member->free(true);
     }
 }
  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);

    if (count($memberIds) < $options['number'])
    {
      throw new Exception('Too few members. Please run "opKdt:generate-member" first.');
    }

    foreach ($memberIds as $id)
    {
      $ds = Doctrine::getTable('MemberRelationship')->createQuery()
        ->select('member_id_to')
        ->where('member_id_from = ?', $id)
        ->execute(array(), Doctrine::HYDRATE_NONE);
      $id1 = array_map(create_function('$id', 'return (int)$id[0];'), $ds);
      $ds = Doctrine::getTable('MemberRelationship')->createQuery()
        ->select('member_id_from')
        ->where('member_id_to = ?', $id)
        ->execute(array(), Doctrine::HYDRATE_NONE);
      $id2 = array_map(create_function('$id', 'return (int)$id[0];'), $ds);
      $friendIds = array_merge($id1,$id2);
      $friendIds[] = (int)$id;
      $candidate = array_diff($memberIds, $friendIds);
      shuffle($candidate);
      $candidateSlices = array_slice($candidate, 0, $options['number']);
      foreach ($candidateSlices as $memberIdTo)
      {
        $mr1 = new MemberRelationship();
        $mr1->setMemberIdFrom($id);
        $mr1->setMemberIdTo($memberIdTo);
        $rate = $options['prerate'];
        if ($rate != 0 && rand(1,100) <= $rate )
        {
          // 一定割合で申請のみ
          $mr1->setIsFriend(false);
          $mr1->setIsFriendPre(true);
          $mr1->save();
          $mr1->free();
          $this->logSection('request friends', sprintf("%s - %s", $id, $memberIdTo));
        } else {
          $mr1->setIsFriend(true);
          $mr1->save();
          $mr1->free();
          $mr2= new MemberRelationship();
          $mr2->setMemberIdFrom($memberIdTo);
          $mr2->setMemberIdTo($id);
          $mr2->setIsFriend(true);
          $mr2->setIsFriendPre(false);
          $mr2->save();
          $mr2->free();
          $this->logSection('make friends', sprintf("%s - %s", $id, $memberIdTo));
        }

      }
    }
  }