<?php
namespace FluentForm\Framework\Foundation;
trait FoundationTrait
{
public function env()
{
return $this->config->get('app.env');
}
public function hook($prefix, $hook)
{
return $prefix . $hook;
}
public function parseRestHandler($handler)
{
if ($handler instanceof \Closure) {
return $handler;
}
if (is_array($handler)) {
if (is_object($handler[0])) {
return $handler;
}
if (is_string($handler[0])) {
$handler = $handler[0] . '@' . $handler[1];
}
}
return $this->getControllerNamespace($handler) . '\\' . $handler;
}
public function parsePolicyHandler($handler)
{
if (!$handler) return;
if (is_string($handler)) {
$handler = $this->policyNamespace . '\\' . $handler;
if ($this->isCallableWithAtSign($handler)) {
list($class, $method) = explode('@', $handler);
if (!method_exists($class, $method)) {
$method = 'verifyRequest';
if (!method_exists($class, $method)) {
$method = '__returnTrue';
}
}
$instance = $this->make($class);
$handler = [$instance, $method];
}
} else if (is_array($handler)) {
list($class, $method) = $handler;
if (is_string($class)) {
$handler = $this->policyNamespace . '\\' . $class . '::' . $method;
}
}
return $handler;
}
public function addAction($action, $handler, $priority = 10, $numOfArgs = 1)
{
return add_action(
$action,
$this->parseHookHandler($handler),
$priority,
$numOfArgs
);
}
public function addCustomAction($action, $handler, $priority = 10, $numOfArgs = 1)
{
$prefix = $this->config->get('app.hook_prefix');
return $this->addAction(
$this->hook($prefix, $action), $handler, $priority, $numOfArgs
);
}
public function doAction()
{
return call_user_func_array('do_action', func_get_args());
}
public function doCustomAction()
{
$args = func_get_args();
$prefix = $this->config->get('app.hook_prefix');
$args[0] = $this->hook($prefix, $args[0]);
return call_user_func_array('do_action', $args);
}
public function addFilter($action, $handler, $priority = 10, $numOfArgs = 1)
{
return add_filter(
$action,
$this->parseHookHandler($handler),
$priority,
$numOfArgs
);
}
public function addCustomFilter($action, $handler, $priority = 10, $numOfArgs = 1)
{
$prefix = $this->config->get('app.hook_prefix');
return $this->addFilter(
$this->hook($prefix, $action), $handler, $priority, $numOfArgs
);
}
public function applyFilters()
{
return call_user_func_array('apply_filters', func_get_args());
}
public function applyCustomFilters()
{
$args = func_get_args();
$prefix = $this->config->get('app.hook_prefix');
$args[0] = $this->hook($prefix, $args[0]);
return call_user_func_array('apply_filters', $args);
}
public function addShortcode($action, $handler)
{
return add_shortcode(
$action,
$this->parseHookHandler($handler)
);
}
public function doShortcode($content, $ignore_html = false)
{
return do_shortcode($content, $ignore_html);
}
public function parseHookHandler($handler)
{
if (is_string($handler)) {
list($class, $method) = preg_split('/::|@/', $handler);
$class = $this->makeInstance($class);
return [$class, $method];
} else if (is_array($handler)) {
list($class, $method) = $handler;
if (is_string($class)) {
$class = $this->makeInstance($class);
}
return [$class, $method];
}
return $handler;
}
public function hasNamespace($handler)
{
if ($handler instanceof \Closure) {
return false;
};
$parts = explode('\\', $handler);
return count($parts) > 1;
}
public function getControllerNamespace($handler)
{
if ($this->hasNamespace($handler)) {
return '';
}
return $this->controllerNamespace;
}
public function makeInstance($class)
{
if ($this->hasNamespace($class)) {
$instance = $this->make($class);
} else {
$instance = $this->make($this->handlerNamespace . '\\' . $class);
}
return $instance;
}
private function addAjaxAction($tag, $handler, $priority, $scope)
{
if ($scope == 'admin') {
return add_action(
'wp_ajax_'.$tag,
$this->parseHookHandler($handler),
$priority
);
}
if ($scope == 'public') {
return add_action(
'wp_ajax_nopriv_'.$tag,
$this->parseHookHandler($handler),
$priority
);
}
}
public function addAdminAjaxAction($tag, $handler, $priority = 10)
{
return $this->addAjaxAction($tag, $handler, $priority, 'admin');
}
public function addPublicAjaxAction($tag, $handler, $priority = 10)
{
return $this->addAjaxAction($tag, $handler, $priority, 'public');
}
public function url($path = '')
{
// _deprecated_function(
// __METHOD__,
// FLUENTFORM_FRAMEWORK_UPGRADE,
// 'fluentformMix to get asset URL'
// );
return $this->baseUrl.ltrim($path, '/');
}
public function publicUrl($path = '')
{
// _deprecated_function(
// __METHOD__,
// FLUENTFORM_FRAMEWORK_UPGRADE,
// 'fluentformMix to get asset URL'
// );
return fluentFormMix($path);
}
}