Carnet Wiki

Joomla 3 / Joomla3spip

Joomla est l’un des CMS les plus utilisé en France, mais il peut présenter de nombreuses failles de sécurité et nous préférerons y accéder sous SPIP.

Attention, cet article documente la nouvelle version pour accéder à un Joomla 2.x ou Joomla 3.x !

Sur la zone, vous trouverez un plugin de lecture et conversion, écrit pour les vieux Joomla 1.x ; toutefois [1] vous aurez peut-etre quelques questions....

Noter d’abord que Joomla utilise la même notion de $prefix que spip, mais il n’a pas de valeur de préfixe par défaut, un radical est généré aléatoirement : vous devrez donc commencer par modifier les noms des tables physiques, car SPIP ne sait pas (encore ?) appliquer un $prefix à des tables non-SPIP [2]..
Dans la suite de cet article, vous devrez prévoir d’adapter ce préfixe, en avant du nom de table précédé par un _ : dans la version d’origine du plugin, il s’agit du préfixe jos_ :PhpMyAdmin permet de remplacer un préfixe dans tous les noms de tables d’une base, par une seule opération !

N.B. Dans tous les squelettes du plugin ci-dessous, l’ensemble des boucles est désormais protégé par un ? à suivre le nom physique de la table, pour éviter une erreur de table inexistante, avec néanmoins un message d’anomalies...

Quelques équivalences (pour Joomla 3)

Comme tout CMS, les auteurs, articles et rubriques sont enregistrées dans des tables de la base Joomla, à savoir :
-  _users : id, #NAME, #USERNAME , #EMAIL , #PARAMS
-  _content : id, asset_id, #EXTENSION [3], #SECTIONID, #CATID, #PARENTID, #LANGAGE
#TITLE , #ALIAS, #TITLE_ALIAS, #INTROTEXT , #FULLTEXT ,
#CREATED , #CREATED_BY (= id_auteur), #CREATED_BY_ALIAS, #MODIFIED, #PUBLISH_UP, #PUBLISH_DOWN
#HITS, #ACCESS, #FEATURED,
#IMAGES, #URLS, #ATTRIBS, #METAKEYS, #METADESC, #XREFERENCE (a reference to enable linkages to external datasets)
-  _assets : id, asset_id, #LEVEL, parent_id, #NAME #TITLE, #RULES (droits /en JSON)
-  _categories : id, asset_id, parent_id, #LEVEL, #PATH, #EXTENSION,
#TITLE , #DESCRIPTION , #ALIAS, #NOTE
#CREATED_TIME , #CREATED_USER_ID (= id_auteur), #MODIFIED_TIME, #MODIFIED_USER_ID , #PUBLISH_UP, _ #HITS, #ACCESS, #FEATURED, #METADATA
#ATTRIBS, #METAKEYS, #METADESC,
Attention : les noms de champs manquent d’homogeneité, avec cette nouvelle table categories !
En plus, il semble que le champ #EXTENSION définisse le module de traitement de l’enregistrement, permettant alors de meler pluseeiurs types d’objets dans la hiérarchie Rubriques / Articles.

Documentation du plugin


-  Permet de parcourir et afficher une bdd Joomla3 avec SPIP
-  Gère la conversion Joomla -> SPIP via un squelette (sur un SPIP vide !)

Plugin joomla2spip
Montrant les choix du menu : ?spip.php ?page=joomla2spip

UTILISATION

  1. installer un SPIP sur la même base de donnée que le joomla
  2. installer le plugin (dans la base SPIP vide = sans rubriques ! )
  3. avant de l’utiliser, vous devrez corriger les prefixes du jeu de tables Joomla
  4. se rendre sur la page ./spip.php?page=joomla2spip
    Plugin joomla2spip
    Montrant les choix du menu : ?spip.php ?page=joomla2spip

    Le menu proposé offre un sommaire partiel des articles, et la liste des catégories à droite, avec accès à la liste complète des articles...

REMARQUES
Joomla propose des champs inexistants dans la table article de spip, ils sont disponibles via des plugins SPIP on les ignore ici (dans cette première version joomla2spip v0.2.3 la conversion n’a pas été testée ! ).
-  ordre
-  date de dépublication
-  id_parent (pour faire des articles liés)

Joomla propose des ’features’ non gérées par SPIP ; ignoré.
-  menus => necessite un plugin...

les liens de _content ;
index.php?option=com_content&task=view&id=43&Itemid=81
sont transformés dans spip_articles en
spip.php?page=article&id_article=43

Les id_article doivent être forcés pour correspondre à id.

Pour insérer l’occurence d’une table Joomla dans la base SPIP, on utilise une fonction écrite en ’filtre’ SPIP (voir les filtres php dans joomla2spip_fonctions.php) qui récupèrera souvent l’#ID d’enregistrement à forcer en écriture, pour garder les liens, ce qui impose d’utiliser une base SPIP vierge, sans rubriques ni articles !

TODO
Chopper les urls des rubriques, des articles des documents.
jos_jv_page_url (url propres ?)
jos_jv_a_page ?
jos_redirection ?

Chopper les utilisateurs :

  • les auteurs : jos_users
  • les contacts : jos_contact_details
  • les abonnés : jos_acajoom_subscribers

Types d’utilisateurs : jos_usertypes
-  *# administrator
-  *# editor
-  *# user
-  *# author
-  *# publisher
-  *# manager

Pour lancer la conversion régler php.ini :

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 18000     ; Maximum execution time of each script, in seconds
max_input_time = 18000	; Maximum amount of time each script may spend parsing request data
memory_limit = 64M      ; Maximum amount of memory a script may consume (8MB)

-  > erational : la pagination permet de limiter la consommation
-  > xdjuj 0.2.1 : récupère les forums pour SPIP 2 également

Version 0.2.3 et suivantes : sur un Joomla 3, les structures de tables ont changé !
-  > YannX 0.2.3 : en trunk, une protection par boucle sur table optionnelle
(pour la disparition de ’jos_sections’ en Joomla 3)

Une autre technique : base annexe

Le menu de Maintenance technique de SPIP permettant de déclarer une autre base SPIP, va être utilisée pour assurer des boucles sur une declaration annexe pour Joomla :
-  créer un fichier de connexion, à nommer joom
-  les boucles de tables devront être précédées de ce radical de connexion :
BOUCLE_content(joom:content){par id}

Des noisettes Z seront rendues disponibles dans le plugin....

[1A l’examen du source que vous trouverez ici...

[2Une autre solution serait de déclarer une seconde connexion à une base SPIP secondaire, avec le bon préfixe, puisque nous n’en ferons qu’une utilisation en lecture...

[3Joomla3 entasse dans la même table content, des com_content =(articles) et d’autres choses... lues par d’autres extensions !?

YannX - Mise à jour :28 novembre 2018 à 15h59min