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)); } } }
function addFriend($memberId, $memberId2, $isAccessBlock = false) { $memberRelationship = Doctrine::getTable('MemberRelationship')->retrieveByFromAndTo($memberId, $memberId2); if (!$memberRelationship) { $memberRelationship = new MemberRelationship(); $memberRelationship->setMemberIdFrom($memberId); $memberRelationship->setMemberIdTo($memberId2); } $memberRelationship->setFriend(true); $memberRelationship->setIsAccessBlock($isAccessBlock); $memberRelationship->save(); }
public function saveConfig($name, $value) { if ('access_block' !== $name) { return parent::saveConfig($name, $value); } $value = $this->setBlockedIds; $key = 0; foreach ($value as $memberId) { $defaultId = 0; if ($key + 1 <= count($this->blockedId)) { $defaultId = $this->blockedId[$key]; } switch ($memberId) { case '': // delete if (!$defaultId) { break; } $relationship = Doctrine::getTable('MemberRelationship')->retrieveByFromAndTo($this->member->getId(), $defaultId); if (!$relationship) { break; } $relationship->setIsAccessBlock(false); $relationship->save(); break; case $defaultId: // equal break; default: $relationship = Doctrine::getTable('MemberRelationship')->retrieveByFromAndTo($this->member->getId(), $memberId); // update if ($defaultId) { if (!$relationship) { $relationship = Doctrine::getTable('MemberRelationship')->retrieveByFromAndTo($this->member->getId(), $defaultId); } } else { if (!$relationship) { $relationship = new MemberRelationship(); $relationship->setMemberIdFrom($this->member->getId()); } } $relationship->setMemberIdTo($memberId); $relationship->setIsAccessBlock(true); $relationship->save(); } if ($key >= count($this->blockedId)) { break; } $key++; } }
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); } }
private function createCluster($memberNum) { $memberIds = array(); for($i = 0; $i < $memberNum; ++$i) { $member = new Member(); $member->setName('dummy'); $member->setIsActive(true); $member->save(); $memberIds[] = $member->getId(); $member->setName(sprintf('dummy%d', $member->getId())); $member->save(); $address = sprintf('*****@*****.**', $member->getId()); $this->setMemberConfig($member->getId(), 'pc_address', $address); $this->setMemberConfig($member->getId(), 'mobile_address', $address); $password = '******'; $this->setMemberConfig($member->getId(), 'password', md5($password)); $member->free(true); } for($i = 0; $i < $memberNum; ++$i) { for($j = $i + 1; $j < $memberNum; ++$j) { if ($i === $j) continue; $relation = new MemberRelationship(); $relation->setMemberIdFrom($memberIds[$i]); $relation->setMemberIdTo($memberIds[$j]); $relation->setFriend(true); $relation->save(); $relation->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)); } } } }
$dummyRelation1->setMemberIdTo(4); $dummyRelation1->setMemberIdFrom(1); $dummyRelation2 = new MemberRelationship(); $dummyRelation2->setMemberIdTo(1); $dummyRelation2->setMemberIdFrom(1); $dummyRelation3 = new MemberRelationship(); $dummyRelation3->setMemberIdTo(1); $dummyRelation3->setMemberIdFrom(5); $newRelation1 = new MemberRelationship(); $newRelation1->setMemberIdTo(3); $newRelation1->setMemberIdFrom(1); //------------------------------------------------------------ $t->diag('MemberRelationship'); $t->diag('MemberRelationship::preSave()'); try { $dummyRelation2->save(); $t->fail(); } catch (LogicException $e) { $t->pass(); } catch (Exception $e) { $t->fail(); } //------------------------------------------------------------ $t->diag('MemberRelationship::isFriend()'); $t->ok($relation1->isFriend()); $t->ok($relation2->isFriend()); $t->ok(!$relation3->isFriend()); //------------------------------------------------------------ $t->diag('MemberRelationship::isFriendPreFrom()'); $t->ok(!$relation1->isFriendPreFrom()); $t->ok(!$relation2->isFriendPreFrom());