File "staging.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/mojo-marketplace-wp-plugin/inc/staging.php
File size: 6.55 KB
MIME-type: text/x-php
Charset: utf-8
<?php
if ( ! defined( 'WPINC' ) ) {
die;
}
function mm_is_staging() {
return ( get_option( 'staging_environment' ) == 'staging' ) ? true : false;
}
function mm_cl( $command, $args = null ) {
$whitelist_commands = array(
'create' => false,
'clone' => 'production',
'destroy' => 'production',
'sso_staging' => 'production',
'deploy_files' => 'staging',
'deploy_db' => 'staging',
'deploy_files_db' => 'staging',
'sso_production' => 'staging',
'save_state' => 'staging',
'restore_state' => 'staging',
'revisions' => 'staging',
'compat_check' => false,
);
if ( ! array_key_exists( $command, $whitelist_commands ) ) {
echo json_encode(
array(
'status' => 'error',
'message' => 'Command not found in whitelist.',
)
);
} else {
if ( ! class_exists( 'WP_CLI_Command' ) ) {
mm_check_env( $whitelist_commands[ $command ] );
}
}
if ( 'compat_check' != $command && 'revisions' != $command ) {
do_action( 'mm_staging_command', $command );
}
$command = array( $command );
$token = wp_generate_password( 32, false );
set_transient( 'staging_auth_token', $token, 60 );
$command[] = $token;
$config = get_option( 'staging_config' );
if ( false == $config || ! isset( $config['production_dir'] ) || ! isset( $config['staging_dir'] ) ) {
$staging_rel = 'staging/' . mt_rand( 1000, 9999 );
$config = array(
'production_dir' => ABSPATH,
'staging_dir' => ABSPATH . $staging_rel . '/',
'production_url' => get_option( 'siteurl' ),
'staging_url' => get_option( 'siteurl' ) . '/' . $staging_rel,
'creation_date' => date( 'M j, Y' ),
);
update_option( 'staging_config', $config );
}
$command[] = $config['production_dir'];
$command[] = $config['staging_dir'];
$command[] = $config['production_url'];
$command[] = $config['staging_url'];
$command[] = get_current_user_id();
if ( ! is_null( $args ) && is_array( $args ) ) {
$args = array_values( $args );
$command = array_merge( $command, $args );
}
array_map( 'escapeshellcmd', $command );
$command = implode( ' ', $command );
if ( false !== strpos( $command, ';' ) ) {
echo json_encode(
array(
'status' => 'error',
'message' => 'Invalid character in command (;).',
)
);
die;
}
if ( false !== strpos( $command, '&' ) ) {
echo json_encode(
array(
'status' => 'error',
'message' => 'Invalid character in command (&).',
)
);
die;
}
if ( false !== strpos( $command, '|' ) ) {
echo json_encode(
array(
'status' => 'error',
'message' => 'Invalid character in command (|).',
)
);
die;
}
$script = MM_BASE_DIR . 'lib/.staging';
if ( 0755 != (int) substr( sprintf( '%o', fileperms( $script ) ), -4 ) ) {
chmod( $script, 0755 );
}
putenv( 'PATH=' . getenv( 'PATH' ) . PATH_SEPARATOR . '/usr/local/bin' );
$response = exec( $script . ' ' . $command );
return $response;
}
function mm_check_admin() {
if ( ! current_user_can( 'manage_options' ) ) {
$response = array(
'status' => 'error',
'message' => 'Invalid user permissions.',
);
echo json_encode( $response );
die;
}
}
function mm_check_env( $env ) {
$current_env = get_option( 'staging_environment', false );
if ( $env == $current_env ) {
return true;
} else {
$response = array(
'status' => 'error',
'message' => 'Invalid environment for command.',
);
echo json_encode( $response );
die;
}
}
function mm_compat_check() {
echo mm_cl( 'compat_check' );
die;
}
add_action( 'wp_ajax_mm_compat_check', 'mm_compat_check' );
function mm_create() {
mm_check_admin();
mm_check_env( false );
set_transient( 'mm_fresh_staging', true, 300 );
echo mm_cl( 'create' );
die;
}
add_action( 'wp_ajax_mm_create', 'mm_create' );
function mm_clone() {
mm_check_admin();
mm_check_env( 'production' );
echo mm_cl( 'clone' );
die;
}
add_action( 'wp_ajax_mm_clone', 'mm_clone' );
function mm_deploy_files() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'deploy_files' );
die;
}
add_action( 'wp_ajax_mm_deploy_files', 'mm_deploy_files' );
function mm_deploy_files_db() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'deploy_files_db' );
die;
}
add_action( 'wp_ajax_mm_deploy_files_db', 'mm_deploy_files_db' );
function mm_deploy_db() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'deploy_db' );
die;
}
add_action( 'wp_ajax_mm_deploy_db', 'mm_deploy_db' );
function mm_destroy() {
mm_check_admin();
mm_check_env( 'production' );
echo mm_cl( 'destroy' );
die;
}
add_action( 'wp_ajax_mm_destroy', 'mm_destroy' );
function mm_save_state() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'save_state' );
die;
}
add_action( 'wp_ajax_mm_save_state', 'mm_save_state' );
function mm_restore_state() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'restore_state', array( esc_attr( $_POST['param1'] ) ) );
die;
}
add_action( 'wp_ajax_mm_restore_state', 'mm_restore_state' );
function mm_revisions() {
mm_check_admin();
mm_check_env( 'staging' );
$revisions = mm_cl( 'revisions' );
$revisions = explode( ';', $revisions );
$output = '';
foreach ( $revisions as $revision ) {
$revision = explode( ',', $revision );
if ( array_search( '', $revision ) === false ) {
$output .= '<tr class="staging-revision"><td>' . $revision[2] . '</td><td>' . $revision[1] . '</td><td class="text-right"><button class="btn btn-primary btn-lg staging-action" data-staging-action="mm_restore_state" data-staging-param1="' . trim( $revision[0] ) . '">Restore</button></td></tr>';
}
}
echo $output;
die;
}
add_action( 'wp_ajax_mm_revisions', 'mm_revisions' );
function mm_sso_production() {
mm_check_admin();
mm_check_env( 'staging' );
echo mm_cl( 'sso_production', array( get_current_user_id() ) );
die;
}
add_action( 'wp_ajax_mm_sso_production', 'mm_sso_production' );
function mm_sso_staging() {
mm_check_env( 'production' );
echo mm_cl( 'sso_staging', array( get_current_user_id() ) );
die;
}
add_action( 'wp_ajax_mm_sso_staging', 'mm_sso_staging' );
function mm_interim() {
if ( isset( $_POST['template'] ) ) {
$interim = MM_BASE_DIR . 'pages/interim-' . sanitize_file_name( $_POST['template'] ) . '.php';
mm_require( $interim );
}
die;
}
add_action( 'wp_ajax_mm_interim', 'mm_interim' );
function mm_modal() {
if ( isset( $_POST['template'] ) ) {
$interim = MM_BASE_DIR . 'pages/modal-' . sanitize_file_name( $_POST['template'] ) . '.php';
if ( file_exists( $interim ) ) {
?>
<div id="mm-modal-wrap">
<?php
mm_require( $interim );
?>
</div>
<?php
}
}
die;
}
add_action( 'wp_ajax_mm_modal', 'mm_modal' );