Commit 8e87b16f authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Sortie de l'état WIP, mise à niveau comme les autres bundle

parent 177d8af6
Loading
Loading
Loading
Loading
+12 −8
Changes for .gitignore: 12 added lines, 8 removed lines.
Original line number Diff line number Diff line
#API
/api/vendor/
/api/composer.lock
# PHP CS Fixer
/api/.php-cs-fixer.cache

#Front
.idea
.vscode
.env
vendor
api/vendor
api/composer.lock
frontend/node_modules
frontend/dist
.idea/
 No newline at end of file
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
api/.php-cs-fixer.php
api/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###
+7 −3
Changes for .gitlab-ci.yml: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -7,6 +7,10 @@ stages:
variables:
  PHP_DIR: api
  JS_DIR: frontend
  # La variable de proxy héritée du groupe n'a pas de schéma, npm la refuse : on lui donne la sienne.
  npm_config_proxy: http://proxy.unicaen.fr:3128
  npm_config_https_proxy: http://proxy.unicaen.fr:3128
  npm_config_noproxy: unicaen.fr

default:
  artifacts:
@@ -31,7 +35,7 @@ publish_php:
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - curl https://gest.unicaen.fr/packagist/update
    - export NO_PROXY=unicaen.fr ; curl 'https://packagist.unicaen.fr/build?name=unicaen/parametre-bundle'

# Publier sur GitLab Registry
publish_js:
@@ -41,6 +45,6 @@ publish_js:
  script:
    - cd $JS_DIR
    - npm ci
    - echo "@unicaen:registry=https://git.unicaen.fr/api/v4/projects/3513/packages/npm/" > .npmrc
    - echo "//git.unicaen.fr/api/v4/projects/3513/packages/npm/:_authToken=$NPM_DEPLOY_TOKEN" >> .npmrc
    - echo "@unicaen:registry=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc
    - echo "${CI_API_V4_URL#https:}/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc
    - npm publish --access public

CHANGELOG.md

0 → 100644
+11 −0
Changes for CHANGELOG.md: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
## 2.0.0

- Paquet renommé `unicaen/parametre-bundle` (remplace `unicaen-modern/parametre`), PHP 8.2+, Symfony 7.4 et 8
- API protégée par unicaen/privilege-bundle, privilèges `parametre_*` et `parametre_categorie_*`
- Paramètre non modifiable verrouillé dans l'API
- Codes uniques, catégorie obligatoire supprimée en cascade, validation de la valeur selon son type
- `ParametreService` : lecture typée (`String`, `Boolean`, `Number`)
- Champ JSON `valeursPossibles` (au lieu de `valeurs_possibles` en double), collections non paginées
- Front : Quasar de l'application au lieu d'une copie embarquée, actions masquées selon les privilèges, saisie typée, erreurs de l'API affichées, paramètres masqués
- Front : `unplugin-vue-router` retiré des peerDependencies, seul `dist/` publié
- CI : packagist.unicaen.fr, publication npm par `CI_JOB_TOKEN`
+39 −68
Changes for README.md: 39 added lines, 68 removed lines.
Original line number Diff line number Diff line
# [WIP] Ce dépôt est pour l'instant à but de test uniquement

# Unicaen Paramètre

Ce dépôt est un monorepo contenant :

- Un bundle **API Platform** pour la gestion des paramètres.
- Un composant **Vue.js** associé pour l'interface utilisateur.

## Structure du projet
Paramètres applicatifs rangés par catégorie, pour une application Symfony et API Platform.
Successeur Symfony de [unicaen/parametre](https://git.unicaen.fr/lib/unicaen/parametre) (Laminas),
dont il reprend les tables et les types de valeur.

```
/api       # Code source du bundle API Platform
/frontend  # Code source du composant Vue.js
```php
$parametreService->getValeur('CATEGORIE', 'PARAMETRE');   // 12, typé selon le paramètre
```

## Prérequis
Une page d'administration (Vue 3 et Quasar) liste les catégories et leurs paramètres, et permet
de les créer, modifier et supprimer.

- **PHP** >= 8.2
- **Composer**
- **Node.js** >= 16
- **Yarn** ou **npm**
Prérequis : PHP >=8.2, Symfony 7.4 ou 8, API Platform 4, unicaen/privilege-bundle 2.5.

## Installation

### API

1. Composer install
```bash
    composer install unicaen-modern/parametre
composer require unicaen/parametre-bundle
npm install @unicaen/parametre
```

### Frontend
Configuration, usage, API et privilèges : **[api/README.md](api/README.md)**.

1. Ajouter le .npmrc à côté de votre package.json pur référencer le registry de l'Université de Caen :
    ```bash
    echo "@unicaen:registry=https://git.unicaen.fr/api/v4/groups/6549/-/packages/npm/" > .npmrc
    ```
### Front

2. Installer le package
    ```bash
    npm install @unicaen/parametre
    ```
```js
import { ParametrePlugin, ParametreRouter } from '@unicaen/parametre'

3. Importer et déclarer le composant dans votre projet Vue.js, généralement main.js :
    ```javascript
   import { ParametrePlugin } from '@unicaen/parametre'
const router = createRouter({ routes: [...autoRoutes, ...ParametreRouter] })   // page /parametre

   // Create app etc...
   
   app.use(ParametrePlugin, { axios: axiosInstance})
app.use(ParametrePlugin, { axios: api, useUserStore })
```
   Vous devez passer votre instance axios à l'option `axios` pour que le composant puisse communiquer avec l'API en utilisant votre système d'authentification.


4. La bibliothèque fournit aussi un object router ParametreRouter qui intégre directement le routing vers /parametre. Vous pouvez l'importer et l'utiliser comme suit :
    ```javascript
    import { ParametreRouter } from '@unicaen/parametre'
`axios` est obligatoire : c'est l'instance de l'application, avec son authentification.
`useUserStore` est facultatif : s'il est fourni, sa méthode `isAuthorized(code)` masque les
actions non autorisées. Sans lui, tout est affiché et l'API refuse ce qui n'est pas permis.
Les plugins Quasar `Notify` et `Dialog` doivent être installés dans l'application : le paquet
utilise le Quasar de l'application, il n'en embarque pas de copie.

    // Create app etc...
    const router = createRouter({
        history: createWebHistory(),
        routes: [...ParametreRouter]
    })
    app.use(router)
    ```
Le composant `ParametrePage` peut aussi être monté sur une autre route.

5. Ou gérer vous même l'utilisation du composant ParametrePage pour l'intégrer comme vous le souhaitez dans votre projet.
    ```javascript
    import { ParametrePage } from '@unicaen/parametre'
---

    // Create app etc...
## Structure du dépôt

    app.component('ParametrePage', ParametrePage)
```
    ```javascript
    import { createRouter, createWebHistory } from 'vue-router'
    import { ParametrePage } from '@unicaen/parametre'
   
   const router = createRouter({
      history: createWebHistory(),
      routes: {
           path: '/parametre',
           component: ParametrePage
      }
   })
   // Create app etc...
   app.use(router)
/api       # Bundle Symfony (paquet unicaen/parametre-bundle)
/frontend  # Page d'administration Vue 3 et Quasar (paquet @unicaen/parametre)
/docs      # Exemple de référentiel des privilèges
```

## Contribution
## Publication

```bash
./release-api.sh 2.0.0     # version explicite
./release-api.sh patch     # 2.0.0 -> 2.0.1
```

Les contributions sont les bienvenues. Merci de suivre les bonnes pratiques de développement et de soumettre vos pull requests.
Le script aligne `api/.version` et `frontend/package.json`, commite, produit un
`git subtree split --prefix=api` poussé sur la branche `split-api` et y pose le tag de
version. La branche courante reçoit un tag `m-<version>`, qui déclenche la CI : publication
sur le packagist Unicaen et sur le registre npm du projet. À lancer sur l'hôte, avec npm,
working tree propre.

## Licence

Ce projet est sous licence MIT.
 No newline at end of file
MIT
+1 −2
Changes for api/.php-cs-fixer.dist.php: 1 added line, 2 removed lines.
Original line number Diff line number Diff line
@@ -2,8 +2,7 @@

$finder = (new PhpCsFixer\Finder())
    ->in(__DIR__.'/src')
    ->exclude('var')
    ->exclude('vendor'); 
    ->exclude('vendor')
;

return (new PhpCsFixer\Config())
Loading