+++ /dev/null
-# CakePHP
-
-[![Latest Stable Version](https://poser.pugx.org/cakephp/cakephp/v/stable.svg)](https://packagist.org/packages/cakephp/cakephp)
-[![License](https://poser.pugx.org/cakephp/cakephp/license.svg)](https://packagist.org/packages/cakephp/cakephp)
-[![Bake Status](https://secure.travis-ci.org/cakephp/cakephp.png?branch=master)](http://travis-ci.org/cakephp/cakephp)
-[![Code consistency](http://squizlabs.github.io/PHP_CodeSniffer/analysis/cakephp/cakephp/grade.svg)](http://squizlabs.github.io/PHP_CodeSniffer/analysis/cakephp/cakephp/)
-
-[![CakePHP](http://cakephp.org/img/cake-logo.png)](http://www.cakephp.org)
-
-CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Active Record, Association Data Mapping, Front Controller and MVC.
-Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.
-
-
-## Some Handy Links
-
-[CakePHP](http://www.cakephp.org) - The rapid development PHP framework
-
-[CookBook](http://book.cakephp.org) - THE CakePHP user documentation; start learning here!
-
-[API](http://api.cakephp.org) - A reference to CakePHP's classes
-
-[Plugins](http://plugins.cakephp.org/) - A repository of extensions to the framework
-
-[The Bakery](http://bakery.cakephp.org) - Tips, tutorials and articles
-
-[Community Center](http://community.cakephp.org) - A source for everything community related
-
-[Training](http://training.cakephp.org) - Join a live session and get skilled with the framework
-
-[CakeFest](http://cakefest.org) - Don't miss our annual CakePHP conference
-
-[Cake Software Foundation](http://cakefoundation.org) - Promoting development related to CakePHP
-
-
-## Get Support!
-
-[#cakephp](http://webchat.freenode.net/?channels=#cakephp) on irc.freenode.net - Come chat with us, we have cake
-
-[Google Group](https://groups.google.com/group/cake-php) - Community mailing list and forum
-
-[GitHub Issues](https://github.com/cakephp/cakephp/issues) - Got issues? Please tell us!
-
-[Roadmaps](https://github.com/cakephp/cakephp/wiki#roadmaps) - Want to contribute? Get involved!
-
-
-## Contributing
-
-[CONTRIBUTING.md](CONTRIBUTING.md) - Quick pointers for contributing to the CakePHP project
-
-[CookBook "Contributing" Section (2.x)](http://book.cakephp.org/2.0/en/contributing.html) [(3.0)](http://book.cakephp.org/3.0/en/contributing.html) - Version-specific details about contributing to the project
}
$this->set('exploitant', $exploitant);
- $produits_id = explode("|", $this->Exploitant->produits);
+ // Récupération des produits de l'exploitant
+ $produits_id = explode('|', $this->Exploitant->value('produits'));
+ App::import('Controller', 'Produits');
+ $produitsController = new ProduitsController;
$produits = [];
- /*
foreach ($produits_id as $produit_id) {
- $produits += $this->Produit->findById($produit_id);
+ $produits[] = $produitsController->Produit->findById($produit_id);
}
- */
+
$this->set('produits', $produits);
if ($this->request->is(array('exploitant', 'put'))) {
'rule' => 'notEmpty'
)
);
+
+ public function value($field, $value = null) {
+ if(func_num_args() === 1){
+ $result = $this->field($field);
+ if($result){
+ return $result;
+ }
+ } else {
+ if($this->saveField($field, $value)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
?>
+++ /dev/null
-# CakePHP DebugKit [![Build Status](https://secure.travis-ci.org/cakephp/debug_kit.png?branch=master)](http://travis-ci.org/cakephp/debug_kit)
-
-DebugKit provides a debugging toolbar and enhanced debugging tools for CakePHP applications.
-
-## Requirements
-
-The master branch has the following requirements:
-
-* CakePHP 2.2.0 or greater.
-* PHP 5.3.0 or greater.
-
-## Installation
-
-_[Using [Composer](http://getcomposer.org/)]_
-
-Add the plugin to your project's `composer.json` - something like this:
-
-```javascript
-{
- "require": {
- "cakephp/debug_kit": "2.2.*"
- }
-}
-```
-
-Because this plugin has the type `cakephp-plugin` set in it's own `composer.json`, composer knows to install it inside your `/Plugin` directory, rather than in the usual vendors file. It is recommended that you add `/Plugin/DebugKit` to your .gitignore file. (Why? [read this](http://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md).)
-
-> Consider using "require-dev" if you only want to include DebugKit for your development environment.
-
-_[Manual]_
-
-* Download the [DebugKit archive](https://github.com/cakephp/debug_kit/zipball/master).
-* Unzip that download.
-* Rename the resulting folder to `DebugKit`
-* Then copy this folder into `app/Plugin/`
-
-_[GIT Submodule]_
-
-In your app directory type:
-
-```bash
-git submodule add git://github.com/cakephp/debug_kit.git Plugin/DebugKit
-git submodule init
-git submodule update
-```
-
-_[GIT Clone]_
-
-In your plugin directory type
-
-```bash
-git clone git://github.com/cakephp/debug_kit.git DebugKit
-```
-
-### Enable plugin
-
-* In 2.x you need to enable the plugin your `app/Config/bootstrap.php` file. If you are already using `CakePlugin::loadAll();`, then the following is not necessary.:
-```php
- CakePlugin::load('DebugKit');
-```
-* Include the toolbar component in your `app/Controller/AppController.php`:
-```php
-class AppController extends Controller {
- public $components = array('DebugKit.Toolbar');
-}
-```
-* Set `Configure::write('debug', 1);` in `app/Config/core.php`.
-* Make sure to remove the 'sql_dump' element from your layout (usually
- `app/View/Layouts/default.ctp`), if you want to experience the awesome that is
- the DebugKit SQL log.
-
-## Reporting Issues
-
-If you have a problem with DebugKit please open an issue on [GitHub](https://github.com/cakephp/debug_kit/issues).
-
-## Contributing
-
-If you'd like to contribute to DebugKit, check out the
-[roadmap](https://github.com/cakephp/debug_kit/wiki/roadmap) for any
-planned features. You can [fork](https://help.github.com/articles/fork-a-repo)
-the project, add features, and send [pull
-requests](https://help.github.com/articles/using-pull-requests) or open
-[issues](https://github.com/cakephp/debug_kit/issues).
-
-## Versions
-
-DebugKit has several releases, each compatible with different releases of
-CakePHP. Use the appropriate version by downloading a tag, or checking out the
-correct branch.
-
-* `1.0, 1.1, 1.2` are compatible with CakePHP 1.2.x. These releases of DebugKit
- will not work with CakePHP 1.3. You can also use the `1.2-branch` for the mos
- recent updates and bugfixes.
-* `1.3.0` is compatible with CakePHP 1.3.x only. It will not work with CakePHP
- 1.2. You can also use the `1.3` branch to get the most recent updates and
- bugfixes.
-* `2.0.0` is compatible with CakePHP 2.0.x only. It will not work with previous
- CakePHP versions.
-* `2.2.0` is compatible with CakePHP 2.2.0 and greater. It will not work with
- older versions of CakePHP as this release uses new API's available in 2.2.
- You can also use the `master` branch to get the most recent updates.
-* `2.2.x` are compatible with CakePHP 2.2.0 and greater. It is a necessary
- upgrade for people using CakePHP 2.4 as the naming conventions around loggers
- changed in that release.
-
-# Documentation
-
-## Toolbar Panels
-
-The DebugKit Toolbar is comprised of several panels, which are shown by clicking the
-CakePHP icon in the upper right-hand corner of your browser after DebugKit has been
-installed and loaded. Each panel is comprised of a panel class and view element.
-Typically, a panel handles the collection and display of a single type of information
-such as Logs or Request information. You can choose to panels from the toolbar or add
-your own custom panels.
-
-### Built-in Panels
-
-There are several built-in panels, they are:
-
- * **History** Allows access to previous request information, useful when
- debugging actions with redirects.
- * **Request** Displays information about the current request, GET, POST, Cake
- Parameters, Current Route information and Cookies if the `CookieComponent`
- is in you controller's components.
- * **Session** Display the information currently in the Session.
- * **Timer** Display any timers that were set during the request see
- `DebugKitDebugger` for more information. Also displays
- memory use at component callbacks as well as peak memory used.
- * **Sql Logs** Displays sql logs for each database connection.
- * **Log** Display any entries made to the log files this request.
- * **Variables** Display View variables set in controller.
- * **Environment** Display environment variables related to PHP + CakePHP.
-
-## Configuration
-
-The toolbar has a few configuration settings. Settings are passed in the component declaration like normal component configuration.
-
-```php
-public $components = array(
- 'DebugKit.Toolbar' => array(/* array of settings */)
-);
-```
-
-### Configuring Panels
-
-You can customize the toolbar to show your custom panels or hide any built-in panel when adding it toolbar to your components.
-```php
-public $components = array('DebugKit.Toolbar' => array(
- 'panels' => array('MyCustom', 'timer'=>false)
- )
-);
-```
-
-Would display your custom panel and all built-in panels except the 'Timer' panel.
-
-#### Controlling Panels
-
-Using the panels key you can specify which panels you want to load, as well as the order in which you want the panels loaded.
-```php
-public $components = array(
- 'DebugKit.Toolbar' => array('panels' => array('MyCustom', 'timer' => false))
-);
-```
-
-Would add your custom panel `MyCustomPanel` to the toolbar and exclude the default `Timer` panel. In addition to choosing which panels you want, you can pass options into the `__construct` of the panels. For example the built-in `History` panel uses the `history` key to set the number of historical requests to track.
-```php
-public $components = array(
- 'DebugKit.Toolbar' => array('history' => 10)
-);
-```
-
-Would load the `History` panel and set its history level to 10. The `panels` key is not passed to the Panel constructor.
-
-#### forceEnable
-
-The `forceEnable` setting is new in DebugKit 1.1. It allows you to force the toolbar to display regardless of the value of `Configure::read('debug');`. This is useful when profiling an application with debug kit as you can enable the toolbar even when running the application in production mode.
-
-#### autoRun
-
-autoRun is a new configuration setting for DebugKit 1.2. It allows you to control whether or not the toolbar is displayed automatically or whether you would like to use a query string parameter to enable it. Set this configuration key to false to use query string parameter toggling of the toolbar.
-```php
-public $components = array(
- 'DebugKit.Toolbar' => array('autoRun' => false)
-);
-```
-
-When visiting a page you can add `?debug=true` to the url and the toolbar will be visible. Otherwise it will stay hidden and not execute.
-
-## Developing Your Own Panels
-
-You can create your own custom panels for DebugKit to help in debugging your applications.
-
-### Panel Classes
-
-Panel Classes simply need to be placed in`Panel` directory inside a `Lib` path. The filename should match the classname, so the class `MyCustomPanel` would be expected to have a filename of `app/Lib/Panel/MyCustomPanel.php`.
-```php
-
-App::uses('DebugPanel', 'DebugKit.Lib');
-
-/**
- * My Custom Panel
- */
-class MyCustomPanel extends DebugPanel {
- ...
-}
-```
-See also the example `Test/test_app/Plugin/DebugkitTestPlugin/Lib/Panel/PluginTestPanel.php`.
-
-Notice that custom panels are required to subclass the `DebugPanel` class. Panels can define the
-`css` and `javascript` properties to include additional CSS or javascript on the page. Both
-properties should be an array.
-```php
-class MyCustomPanel extends DebugPanel {
- public $javascript = array(
- '/my_plugin/js/custom_panel.js'
- );
-}
-```
-
-### Callbacks
-
-Panel objects have 2 callbacks, that allow them to hook into and introspect on the current request.
-```php
-startup(Controller $controller)
-```
-
-Each panel's `startup()` method is called during component `startup()` process. `$controller` is a reference to the current controller object.
-```php
-beforeRender(Controller $controller)
-```
-
-Much like `startup()` `beforeRender()` is called during the Component beforeRender() process. Again `$controller` is a reference to the current controller. Normally at this point you could do additional introspection on the controller. The return of a panels `beforeRender()` is automatically passed to the View by the Toolbar Component. Therefore, under normal use you do not need to explicitly set variables to the controller.
-
-#### Example of beforeRender Callback
-```php
-/**
- * beforeRender callback - grabs request params
- *
- * @return array
- */
- public function beforeRender(Controller $controller) {
- return $controller->params;
- }
-```
-
-This would return cake's internal params array. The return of a panel's `beforeRender()` is available in you Panel element as `$content`
-
-### Panel Elements
-
-Each Panel is expected to have a view element that renders the content from the panel. The element name must be the underscored inflection of the class name. For example `SessionPanel` has an element named `session_panel.ctp`, and sqllogPanel has an element named `sqllog_panel.ctp`. These elements should be located in the root of your `View/Elements` directory.
-
-#### Custom Titles and Elements
-
-Panels should pick up their title and element name by convention. However, if you need to choose a custom element name or title, there are properties to allow that configuration.
-
-- `$title` - Set a custom title for use in the toolbar. This title will be used as the panels button.
-- `$elementName` - Set a custom element name to be used to render the panel.
-
-### Panels as Cake Plugins
-
-Panels provided by [Cake Plugins](http://book.cakephp.org/2.0/en/plugins.html) work almost entirely the same as other plugins, with one minor difference: You must set `public $plugin` to be the name of the plugin directory, so that the panel's Elements can be located at render time.
-```php
-class MyCustomPanel extends DebugPanel {
- public $plugin = 'MyPlugin';
- ...
-}
-```
-
-To use a plugin panel, use the common CakePHP dot notation for plugins.
-```php
-public $components = array('DebugKit.Toolbar' => array(
- 'panels' => array('MyPlugin.MyCustom')
-));
-```
-The above would load all the default panels as well as the custom panel from `MyPlugin`.
-
-## Cache Engine
-
-By default, DebugKit uses File as the engine for internal caching, but if you want to use another cache engine you can customize it by simply adding a cache key inside the components config array.
-```php
-public $components = array('DebugKit.Toolbar' => array(
- 'cache' => array('engine' => 'Memcache', 'servers' => array('127.0.0.1:11211'))
- )
-);
-```
-
-You can use any cache engine supported by CakePHP, the same way you set in both core.php and bootstrap.php files with the Cache::config() method.
-
-## Viewing the Toolbar for AJAX Requests
-
-When doing AJAX requests, you will not be able to see an HTML version of the toolbar. However, if you have a browser extension that supports FirePHP, you can view
-the toolbar in your browser:
-
-- [FirePHP 4 chrome](https://chrome.google.com/webstore/detail/firephp4chrome/gpgbmonepdpnacijbbdijfbecmgoojma)
-- [FirePHP for chrome](https://chrome.google.com/webstore/detail/firephp-for-chrome/goajlbdffkligccnfgibeilhdnnpaead)
-- [FirePHP for firefox](https://addons.mozilla.org/en-US/firefox/addon/firephp/)
-
-Once you have installed the correct extension, you should see the toolbar data output on each ajax request.
echo $this->Form->create('Exploitant');
echo $this->Form->input('nom');
echo $this->Form->input('reference');
- echo $this->Form->input('produits');
+ //echo $this->Form->input('produits');
echo $this->Form->end("Enregistrer l'exploitant");
?>
\ No newline at end of file
echo $this->Form->create('Exploitant');
echo $this->Form->input('nom');
echo $this->Form->input('reference');
- echo $this->Form->input('produits');
+ //echo $this->Form->input('produits');
+ echo "Instances de d'applications liées :";
foreach ($produits as $produit) {
- echo h($produit['Produit']['nom']);
+ ?><p><?php
+ echo $this->Html->link(
+ $produit['Produit']['reference'],
+ array('controller' => 'produits', 'action' => 'edit', $produit['Produit']['id'])
+ );
+ ?></p><?php
}
- echo h($exploitant['Exploitant']['produits']);
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->end("Mettre à jour l'exploitant");
?>
\ No newline at end of file
# REFERENCE INSTANCE APPLICATION SUR ALLO = NOM FICHE INSTALL SUGAR = NOM PRODUIT / REF CLIENT + TYPE + DATE (AAAAMMJJhhmm)
# Client classique
-produit_reference="IP/CCLEZI_PROD201309250000"
+produit_reference="IP/CCLEZI_201309250000"
# Type d'usager (exploitant|client)
-usager_type="client"
+usager_type="exploitant"
# Type d'instance du produit (qualif|prod) -> inutile avec reference ?
produit_type="prod"
HTTP/1.1 200 OK\r
-Date: Mon, 26 Jan 2015 16:44:33 GMT\r
+Date: Mon, 16 Feb 2015 15:16:53 GMT\r
Server: Apache/2.4.6 (Ubuntu)\r
X-Powered-By: PHP/5.5.3-1ubuntu2.6\r
Access-Control-Allow-Origin: *\r
-Content-Length: 5\r
+Content-Length: 0\r
Content-Type: text/html; charset=utf-8\r
\r
-PROUT
#!/bin/bash
-# FICHIER DE CONFIGURATION
-source ./allo_agent.conf
-
-# CLEAN DES LOGS
-if [ -e "${log_file}" ]
-then
- rm "${log_file}"
-fi
-
-# TEST DE CONNEXION
-code=$(curl -s -w "%{http_code}" --max-time 5 --output /dev/null "http://${produit_fqdn_interne}/api/rest/allo/version")
-echo ${produit_fqdn_interne}
-echo ${code}
-
-if [ "${code}" == 200 ] || [ "${code}" == 301 ]
-then
- # REQUETE (en insecure pour le moment)
- curl --max-time 10 -k -X GET -H "${response_accept}" "http://${produit_fqdn_interne}/api/rest/allo/version/" --output "response.json" 2> /dev/null
-
- # LOG DE LA REPONSE
- #echo "$(cat response.json)" 2>&1 | tee -a $log_file
-
- # VALIDATION DU JSON (nécessite outil de validation json)
- isJSONCorrupted=$(cat response.json | module/json -nq)
-
- # SI LA VARIABLE EST INITIALISEE MAIS VIDE => PAS D'ERREUR
- if [[ -z $isJSONCorrupted && ${isJSONCorrupted+x} ]]
- then
- # AJOUT DE LA REFERENCE PRODUIT (nécessite package jq)
- jq '. + { "reference": "'"${produit_reference}"'" }' response.json > tmp.json
-
- # AJOUT DU TYPE D'USAGER
- jq '. + { "usager_type": "'"${usager_type}"'" }' tmp.json > request.json
-
- # ENVOI DE L'UPDATE AU SERVEUR
- curl -k -X PUT -H "${request_type}" -d "$(cat request.json)" -i "http://${allo_serveur_url}/?action=upload_info" --output "response_server" 2> /dev/null
- if [ -e ./response_server ]
- then
- echo "$(cat response_server)" 2>&1 | tee -a $log_file
- else
- echo "Aucune réponse du serveur !" 2>&1 | tee -a $log_file
- fi
- rm response*
- rm request.json
- rm tmp.json
- else
- echo "Les données récupérées sont illisibles" 2>&1 | tee -a $log_file
- fi
-else
- echo "L'application a renvoyé une erreur : " 2>&1 | tee -a $log_file
- case "${code}" in
- "500")
- echo "Erreur interne du serveur" 2>&1 | tee -a $log_file
- ;;
- "400" | "404")
- echo "Mauvaise requete" 2>&1 | tee -a $log_file
- ;;
- *)
- echo "Aucune réponse de l'application" 2>&1 | tee -a $log_file
- ;;
- esac
-fi
+while getopts "idvuU" opt; do
+ case $opt in
+ # Initialisation
+ i)
+ echo "Cette option n'est pas encore disponible."
+ ;;
+ # Declaration / Upload des infos
+ d)
+ ./upload_info.sh
+ ;;
+ # Verification de mises à jour / patches disponibles
+ v)
+ echo "Cette option n'est pas encore disponible."
+ ;;
+ # Update : déploiement de patch
+ u)
+ echo "Cette option n'est pas encore disponible."
+ ;;
+ # Upgrade : déploiement de mise à jour
+ U)
+ echo "Cette option n'est pas encore disponible."
+ ;;
+ esac
+done
--- /dev/null
+#!/bin/bash
+
+# FICHIER DE CONFIGURATION
+source ./allo_agent.conf
+
+# CLEAN DES LOGS
+if [ -e "${log_file}" ]
+then
+ rm "${log_file}"
+fi
+
+# TEST DE CONNEXION
+code=$(curl -s -w "%{http_code}" --max-time 5 --output /dev/null "http://${produit_fqdn_interne}/api/rest/allo/version")
+echo ${produit_fqdn_interne}
+echo ${code}
+
+if [ "${code}" == 200 ] || [ "${code}" == 301 ]
+then
+ # REQUETE (en insecure pour le moment)
+ curl --max-time 10 -k -X GET -H "${response_accept}" "http://${produit_fqdn_interne}/api/rest/allo/version/" --output "response.json" 2> /dev/null
+
+ # LOG DE LA REPONSE
+ #echo "$(cat response.json)" 2>&1 | tee -a $log_file
+
+ # VALIDATION DU JSON (nécessite outil de validation json)
+ isJSONCorrupted=$(cat response.json | module/json -nq)
+
+ # SI LA VARIABLE EST INITIALISEE MAIS VIDE => PAS D'ERREUR
+ if [[ -z $isJSONCorrupted && ${isJSONCorrupted+x} ]]
+ then
+ # AJOUT DE LA REFERENCE PRODUIT (nécessite package jq)
+ jq '. + { "reference": "'"${produit_reference}"'" }' response.json > tmp1.json
+
+ # AJOUT DU TYPE D'USAGER
+ jq '. + { "usager_type": "'"${usager_type}"'" }' tmp1.json > tmp2.json
+
+ # AJOUT DU TYPE DE PRODUIT
+ jq '. + { "produit_type": "'"${produit_type}"'" }' tmp2.json > request.json
+
+ # ENVOI DE L'UPDATE AU SERVEUR
+ curl -k -X PUT -H "${request_type}" -d "$(cat request.json)" -i "http://${allo_serveur_url}/?action=upload_info" --output "response_server" 2> /dev/null
+ if [ -e ./response_server ]
+ then
+ echo "$(cat response_server)" 2>&1 | tee -a $log_file
+ else
+ echo "Aucune réponse du serveur !" 2>&1 | tee -a $log_file
+ fi
+ rm response*
+ rm request.json
+ rm tmp*.json
+ else
+ echo "Les données récupérées sont illisibles" 2>&1 | tee -a $log_file
+ fi
+else
+ echo "L'application a renvoyé une erreur : " 2>&1 | tee -a $log_file
+ case "${code}" in
+ "500")
+ echo "Erreur interne du serveur" 2>&1 | tee -a $log_file
+ ;;
+ "400" | "404")
+ echo "Mauvaise requete" 2>&1 | tee -a $log_file
+ ;;
+ *)
+ echo "Aucune réponse de l'application" 2>&1 | tee -a $log_file
+ ;;
+ esac
+fi
--- /dev/null
+<?php
+
+ require_once('protected/required.php');
+
+ interface HistoriqueManager {
+
+ function createHistorique($historique);
+ function updateHistorique($historique);
+ function getHistorique($id);
+ function getHistoriques();
+ function removeHistorique($historique);
+ }
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
- require_once('protected/required.php');
-
- interface UsagerManager {
-
- function createUsager($usager);
- function updateUsager($usager);
- function getUsager($id);
- function getUsagers();
- function removeUsager($usager);
- }
-
-?>
\ No newline at end of file
);
$query -> bindValue(':nom', $exploitant -> getNom());
$query -> bindValue(':reference', $exploitant -> getReference());
- $query -> bindValue(':produits', implode($exploitant -> getProduits()));
+ $query -> bindValue(':produits', implode("|", $exploitant -> getProduits()));
$query -> execute();
$query -> closeCursor();
--- /dev/null
+<?php
+
+ require_once('protected/required.php');
+
+ class PdoHistoriqueManager extends AbstractPdoManager implements HistoriqueManager {
+
+ public function createHistorique($historique) {
+
+ $query = $this -> pdo -> prepare(
+ 'INSERT INTO historiques (installation) VALUES (:installation)'
+ );
+ $query -> bindValue(':installation', $historique -> getInstallation());
+ $query -> execute();
+ $query -> closeCursor();
+
+ }
+
+ public function updateHistorique($historique) {
+
+ $query = $this -> pdo -> prepare(
+ 'UPDATE historiques SET installation = :installation WHERE id = :id'
+ );
+ $query -> bindValue(':id', $historique -> getId());
+ $query -> bindValue(':installation', $historique -> getInstallation());
+ $query -> execute();
+
+ }
+
+ public function getHistorique($id) {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM historiques WHERE id = :id');
+ $query -> bindValue(':id', $id);
+ $query -> execute();
+
+ $result = $query -> fetch(PDO::FETCH_ASSOC);
+ $historique = new Historique($result['id'], $result['installation']);
+
+ $query->closeCursor();
+
+ return $historique;
+ }
+
+ public function getHistoriques() {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM historiques');
+ $query -> execute();
+
+ $results = $query -> fetchAll(PDO::FETCH_ASSOC);
+ $historiques = array();
+ foreach ($results as $result) {
+ $historiques[] = new Historique($result['id'], $result['installation']);
+ }
+
+ $query->closeCursor();
+
+ return $historiques;
+ }
+
+ public function removeHistorique($historique) {
+
+ $query = $this -> pdo -> prepare('DELETE FROM historique WHERE id = :id');
+ $query -> bindValue('id', $historique -> getId());
+ $query -> execute();
+
+ }
+
+ }
+
+?>
public function createProduit($produit) {\r
\r
$query = $this -> pdo -> prepare(\r
- 'INSERT INTO produits (nom, exploitant, reference, version) VALUES (:nom, :exploitant, :reference, :version)'\r
+ 'INSERT INTO produits (\r
+ nom, \r
+ exploitant, \r
+ reference, \r
+ version, \r
+ historique\r
+ ) VALUES (\r
+ :nom, \r
+ :exploitant, \r
+ :reference, \r
+ :version, \r
+ :historique\r
+ )'\r
);\r
$query -> bindValue(':nom', $produit -> getNom());\r
$query -> bindValue(':exploitant', $produit -> getExploitant());\r
public function updateProduit($produit) {\r
\r
$query = $this -> pdo -> prepare(\r
- 'UPDATE produits SET nom = :nom, exploitant = :exploitant, reference = :reference, version = :version WHERE id = :id'\r
+ 'UPDATE produits \r
+ SET nom = :nom, \r
+ exploitant = :exploitant, \r
+ reference = :reference, \r
+ version = :version, \r
+ historique = :historique\r
+ WHERE id = :id'\r
);\r
$query -> bindValue(':id', $produit -> getId());\r
$query -> bindValue(':nom', $produit -> getNom());\r
$query -> bindValue(':exploitant', $produit -> getExploitant());\r
$query -> bindValue(':reference', $produit -> getReference());\r
$query -> bindValue(':version', $produit -> getVersion());\r
+ $query -> bindValue(':historique', $produit -> getHistorique());\r
$query -> execute();\r
\r
}\r
\r
- public function updateProduitInfos($array) {\r
-\r
+ public function updateProduitInfos($array) {\r
$produit = $this -> getProduitByReference($array['reference']);\r
-\r
- if ($array['produit'] == $produit -> getNom()) {\r
- $query = $this -> pdo -> prepare(\r
- 'UPDATE produits SET version = :version WHERE reference = :reference'\r
- );\r
- $query -> bindValue(':reference', $array['reference']);\r
- $query -> bindValue(':version', $array['version']);\r
- $query -> execute();\r
- \r
- // CAS EXPLOITANT\r
- if($array['usager_type'] == "exploitant") {\r
- // RECUPERATION DE L'EXPLOITANT DU PRODUIT\r
- $exploitantManager = new PdoExploitantManager();\r
- $exploitant = $exploitantManager -> getExploitant($produit -> getExploitant());\r
-\r
- // MISE À JOUR DE TOUS LES PRODUITS EN CHARGE DE L'EXPLOITANT\r
- $produits_refs = $exploitant -> getProduits();\r
- $array['usager_type'] = 'client';\r
- foreach ($produits_refs as $produit_ref) {\r
- $array['reference'] = $produit_ref;\r
- $produitManager -> updateProduitInfos($array);\r
- }\r
+ // TO-DO :\r
+ // AJOUT EVENEMENT À L'HISTORIQUE\r
+ // DEMANDE DE VALIDATION\r
+ // CAS EXPLOITANT\r
+ if($array['usager_type'] === "exploitant") {\r
+ // RECUPERATION DE L'EXPLOITANT DU PRODUIT\r
+ $exploitantManager = new PdoExploitantManager();\r
+ $exploitant = $exploitantManager -> getExploitantByReference($produit -> getExploitant());\r
+\r
+ // MISE À JOUR DE TOUS LES PRODUITS EN CHARGE DE L'EXPLOITANT\r
+ $array['usager_type'] = "client";\r
+ $produits_id = $exploitant -> getProduits();\r
+ foreach ($produits_id as $produit_id) {\r
+ $array['reference'] = $this -> getProduit($produit_id) -> getReference();\r
+ $this -> updateProduitInfos($array);\r
+ }\r
+ // CAS CLIENT\r
+ } else if($array['usager_type'] === "client") {\r
+ if ($array['produit'] === $produit -> getNom()) {\r
+ $query = $this -> pdo -> prepare(\r
+ 'UPDATE produits SET version = :version WHERE reference = :reference'\r
+ );\r
+ $query -> bindValue(':reference', $array['reference']);\r
+ $query -> bindValue(':version', $array['version']);\r
+ $query -> execute();\r
+ } else {\r
+ echo "Erreur de nom du produit";\r
}\r
-\r
- }\r
- else {\r
- echo "Erreur : le nom du produit a changé";\r
}\r
-\r
}\r
\r
public function getProduit($id) {\r
$query -> execute();\r
\r
$result = $query -> fetch(PDO::FETCH_ASSOC);\r
- $produit = new Produit($result['id'], $result['nom'], $result['exploitant'], $result['reference'], $result['version']);\r
+ $produit = new Produit(\r
+ $result['id'], \r
+ $result['nom'], \r
+ $result['exploitant'], \r
+ $result['reference'], \r
+ $result['version'],\r
+ $result['historique']\r
+ );\r
\r
$query->closeCursor();\r
\r
$query -> execute();\r
\r
$result = $query -> fetch(PDO::FETCH_ASSOC);\r
- $produit = new Produit($result['id'], $result['nom'], $result['exploitant'], $result['reference'], $result['version']);\r
+ $produit = new Produit(\r
+ $result['id'], \r
+ $result['nom'], \r
+ $result['exploitant'], \r
+ $result['reference'], \r
+ $result['version'],\r
+ $result['historique']\r
+ );\r
\r
$query->closeCursor();\r
\r
$query -> execute();\r
\r
$results = $query -> fetchAll(PDO::FETCH_ASSOC);\r
- $version = array();\r
+ $produits = array();\r
foreach ($results as $result) {\r
- $version[] = new Produit($result['id'], $result['nom'], $result['exploitant'], $result['reference'], $result['version']);\r
+ $produits[] = new Produit(\r
+ $result['id'], \r
+ $result['nom'], \r
+ $result['exploitant'], \r
+ $result['reference'], \r
+ $result['version'],\r
+ $result['historique']\r
+ );\r
}\r
\r
$query->closeCursor();\r
\r
- return $version;\r
+ return $produits;\r
}\r
\r
public function removeProduit($produit) {\r
+++ /dev/null
-<?php
-
- require_once('protected/required.php');
-
- class PdoUsagerManager extends AbstractPdoManager implements UsagerManager {
-
- public function createUsager($usager) {
-
- $query = $this -> pdo -> prepare(
- 'INSERT INTO usagers (nom, reference) VALUES (:nom, :reference)'
- );
- $query -> bindValue(':nom', $usager -> getNom());
- $query -> bindValue(':reference', $usager -> getReference());
- $query -> execute();
- $query -> closeCursor();
-
- }
-
- public function updateUsager($usager) {
-
- $query = $this -> pdo -> prepare(
- 'UPDATE usagers SET nom = :nom, reference = :reference WHERE id = :id'
- );
- $query -> bindValue(':id', $usager -> getId());
- $query -> bindValue(':nom', $usager -> getNom());
- $query -> bindValue(':reference', $usager -> getReference());
- $query -> execute();
-
- }
-
- public function getUsager($id) {
-
- $query = $this -> pdo -> prepare('SELECT * FROM usagers WHERE id = :id');
- $query -> bindValue(':id', $id);
- $query -> execute();
-
- $result = $query -> fetch(PDO::FETCH_ASSOC);
- $usager = new Usager($result['id'], $result['nom'], $result['reference']);
-
- $query->closeCursor();
-
- return $usager;
- }
-
- public function getUsagers() {
-
- $query = $this -> pdo -> prepare('SELECT * FROM usagers');
- $query -> execute();
-
- $results = $query -> fetchAll(PDO::FETCH_ASSOC);
- $usagers = array();
- foreach ($results as $result) {
- $usagers[] = new Usager($result['id'], $result['nom'], $result['reference']);
- }
-
- $query->closeCursor();
-
- return $usagers;
- }
-
- public function getUsagerByReference($reference) {
-
- $query = $this -> pdo -> prepare('SELECT * FROM usagers WHERE reference = :reference');
- $query -> bindValue(':reference', $reference);
- $query -> execute();
-
- $result = $query -> fetch(PDO::FETCH_ASSOC);
- $usager = new Usager($result['id'], $result['nom'], $result['reference']);
-
- $query->closeCursor();
-
- return $usager;
- }
-
- public function removeUsager($usager) {
-
- $query = $this -> pdo -> prepare('DELETE FROM usager WHERE id = :id');
- $query -> bindValue('id', $usager -> getId());
- $query -> execute();
-
- }
-
- }
-
-?>
--- /dev/null
+<?php
+
+ require_once('protected/required.php');
+
+ class Historique {
+
+ protected $id, $installation;
+
+ /// CONSTRUCTEUR
+ function __construct($id = null, $installation = null) {
+
+ $this -> id = $id;
+ $this -> installation = $installation;
+
+ }
+
+ public function getJSON() {
+ return json_encode(get_object_vars($this));
+ }
+
+ public function getJSONP() {
+ $array["id"] = $this -> id;
+ $array["installation"] = $this -> installation;
+
+ return json_encode($array);
+ }
+
+ /// GETTERS
+ public function getId() { return $this -> id; }
+ public function getInstallation() { return $this->installation; }
+
+ /// SETTERS
+ public function setId($id) { $this -> id = $id; }
+ public function setInstallation($installation) { $this->installation = $installation; }
+
+ }
+
+?>
\ No newline at end of file
\r
class Produit {\r
\r
- protected $id, $nom, $exploitant, $reference, $version;\r
+ protected $id, $nom, $exploitant, $reference, $version, $historique;\r
\r
/// CONSTRUCTEUR\r
- function __construct($id = null, $nom = null, $exploitant = null, $reference = null, $version = null) {\r
+ function __construct($id = null, $nom = null, $exploitant = null, $reference = null, $version = null, $historique = null) {\r
\r
$this -> id = $id;\r
$this -> nom = $nom;\r
+ // Référence client de l'exploitant\r
$this -> exploitant = $exploitant;\r
+ // Référence / identifiant du produit\r
$this -> reference = $reference;\r
+ // Version actuelle\r
$this -> version = $version;\r
+ // Id de l'historique de màj / patchs\r
+ $this -> historique = $historique;\r
\r
// TO-DO : AJOUT DE :\r
/*\r
- fqdnExterne\r
- systeme\r
- uid\r
- - historique\r
*/\r
}\r
\r
$array["exploitant"] = $this -> exploitant;\r
$array["reference"] = $this -> reference;\r
$array["version"] = $this -> version;\r
+ $array["historique"] = $this -> historique;\r
\r
return json_encode($array);\r
}\r
public function getExploitant() { return $this->exploitant; }\r
public function getReference() { return $this->reference; }\r
public function getVersion() { return $this->version; }\r
+ public function getHistorique() { return $this->historique; }\r
\r
/// SETTERS\r
public function setId($id) { $this -> id = $id; }\r
public function setExploitant($exploitant) { $this->exploitant = $exploitant; }\r
public function setReference($reference) { $this->reference = $reference; }\r
public function setVersion($version) { $this->version = $version; }\r
+ public function setHistorique($historique) { $this->historique = $historique; }\r
\r
}\r
\r
+++ /dev/null
-<?php\r
-\r
- require_once('protected/required.php');\r
-\r
- class Usager {\r
-\r
- protected $id, $nom, $reference;\r
- \r
- /// CONSTRUCTEUR\r
- function __construct($id = null, $nom = null, $reference = null) {\r
-\r
- $this -> id = $id;\r
- $this -> nom = $nom;\r
- $this -> reference = $reference;\r
-\r
- }\r
-\r
- public function getJSON() {\r
- return json_encode(get_object_vars($this));\r
- }\r
- \r
- public function getJSONP() {\r
- $array["id"] = $this -> id;\r
- $array["nom"] = $this -> nom;\r
- $array["reference"] = $this -> reference;\r
- \r
- return json_encode($array);\r
- }\r
-\r
- /// GETTERS\r
- public function getId() { return $this -> id; }\r
- public function getNom() { return $this->nom; }\r
- public function getReference() { return $this->reference; }\r
- \r
- /// SETTERS\r
- public function setId($id) { $this -> id = $id; }\r
- public function setNom($nom) { $this->nom = $nom; }\r
- public function setReference($reference) { $this->reference = $reference; }\r
-\r
- }\r
-\r
-?>
\ No newline at end of file
function api_delete() {\r
$exploitantManager = new PdoExploitantManager();\r
$produitManager = new PdoProduitManager();\r
+ $historiqueManager = new PdoHistoriqueManager();\r
\r
- switch ($_GET['method']) {\r
+ // OPERATION DE SUPPRESSION UNIQUEMENT VIA INTERFACE WEBADMIN :\r
+ // -> Pour le moment AW a accès à la db directement, donc pas besoin de WS\r
+\r
+ /*switch ($_GET['method']) {\r
case 'remove_exploitant' :\r
- $exploitant = new Exploitant($_GET['exploitant']['id'], $_GET['exploitant']['nom'], $_GET['exploitant']['reference'], $_GET['exploitant']['produits']);\r
+ $exploitant = new Exploitant(\r
+ $_GET['exploitant']['id'],\r
+ $_GET['exploitant']['nom'],\r
+ $_GET['exploitant']['reference'],\r
+ $_GET['exploitant']['produits']\r
+ );\r
$exploitantManager -> removeExploitant($exploitant);\r
break;\r
+\r
case 'remove_produit' :\r
- $produit = new Produit($_GET['produit']['id'], $_GET['produit']['fqdn'], $_GET['produit']['nom'], $_GET['produit']['version']);\r
+ $produit = new Produit(\r
+ $_GET['produit']['id'], \r
+ $_GET['produit']['nom'],\r
+ $_GET['produit']['exploitant'], \r
+ $_GET['produit']['reference'], \r
+ $_GET['produit']['version']\r
+ $_GET['produit']['historique']\r
+ );\r
$produitManager -> removeProduit($produit);\r
break;\r
- }\r
+ \r
+ case 'remove_historique' :\r
+ $historique = new Historique(\r
+ $_GET['historique']['id'],\r
+ $_GET['historique']['installation']\r
+ );\r
+ $historiqueManager -> removeHistorique($historique);\r
+ break;\r
+ }*/\r
}\r
\r
?>
\ No newline at end of file
function api_get() {\r
$exploitantManager = new PdoExploitantManager();\r
$produitManager = new PdoProduitManager();\r
+ $historiqueManager = new PdoHistoriqueManager();\r
\r
switch ($_GET['action']) {\r
case 'get_exploitant' :\r
echo ']';\r
}\r
break;\r
+\r
+ case 'get_historique' :\r
+ echo $historiqueManager -> getHistorique($_GET['id']) -> getJSON();\r
+ break;\r
+\r
+ case 'get_historiques' :\r
+ $historiques = $historiqueManager -> getHistoriques();\r
+ if (!empty($historiques)) {\r
+ $i = 0;\r
+ echo '[';\r
+ foreach ($historiques as $historique) {\r
+ echo $historique -> getJSON();\r
+ if ($i != sizeof($historiques) - 1) {\r
+ echo ',';\r
+ }\r
+ $i++;\r
+ }\r
+ echo ']';\r
+ }\r
+ break;\r
}\r
}\r
\r
function api_post() {\r
$exploitantManager = new PdoExploitantManager();\r
$produitManager = new PdoProduitManager();\r
+ $historiqueManager = new PdoHistoriqueManager();\r
\r
+ // OPERATION DE CREATION/UPDATE UNIQUEMENT VIA INTERFACE WEBADMIN :\r
+ // -> Pour le moment AW a accès à la db directement, donc pas besoin de WS\r
+\r
+ /*\r
switch ($_GET['action']) {\r
case 'create_exploitant' :\r
- $exploitant = new Exploitant(null, $_POST['nom'], $_POST['reference'], $_POST['produits']);\r
+ $exploitant = new Exploitant(\r
+ null, // l'ID en base est auto-généré, donc laissé vide ici\r
+ $_POST['nom'], \r
+ $_POST['reference'], \r
+ $_POST['produits']\r
+ );\r
$exploitantManager -> createExploitant($exploitant);\r
break;\r
\r
case 'update_exploitant' :\r
- $exploitant = new Exploitant($_POST['id'], $_POST['nom'], $_POST['reference'], $_POST['produits']);\r
+ $exploitant = new Exploitant(\r
+ $_POST['id'], \r
+ $_POST['nom'], \r
+ $_POST['reference'], \r
+ $_POST['produits']\r
+ );\r
$exploitantManager -> updateExploitant($exploitant);\r
break;\r
\r
case 'add_produit' :\r
- $produit = new Produit(null, $_POST['fqdn'], $_POST['nom'], $_POST['version']);\r
+ $produit = new Produit(\r
+ null, // l'ID en base est auto-généré, donc laissé vide ici\r
+ $_POST['nom'], \r
+ $_POST['exploitant'], \r
+ $_POST['reference'], \r
+ $_POST['version'],\r
+ $_POST['historique']\r
+ );\r
$produitManager -> addProduit($produit);\r
break;\r
\r
case 'update_produit' :\r
- $produit = new Produit($_POST['id'], $_POST['fqdn'], $_POST['nom'], $_POST['version']);\r
+ $produit = new Produit(\r
+ $_POST['id'], \r
+ $_POST['nom'], \r
+ $_POST['exploitant'], \r
+ $_POST['reference'], \r
+ $_POST['version'],\r
+ $_POST['historique']\r
+ );\r
$produitManager -> updateProduit($produit);\r
break;\r
+\r
+ case 'create_historique' :\r
+ $historique = new Historique(\r
+ null, // l'ID en base est auto-généré, donc laissé vide ici\r
+ $_POST['installation']\r
+ );\r
+ $historiqueManager -> createHistorique($historique);\r
+ break;\r
+\r
+ case 'update_exploitant' :\r
+ $historique = new Historique(\r
+ $_POST['id'],\r
+ $_POST['installation']\r
+ );\r
+ $historiqueManager -> updateHistorique($historique);\r
+ break;\r
}\r
+ */\r
}\r
\r
?>
\ No newline at end of file
\r
require_once('classes/models/Exploitant.class.php');\r
require_once('classes/models/Produit.class.php');\r
+ require_once('classes/models/Historique.class.php');\r
\r
require_once('classes/manager/ExploitantManager.class.php');\r
require_once('classes/manager/ProduitManager.class.php');\r
+ require_once('classes/manager/HistoriqueManager.class.php');\r
\r
require_once('classes/manager/pdo/AbstractPdoManager.php');\r
+\r
require_once('classes/manager/pdo/PdoExploitantManager.php');\r
require_once('classes/manager/pdo/PdoProduitManager.php');\r
+ require_once('classes/manager/pdo/PdoHistoriqueManager.php');\r
\r
?>
\ No newline at end of file
+++ /dev/null
-<HTML>\r
-<HEAD>\r
-<META name="description"\r
- content="Violet UML Editor cross format document" />\r
-<META name="keywords" content="Violet, UML" />\r
-<META charset="UTF-8" />\r
-<SCRIPT type="text/javascript">\r
- function switchVisibility() {\r
- var obj = document.getElementById("content");\r
- obj.style.display = (obj.style.display == "block") ? "none" : "block";\r
- }\r
-</SCRIPT>\r
-</HEAD>\r
-<BODY>\r
- This file was generated with Violet UML Editor 2.0.1.\r
- ( <A href=# onclick="switchVisibility()">View Source</A> / <A href="http://sourceforge.net/projects/violet/files/violetumleditor/" target="_blank">Download Violet</A> )\r
- <BR />\r
- <BR />\r
- <SCRIPT id="content" type="text/xml"><![CDATA[<ClassDiagramGraph id="1">
- <nodes id="2">
- <ClassNode id="3">
- <children id="4"/>
- <location class="Point2D.Double" id="5" x="280.0" y="40.0"/>
- <id id="6" value="eb36e84d-0e71-4c46-a90f-963cb632a0b9"/>
- <revision>1</revision>
- <backgroundColor id="7">
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- <alpha>255</alpha>
- </backgroundColor>
- <borderColor id="8">
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- <alpha>255</alpha>
- </borderColor>
- <textColor reference="8"/>
- <name id="9" justification="1" size="3" underlined="false">
- <text>Produit</text>
- </name>
- <attributes id="10" justification="0" size="4" underlined="false">
- <text>- nom
-- reference
-- exploitant
-- version
-- fqdnInterne
-- fqdnExterne
-- systeme
-- uid
-- historique</text>
- </attributes>
- <methods id="11" justification="0" size="4" underlined="false">
- <text></text>
- </methods>
- </ClassNode>
- <ClassNode id="12">
- <children id="13"/>
- <location class="Point2D.Double" id="14" x="500.0" y="80.0"/>
- <id id="15" value="70b2457f-c542-45b5-a714-a3f555cb3f7c"/>
- <revision>1</revision>
- <backgroundColor id="16">
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- <alpha>255</alpha>
- </backgroundColor>
- <borderColor id="17">
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- <alpha>255</alpha>
- </borderColor>
- <textColor reference="17"/>
- <name id="18" justification="1" size="3" underlined="false">
- <text>Historique</text>
- </name>
- <attributes id="19" justification="0" size="4" underlined="false">
- <text>- installation
-- misesAJour
-- patchs</text>
- </attributes>
- <methods id="20" justification="0" size="4" underlined="false">
- <text></text>
- </methods>
- </ClassNode>
- <ClassNode id="21">
- <children id="22"/>
- <location class="Point2D.Double" id="23" x="50.0" y="80.0"/>
- <id id="24" value="ee381e24-ebf6-4e54-b1b6-267a5a093fe9"/>
- <revision>1</revision>
- <backgroundColor reference="16"/>
- <borderColor reference="17"/>
- <textColor reference="17"/>
- <name id="25" justification="1" size="3" underlined="false">
- <text>Exploitant</text>
- </name>
- <attributes id="26" justification="0" size="4" underlined="false">
- <text>- nom
-- reference
-- produits</text>
- </attributes>
- <methods id="27" justification="0" size="4" underlined="false">
- <text></text>
- </methods>
- </ClassNode>
- </nodes>
- <edges id="28">
- <AggregationEdge id="29">
- <start class="ClassNode" reference="3"/>
- <end class="ClassNode" reference="12"/>
- <startLocation class="Point2D.Double" id="30" x="80.0" y="70.0"/>
- <endLocation class="Point2D.Double" id="31" x="20.0" y="40.0"/>
- <transitionPoints id="32"/>
- <id id="33" value="8c07c7e3-f62b-4c27-bd0a-ef2d27363ad7"/>
- <revision>1</revision>
- <bentStyle id="34" name="AUTO"/>
- <startLabel>1</startLabel>
- <middleLabel></middleLabel>
- <endLabel>1</endLabel>
- </AggregationEdge>
- <AggregationEdge id="35">
- <start class="ClassNode" reference="21"/>
- <end class="ClassNode" reference="3"/>
- <startLocation class="Point2D.Double" id="36" x="80.0" y="40.0"/>
- <endLocation class="Point2D.Double" id="37" x="20.0" y="100.0"/>
- <transitionPoints id="38"/>
- <id id="39" value="c5d2601e-339d-444b-893b-de5207d0ef6f"/>
- <revision>1</revision>
- <bentStyle reference="34"/>
- <startLabel>0,1</startLabel>
- <middleLabel></middleLabel>
- <endLabel>1,*</endLabel>
- </AggregationEdge>
- </edges>
-</ClassDiagramGraph>]]></SCRIPT>\r
- <BR />\r
- <BR />\r
- <IMG alt="embedded diagram image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a\r
-HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy\r
-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAC5AisDASIA\r
-AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\r
-AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\r
-ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\r
-p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\r
-AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\r
-BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\r
-U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\r
-uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii\r
-gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5vxzB\r
-DdeG47e4ijmgl1PT0kjkUMrqbyEEEHggjjFSf8IJ4P8A+hU0P/wXQ/8AxNHjL/kB23/YV03/ANLY\r
-a6CgDn/+EE8H/wDQqaH/AOC6H/4mq9/4S8D6Zp1zf3nhjQ47W1ieaZ/7NiO1FBLHAXJwAeldRWH4\r
-0gmuvAviG3t4pJp5dMuUjjjUszsYmAAA5JJ4xQBzuk23wy1q5t7ez8P6QJbmLz7dbjRPI8+PAO6P\r
-zI13jBByueK3v+EE8H/9Cpof/guh/wDia53wh4Pv5Lbwfq+t3g87RtMEdpZx2jQNCZIVRhKWdizA\r
-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\r
-QUUAc/8A8IJ4P/6FTQ//AAXQ/wDxNH/CCeD/APoVND/8F0P/AMTXQUUAc/8A8IJ4P/6FTQ//AAXQ\r
-/wDxNH/CCeD/APoVND/8F0P/AMTXQUUAc/8A8IJ4P/6FTQ//AAXQ/wDxNY3haws9M8WeIbOwtILS\r
-1j1JdkMEYjRc2cBOFHAyST+NdzXHaH/yPHiT/sJJ/wCkVvQB2NFFFABRRRQAUUUUAFFFFABRRRQA\r
-UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR\r
-RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGP4n0+81PRRBYCBrqO7tblFnkMaN5U\r
-8cpUsFYjIQjOD1rKn1/xTbzNE+gaMWXGcaxLj/0mrraKAOO/4SXxP/0L+kf+DiX/AORqP+El8T/9\r
-C/pH/g4l/wDkauxooA47/hJfE/8A0L+kf+DiX/5Go/4SXxP/ANC/pH/g4l/+Rq7GigDjv+El8T/9\r
-C/pH/g4l/wDkaj/hJfE//Qv6R/4OJf8A5GrsaKAOO/4SXxP/ANC/pH/g4l/+RqP+El8T/wDQv6R/\r
-4OJf/kauxooA47/hJfE//Qv6R/4OJf8A5Go/4SXxP/0L+kf+DiX/AORq7GigDjv+El8T/wDQv6R/\r
-4OJf/kam+GYr/wDt3Ub7UIbaCa/u/PEVvO0qoot44vvFEycxk9O9dnRQAUUUUAFFFFABRRRQAUUU\r
-UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH" />\r
-</BODY>\r
-</HTML>
\ No newline at end of file
+++ /dev/null
-{
- "id": "1",
- "version": "4.2.02",
- "produit": "i-Parapheur",
- "refClient": "ADU_49101"
-}
\ No newline at end of file