File: /var/www/itself.kauko.lt/wp-content/plugins/oxygen/component-framework/admin/admin.php
<?php
/**
* Get Frontend Builder post link by post ID
*
* @since 0.4.0
* @author Ilya K.
*/
function ct_get_post_builder_link($post_id) {
$link = get_permalink( $post_id );
if ( force_ssl_admin() ) {
$link = str_replace("http://", "https://", $link);
}
return add_query_arg( 'ct_builder', 'true', $link );
}
/**
* Hide admin bar if frontend builder launched
*
* @since 0.1
*/
function ct_hide_admin_bar() {
if ( defined("SHOW_CT_BUILDER") ) {
add_filter('show_admin_bar', '__return_false');
}
}
add_action('init','ct_hide_admin_bar');
/**
* Load scripts and styles for Component theme elements in WordPress dashboard
*
* @since 0.2.0
*/
function ct_enqueue_admin_scripts( $hook ) {
// load css on all pages
wp_enqueue_style ( 'ct-admin-style', CT_FW_URI . "/admin/admin.css" );
// load specific scrpits only here
if ( 'post.php' != $hook && 'post-new.php' != $hook && 'edit.php' != $hook && 'oxygen_page_oxygen_vsb_settings' != $hook ) {
return;
}
$screen = get_current_screen();
// include only on Views screen and Oxygen > Settings
if ( $screen->post_type == "ct_template" || 'oxygen_page_oxygen_vsb_settings' == $hook ) {
wp_enqueue_script( 'select2', CT_FW_URI . "/vendor/select2/select2.full.min.js", array( 'jquery' ) );
wp_enqueue_style ( 'select2', CT_FW_URI . "/vendor/select2/select2.min.css" );
}
wp_enqueue_script( 'ct-admin-script', CT_FW_URI . "/admin/admin.js" );
}
add_action( 'admin_enqueue_scripts', 'ct_enqueue_admin_scripts' );
/**
* Output shortcodes to meta box content
*
* @since 0.4.0
* @author Ilya K.
*/
function ct_shortcodes_save_meta_box( $post_id ) {
// Check if our nonce is set
if ( ! isset( $_POST['ct_shortcode_meta_box_nonce'] ) ) {
return;
}
// Verify that the nonce is valid
if ( ! wp_verify_nonce( $_POST['ct_shortcode_meta_box_nonce'], 'ct_shortcode_meta_box' ) ) {
return;
}
// If this is an autosave, our form has not been submitted, so we don't want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Check the user's permissions
if ( !oxygen_vsb_current_user_can_access() ) {
return;
}
/* OK, it's safe for us to save the data now */
// get shortcodes
$shortcodes = trim( wp_unslash( $_POST['ct_builder_shortcodes'] ) );
// Parse shortcodes into Oxygen content array and then back again.
// This forces the shortcodes to be re-signed as well as running them through all of the content specific filters
$components = parse_shortcodes( $shortcodes, true, false );
$shortcodes = parse_components_tree( $components['content'] );
// template type
update_post_meta( $post_id, 'ct_builder_shortcodes', $shortcodes );
// Lock Post In Edit Mode
update_post_meta( $post_id, 'oxygen_lock_post_edit_mode', $_POST['oxygen_lock_post_edit_mode'] );
}
add_action( 'save_post', 'ct_shortcodes_save_meta_box' );
/**
* Check add-ons versions
*
* @since 1.5
* @author Ilya K.
*/
function oxygen_check_addons_versions() {
define("REQUIRED_OSD_VERSION", "1.1");
if ( defined('OSD_VERSION') && version_compare( OSD_VERSION, REQUIRED_OSD_VERSION ) < 0) {
remove_action( 'plugins_loaded', 'oxygen_selector_detector_init' );
add_action( 'admin_notices', 'oxygen_osd_addon_wrong_version' );
}
}
//add_action("plugins_loaded", "oxygen_check_addons_versions", 0);
/**
* Admin notice if Oxygen Selector Detector version is not compatible
*
* @since 1.5
* @author Ilya K.
*/
function oxygen_osd_addon_wrong_version() {
$classes = 'notice notice-error';
$message = __( 'Your Oxygen Selector Detector version is not supported. Minimal required Selector Detector version is:', 'oxygen' );
printf( '<div class="%1$s"><p>%2$s <b>%3$s</b></p></div>', $classes, $message, REQUIRED_OSD_VERSION );
}
/**
* Enqueues the main script and the full Oxygen generated markup in a frontend
* variable so the script can access it synchronously, as suggested by Yoast
*
* @since 2.0
* @author Emmanuel & Ilya
*/
function oxygen_vsb_yoast_compatibility() {
// check if Yoast Seo is active
if ( !is_plugin_active( "wordpress-seo/wp-seo.php" ) && !is_plugin_active( "wordpress-seo-premium/wp-seo-premium.php" ) ) {
return;
}
global $pagenow;
global $post;
// save global $post to restore later
$saved_post = $post;
// exclude templates
if (is_object($post) && $post->post_type=="ct_template") {
return;
}
if( 'post.php' == $pagenow && !is_null( $post ) ) {
wp_enqueue_script( 'ysco-oxygen-analysis', plugins_url( '/js/yoast-seo-compatibility.js', __FILE__ ), array( 'jquery' ), false, true );
wp_localize_script( 'ysco-oxygen-analysis', 'ysco_data', array(
'oxygen_markup' => ct_do_shortcode( get_post_meta( $post->ID, 'ct_builder_shortcodes', true ) )
) );
}
// restore original global post
$post = $saved_post;
}
add_action( 'admin_enqueue_scripts', 'oxygen_vsb_yoast_compatibility', 11 );
/**
* Gray out WP themes to let user know they doesn't matter
*
* @since 2.2
* @author CSS: Elijah, Hook: Ilya
*/
function oxygen_vsb_disable_themes_css() {
$current_screen = get_current_screen();
// add for Themes screen only
if ( $current_screen->id != "themes") {
return;
}
echo '<style>
.theme-screenshot img {
filter: grayscale(100%) brightness(0.5);
}
.theme-actions .button,
.theme-actions .button:hover {
background-color: #F1F1F1;
color: #DDDDDD;
text-shadow: none;
border-color: #ccc;
box-shadow: none;
}
.oxy-notice {
border-left: 4px solid #6036ca;
padding: 11px 15px;
}
</style>';
}
add_action('admin_head', 'oxygen_vsb_disable_themes_css');
/**
* Show admin notice on Themes screen
*
* @since 2.2
* @author Ilya K.
*/
function oxygen_vsb_themes_screen_notice() {
$current_screen = get_current_screen();
// add for Themes screen only
if ( $current_screen->id != "themes") {
return;
}
?>
<div class="notice notice-warning oxy-notice">
<p><?php printf(
__( 'You\'re using <a href="%s">Oxygen</a> to design your site, which entirely disables the WordPress theme system. The active theme is never loaded, and has no impact on your site\'s performance or appearance.', 'oxygen' ),
menu_page_url('ct_dashboard_page', false)
); ?></p>
</div>
<?php }
add_action( 'admin_notices', 'oxygen_vsb_themes_screen_notice' );
/**
* Add edit with Oxygen quick action link
*
* @param string[] $actions An array of row action links.
* @param WP_Post $post The post object.
*
* @return string[]
*
* @since 3.3
* @author Abdelouahed E.
*/
function oxygen_add_posts_quick_action_link($actions, $post, $return_type = "filter") {
$post_ID = $post->ID;
$post_type = $post->post_type;
if (!oxygen_vsb_current_user_can_access()) {
return $actions;
}
if (get_option("oxygen_vsb_ignore_post_type_{$post_type}") == 'true') {
return $actions;
}
// check if Oxygen is open somewhere and threfore blocked
if (is_oxygen_edit_post_locked()) {
return $actions;
}
// check if post blocked manually for "edit only" users
if ($return_type == "filter" && get_post_meta( $post_ID, 'oxygen_lock_post_edit_mode', true )=="true" && oxygen_vsb_get_user_edit_mode() == "edit_only") {
return $actions;
}
$edit_link_href = '';
$edit_link_text = __("Edit with Oxygen", "oxygen");
if ($post_type == "ct_template") {
$template_type = get_post_meta($post_ID, 'ct_template_type', true);
$edit_link_href = ct_get_post_builder_link($post_ID);
if ($template_type !== 'reusable_part') {
$parent_template_inner = false;
$parent_template = get_post_meta($post_ID, 'ct_parent_template', true);
if ($parent_template) {
$shortcodes = get_post_meta($parent_template, 'ct_builder_shortcodes', true);
if ($shortcodes && strpos($shortcodes, '[ct_inner_content') !== false) {
$parent_template_inner = true;
}
}
if ($parent_template_inner) {
$edit_link_href = add_query_arg('ct_inner', 'true', $edit_link_href);
}
}
} else if ($post_type == "oxy_user_library") {
$edit_link_href = ct_get_post_builder_link($post_ID);
} else {
// Get post template
$post_template = intval(get_post_meta($post_ID, 'ct_other_template', true));
// Check if we should edit the post or it's template
$edit_template = false;
$post_editable = false;
$template_inner = false;
if ($post_template == 0) { // default template
// Get default template
$default_template = null;
if (get_option('page_for_posts') == $post_ID || get_option('page_on_front') == $post_ID ) {
$default_template = ct_get_archives_template( $post_ID );
}
if (empty($default_template)) {
$default_template = ct_get_posts_template($post_ID);
}
if ($default_template) {
$shortcodes = get_post_meta($default_template->ID, 'ct_builder_shortcodes', true);
if ($shortcodes && strpos($shortcodes, '[ct_inner_content') !== false) {
$post_editable = true;
$template_inner = true;
} else {
$edit_template = $default_template->ID;
}
} else {
$post_editable = true;
}
} else if ($post_template == -1) { // None
$post_editable = true;
} else { // Custom template
$shortcodes = get_post_meta($post_template, 'ct_builder_shortcodes', true);
if ($shortcodes && strpos($shortcodes, '[ct_inner_content') !== false) {
$post_editable = true;
$template_inner = true;
} else {
$edit_template = $post_template;
}
}
// Generate edit link
if ($post_editable) {
$edit_link_href = ct_get_post_builder_link($post_ID);
if ($template_inner) {
$edit_link_href = add_query_arg('ct_inner', 'true', $edit_link_href);
}
} else if ($edit_template) {
// check if template blocked manually for "edit only" users
if ($return_type == "filter" && get_post_meta( $edit_template, 'oxygen_lock_post_edit_mode', true )=="true" && oxygen_vsb_get_user_edit_mode() == "edit_only") {
return $actions;
}
$edit_link_href = ct_get_post_builder_link($edit_template);
$edit_link_text = __("Edit Template", "oxygen");
}
}
if( $edit_link_href && $edit_link_text ) {
$actions['oxy_edit'] = sprintf('<a class="edit" href="%s">%s</a>', $edit_link_href, $edit_link_text);
}
if ( $return_type == "filter" ) {
return $actions;
}
if ( $return_type == "array" ) {
return array(
"url" => $edit_link_href,
"text" => $edit_link_text,
"template" => $edit_template
);
}
}
add_filter('page_row_actions', 'oxygen_add_posts_quick_action_link', 10, 2);
add_filter('post_row_actions', 'oxygen_add_posts_quick_action_link', 10, 2);
/**
* Set edit lock transient when user use "Edit with Oxygen" link in the adminbar
*
* @author Ilya K.
* @since 3.3
*/
function oxygen_vsb_post_edit_lock_adminbar() {
if (!is_admin_bar_showing()) {
return;
}
?>
jQuery(document).ready(function($){
jQuery("#wp-admin-bar-edit_post_template > a").click(function(){
jQuery.post( '<?php echo admin_url('admin-ajax.php'); ?>', {
action: 'set_oxygen_edit_post_lock_transient',
post_id: <?php echo get_the_ID(); ?>,
nonce: '<?php echo wp_create_nonce( 'oxygen-nonce-' . get_the_ID() ); ?>'
})
});
});
<?php }
add_action("ct_footer_js", "oxygen_vsb_post_edit_lock_adminbar" );
/**
* Set special body class in case post edit locked in Oxygen
*
* @since 3.3
* @author Ilya K.
*/
function oxy_admin_body_class($classes) {
if (isset($_REQUEST['ignore_post_lock'])) {
return $classes;
}
if ( is_oxygen_edit_post_locked() ) {
$classes .= ' oxygen-edit-post-locked';
}
global $post;
if ( $post && is_oxygen_edit_post_locked($post->ID) ) {
$classes .= ' oxygen-edit-post-locked-current';
}
return $classes;
}
add_filter('admin_body_class', 'oxy_admin_body_class');