element‐project‐info.php - 1989shack/sentry-netlify-build-plugin GitHub Wiki
`<?php /**
- Helper for plugin table and popups
- @var int $pid Project ID.
- @var WPMUDEV_Dashboard_Sui_Page_Urls $urls URLs class.
- @var string $membership_type Membership type.
- @var array $membership_data Membership data.
- @var bool $is_wpmudev_host Is WPMUDEV Host.
- @var bool $is_standalone_hosting Is standalone hosting plan.
- @package WPMUDEV DASHBOARD 4.9.0 */
$url_upgrade = $urls->remote_site . 'hub/account/';
$hub_client_pid = 3779636; $reactivate_url = $urls->remote_site . '/hub/account/';
$url_upgrade_to_agency = $urls->remote_site . '/hub/account/';
$free = false; $is_unit_membership = false; $is_unit_allowed = false; $dash_pid = 119; $has_hosted_access = $is_wpmudev_host && ! $is_standalone_hosting && 'free' === $membership_type;
if ( 'free' === $membership_type ) { $free = true; } elseif ( 'unit' === $membership_type ) { $is_unit_membership = true; } // Subscribed unit plugin(s) and Dashboard are allowed with unit membership type. $is_unit_allowed = intval( $pid ) === $dash_pid; if ( ! $is_unit_allowed && $is_unit_membership ) { foreach ( $membership_data['membership_projects'] as $p ) { $is_unit_allowed = intval( $pid ) === intval( $p ); if ( $is_unit_allowed ) { break; } } }
// Skip if project-ID is invalid. $pid = intval( $pid ); if ( ! $pid ) { return; }
$res = false; // For backward compatibility while updating. if ( method_exists( WPMUDEV_Dashboard::$site, 'get_project_info' ) ) { $res = WPMUDEV_Dashboard::$site->get_project_info( $pid ); }
// Skip invalid projects. if ( false === $res || empty( $res->pid ) || empty( $res->name ) ) { return; }
// Skip hidden projects. if ( $res->is_hidden ) { return; }
$hashes = array( 'project-activate' => wp_create_nonce( 'project-activate' ), 'project-deactivate' => wp_create_nonce( 'project-deactivate' ), 'project-install' => wp_create_nonce( 'project-install' ), 'project-delete' => wp_create_nonce( 'project-delete' ), 'project-update' => wp_create_nonce( 'project-update' ), 'project-upgrade' => wp_create_nonce( 'project-upgrade' ), 'project-download' => wp_create_nonce( 'project-download' ), );
$main_action = array(); $actions = array(); $is_single_action = false; $actions_icon = 'sui-icon-plus'; $main_action_class = 'sui-button-blue'; $main_action_class_modal = 'sui-button-blue'; $show_num_install = false; $allow_description = false; $num_install = 0; $rounded_num_install = 0; $modal_install_button = array(); $incompatible_reason = '';
if ( ! $res->is_installed ) { $is_single_action = true; $show_num_install = false; $allow_description = true; $num_install = (int) $res->downloads; $rounded_num_install = $num_install; if ( $num_install > 999 ) { $rounded_num_install = ceil( ( $num_install / 1000 ) ) . 'k'; } if ( $num_install > 999999 ) { $rounded_num_install = ceil( ( $num_install / 1000000 ) ) . 'm'; }
/*
* Plugin is not installed yet.
* Possible Actions: Install, Download, Incompatible, Upgrade Membership.
*/
$actions_icon = 'sui-icon-plus';
if ( ! $res->is_licensed ) {
if ( false === $free ) {
$main_action = array(
'name' => __( 'Upgrade Membership', 'wpmudev' ),
'url' => $reactivate_url,
'icon' => 'sui-wpmudev-logo',
'type' => 'none',
);
}
} elseif ( $res->is_compatible && $res->url->install ) {
$actions = array(
'install' => array(
'name' => __( 'Install', 'wpmudev' ),
'url' => $res->url->install,
'type' => 'modal-ajax',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'project-install',
'hash' => $hashes['project-install'],
'project' => $pid,
),
),
);
$modal_install_button = array(
'name' => __( 'Install', 'wpmudev' ),
'class' => 'sui-button-blue',
'url' => $res->url->install,
'type' => 'modal-ajax',
'icon' => 'sui-icon-plus',
'data' => array(
'action' => 'project-install',
'hash' => $hashes['project-install'],
'project' => $pid,
),
);
} elseif ( $res->is_compatible ) {
$actions = array(
'download' => array(
'name' => '',
'url' => $res->url->download,
'type' => 'ajax',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'project-download',
'hash' => $hashes['project-download'],
'project' => $pid,
),
),
);
} else {
$incompatible_reason = $res->incompatible_reason;
if ( empty( $incompatible_reason ) ) {
$incompatible_reason = __( 'Incompatible', 'wpmudev' );
}
}
} else { /* * Plugin is installed. * Possible Actions: Update, Activate, Deactivate, Install Upfront, Configure, Delete. */ $is_single_action = false; $actions_icon = 'sui-icon-widget-settings-config';
// update always prioritized.
if ( $res->has_update ) {
if ( ( $is_unit_membership && false === $is_unit_allowed ) || ( $free && ! $res->is_licensed ) ) {
$main_action_class_modal = 'sui-button-purple';
$main_action = array(
'name' => __( 'Upgrade Membership', 'wpmudev' ),
'url' => $reactivate_url,
'type' => 'href',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'upgrade-membership',
'hash' => '',
'project' => $pid,
),
);
} else {
$main_action = array(
'name' => __( 'Update', 'wpmudev' ),
'url' => '',
'type' => 'modal-ajax',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'project-update',
'hash' => $hashes['project-update'],
'project' => $pid,
),
);
}
if ( $is_unit_membership && false === $is_unit_allowed ) {
$actions['update'] = array(
'name' => __( 'Upgrade Membership', 'wpmudev' ),
'url' => $reactivate_url,
'type' => 'href',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'upgrade-membership',
'hash' => '',
'project' => $pid,
),
);
} else {
$actions['update'] = array(
'name' => __( 'Update', 'wpmudev' ),
'url' => '#update=' . $pid,
'type' => 'modal-ajax',
'icon' => 'sui-icon-download',
'data' => array(
'action' => 'project-update',
'hash' => $hashes['project-update'],
'project' => $pid,
),
);
}
$actions['changelog'] = array(
'name' => __( 'View Changelog', 'wpmudev' ),
'url' => '#update=' . $pid,
'type' => 'modal-ajax',
'icon' => 'sui-icon-list-bullet',
'data' => array(
'action' => 'project-update',
'hash' => $hashes['project-update'],
'project' => $pid,
),
);
// Activate, configure, delete.
if ( ! $res->is_active ) {
$actions['activate'] = array(
'name' => ( $res->is_network_admin ? __( 'Network Activate', 'wpmudev' ) : __( 'Activate', 'wpmudev' ) ),
'url' => '#activate=' . $pid,
'type' => 'ajax',
'icon' => 'sui-icon-power-on-off',
'data' => array(
'action' => 'project-activate',
'hash' => $hashes['project-activate'],
'project' => $pid,
),
);
}
if ( isset( $res->url->config ) && ! empty( $res->url->config ) ) {
$actions['configure'] = array(
'name' => __( 'Configure', 'wpmudev' ),
'url' => $res->url->config,
'type' => 'href',
'icon' => 'sui-icon-wrench-tool',
'data' => array(
'action' => 'project-configure',
'hash' => '',
'project' => $pid,
),
);
}
if ( $res->is_active ) {
// Don't allow deactivate of Dashboard on hosted sites.
if ( $dash_pid !== $pid || false === isset( $_SERVER['WPMUDEV_HOSTED'] ) ) {
$actions['deactivate'] = array(
'name' => ( $res->is_network_admin ? __( 'Network Deactivate', 'wpmudev' ) : __( 'Deactivate', 'wpmudev' ) ),
'url' => '#deactivate=' . $pid,
'type' => 'ajax',
'icon' => 'sui-icon-power-on-off',
'data' => array(
'action' => 'project-deactivate',
'hash' => $hashes['project-deactivate'],
'project' => $pid,
),
);
}
} else {
$actions['delete'] = array(
'name' => __( 'Delete', 'wpmudev' ),
'url' => '#',
'type' => 'ajax',
'icon' => 'sui-icon-trash',
'class' => 'dashui-red-link',
'data' => array(
'action' => 'project-delete',
'hash' => $hashes['project-delete'],
'project' => $pid,
),
);
}
} elseif ( $res->special ) {
switch ( $res->special ) {
case 'dropin':
$main_action = array(
'name' => __( 'Dropin', 'wpmudev' ),
'url' => '#',
'type' => 'none',
'icon' => '',
'data' => array(
'action' => 'project-dropin',
'hash' => '',
'project' => $pid,
),
);
break;
case 'muplugin':
$main_action = array(
'name' => __( 'MU Plugin', 'wpmudev' ),
'url' => '#',
'type' => 'none',
'icon' => '',
'data' => array(
'action' => 'project-muplugin',
'hash' => '',
'project' => $pid,
),
);
break;
default:
break;
}
} elseif ( $res->is_active ) {
if ( isset( $res->url->config ) && ! empty( $res->url->config ) ) {
$main_action = array(
'name' => __( 'Configure', 'wpmudev' ),
'url' => $res->url->config,
'type' => 'href',
'icon' => 'sui-icon-wrench-tool',
'data' => array(
'action' => 'project-configure',
'hash' => '',
'project' => $pid,
),
);
$actions['configure'] = array(
'name' => __( 'Configure', 'wpmudev' ),
'url' => $res->url->config,
'type' => 'href',
'icon' => 'sui-icon-wrench-tool',
'data' => array(
'action' => 'project-configure',
'hash' => '',
'project' => $pid,
),
);
}
// Don't allow deactivate of Dashboard on hosted sites.
if ( $dash_pid !== $pid || false === isset( $_SERVER['WPMUDEV_HOSTED'] ) ) {
$actions['deactivate'] = array(
'name' => ( $res->is_network_admin ? __( 'Network Deactivate', 'wpmudev' ) : __( 'Deactivate', 'wpmudev' ) ),
'url' => '#deactivate=' . $pid,
'type' => 'ajax',
'icon' => 'sui-icon-power-on-off',
'data' => array(
'action' => 'project-deactivate',
'hash' => $hashes['project-deactivate'],
'project' => $pid,
),
);
}
} else {
// Activate.
$main_action = array(
'name' => ( $res->is_network_admin ? __( 'Network Activate', 'wpmudev' ) : __( 'Activate', 'wpmudev' ) ),
'url' => '#activate=' . $pid,
'type' => 'ajax',
'icon' => 'sui-icon-power-on-off',
'data' => array(
'action' => 'project-activate',
'hash' => $hashes['project-activate'],
'project' => $pid,
),
);
$actions['activate'] = array(
'name' => ( $res->is_network_admin ? __( 'Network Activate', 'wpmudev' ) : __( 'Activate', 'wpmudev' ) ),
'url' => '#activate=' . $pid,
'type' => 'ajax',
'icon' => 'sui-icon-power-on-off',
'data' => array(
'action' => 'project-activate',
'hash' => $hashes['project-activate'],
'project' => $pid,
),
);
$actions['delete'] = array(
'name' => __( 'Delete', 'wpmudev' ),
'url' => '#',
'type' => 'href',
'icon' => 'sui-icon-trash',
'class' => 'sui-button-delete',
'data' => array(
'action' => 'project-delete',
'hash' => $hashes['project-delete'],
'project' => $pid,
),
);
}
$main_action_class = 'sui-button-icon';
}
// Show special error and message if Upfront not installed. if ( $res->is_installed && $res->need_upfront ) { if ( ! WPMUDEV_Dashboard::$site->is_upfront_installed() ) { // This upfront theme needs Upfront parent to work! echo 'Upfront needed'; } }
// Pic Gallery. $gallery_items = array(); if ( ! empty( $res->url->video ) ) { $gallery_items[] = array( 'thumb' => $res->url->thumbnail, 'full' => $res->url->video, 'desc' => '', 'type' => 'video', ); } if ( is_array( $res->screenshots ) ) { foreach ( $res->screenshots as $item ) { $gallery_items[] = array( 'thumb' => $item['url'], 'full' => $item['url'], 'desc' => $item['desc'], 'type' => 'image', ); } }
if ( empty( $gallery_items ) ) { $gallery_items[] = array( 'thumb' => $res->url->thumbnail, 'full' => $res->url->thumbnail, 'desc' => '', 'type' => 'image', ); }
$slider_class = ''; if ( 1 === count( $gallery_items ) ) { $slider_class = 'no-nav'; }
$has_features = false; $features = array( 0 => array(), 1 => array(), ); // Chunk feature into 2. if ( is_array( $res->features ) && ! empty( $res->features ) ) { $has_features = true; $chunk_size = ceil( count( $res->features ) / 2 ); $features = array_chunk( $res->features, $chunk_size ); }
// Don't show secondary actions if there is only one and it's the same one as main action. $secondary_action_same_as_primary = false; if ( 1 === count( $actions ) && $res->is_installed ) { $actions_action_index = array_keys( $actions )[0]; if ( isset( $actions[ $actions_action_index ]['data'] ) && isset( $main_action['data'] ) ) { $secondary_action_same_as_primary = $actions[ $actions_action_index ]['data']['action'] === $main_action['data']['action']; } }
$attr = array( 'project' => $pid, 'licensed' => intval( $res->is_licensed ), 'installed' => intval( $res->is_installed ), 'has-update' => intval( $res->has_update ), 'is-compatible' => intval( $res->is_compatible ), 'incompatible-reason' => $incompatible_reason, 'active' => intval( $res->is_active ), 'order' => intval( $res->default_order ), 'popularity' => $res->popularity, 'downloads' => $res->downloads, 'released' => $res->release_stamp, 'updated' => $res->update_stamp, 'type' => $res->type, 'name' => esc_html( $res->name ), 'info' => esc_html( $res->info ), );
foreach ( $res->tags as $tid => $plugin_tag ) { $attr[ 'plugin-tag-' . $tid ] = 1; } ?>
<?php if ( ! empty( $incompatible_reason ) ) : ?>
<span class="sui-tag sui-tag-sm sui-tag-red sui-tag-ghost"><?php echo esc_html( $incompatible_reason ); ?></span>
<?php endif; ?>
<?php if ( ! empty( $modal_install_button ) ) : ?>
<a
class="sui-button <?php echo esc_attr( $modal_install_button['class'] ); ?>"
href="<?php echo esc_url( $modal_install_button['url'] ); ?>"
data-type="<?php echo esc_attr( $modal_install_button['type'] ); ?>"
<?php if ( isset( $modal_install_button['data'] ) && is_array( $modal_install_button['data'] ) ) : ?>
<?php foreach ( $modal_install_button['data'] as $key_attr => $data_attr ) : ?>
data-<?php echo esc_attr( $key_attr ); ?>="<?php echo esc_attr( $data_attr ); ?>"
<?php endforeach; ?>
<?php endif; ?>
>
<span class="sui-loading-text">
<?php if ( $modal_install_button['icon'] ) : ?>
<i class="<?php echo esc_attr( $modal_install_button['icon'] ); ?>"></i>
<?php endif; ?>
<?php echo esc_html( $modal_install_button['name'] ); ?>
</span>
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</a>
<?php endif; ?>
<?php if ( ! empty( $main_action ) ) : ?>
<a
class="sui-button <?php echo esc_attr( $main_action_class_modal ); ?>"
href="<?php echo esc_url( $main_action['url'] ); ?>"
data-type="<?php echo esc_attr( $main_action['type'] ); ?>"
<?php if ( isset( $main_action['data'] ) && is_array( $main_action['data'] ) ) : ?>
<?php foreach ( $main_action['data'] as $key_attr => $data_attr ) : ?>
data-<?php echo esc_attr( $key_attr ); ?>="<?php echo esc_attr( $data_attr ); ?>"
<?php endforeach; ?>
<?php endif; ?>
>
<span class="sui-loading-text">
<?php echo esc_html( $main_action['name'] ); ?>
</span>
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</a>
<?php endif; ?>
</div>
<button class="sui-button-icon plugin-modal-close" data-modal-close="" style="margin-left: 10px">
<i class="sui-icon-close sui-md" aria-hidden="true"></i>
<span class="sui-screen-reader-text"><?php esc_html_e( 'Close this dialog.', 'wpmudev' ); ?></span>
</button>
</div>
<?php // load async later. ?>
<div class="sui-box-body js-dialog-body js-is-loading">
<div class="sui-block-content-center js-dialog-loader">
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</div>
</div>
<div class="sui-box-footer">
<a class="sui-button sui-button-ghost plugin-modal-close" data-modal-close"><?php esc_html_e( 'Close', 'wpmudev' ); ?></a>
<div class="sui-actions-right">
<?php if ( ! empty( $modal_install_button ) ) : ?>
<a
class="sui-button <?php echo esc_attr( $modal_install_button['class'] ); ?>"
href="<?php echo esc_url( $modal_install_button['url'] ); ?>"
data-type="<?php echo esc_attr( $modal_install_button['type'] ); ?>"
<?php if ( isset( $modal_install_button['data'] ) && is_array( $modal_install_button['data'] ) ) : ?>
<?php foreach ( $modal_install_button['data'] as $key_attr => $data_attr ) : ?>
data-<?php echo esc_attr( $key_attr ); ?>="<?php echo esc_attr( $data_attr ); ?>"
<?php endforeach; ?>
<?php endif; ?>
>
<span class="sui-loading-text">
<?php if ( $modal_install_button['icon'] ) : ?>
<i class="<?php echo esc_attr( $modal_install_button['icon'] ); ?>"></i>
<?php endif; ?>
<?php echo esc_html( $modal_install_button['name'] ); ?>
</span>
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</a>
<?php endif; ?>
<?php if ( ! empty( $main_action ) ) : ?>
<a
class="sui-button <?php echo esc_attr( $main_action_class_modal ); ?>"
href="<?php echo esc_url( $main_action['url'] ); ?>"
data-type="<?php echo esc_attr( $main_action['type'] ); ?>"
<?php if ( isset( $main_action['data'] ) && is_array( $main_action['data'] ) ) : ?>
<?php foreach ( $main_action['data'] as $key_attr => $data_attr ) : ?>
data-<?php echo esc_attr( $key_attr ); ?>="<?php echo esc_attr( $data_attr ); ?>"
<?php endforeach; ?>
<?php endif; ?>
>
<span class="sui-loading-text">
<?php echo esc_html( $main_action['name'] ); ?>
</span>
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div
role="dialog"
id="plugin-modal-after-install-<?php echo esc_attr( $pid ); ?>"
class="sui-modal-content sui-content-fade-in"
aria-modal="true"
aria-labelledby="dialogTitleafter<?php echo esc_attr( $pid ); ?>2"
aria-describedby="dialogDescriptionafter<?php echo esc_attr( $pid ); ?>2"
data-project="<?php echo esc_attr( $pid ); ?>"
>
<div class="sui-box">
<div class="sui-box-header sui-flatten sui-content-center sui-spacing-top--60">
<button class="sui-button-icon plugin-modal-close sui-button-float--right" data-modal-close="">
<i class="sui-icon-close sui-md" aria-hidden="true"></i>
<span class="sui-screen-reader-text"><?php esc_html_e( 'Close this dialog.', 'wpmudev' ); ?></span>
</button>
<h3
class="sui-box-title sui-lg"
id="dialogTitleafter<?php echo esc_attr( $pid ); ?>"
>
<?php echo esc_html( sprintf( __( '%s installed!', 'wpmudev' ), $res->name ) ); ?>
</h3>
<p id="dialogDescriptionafter<?php echo esc_attr( $pid ); ?>" class="sui-description">
<?php esc_html_e( 'Would you like to activate it now?', 'wpmudev' ); ?>
</p>
</div>
<div class="sui-box-footer sui-flatten sui-content-center">
<a class="sui-button plugin-modal-close" href="#"><?php esc_html_e( 'CONTINUE', 'wpmudev' ); ?></a>
<a
class="sui-button sui-button-blue"
data-action="project-activate"
href="#"
data-hash="<?php echo esc_attr( $hashes['project-activate'] ); ?>"
data-project="<?php echo esc_attr( $pid ); ?>"
>
<span class="sui-loading-text">
<?php esc_html_e( 'ACTIVATE', 'wpmudev' ); ?>
</span>
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
</a>
</div>
<div class="sui-block-content-center">
<img
src="<?php echo esc_url( WPMUDEV_Dashboard::$site->plugin_url . 'assets/images/devman-loading.png' ); ?>"
srcset="<?php echo esc_url( WPMUDEV_Dashboard::$site->plugin_url . 'assets/images/devman-loading.png' ); ?> 1x, <?php echo esc_url( WPMUDEV_Dashboard::$site->plugin_url . 'assets/images/[email protected]' ); ?> 2x"
alt="Upgrade"
aria-hidden="true"
style="vertical-align: middle;"
/>
</div>
</div>
</div>