174 lines
4.2 KiB
PHP
174 lines
4.2 KiB
PHP
<?php
|
|
/**
|
|
* @package WP Content Aware Engine
|
|
* @author Joachim Jensen <joachim@dev.institute>
|
|
* @license GPLv3
|
|
* @copyright 2020 by Joachim Jensen
|
|
*/
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
/**
|
|
*
|
|
* BuddyPress Member Page Module
|
|
* Requires BuddyPress 2.6+
|
|
*
|
|
* Detects if current content is:
|
|
* a) a specific buddypress member page
|
|
*
|
|
*/
|
|
class WPCAModule_bp_member extends WPCAModule_Base
|
|
{
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $category = 'plugins';
|
|
|
|
/**
|
|
* Cached search string
|
|
* @var string
|
|
*/
|
|
protected $search_string;
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct('bp_member', __('BuddyPress Profiles', WPCA_DOMAIN));
|
|
$this->default_value = 0;
|
|
$this->placeholder = __('All Sections', WPCA_DOMAIN);
|
|
|
|
$this->query_name = 'cbp';
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function can_enable()
|
|
{
|
|
return defined('BP_VERSION');
|
|
}
|
|
|
|
/**
|
|
* Initiate module
|
|
*
|
|
* @since 2.0
|
|
* @return void
|
|
*/
|
|
public function initiate()
|
|
{
|
|
parent::initiate();
|
|
add_filter(
|
|
'wpca/module/static/in-context',
|
|
array($this,'static_is_content')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get content for sidebar editor
|
|
*
|
|
* @global object $bp
|
|
* @since 1.0
|
|
* @param array $args
|
|
* @return array
|
|
*/
|
|
protected function _get_content($args = array())
|
|
{
|
|
global $bp;
|
|
|
|
if (isset($args['paged']) && $args['paged'] > 1) {
|
|
return array();
|
|
}
|
|
|
|
$content = array();
|
|
$is_search = isset($args['search']) && $args['search'];
|
|
|
|
if (isset($bp->members->nav)) {
|
|
foreach ($bp->members->nav->get_item_nav() as $item) {
|
|
$content[$item->slug] = array(
|
|
'id' => $item->slug,
|
|
'text' => strip_tags($item->name)
|
|
);
|
|
if ($item->children) {
|
|
$level = $is_search ? 0 : 1;
|
|
foreach ($item->children as $child_item) {
|
|
$content[$item->slug.'-'.$child_item->slug] = array(
|
|
'text' => strip_tags($child_item->name),
|
|
'id' => $item->slug.'-'.$child_item->slug,
|
|
'level' => $level
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($args['include'])) {
|
|
$content = array_intersect_key($content, array_flip($args['include']));
|
|
} elseif ($is_search) {
|
|
$this->search_string = $args['search'];
|
|
$content = array_filter($content, array($this,'_filter_search'));
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
|
|
/**
|
|
* Filter content based on search
|
|
*
|
|
* @since 2.0
|
|
* @param string $value
|
|
* @return boolean
|
|
*/
|
|
protected function _filter_search($value)
|
|
{
|
|
return mb_stripos($value['text'], $this->search_string) !== false;
|
|
}
|
|
|
|
/**
|
|
* @global object $bp
|
|
* @since 1.0
|
|
* @return boolean
|
|
*/
|
|
public function in_context()
|
|
{
|
|
global $bp;
|
|
return isset($bp->displayed_user->domain) && $bp->displayed_user->domain;
|
|
}
|
|
|
|
/**
|
|
* Get data from context
|
|
*
|
|
* @global object $bp
|
|
* @since 1.0
|
|
* @return array
|
|
*/
|
|
public function get_context_data()
|
|
{
|
|
global $bp;
|
|
$data = array($this->default_value);
|
|
if (isset($bp->current_component)) {
|
|
$data[] = $bp->current_component;
|
|
if (isset($bp->current_action)) {
|
|
$data[] = $bp->current_component.'-'.$bp->current_action;
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Avoid collision with content of static module
|
|
* Somehow buddypress pages pass is_404()
|
|
*
|
|
* @since 1.0
|
|
* @param boolean $content
|
|
* @return boolean
|
|
*/
|
|
public function static_is_content($content)
|
|
{
|
|
//TODO: test if deprecated
|
|
return $content && !$this->in_context();
|
|
}
|
|
}
|