afragen / wp-dependency-installer

A lightweight class to add to WordPress plugins/themes to automatically install plugin dependencies.
MIT License
205 stars 32 forks source link

What UI elements to remove? #56

Closed afragen closed 4 years ago

afragen commented 4 years ago

@Raruto I will consider a filter or 2 for you to eliminate various UI elements we disagree on.

Can you list them here please?

Raruto commented 4 years ago

I added some notes here: https://github.com/afragen/wp-dependency-installer/pull/55

Can't you directly edit the pull code instead of working separately? (otherwise it's quite difficult to follow your progress)

afragen commented 4 years ago

Can we just work without a PR yet. I'll figure out the filters. I just want to know what would make you happy, not ecstatic, just happy. I do not plan on adding any more notices.

Raruto commented 4 years ago

Can we just work without a PR yet. I'll figure out the filters. I just want to know what would make you happy, not ecstatic, just happy.

Each added element must be able to be selectively deactivated (not a single filter that disables everything). This would be the end result for a Required Plugin with all the customizations turned off .

74991113-6740d480-5445-11ea-9cf4-1988770a169e

I do not plan on adding any more notices.

And it is also for this reason that (in that pull) I did something like this:

if ( $this->is_active( $slug ) ) {
  // Do nothing.
} elseif ( $this->is_installed( $slug ) ) {
  if ( $is_required ) {
    $this->notices[] = $this->activate( $slug );
  } else {
    $this->notices[] = $this->activate_notice( $slug );
  }
} else {
  if ( $is_required ) {
    $this->notices[] = $this->install( $slug );
  } else {
    $this->notices[] = $this->install_notice( $slug );
  }
}

// Added at this point allows both:
// - to disable default notifications
// - to insert custom ones (keeping the right order)
// - and lastly to keep the code readable
$this->notices = apply_filters( 'wp_dependency_notices', $this->notices, $slug );

And this is the usual example of usage:

73210934-8cdf0480-414b-11ea-8205-55f70c71cb8e

add_filter( 'wp_dependency_notices', 'wpdi_notices', 10, 2 );

/**
 * Get plugin notices.
 *
 * @param string $slug Plugin slug.
 *
 * @return array Admin notices.
 */
function wpdi_notices( $notices, $slug ) {
    $wpdi = WP_Dependency_Installer::instance();

    if ( ! $wpdi->is_active( $slug ) ) {
        return $notices;
    }

    $dependency = $wpdi->get_config( $slug );

    foreach ( $dependency['sources'] as $source ) {
        // Check if we were trying to deactivate a manadatory plugin.
        if ( isset( $_REQUEST['wpdi_required'] ) && $slug === $_REQUEST['wpdi_required'] ) {
            array_unshift(
                $notices, [
                    'status'  => 'error',
                    /* translators: %s: Plugin name */
                    'message' => sprintf( esc_html__( 'The %s plugin is a mandatory plugin.' ), $dependency['name'] ),
                    'source'  => $source,
                ]
            );
        }
    }

    return $notices;
}
Raruto commented 4 years ago

Can't you directly edit the pull code instead of working separately? (otherwise it's quite difficult to follow your progress)

Can we just work without a PR yet.

I wasn't referring to this issue...

Raruto commented 4 years ago

Can I add them to wiki or do you want to rename / edit them?

afragen commented 4 years ago

I think the filter names are fine, unless you can thing of better.

Raruto commented 4 years ago

Here it is: wiki/Actions-and-Hooks