10/12/2024 - 22h

recette2
cherif 2024-12-10 22:10:38 +01:00
parent 7041e28a94
commit 6916a25595
7 changed files with 164 additions and 9 deletions

72
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -36,7 +36,7 @@
<url>
<loc>https://www.mysy-training.com/Display-Detail-Article/signature-electronique-et-organismes-de-formation</loc>
<lastmod>2024-11-38T11:35:41+00:00</lastmod>
<lastmod>2024-11-08T11:35:41+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0000</priority>
</url>
@ -99,6 +99,12 @@
</url>
<url>
<loc>https://www.mysy-training.com/Display-Detail-Article/comment-choisir-un-logiciel-de-gestion-adapte-a-votre-centre-de-formation---261</loc>
<lastmod>2024-12-05T11:35:41+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0000</priority>
</url>
<url>
<loc>https://www.mysy-training.com/Connexion</loc>
@ -122,8 +128,4 @@
<priority>1.0000</priority>
</url>
</urlset>

View File

@ -109,7 +109,7 @@ const Fonctionnalites_V1 = () => {
return (
<div className="fonctionnalite_v1">
<Helmet>
<title>Gestion Administrative, CRM, LMS, Marketplace, découvrez les Fonctionnalités et Modules du logiciel de gestion des organismes de formation</title>
<title>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</title>
<meta name="description" content="Avec notre logiciel Tout-en-Un, Nous automatisons les étapes Qualiopi (Inscription, Documents personnalisés, Les émargements sécurisés, Les évaluations, etc). Votre Le bilan pédagogique et financier est généré automatiquement." />
<meta name="robots" content="index,follow" />
<meta name="title" content="Gestion Administrative, CRM, LMS, Marketplace, découvrez les Fonctionnalités et Modules du logiciel de gestion des organismes de formation" />

View File

@ -218,7 +218,7 @@ const QuiSommesNous_v4 = () => {
</Helmet>
<Header />
<h1 style={{ fontSize: '0.1px', opacity: '0', height: '0.1px' }}>É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, le-learning et les marketplaces. Nos outils sont conçus pour accompagner les organismes de formation dans lobtention et le maintien de la certification QUALIOPI, en toute sérénité. Grâce à nos solutions abordables, nous facilitons lautomatisation 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</h1>
<h1 style={{ fontSize: '0.1px', opacity: '0', height: '0.1px' }}>É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</h1>
{/*** GESTION Contact */}
<Dialog
open={Dialog_contact_open}

View File

@ -63,6 +63,8 @@ import {
gridVisibleColumnFieldsSelector,
} from '@mui/x-data-grid';
import { AudioRecorder, useAudioRecorder } from 'react-audio-voice-recorder';
//import ContextMenu from 'react-jsx-context-menu';
import { ContextMenu, ContextMenuTrigger } from "react-contextmenu";
import * as XLSX from 'xlsx';
@ -864,6 +866,64 @@ const TestUrl_New = (props) => {
return <span>Browser doesn't support speech recognition.</span>;
}*/
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 (
<div className="testurl_new">
<Helmet>
@ -1055,6 +1115,26 @@ const TestUrl_New = (props) => {
<button onClick={display_data}> display data </button>
<div>
<h2> enregistrement audio </h2> <br />
<AudioRecorder
onRecordingComplete={(blob) => addAudioElement(blob)}
recorderControls={recorderControls}
// downloadOnSavePress={true}
downloadFileExtension="mp3"
showVisualizer={true}
/>
<br />
<button onClick={recorderControls.stopRecording}>Stop recording</button>
<br />
file = {blob_recorded_file} <br/>
<button onClick={send_audi_blob}> envoyer fichier</button>
</div>
<h2> manip datagrid </h2>
<div style={{ height: 300, width: '100%' }}>
<DataGrid