2017 © Pedro Peláez
 

symfony-bundle connection-bundle

Directed graph implementation to create any connection between two objects (ie. follower/following relation in a social network)

image

undf/connection-bundle

Directed graph implementation to create any connection between two objects (ie. follower/following relation in a social network)

  • Thursday, January 7, 2016
  • by undefined
  • Repository
  • 2 Watchers
  • 2 Stars
  • 453 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 6 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

ConnectionBundle Build Status

State : Working. Unstable., (*1)

Implementation of a directed Graph for establishing connections between objects., (*2)

For instance, a connection may represent: * follower/following relationship between two users on a social network * an user "following" a "tag" * in fact, any relation between any root objects which need to be connected for any reason ;-), (*3)

The purpose of this bundle is not to get a ready-to-use implementation but at the minimum a code base to ease the integration of such a system in a Symfony 2 application., (*4)

Use case

get("kitano_connection.manager.connection");

        $userA = $userRepository->find(1);
        $userB = $bookRepository->find(42);

        // User A wants to "follow" User B activity
        // User A clics "follow" button on User B profile page
        $connectionManager->connect($userA, $userB, 'follow');
    }

    public function newPostAction() 
    {
        $connectionManager = $this->get("kitano_connection.manager.connection");

        $userA = $userRepository->find(1);

        // User B does something like creating a new Post
        // We notify all users connected to B
        $connections = $connectionManager->getConnectionsFrom($userB, array('type' => 'follow'));

        foreach($connections as $connection) {
            // Notify !
        }
    }
}

```

Configuration
-------------

**a) Short functional example**

A simple configuration could be something like that

```yml
kitano_connection:
    persistence:
        type: doctrine_orm
```

Using this configuration, you can use KitanoConnectionBundle as the [Use Case](#use-case) example.

After configuration, don't forget to update your RDBMS schema
``` bash
$ php app/console doctrine:schema:update
```

**b) Custom connection**

If you want a custom connection entity.
```yml
kitano_connection:
    persistence:
        type: doctrine_orm
        managed_class: "Acme\Entity\Connection"
```

In this case, don't forget to define an entity schema for **Acme\Entity\Connection**

**c) Custom connection with a custom persistance layer**

If you want to use a custom repository, use the above configuration.

```yml
kitano_connection:
    persistence:
        type: custom
        managed_class: "Acme\Entity\Connection"
```

Define a service named : **kitano_connection.repository.connection** which implement Kitano\ConnectionBundle\Repository\ConnectionRepositoryInterface

Events
------

Events are availble if you want to hook the system.

```php
namespace Acme\DemoBundle\Event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

use Kitano\ConnectionBundle\Event\ConnectionEvent;

class ConnectionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            ConnectionEvent::CONNECTED => array('onConnected', 0),
            ConnectionEvent::DISCONNECTED => array('onDisconnected', 0),
        );
    }

    public function onConnected(ConnectionEvent $event)
    {
        $connection = $event->getConnection();
        // ...
    }

    public function onDisconnected(ConnectionEvent $event)
    {
        $connection = $event->getConnection();
        // ...
    }
}
```

```xml

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <parameters>
        <parameter key="acme.demo.connection_subscriber.class">Acme\DemoBundle\Event\ConnectionSubscriber</parameter>
    </parameters>

    <services>
        <!-- listener -->
        <service id="acme.demo.connection_subscriber" class="%acme.demo.connection_subscriber.class%" public="false">
            <tag name="kernel.event_subscriber" />
        </service>
    </services>
</container>

Limitations

  • This bundle can deal with only one persistance layer. It means that you can't Connect a Document object with an Entity object.

License

This bundle is under the MIT license. See the complete license in the bundle:, (*5)

Resources/meta/LICENSE

Testing

Require PHPUnit, phpunit/DbUnit, (*6)

$ php composer.phar update --dev
$ phpunit

The Versions

07/01 2016

dev-master

9999999-dev

Directed graph implementation to create any connection between two objects (ie. follower/following relation in a social network)

  Sources   Download

MIT

The Requires

 

The Development Requires

social friends friendship connection

04/07 2014

dev-undf

dev-undf

Directed graph implementation to create any connection between two objects (ie. follower/following relation in a social network)

  Sources   Download

MIT

The Requires

 

The Development Requires

social friends friendship connection