Newer
Older
<?php
/*
+--------------------------------------------------------------------+
| This work is published under the GNU AGPLv3 license with some |
| permitted exceptions and without any warranty. For full license |
| and copyright information, see https://civicrm.org/licensing |
+--------------------------------------------------------------------+
// This file must not accessed directly.
if (!defined('ABSPATH')) {
exit;
}
* Define CiviCRM_For_WordPress_Shortcodes_Modal Class.
*
* @since 4.6
*/
class CiviCRM_For_WordPress_Shortcodes_Modal {
/**
* Plugin object reference.
* @since 4.6
* @access public
// Bail if CiviCRM not installed yet.
if (!CIVICRM_INSTALLED) {
return;
}
/*
* Adds the CiviCRM button to post and page edit screens.
* Use priority 100 to position button to the far right.
*/
add_action('media_buttons', [$this, 'add_form_button'], 100);
// Add the Javascript and styles to make it all happen.
add_action('load-post.php', [$this, 'add_core_resources']);
add_action('load-post-new.php', [$this, 'add_core_resources']);
add_action('load-page.php', [$this, 'add_core_resources']);
add_action('load-page-new.php', [$this, 'add_core_resources']);
* Add button to editor for selected WordPress Post Types.
* Callback method for 'media_buttons' hook as set in register_hooks().
*
* @since 4.7
// Add button to selected WordPress Post Types, if allowed.
if ($this->post_type_has_button()) {
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
$civilogo = file_get_contents(CIVICRM_PLUGIN_DIR . 'assets/images/civilogo.svg.b64');
$url = admin_url('admin.php?page=CiviCRM&q=civicrm/shortcode&reset=1');
echo '<a href= "' . $url . '" class="button crm-shortcode-button" style="padding-left: 4px;" title="' . __('Add CiviCRM Public Pages', 'civicrm') . '"><img src="' . $civilogo . '" height="15" width="15" alt="' . __('Add CiviCRM Public Pages', 'civicrm') . '" style="margin: -3px 1px 0 -2px;" />' . __('CiviCRM', 'civicrm') . '</a>';
* Add core resources.
*
* Callback method as set in register_hooks().
*/
public function add_core_resources() {
if ($this->civi->initialize()) {
Civi::resources()
->addCoreResources()
->addScriptFile('civicrm', 'js/crm.insert-shortcode.js', 0, 'html-header');
}
}
/**
* Does a WordPress post type have the CiviCRM button on it?
*
* @since 4.6
*
* @return bool $has_button True if the post type has the button, false otherwise.
$capable_post_types = $this->get_post_types_with_editor();
// Default allowed to true on all capable post types.
$allowed = (in_array($screen->post_type, $capable_post_types)) ? TRUE : FALSE;
/**
* Filter the appearance of the CiviCRM button.
*
* @since 4.6
*
* @param bool $allowed True if the button is allowed, false otherwise.
* @param object $screen The current WordPress screen object.
*/
$allowed = apply_filters('civicrm_restrict_button_appearance', $allowed, $screen);
* Get WordPress post types that support the editor.
*
* @since 4.6
* @return array $supported_post_types Array of post types that have an editor.
*/
public function get_post_types_with_editor() {
static $supported_post_types = [];
if (!empty($supported_post_types)) {
// Get only post types with an admin UI.
$args = [
'public' => TRUE,
'show_ui' => TRUE,
];
foreach ($post_types as $post_type) {
// Filter only those which have an editor.
if (post_type_supports($post_type, 'editor')) {
$supported_post_types[] = $post_type;
}
}
return $supported_post_types;
}