Skip to content

Ripoo is a PHP8 XML-RPC client handler for Odoo

License

Notifications You must be signed in to change notification settings

sozialinfo/odoo-ripcord-8

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ripoo (odoo-ripcord-8)

This fork was created to make up for the lack of XMLRPC bundled with PHP 8.

Ripoo is a PHP7 XML-RPC client handler for Odoo. Forked from robroypt/odoo-client, itself using darkaonline/ripcord, Ripoo is a PSR-compliance edition of ripcord, the library used in example in the Odoo External API documentation for PHP.

This library is on GitHub.

Supported versions

This library should work with all versions of Odoo, at least between 8.0 and [14.0][9], Community & Enterprise Editions. I personnaly tested it only with 11.0 but their API is the same.

It can be used in all PHP frameworks, like Symfony, Laravel or Magento2.

If you find any incompatibilities, please create an issue or submit a pull request.

  • Verified that this works with WordPress and Odoo 14.

Changelog

See CHANGELOG.md

Installation

composer require Sage-Goddess/odoo-ripcord-8

Update

  • To update all your libraries included in your composer.json
composer update
  • But if you want to update JUST this library :
composer update Sage-Goddess/odoo-ripcord-8

Add --with-dependencies to also update others libraries used by this one.

Usage

  • Instantiate a new client via instance itself :
use Ripoo\OdooClient;

$host = 'example.odoo.com:8080';
$db = 'example-database';
$user = 'user@email.com';
$password = 'yourpassword';

$client = new OdooClient($host, $db, $user, $password);
  • Or you can instantiate new client via ClientFactory, to centralize configuration use good Design Patterns .

Basic sample for Magento2 :

class RipooClientProvider
{
    private $clientFactory;
    private $client;
    private $scopeConfig;
    
    function __construct(
        \Ripoo\OdooClientFactory $clientFactory,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
    ) {
        $this->clientFactory = $clientFactory;
        $this->scopeConfig   = $scopeConfig;
    }

    public function createClient() : \Ripoo\OdooClient
    {
        // TODO secure injections
        $odooUrl  = $this->scopeConfig->getValue('my/settings/odoo_url');
        $odooDb   = $this->scopeConfig->getValue('my/settings/odoo_database');
        $odooUser = $this->scopeConfig->getValue('my/settings/odoo_user');
        $odooPwd  = $this->scopeConfig->getValue('my/settings/odoo_pwd');

        $this->client = $this->clientFactory->create(
            $host,
            $odooDb,
            $odooUser,
            $odooPwd
        );
        return $this->client;
    }
    
    public function getClient() : \Ripoo\OdooClient
    {
        // You can force nenewing a Client based on createdAt
        if (!$this->client) {
            $this->client = $this->createClient();
        }
        return $this->client;
    }
}

For the client to work you have to exclude the http:// and /xmlrpc/2 parts in the url. If you want to use another Odoo API, put it in the optional 5th parameter of constructor.

xmlrpc/2/common endpoint

Getting version information:

$client->version();

There is no login/authenticate method. The client does authentication for you, that is why the credentials are passed as constructor arguments.

xmlrpc/2/object endpoint

Search for records:

$criteria = [
  ['customer', '=', true],
];
$offset = 0;
$limit = 10;

$client->search('res.partner', $criteria, $offset, $limit);

Search and count records.

$criteria = [
  ['customer', '=', true],
];

$client->search_count('res.partner', $criteria);

Reading records:

$ids = $client->search('res.partner', [['customer', '=', true]], 0, 10);

$fields = ['name', 'email', 'customer'];

$customers = $client->read('res.partner', $ids, $fields);

Search and Read records:

$criteria = [
  ['customer', '=', true],
];

$fields = ['name', 'email', 'customer'];

$customers = $client->search_read('res.partner', $criteria, $fields, 10);

Creating records:

$data = [
  'name' => 'John Doe',
  'email' => 'foo@bar.com',
];

$id = $client->create('res.partner', $data);

Updating records:

// change email address of user with current email address foo@bar.com
$ids = $client->search('res.partner', [['email', '=', 'foo@bar.com']], 0, 1);

$client->write('res.partner', $ids, ['email' => 'baz@quux.com']);

// 'uncustomer' the first 10 customers
$ids = $client->search('res.partner', [['customer', '=', true]], 0, 10);

$client->write('res.partner', $ids, ['customer' => false]);

Deleting records:

$ids = $client->search('res.partner', [['email', '=', 'baz@quuz.com']], 0, 1);

$client->unlink('res.partner', $ids);

How to know the model names

  • Model ir.models will return a list of reachable models.
  • You can also use erppeek :
sudo pip install -U erppeek
erppeek  --server=http://odoo.example.com -d your_db -u admin -p password
your_db >>> models()

License

MIT License. Copyright (c) 2022 Thomas Bondois with updates by Leo Fisher. See LICENSE file.

About

Ripoo is a PHP8 XML-RPC client handler for Odoo

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%