Retours d’expérience sur le projet MyCORE

Victor nous explique son travail sur MyCORE basé sur OwnCloud, une plateforme opensource.


Mycore logo modif
MyCORE

Fort d’une collaboration sur de multiples projets avec le CNRS, GLOBALIS s’est récemment vu confier le projet MyCore, une plate-forme basée sur OwnCloud et gérée par le centre de recherche. Celle-ci permet un stockage sécurisé, une synchronisation ainsi que des échanges de fichiers en ligne. Cet outil est utilisé à travers le monde par les chercheurs du CNRS. Actuellement, nous travaillons sur le développement d’une application permettant aux utilisateurs de partager temporairement des fichiers à des personnes ne faisant pas partie du CNRS.

Mycore est basé sur la technologie Owncloud. Projet open source utilisant principalement PHP et JavaScript, cet outil est des plus intéressants à utiliser. Communauté active, fréquence de sortie de nouvelles versions convenable, Owncloud est un projet dynamique et en perpétuelle évolution. Grâce au développement de nouvelles applications, sorte de plugins, pouvant être ajoutées au site, Owncloud se dote d’une base d’outils grandissante grâce à une aisance de développement et à sa communauté. Cette personnalisation est un point essentiel qui permet au CNRS de fournir un service optimal pour ses utilisateurs.

Lors du développement d’une nouvelle application pour Owncloud, une architecture de fichier doit être respectée à la fois pour pouvoir être reprise par d’autres développeurs mais aussi pour une compatibilité optimale avec l’outil. Cette architecture, calquée sur le modèle MVC, peut être étendue tant que la base standard est respectée et que ces ajouts sont pertinents et propres à l’application développée.

Différents outils inhérents au développement d’une application sont disponibles dans le coeur de Owncloud afin de faciliter le développement de nouvelles applications. La communication avec la base de données, la traduction ainsi que le routing sont les outils les plus notables.

owncloud1
OwnCloud

Pour une meilleure compréhension du développement d’applications sur Owncloud, l’architecture des dossiers principaux ainsi que l’explication de leur contenu vont vous être présentés.

Exemples de développement

Avant toute chose, il est nécessaire de créer un dossier portant le nom de votre application dans le dossier apps d’Owncloud.

App

Ce dossier ne devra comporter qu’un fichier php portant le nom de votre application. Il contiendra une classe étendant la classe d’Owncloud App. Une fonction __construct devra impérativement être intégrée dans la classe afin d’initialiser les différentes parties de l’application.

Appinfo

Les fichiers relatifs à la configuration ainsi qu’aux informations concernant l’application devront être stockés dans ce dossier. Un fichier info.xml est requis pour renseigner les informations générales sous cette forme :

<?xml version="1.0"?>
 <info>
 <id>application_id</id>
 <name>application name</name>
 <description>Application description</description>
 <version>1.0</version>
 <author>Author Name</author>
 <require>7</require>
 </info>

(require renseigne le numéro de version d’Owncloud requis pour le bon fonctionnement de l’application).

En plus du fichier d’information, un fichier sans extension nommé version comprenant la version actuelle de l’application devra être intégré au dossier. Lors d’une modification de ce numéro de version, Owncloud le détectera et proposera une mise à jour afin d’appliquer les changements non relatifs au code (changement de schéma de base de données par exemple)

Enfin, autre fichier essentiel, app.php, qui instancie la classe qui représente l’ensemble de notre application, est située dans le dossier app . Des traitements supplémentaires peuvent être ajouté à condition que ces derniers soient nécessaires de façon générale au fonctionnement de l’application (ajout de style ou script par exemple).

A noter que si vous voulez définir des routes particulières ou bien un schéma de base de données, les fichiers comportant les informations devront être stockés dans ce dossier.

Selon vos besoins, différents dossiers non obligatoires peuvent être ajoutés. Template servira à stocker vos différents fichiers de templating, l10n stockera les fichiers de traduction. Nous retrouvons le même principe avec controller, css, db, js, etc…

Si vous décidez d’ajouter une page / fonctionnalité indépendante au coeur de Owncloud, voici les étapes à suivre :

Créer un controller qui répertoriera les différentes pages / traitements de votre applicationcontroller/myappcontroller.php :

<?php
namespace OCA\Myapp\Controller;
class MyappController extends Controller
{
  // init
  public function __construct($appName, $request)
  {
    parent::__construct($appName, $request);
  }
  /**
  * Function description
  *
  *  @param $param param’s description
  */
  public function myfunction($param)
  {
    /* traitment */
    $templateName = ‘mytemplate’;
    $parameters = array(‘param’ => $param);
    return new TemplateResponse($this->appName, $templateName, $parameters);
  }
  ….
}

Dans les annotations au dessus de vos méthodes, des paramètres peuvent être renseignés pour contrôler l’accès  :

  • @NoAdminRequired : L’utilisateur n’a pas besoin d’être admin pour accéder à la page
  • @NoCSRFRequired : La protection CSRF est désactivée pour la page
  • @PublicPage : La page est publique, n’importe quel utilisateur peut y accéder.
  • Enfin, des paramètres peuvent être renseignés dans la méthode (ici, $param) qui devront être passés lors de l’appel de l’url.

Définir les routes dans le fichier appinfo/routes.php :

<?php
namespace OCA/Myapp;
use \OCA\User\App\Myapp;
$application = new Myapp();
$application->registerRoutes($this, array(
‘routes’ => array(
‘name’ => ‘myapp#myfunction’,
‘url’ => ‘/myfunction’,
‘verb’ => ‘GET’,
),
array(
…
), ...
);

La propriété ‘name’ référence le controller utilisé et, après le #, la méthode à appeler. Concernant l’url, cette dernière peut être le / les termes voulu(s), il n’est pas obligatoire de renseigner le nom de la méthode. Enfin, la propriété ‘verb’ indique quelle méthode du protocole HTTP est utilisé pour l’appel de l’url (POST, GET, …). – Si besoin, créer un fichier représentant la vue de votre page dans le dossier templates (templates/mytemplate.php). Enfin, afin que tout soit effectif, il est nécessaire d’initialiser le controller dans le fichier app/myapp.php :

$container->registerService(‘MyappController’, function($c) {
return new MyappController(
$c->query(‘AppName’),
$c->query(‘’Request’),
...
);
});

Owncloud, à la manière de WordPress, propose un système de hook permettant une interaction entre les différentes applications de la plate forme. Un hook s’identifie par un nom (explicite, de façon à savoir où se situe l’action) et du nom de l’application dans laquelle il est mis en place. Enfin, lorsque l’on met en place un hook, un tableau comprenant des variables associées à des clefs peuvent être renseignés si besoin.

Pour se connecter à un hook, un fichier doit être créé dans le dossier hooks de l’application. Ce fichier comportera un classe comportant les différentes méthodes à effectuer pour chaque hook ainsi qu’une fonction liant les fonctions à ces derniers. L’appel de cette méthode de liaison doit être effectué dans le fichier appinfo/app.php. Enfin, une initialisation de la classe des hook devra être faite dans le fichier app/myapp.php à la manière des controllers.

Exemple :

  • Mise en place d’un hook :
 OC_Hook::emit(‘OCA\Myapp’, ‘pre_traitment’, array(‘data’ => $data);
  • Connexion à un hook : hooks/myhooks.php :
 <?php
 class MyHooks
 {
   public function register()
   {
     OCP\Util::connectHook(‘OCA\Myapp’, ‘pre_traitment’, $this, ‘method_pre_traitment’);
   }
   public function method_pre_traitment($data)
   {
     // traitment
   }
 }

appinfo/app.php :

$app = new User_Share_Guest();
$c = $app->getContainer();
$c->query(‘MyHooks’)->register();

 

Victor BEnrichissant et intéressant, MyCore est un projet sur lequel un développeur PHP ne peut qu’apprécier rejoindre. L’utilisation d’Owncloud est une expérience que je conseille, sa diversité technologique et la communauté, notamment française, encourage à découvrir et aller plus loin dans le développement. La collaboration de GLOBALIS avec le CNRS sur ce projet est une véritable opportunité pour les développeurs qui jouiront d’une expérience en PHP enrichissante.

Victor, développeur web chez GLOBALIS media systems

Publié le par Victor Bordage-Gorry

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *