Ajax
Class for all ajax related functions
Description
Source
File: bp-integrations/learndash/buddypress/Ajax.php
class Ajax
{
protected $bpGroup = null;
protected $ldGroup = null;
/**
* Constructor
*
* @since BuddyBoss 1.0.0
*/
public function __construct()
{
add_action('bp_ld_sync/init', [$this, 'init']);
}
/**
* Add actions once integration is ready
*
* @since BuddyBoss 1.0.0
*/
public function init()
{
add_action('wp_ajax_bp_ld_group_get_reports', [$this, 'ajaxGetReports']);
add_action('wp_ajax_download_bp_ld_reports', [$this, 'ajaxDownloadReport']);
add_action('bp_ld_sync/ajax/post_fetch_reports', [$this, 'ajaxGetExports']);
add_action('bp_ld_sync/report_columns', [$this, 'removeIdsOnNonExport'], 10, 2);
add_action('bp_ld_sync/reports_generator_args', [$this, 'unsetCompletionOnExport']);
}
/**
* Get reports
*
* @since BuddyBoss 1.0.0
*/
public function ajaxGetReports()
{
$this->enableDebugOnDev();
$this->validateRequest();
$generator = $this->getGenerator();
/**
* Hook before the data is fetched, in cause of overwriting the post value
*
* @since BuddyBoss 1.0.0
*/
do_action('bp_ld_sync/ajax/pre_fetch_reports', $generator);
$generator->fetch();
/**
* Hook after the data is fetched, in cause of overwriting results value
*
* @since BuddyBoss 1.0.0
*/
do_action('bp_ld_sync/ajax/post_fetch_reports', $generator);
echo json_encode([
'draw' => (int) bp_ld_sync()->getRequest('draw'),
'recordsTotal' => $generator->getPager()['total_items'],
'recordsFiltered' => $generator->getPager()['total_items'],
'data' => $generator->getData(),
]);
header('Content-Type: application/json; charset=' . get_option('blog_charset'));
wp_die();
// wp_send_json_success([
// 'draw' => (int) bp_ld_sync()->getRequest('draw'),
// 'results' => $generator->getData(),
// 'pager' => $generator->getPager(),
// ]);
}
/**
* Unset the completed status when exporting
*
* @since BuddyBoss 1.0.0
*/
public function unsetCompletionOnExport($args)
{
if (bp_ld_sync()->getRequest('export')) {
$args['completed'] = null;
}
return $args;
}
/**
* Remove the id fields when fetching for display only
*
* @since BuddyBoss 1.0.0
*/
public function removeIdsOnNonExport($column, $args)
{
if (! isset($args['report'])) {
unset($column['user_id']);
unset($column['course_id']);
}
return $column;
}
/**
* Get export data from report generator
*
* @since BuddyBoss 1.0.0
*/
public function ajaxGetExports($generator)
{
if (! bp_ld_sync()->getRequest('export')) {
return;
}
return $generator->export();
}
/**
* Output the export content to header buffer
*
* @since BuddyBoss 1.0.0
*/
public function ajaxDownloadReport()
{
$hash = bp_ld_sync()->getRequest('hash');
$exports = get_transient($hash);
$info = get_transient("{$hash}_info");
if (! $hash || ! $exports) {
wp_die(__('Session has expired, please refresh and try again.', 'buddyboss'));
}
$file = fopen('php://output', 'w');
fputcsv($file, wp_list_pluck($info['columns'], 'label'));
foreach ($exports as $export) {
fputcsv($file, $export);
}
header('Content-Encoding: '. DB_CHARSET);
header('Content-type: text/csv; charset='.DB_CHARSET);
header('Content-Disposition: attachment; filename='. $info['filename']);
header('Pragma: no-cache');
header('Expires: 0');
fclose($df);
die();
}
/**
* Enable error reporting on local development (internal use only)
*
* @since BuddyBoss 1.0.0
*/
protected function enableDebugOnDev()
{
if (strpos(get_bloginfo('url'), '.test') === false) {
return;
}
error_reporting(E_ALL);
ini_set("display_errors", 1);
}
/**
* Validate the ajax request
*
* @since BuddyBoss 1.0.0
*/
protected function validateRequest()
{
if (! wp_verify_nonce(bp_ld_sync()->getRequest('nonce'), 'bp_ld_report')) {
wp_send_json_error([
'message' => __('Session has expired, please refresh and try again.', 'buddyboss')
]);
}
if ( $this->setRequestGroups() && ( ! $this->bp_group || ! $this->ld_group ) ) {
wp_send_json_error([
'message' => __('Unable to find selected group.', 'buddyboss')
]);
}
}
/**
* Setup the current bp and ld groups on ajax request
*
* @since BuddyBoss 1.0.0
*/
protected function setRequestGroups()
{
if (! $groupId = bp_ld_sync()->getRequest('group')) {
return;
}
$bpGroup = groups_get_group($groupId);
if (! $bpGroup->id) {
return;
}
$this->bpGroup = $bpGroup;
$this->ldGroup = get_post(bp_ld_sync('buddypress')->helpers->getLearndashGroupId($groupId));
}
/**
* Get the generator class based on the request
*
* @since BuddyBoss 1.0.0
*/
protected function getGenerator()
{
$generators = bp_ld_sync('buddypress')->reports->getGenerators();
$type = bp_ld_sync()->getRequest('step');
return (new $generators[$type]['class']);
}
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.0.0 | Introduced. |
Methods
- __construct — Constructor
- ajaxDownloadReport — Output the export content to header buffer
- ajaxGetExports — Get export data from report generator
- ajaxGetReports — Get reports
- enableDebugOnDev — Enable error reporting on local development (internal use only)
- getGenerator — Get the generator class based on the request
- init — Add actions once integration is ready
- removeIdsOnNonExport — Remove the id fields when fetching for display only
- setRequestGroups — Setup the current bp and ld groups on ajax request
- unsetCompletionOnExport — Unset the completed status when exporting
- validateRequest — Validate the ajax request
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.