File: /var/www/html/wpmuhibbah_err/wp-content/plugins/give/src/DonorDashboards/RequestHandler.php
<?php
namespace Give\DonorDashboards;
use _WP_Dependency;
use Give\DonorDashboards\Admin\Settings;
use WP_Query;
/**
* @since 2.10.0
*/
class RequestHandler
{
/**
* Register 'give-embed' query var
*
* @param array $vars
*
* @return array
*/
public function filterQueryVars($vars)
{
$vars[] = 'give-embed';
$vars[] = 'give-generate-donor-dashboard-page';
$vars[] = 'give-generated-donor-dashboard-page';
return $vars;
}
/**
* Load donor dashboard markup, if donor dashboard exists in query vars
*
* @param WP_Query $query
*
* @return void
*/
public function parseRequest($query)
{
if (is_admin() && current_user_can('manage_options') && ! wp_doing_ajax() && array_key_exists(
'give-generate-donor-dashboard-page',
$query->query_vars
)) {
(new Settings())->generateDonorDashboardPage();
wp_safe_redirect(
admin_url('edit.php?post_type=give_forms&page=give-settings&give-generated-donor-dashboard-page=1')
);
exit;
}
if (array_key_exists(
'give-embed',
$query->query_vars
) && $query->query_vars['give-embed'] === 'donor-dashboard') {
$this->setUpFrontendHooks();
$app = new App();
echo $app->getIframeContent();
exit; // and exit
}
}
/**
* Setup frontend hooks
*
* @since 2.10.0
*/
public function setUpFrontendHooks()
{
add_action('give_embed_head', [$this, 'noRobots']);
add_action('give_embed_head', 'wp_enqueue_scripts', 1);
add_action('give_embed_head', [$this, 'handleEnqueueScripts'], 2);
add_action('give_embed_head', 'wp_print_styles', 8);
add_action('give_embed_head', 'wp_print_head_scripts', 9);
add_action('give_embed_footer', 'wp_print_footer_scripts', 20);
}
/**
* Display a noindex meta tag.
*
* Outputs a noindex meta tag that tells web robots not to index and follow content.
*
* @since 2.10.0
*/
public function noRobots()
{
echo "<meta name='robots' content='noindex,nofollow'/>\n";
}
/**
* Handle enqueue script
*
* @since 2.10.0
*/
public function handleEnqueueScripts()
{
global $wp_scripts, $wp_styles;
wp_enqueue_scripts();
$wp_styles->dequeue($this->getListOfScriptsToDequeue($wp_styles->registered));
$wp_scripts->dequeue($this->getListOfScriptsToDequeue($wp_scripts->registered));
}
/**
* Get filter list to dequeue scripts and style
*
* @since 2.10.0
*
* @param array $scripts
*
* @return array
*/
private function getListOfScriptsToDequeue($scripts)
{
$list = [];
$skip = [];
$themeDir = get_template_directory_uri();
/* @var _WP_Dependency $data */
foreach ($scripts as $handle => $data) {
// Do not unset dependency.
if (in_array($handle, $skip, true)) {
continue;
}
// Do not allow styles and scripts from theme.
if (false !== strpos((string)$data->src, $themeDir)) {
$list[] = $handle;
continue;
}
if (
0 === strpos($handle, 'give') ||
false !== strpos($data->src, '\give')
) {
// Store dependencies to skip.
$skip = array_merge($skip, $data->deps);
continue;
}
$list[] = $handle;
}
return $list;
}
}