public function addFriendship(DataObject $member, DataObject $followed) {
		if (!$member || !$followed) {
			throw new PermissionDeniedException('Read', 'Cannot read those users');
		}

		if ($member->ID != $this->securityContext->getMember()->ID) {
			throw new PermissionDeniedException('Write', 'Cannot create a friendship for that user');
		}

		$existing = Friendship::get()->filter(array(
			'InitiatorID'		=> $member->ID,
			'OtherID'			=> $followed->ID,
		))->first();

		if ($existing) {
			return $existing;
		}
		
		// otherwise, we have a new one!
		$friendship = new Friendship;
		$friendship->InitiatorID = $member->ID;
		$friendship->OtherID = $followed->ID;
		
		// we add the initiator into the 
		
		// lets see if we have the reciprocal; if so, we can mark these as verified 
		$reciprocal = $friendship->reciprocal();

		// so we definitely add the 'member' to the 'followers' group of $followed
		$followers = $followed->getGroupFor(MicroBlogMember::FOLLOWERS);
		$followers->Members()->add($member);

		if ($reciprocal) {
			$reciprocal->Status = 'Approved';
			$reciprocal->write();
			
			$friendship->Status = 'Approved';
			
			// add to each other's friends groups
			$friends = $followed->getGroupFor(MicroBlogMember::FRIENDS);
			$friends->Members()->add($member);
			
			
			$friends = $member->getGroupFor(MicroBlogMember::FRIENDS);
			$friends->Members()->add($followed);
		}

		$friendship->write();
		return $friendship;
	}
public function addFriendship(DataObject $member, DataObject $followed) {
		if (!$member || !$followed) {
			throw new PermissionDeniedException('Read', 'Cannot read those users');
		}

		if ($member->ID != $this->securityContext->getMember()->ID) {
			throw new PermissionDeniedException('Write', 'Cannot create a friendship for that user');
		}

		$existing = Friendship::get()->filter(array(
			'InitiatorID'		=> $member->ID,
			'OtherID'			=> $followed->ID,
		))->first();

		if ($existing) {
			return $existing;
		}
		
		// otherwise, we have a new one!
		$friendship = new Friendship;
		$friendship->InitiatorID = $member->ID;
		$friendship->OtherID = $followed->ID;
		
		// we add the initiator into the 
		
		// lets see if we have the reciprocal; if so, we can mark these as verified 
		$reciprocal = $friendship->reciprocal();

		// so we definitely add the 'member' to the 'followers' group of $followed
		$followers = $followed->getGroupFor(MicroBlogMember::FOLLOWERS);
		$followers->Members()->add($member);

		if ($reciprocal) {
			$reciprocal->Status = 'Approved';
			$reciprocal->write();
			
			$friendship->Status = 'Approved';
			
			// add to each other's friends groups
			$friends = $followed->getGroupFor(MicroBlogMember::FRIENDS);
			$friends->Members()->add($member);
			
			
			$friends = $member->getGroupFor(MicroBlogMember::FRIENDS);
			$friends->Members()->add($followed);
		}

		$friendship->write();
		return $friendship;
	}
public function addFriendship ( DataObject $ member , DataObject $ followed ) { if ( ! $ member || ! $ followed ) { throw new PermissionDeniedException ( 'Read' , 'Cannot read those users' ) ; } if ( $ member -> ID != $ this -> securityContext -> getMember ( ) -> ID ) { throw new PermissionDeniedException ( 'Write' , 'Cannot create a friendship for that user' ) ; } $ existing = Friendship :: get ( ) -> filter ( array ( 'InitiatorID' => $ member -> ID , 'OtherID' => $ followed -> ID , ) ) -> first ( ) ; if ( $ existing ) { return $ existing ; } // otherwise, we have a new one! $ friendship = new Friendship ; $ friendship -> InitiatorID = $ member -> ID ; $ friendship -> OtherID = $ followed -> ID ; // we add the initiator into the  // lets see if we have the reciprocal; if so, we can mark these as verified  $ reciprocal = $ friendship -> reciprocal ( ) ; // so we definitely add the 'member' to the 'followers' group of $followed $ followers = $ followed -> getGroupFor ( MicroBlogMember :: FOLLOWERS ) ; $ followers -> Members ( ) -> add ( $ member ) ; if ( $ reciprocal ) { $ reciprocal -> Status = 'Approved' ; $ reciprocal -> write ( ) ; $ friendship -> Status = 'Approved' ; // add to each other's friends groups $ friends = $ followed -> getGroupFor ( MicroBlogMember :: FRIENDS ) ; $ friends -> Members ( ) -> add ( $ member ) ; $ friends = $ member -> getGroupFor ( MicroBlogMember :: FRIENDS ) ; $ friends -> Members ( ) -> add ( $ followed ) ; } $ friendship -> write ( ) ; return $ friendship ; }
Create a friendship relationship object

@param DataObject $member
"me", as in the person who triggered the follow
@param DataObject $followed
"them", the person "me" is wanting to add
@return \Friendship
@throws PermissionDeniedException
Create a friendship relationship object