args[0] ?? array();
// This is a PHP cron event saved prior to WP Crontrol 1.16.2.
if ( isset( $this->args['code'] ) ) {
return true;
}
return ! check_integrity( $args['code'] ?? null, $args['hash'] ?? null );
}
#[\Override]
public function has_error(): bool {
if ( isset( $this->args[0]['syntax_error_message'] ) ) {
return true;
}
return $this->integrity_failed();
}
#[\Override]
public function editable( UserContext $user, FeatureContext $features ): bool {
return $features->php_crons_enabled() && $user->can_edit_php_cron_events();
}
#[\Override]
public function runnable( UserContext $user, FeatureContext $features ): bool {
return $features->php_crons_enabled()
&& $user->can_run_php_cron_events()
&& ! $this->has_error()
&& ! $this->is_paused();
}
/**
* Check if this event can be deleted.
*
* Per caps.md: Feature flag is NOT checked for delete operations.
*
* @param UserContext $user User capability context.
* @param FeatureContext $features Feature flag context (not used for delete).
*/
#[\Override]
public function deletable( UserContext $user, FeatureContext $features ): bool {
return $user->can_delete_php_cron_events();
}
#[\Override]
public function get_hook_name_label(): string {
if ( ! empty( $this->args[0]['name'] ) ) {
return esc_html(
sprintf(
/* translators: %s: Details about the PHP cron event. */
__( 'PHP cron event (%s)', 'wp-crontrol' ),
$this->args[0]['name']
)
);
}
if ( ! empty( $this->args[0]['code'] ) ) {
$lines = explode( "\n", trim( $this->args[0]['code'] ) );
$code = reset( $lines );
$code = substr( $code, 0, 50 );
$php = sprintf(
'%s…',
esc_html( $code )
);
return sprintf(
/* translators: %s: Details about the PHP cron event. */
esc_html__( 'PHP cron event (%s)', 'wp-crontrol' ),
$php
);
}
return esc_html__( 'PHP cron event', 'wp-crontrol' );
}
#[\Override]
public function get_error_status_html(): string {
if ( ! isset( $this->args[0]['syntax_error_message'], $this->args[0]['syntax_error_line'] ) ) {
return '';
}
return sprintf(
'
%s',
sprintf(
/* translators: 1: Line number, 2: Error message text */
esc_html__( 'Line %1$s: %2$s', 'wp-crontrol' ),
esc_html( number_format_i18n( $this->args[0]['syntax_error_line'] ) ),
esc_html( $this->args[0]['syntax_error_message'] )
)
);
}
#[\Override]
public function get_args_display(): string {
return __( 'PHP Code', 'wp-crontrol' );
}
#[\Override]
public function is_enabled( FeatureContext $features ): bool {
return $features->php_crons_enabled();
}
}