| Server IP : 172.67.147.195 / Your IP : 216.73.216.142 Web Server : Apache/2 System : Linux hosting8537.lvs 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : mienphi ( 1014) PHP Version : 8.2.14 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/mienphi/public_html/wp-content/plugins/learnpress-gradebook/src/components/export/ |
Upload File : |
import { __ } from '@wordpress/i18n';
import { useState } from '@wordpress/element';
import { Spinner, Button } from '@wordpress/components';
import { addQueryArgs } from '@wordpress/url';
import apiFetch from '@wordpress/api-fetch';
import { download } from '@wordpress/icons';
import { generateCSVDataFromTable, generateCSVFileName, downloadCSVFile } from '@woocommerce/csv-export';
const HEADERS = [
{ label: __( 'User ID', 'learnpress-gradebook' ), key: '"user_id"' },
{ label: __( 'Username', 'learnpress-gradebook' ), key: '"user_nicename"' },
{ label: __( 'Email', 'learnpress-gradebook' ), key: '"user_email"' },
{ label: __( 'Start time', 'learnpress-gradebook' ), key: '"start_time"' },
{ label: __( 'Status', 'learnpress-gradebook' ), key: '"graduation"' },
{ label: __( 'Average', 'learnpress-gradebook' ), key: '"average"' },
];
const HEADERS_FULL = [
{ label: __( 'User ID', 'learnpress-gradebook' ), key: '"user_id"' },
{ label: __( 'Username', 'learnpress-gradebook' ), key: '"user_nicename"' },
{ label: __( 'Email', 'learnpress-gradebook' ), key: '"user_email"' },
{ label: __( 'Start time', 'learnpress-gradebook' ), key: '"start_time"' },
{ label: __( 'End time', 'learnpress-gradebook' ), key: '"end_time"' },
{ label: __( 'Status', 'learnpress-gradebook' ), key: '"graduation"' },
{ label: __( 'Average', 'learnpress-gradebook' ), key: '"average"' },
];
export default function ExportStudent( { courseID } ) {
const [ loading, setLoading ] = useState( false );
const [ fullLoading, setFullLoading ] = useState( false );
const getDataExport = async () => {
setLoading( true );
try {
const response = await apiFetch( {
path: addQueryArgs( 'lp-gradebook/export-students', { courseID } ),
method: 'GET',
} );
const data = await response.data;
const dataForm = await generateCSVDataFromTable( HEADERS, data );
const name = await generateCSVFileName( 'gradebook', { list: 'students' } );
downloadCSVFile( name, dataForm );
setLoading( false );
} catch ( error ) {
console.log( error.message );
setLoading( false );
}
};
const getDataExportFull = async () => {
setFullLoading( true );
try {
const response = await getRequest( [], [], courseID, 10, 1 );
if ( ! response ) {
setFullLoading( false );
return;
}
const { headerData, dataList } = response;
const dataForm = generateCSVDataFromTable( [ ...HEADERS_FULL, ...headerData ], dataList );
const name = generateCSVFileName( 'gradebook', { list: 'students' } );
downloadCSVFile( name, dataForm );
setFullLoading( false );
} catch ( error ) {
console.log( error.message );
setFullLoading( false );
}
};
async function getRequest( headerData, dataList, courseID, limit, offset ) {
try {
const response = await apiFetch( {
path: addQueryArgs( 'lp-gradebook/export-students-full', { courseID, limit, offset } ),
method: 'GET',
} );
const { status, data, header, count } = response;
if ( status === 'success' ) {
headerData = [ ...headerData, ...header ];
dataList = [ ...dataList, ...data ];
if ( count > limit * offset ) {
return getRequest( headerData, dataList, courseID, limit, offset + 1 );
}
return { headerData, dataList };
}
return false;
} catch ( error ) {
return false;
}
}
return (
<>
<Button
className="learnpress-gradebook__export__button"
isSecondary
variant="secondary"
onClick={ getDataExport }
icon={ loading ? <Spinner /> : download }
iconSize={ 20 }
text={ __( 'Export CSV', 'learnpress-gradebook' ) }
/>
<Button
className="learnpress-gradebook__export__button"
isSecondary
variant="secondary"
onClick={ getDataExportFull }
icon={ fullLoading ? <Spinner /> : download }
iconSize={ 20 }
text={ __( 'Export Full CSV', 'learnpress-gradebook' ) }
/>
</>
);
}