diff --git a/package-lock.json b/package-lock.json index 94059e1..0235274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -91,6 +91,7 @@ "react": "^18.2.0", "react-apexcharts": "^1.4.0", "react-app-rewired": "^2.2.1", + "react-audio-voice-recorder": "^2.2.0", "react-big-calendar": "^1.8.4", "react-bootstrap": "^2.1.2", "react-burger-menu": "^3.0.6", @@ -2999,6 +3000,20 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" }, + "node_modules/@ffmpeg/ffmpeg": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@ffmpeg/ffmpeg/-/ffmpeg-0.11.6.tgz", + "integrity": "sha512-uN8J8KDjADEavPhNva6tYO9Fj0lWs9z82swF3YXnTxWMBoFLGq3LZ6FLlIldRKEzhOBKnkVfA8UnFJuvGvNxcA==", + "dependencies": { + "is-url": "^1.2.4", + "node-fetch": "^2.6.1", + "regenerator-runtime": "^0.13.7", + "resolve-url": "^0.2.1" + }, + "engines": { + "node": ">=12.16.1" + } + }, "node_modules/@floating-ui/core": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", @@ -17485,6 +17500,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -26056,6 +26076,28 @@ "semver": "bin/semver" } }, + "node_modules/react-audio-visualize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-audio-visualize/-/react-audio-visualize-1.2.0.tgz", + "integrity": "sha512-rfO5nmT0fp23gjU0y2WQT6+ZOq2ZsuPTMphchwX1PCz1Di4oaIr6x7JZII8MLrbHdG7UB0OHfGONTIsWdh67kQ==", + "peerDependencies": { + "react": ">=16.2.0", + "react-dom": ">=16.2.0" + } + }, + "node_modules/react-audio-voice-recorder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-audio-voice-recorder/-/react-audio-voice-recorder-2.2.0.tgz", + "integrity": "sha512-Hq+143Zs99vJojT/uFvtpxUuiIKoLbMhxhA7qgxe5v8hNXrh5/qTnvYP92hFaE5V+GyoCXlESONa0ufk7t5kHQ==", + "dependencies": { + "@ffmpeg/ffmpeg": "^0.11.6", + "react-audio-visualize": "^1.1.3" + }, + "peerDependencies": { + "react": ">=16.2.0", + "react-dom": ">=16.2.0" + } + }, "node_modules/react-avatar": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-3.10.0.tgz", @@ -37078,6 +37120,17 @@ } } }, + "@ffmpeg/ffmpeg": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@ffmpeg/ffmpeg/-/ffmpeg-0.11.6.tgz", + "integrity": "sha512-uN8J8KDjADEavPhNva6tYO9Fj0lWs9z82swF3YXnTxWMBoFLGq3LZ6FLlIldRKEzhOBKnkVfA8UnFJuvGvNxcA==", + "requires": { + "is-url": "^1.2.4", + "node-fetch": "^2.6.1", + "regenerator-runtime": "^0.13.7", + "resolve-url": "^0.2.1" + } + }, "@floating-ui/core": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", @@ -47967,6 +48020,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -54466,6 +54524,20 @@ } } }, + "react-audio-visualize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-audio-visualize/-/react-audio-visualize-1.2.0.tgz", + "integrity": "sha512-rfO5nmT0fp23gjU0y2WQT6+ZOq2ZsuPTMphchwX1PCz1Di4oaIr6x7JZII8MLrbHdG7UB0OHfGONTIsWdh67kQ==" + }, + "react-audio-voice-recorder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-audio-voice-recorder/-/react-audio-voice-recorder-2.2.0.tgz", + "integrity": "sha512-Hq+143Zs99vJojT/uFvtpxUuiIKoLbMhxhA7qgxe5v8hNXrh5/qTnvYP92hFaE5V+GyoCXlESONa0ufk7t5kHQ==", + "requires": { + "@ffmpeg/ffmpeg": "^0.11.6", + "react-audio-visualize": "^1.1.3" + } + }, "react-avatar": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-3.10.0.tgz", diff --git a/package.json b/package.json index c4afc06..c24614b 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "react": "^18.2.0", "react-apexcharts": "^1.4.0", "react-app-rewired": "^2.2.1", + "react-audio-voice-recorder": "^2.2.0", "react-big-calendar": "^1.8.4", "react-bootstrap": "^2.1.2", "react-burger-menu": "^3.0.6", diff --git a/public/sitemap.xml b/public/sitemap.xml index 683c5cc..3ec7d29 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -36,7 +36,7 @@ https://www.mysy-training.com/Display-Detail-Article/signature-electronique-et-organismes-de-formation - 2024-11-38T11:35:41+00:00 + 2024-11-08T11:35:41+00:00 daily 1.0000 @@ -99,6 +99,12 @@ + + https://www.mysy-training.com/Display-Detail-Article/comment-choisir-un-logiciel-de-gestion-adapte-a-votre-centre-de-formation---261 + 2024-12-05T11:35:41+00:00 + daily + 1.0000 + https://www.mysy-training.com/Connexion @@ -122,8 +128,4 @@ 1.0000 - - - - \ No newline at end of file diff --git a/src/App.js b/src/App.js index 49fafe5..c737cde 100644 --- a/src/App.js +++ b/src/App.js @@ -53,7 +53,7 @@ import TestUrl_New from "./pages/testurl_new"; import QuiSommesNous_v3 from "./pages/quisommesnous_v3"; import Fonctionnalites from "./pages/fonctionnalite"; import Test_Drag_Drop from "./pages/test_drag_drop"; - + import Test_Drag_Drop2 from "./pages/test_dnd"; import ESign from "./pages/eSigne"; diff --git a/src/components/Fonctionnalites_V1.js b/src/components/Fonctionnalites_V1.js index cc98798..8a1f524 100644 --- a/src/components/Fonctionnalites_V1.js +++ b/src/components/Fonctionnalites_V1.js @@ -109,7 +109,7 @@ const Fonctionnalites_V1 = () => { return (
- Gestion Administrative, CRM, LMS, Marketplace, découvrez les Fonctionnalités et Modules du logiciel de gestion des organismes de formation + Logiciel de gestion pour Organisme de formation : Gestion Administrative, CRM, LMS, Marketplace, découvrez les Fonctionnalités et Modules du logiciel de gestion des organismes de formation diff --git a/src/components/QuisSommesNous_V4.js b/src/components/QuisSommesNous_V4.js index 3ecf895..6a40e0e 100644 --- a/src/components/QuisSommesNous_V4.js +++ b/src/components/QuisSommesNous_V4.js @@ -218,7 +218,7 @@ const QuiSommesNous_v4 = () => {
-

Éditeur français de logiciels de gestion dédiés aux organismes de formation, nous proposons des solutions complètes couvrant la gestion administrative, le CRM, l’e-learning et les marketplaces. Nos outils sont conçus pour accompagner les organismes de formation dans l’obtention et le maintien de la certification QUALIOPI, en toute sérénité. Grâce à nos solutions abordables, nous facilitons l’automatisation de vos processus : inscriptions, évaluations, émargement (via QR code), gestion des check-lists QUALIOPI, personnalisation et édition de documents, gestion des formateurs, et création de catalogues de formations sur mesure

+

Éditeur français de logiciels de gestion dédiés aux organismes de formation, nous proposons des solutions complètes couvrant la gestion administrative, le CRM, l'e-learning et les marketplaces. Nos outils sont conçus pour accompagner les organismes de formation dans l'obtention et le maintien de la certification QUALIOPI, en toute sérénité. Grâce à nos solutions abordables, nous facilitons l'automatisation de vos processus : inscriptions, évaluations, émargement (via QR code), gestion des check-lists QUALIOPI, personnalisation et édition de documents, gestion des formateurs, et création de catalogues de formations sur mesure

{/*** GESTION Contact */} { const [visibleColumns, setVisibleColumns] = React.useState(); - + /*const { transcript, listening, @@ -864,6 +866,64 @@ const TestUrl_New = (props) => { return Browser doesn't support speech recognition.; }*/ + const recorderControls = useAudioRecorder( + { + noiseSuppression: true, + echoCancellation: true, + }, + (err) => console.table(err) // onNotAllowedOrFound + ); + + + const addAudioElement = (blob) => { + const url = URL.createObjectURL(blob); + + + const audio = document.createElement('audio'); + + audio.src = url; + audio.controls = true; + + document.body.appendChild(audio); + + + setblob_recorded_file(audio.attributes.src.nodeValue); + + }; + + async function send_audi_blob(e) { + + const audioBlob = await fetch(blob_recorded_file).then((r) => r.blob()); + const audiofile = new File([audioBlob], "audiofile.mp3", { + type: "audio/mp3", + }); + + var formData = new FormData(); + formData.append("file", audiofile); + + fetch( + process.env.REACT_APP_API_URL + "myclass/api/Get_Audio_File/", + { + method: 'POST', + body: formData, + } + ).then((response) => response.json()) + .then((result) => { + //console.log('Success:', result['message']); + //setisimgSelected(false); + + }) + .catch((error) => { + console.error('Error - send_audi_blob:'); + // setisimgSelected(true); + }); + + }; + + + + const [blob_recorded_file, setblob_recorded_file] = React.useState(""); + return (
@@ -1055,6 +1115,26 @@ const TestUrl_New = (props) => { + +
+

enregistrement audio


+ + addAudioElement(blob)} + recorderControls={recorderControls} + // downloadOnSavePress={true} + downloadFileExtension="mp3" + showVisualizer={true} + /> +
+ +
+ + file = {blob_recorded_file}
+ + +
+

manip datagrid