v4.8.1 #3
@ -15,43 +15,6 @@ function bdp_update_dashboard_style() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function bdp_add_menu_security() {
|
|
||||||
$moduleLoad = get_admin_url() . 'admin.php?page=' . BDP_LV_PLUGIN_SLUG . '/modules/index.php&loadmodule=';
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_add_menu_contents() {
|
|
||||||
add_menu_page('Seiten',
|
|
||||||
'Inhalte',
|
|
||||||
'edit_posts',
|
|
||||||
'edit.php?post_type=page',
|
|
||||||
'',
|
|
||||||
'dashicons-format-aside',
|
|
||||||
4
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php?post_type=page',
|
|
||||||
'media',
|
|
||||||
'Medienverwaltung',
|
|
||||||
'edit_posts',
|
|
||||||
'upload.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php?post_type=page',
|
|
||||||
'comments',
|
|
||||||
'Kommentare',
|
|
||||||
'edit_posts',
|
|
||||||
'edit-comments.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php?post_type=page',
|
|
||||||
'Beiträge',
|
|
||||||
'Beiträge',
|
|
||||||
'edit_posts',
|
|
||||||
'edit.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_add_menu_mein_lv() {
|
function bdp_add_menu_mein_lv() {
|
||||||
$location = BDP_LV_PLUGIN_DIR . '/modules/';
|
$location = BDP_LV_PLUGIN_DIR . '/modules/';
|
||||||
$mainSlug = $location . 'index.php';
|
$mainSlug = $location . 'index.php';
|
||||||
@ -75,90 +38,7 @@ function bdp_add_menu_mein_lv() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function bdp_add_menu_setup() {
|
|
||||||
add_menu_page(
|
|
||||||
'Benutzer',
|
|
||||||
'Benutzer-Verwaltung',
|
|
||||||
'manage_options',
|
|
||||||
'users.php',
|
|
||||||
'',
|
|
||||||
'dashicons-admin-users',
|
|
||||||
6
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
add_menu_page(
|
|
||||||
'Allgemeine Einstellungen',
|
|
||||||
'Webseiten-Setup',
|
|
||||||
'manage_options',
|
|
||||||
'options-general.php',
|
|
||||||
'',
|
|
||||||
'dashicons-admin-generic',
|
|
||||||
6
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('options-general.php',
|
|
||||||
'Design-Einstellungen',
|
|
||||||
'Template bearbeiten',
|
|
||||||
'manage_options',
|
|
||||||
'customize.php?return=/wp-admin/'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('options-general.php',
|
|
||||||
'plugins',
|
|
||||||
'Erweiterungen',
|
|
||||||
'manage_options',
|
|
||||||
'plugins.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
add_submenu_page('options-general.php',
|
|
||||||
'themes',
|
|
||||||
'Designs',
|
|
||||||
'manage_options',
|
|
||||||
'themes.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
add_submenu_page('options-general.php',
|
|
||||||
'Sicherheit',
|
|
||||||
'Webseiten-Sicherheit',
|
|
||||||
'manage_options',
|
|
||||||
'site-health.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_cleanup_menu()
|
|
||||||
{
|
|
||||||
global $submenu;
|
|
||||||
|
|
||||||
remove_menu_page('edit-comments.php');
|
|
||||||
remove_menu_page('edit.php');
|
|
||||||
remove_menu_page('edit.php?post_type=page');
|
|
||||||
remove_menu_page('upload.php');
|
|
||||||
remove_menu_page('themes.php');
|
|
||||||
remove_menu_page('plugins.php');
|
|
||||||
remove_menu_page('options-general.php');
|
|
||||||
remove_menu_page('users.php');
|
|
||||||
remove_menu_page('tools.php');
|
|
||||||
|
|
||||||
bdp_add_menu_contents();
|
|
||||||
bdp_add_menu_setup();
|
|
||||||
bdp_add_menu_security();
|
|
||||||
|
|
||||||
|
|
||||||
remove_submenu_page('edit.php?post_type=page','post-new.php?post_type=page');
|
|
||||||
remove_submenu_page('users.php','user-new.php');
|
|
||||||
remove_submenu_page('users.php','profile.php');
|
|
||||||
|
|
||||||
remove_submenu_page('edit.php','post-new.php');
|
|
||||||
remove_submenu_page('edit.php','edit-tags.php?taxonomy=category');
|
|
||||||
remove_submenu_page('edit.php','edit-tags.php?taxonomy=post_tag');
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_create_menu_structure()
|
function bdp_create_menu_structure()
|
||||||
{
|
{;
|
||||||
add_action('admin_menu', 'bdp_cleanup_menu');
|
|
||||||
bdp_add_menu_mein_lv();
|
bdp_add_menu_mein_lv();
|
||||||
}
|
}
|
||||||
|
@ -5,63 +5,39 @@
|
|||||||
remove_role( 'contributor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
remove_role( 'contributor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||||
remove_role( 'author' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
remove_role( 'author' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||||
remove_role( 'editor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
remove_role( 'editor' ); // Hier 'custom_role_slug' durch den tatsächlichen Slug der zu löschenden Rolle ersetzen
|
||||||
$capabilities = array(
|
|
||||||
'read' => true, // Die Rolle kann Beiträge lesen
|
$role = get_role( 'director' );
|
||||||
'edit_posts' => true, // Die Rolle kann Beiträge bearbeiten
|
if ( null === $role ) {
|
||||||
'delete_posts' => true, // Die Rolle kann Beiträge löschen
|
add_role(
|
||||||
'publish_posts' => true, // Die Rolle kann Beiträge veröffentlichen
|
'director',
|
||||||
// Weitere Berechtigungen können nach Bedarf hinzugefügt werden
|
true === get_option( 'solea_used_for_state', false )
|
||||||
|
? __( 'State director', 'mareike' )
|
||||||
|
: __( 'Club director', 'mareike' ),
|
||||||
|
kompass_get_capa_editor()
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
// Rolle hinzufügen
|
$role = get_role( 'director' );
|
||||||
add_role( 'stafue', 'Stammesführung', kompass_get_capa_stafue() );
|
foreach ( kompass_get_capa_editor() as $capability => $value ) {
|
||||||
add_role( 'grufue', 'Gruppenführung', kompass_get_capa_grufue() );
|
|
||||||
add_role( 'aktionsleitung', 'Aktionsleitung', kompass_get_capa_aktionsleitung() );
|
|
||||||
add_role( 'author', 'Redakteur', kompass_get_capa_editor() );
|
|
||||||
|
|
||||||
$role = get_role( 'administrator' );
|
|
||||||
foreach (kompass_get_capa_stafue() as $capability => $value) {
|
|
||||||
$role->add_cap( $capability );
|
$role->add_cap( $capability );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function kompass_get_capa_stafue() : array
|
add_role( 'author', 'Redakteur', kompass_get_capa_editor() );
|
||||||
{
|
|
||||||
return array_merge(
|
|
||||||
[
|
|
||||||
'create_groups' => true,
|
|
||||||
'delete_groups' => true,
|
|
||||||
'edit_groups' => true,
|
|
||||||
'delete_teilis' => true,
|
|
||||||
'move_teilis' => true,
|
|
||||||
'create_events' => true,
|
|
||||||
], kompass_get_capa_aktionsleitung(), kompass_get_capa_grufue(), kompass_get_capa_editor());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$role = get_role( 'user' );
|
||||||
|
if ( null === $role ) {
|
||||||
function kompass_get_capa_aktionsleitung() : array
|
add_role(
|
||||||
{
|
'user',
|
||||||
return [
|
'Standardnutzer',
|
||||||
'show_bdp' => true,
|
array('read' => true)
|
||||||
'create_event_teilis' => true,
|
);
|
||||||
'edit_event_teilis' => true,
|
} else {
|
||||||
'delete_event_teilis' => true,
|
foreach ( solea_get_capabilities_user() as $capability => $value ) {
|
||||||
'send_event_mails' => true,
|
$role->add_cap( 'read' );
|
||||||
];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function kompass_get_capa_grufue() : array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'show_bdp' => true,
|
|
||||||
'show_groups' => true,
|
|
||||||
'create_teilis' => true,
|
|
||||||
'edit_teilis' => true,
|
|
||||||
'send_mails' => true
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function kompass_get_capa_editor() : array
|
function kompass_get_capa_editor() : array
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* File: class-extendregistrationform.php
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @since 2024-07-30
|
||||||
|
* @license GPL-3.0-or-later
|
||||||
|
*
|
||||||
|
* @package mareike/
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Bdp\Modules\Registration\Controllers;
|
||||||
|
|
||||||
|
class ExtendRegistrationForm {
|
||||||
|
public static function execute() {
|
||||||
|
?>
|
||||||
|
<p>
|
||||||
|
<label for="first_name">Vorname<br />
|
||||||
|
<input required style="width: 768px !important;" type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(wp_unslash($_POST['first_name'] ?? '')); ?>" size="25" /></label>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<label for="last_name">Nachname<br />
|
||||||
|
<input required style="width: 768px !important;" type="text" name="last_name" id="last_name" class="input" value="<?php echo esc_attr(wp_unslash($_POST['last_name'] ?? '')); ?>" size="25" /></label>
|
||||||
|
</p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function error_messages($errors, $sanitized_user_login, $user_email) {
|
||||||
|
if (empty($_POST['first_name']) || !empty($_POST['first_name']) && trim($_POST['first_name']) == '') {
|
||||||
|
$errors->add('first_name_error', '<strong>FEHLER</strong>: Der Vorname ist erforderlich.');
|
||||||
|
}
|
||||||
|
if (empty($_POST['last_name']) || !empty($_POST['last_name']) && trim($_POST['last_name']) == '') {
|
||||||
|
$errors->add('last_name_error', '<strong>FEHLER</strong>: DEr Nachname ist erforderlich.');
|
||||||
|
}
|
||||||
|
return $errors;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
76
modules/Registration/Controllers/class-saveregistration.php
Normal file
76
modules/Registration/Controllers/class-saveregistration.php
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* File: class-saveregistration.php
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @since 2024-07-30
|
||||||
|
* @license GPL-3.0-or-later
|
||||||
|
*
|
||||||
|
* @package mareike/
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Bdp\Modules\Registration\Controllers;
|
||||||
|
|
||||||
|
use WP_User;
|
||||||
|
|
||||||
|
class SaveRegistration {
|
||||||
|
public static function execute($user_id) {
|
||||||
|
if (!empty($_POST['first_name'])) {
|
||||||
|
update_user_meta($user_id, 'first_name', sanitize_text_field($_POST['first_name']));
|
||||||
|
}
|
||||||
|
if (!empty($_POST['last_name'])) {
|
||||||
|
update_user_meta($user_id, 'last_name', sanitize_text_field($_POST['last_name']));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assign the 'Standarduser' role to the new user
|
||||||
|
$user = new WP_User($user_id);
|
||||||
|
$user->set_role('standarduser');
|
||||||
|
|
||||||
|
// Send confirmation email
|
||||||
|
$user = get_userdata($user_id);
|
||||||
|
$code = sha1($user->user_registered);
|
||||||
|
update_user_meta($user_id, 'activation_code', $code);
|
||||||
|
|
||||||
|
$activation_link = add_query_arg(array('key' => $code, 'user' => $user_id), get_site_url() . '/wp-login.php');
|
||||||
|
|
||||||
|
wp_mail($user->user_email, 'Bitte bestätige deine Anmeldung', 'Hallo, bitte bestätige deine Anmeldung über den folgenden Link: ' . $activation_link);
|
||||||
|
|
||||||
|
// Notify admin
|
||||||
|
wp_mail(get_option('admin_email'), 'New User Registration', 'A new user has registered: ' . $user->user_login . PHP_EOL . 'First name:' . $user->first_name . PHP_EOL . 'Last name:' . $user->last_name );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function activate_user() {
|
||||||
|
if (isset($_GET['key']) && isset($_GET['user'])) {
|
||||||
|
$user_id = intval($_GET['user']);
|
||||||
|
$activation_code = get_user_meta($user_id, 'activation_code', true);
|
||||||
|
|
||||||
|
if ($activation_code === $_GET['key']) {
|
||||||
|
delete_user_meta($user_id, 'activation_code');
|
||||||
|
wp_redirect(home_url('/wp-login.php?checkemail=registered'));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function check_user_activation($user, $username, $password) {
|
||||||
|
if (!is_a($user, 'WP_User')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$user_id = $user->ID;
|
||||||
|
$activation_code = get_user_meta($user_id, 'activation_code', true);
|
||||||
|
|
||||||
|
if ($activation_code) {
|
||||||
|
return new WP_Error('not_activated', __('ERROR: You need to activate your account. Please check your email.', 'kompass'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function display_custom_message() {
|
||||||
|
if (isset($_GET['checkemail']) && $_GET['checkemail'] === 'registered') {
|
||||||
|
echo '<div class="custom-message" style="text-align:center; margin:20px auto; padding:10px; background-color:#e0f7fa; border:1px solid #00796b; border-radius:5px; max-width:600px;">
|
||||||
|
<p style="font-size:16px; color:#00796b;">Vielen Dank für deine Registrierung. Bitte überprüfen deine E-Mails, um deine Registrierung zu bestätigen.</p>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
add_filter('the_content', ['Calendar', 'printCalendar']);
|
add_filter('the_content', ['Calendar', 'printCalendar']);
|
||||||
wp_enqueue_style('bdp_calendar_css', BDP_LV_PLUGIN_URL . '/modules/calendar/assets/calendar.css');
|
|
||||||
wp_enqueue_script( 'loadCalendar', BDP_LV_PLUGIN_URL . '/modules/calendar/assets/ajaxscript.js');
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/classes/Calendar.class.php';
|
require_once dirname(__FILE__) . '/classes/Calendar.class.php';
|
||||||
|
@ -28,6 +28,9 @@ class Calendar
|
|||||||
// Der zu ersetzende String
|
// Der zu ersetzende String
|
||||||
$original_string = '{{calendar}}';
|
$original_string = '{{calendar}}';
|
||||||
if (str_contains($content,$original_string)) {
|
if (str_contains($content,$original_string)) {
|
||||||
|
wp_enqueue_style('bdp_calendar_css', BDP_LV_PLUGIN_URL . '/modules/calendar/assets/calendar.css');
|
||||||
|
wp_enqueue_script( 'loadCalendar', BDP_LV_PLUGIN_URL . '/modules/calendar/assets/ajaxscript.js');
|
||||||
|
|
||||||
$calendar = new Calendar();
|
$calendar = new Calendar();
|
||||||
|
|
||||||
// Der Ersatzstring
|
// Der Ersatzstring
|
||||||
|
@ -40,11 +40,27 @@ class MainController
|
|||||||
}
|
}
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
global $dbHandler;
|
global $dbHandler, $wpdb;
|
||||||
|
|
||||||
|
$show_menu = false;
|
||||||
|
|
||||||
|
foreach ([self::KOMPASS_EVENTS_EVENTS] as $table) {
|
||||||
|
$sqlTable = $wpdb->prefix . $table;
|
||||||
|
$sql = "SHOW TABLES LIKE '$sqlTable'";
|
||||||
|
|
||||||
|
$result = $wpdb->get_var( $sql );
|
||||||
|
if ( $result == $sqlTable ) {
|
||||||
|
$show_menu = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$show_menu) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
add_menu_page(
|
add_menu_page(
|
||||||
__('Events', BDP_LV_PLUGIN_SLUG),
|
__('Events (legacy)', BDP_LV_PLUGIN_SLUG),
|
||||||
__('Events', BDP_LV_PLUGIN_SLUG),
|
__('Events (legacy)', BDP_LV_PLUGIN_SLUG),
|
||||||
'send_mails',
|
'send_mails',
|
||||||
'kompass-events',
|
'kompass-events',
|
||||||
[$this, 'router'],
|
[$this, 'router'],
|
||||||
|
@ -28,7 +28,6 @@ class Security
|
|||||||
$loginUrl = get_option('whl_page', null) ?? 'bdp-login';
|
$loginUrl = get_option('whl_page', null) ?? 'bdp-login';
|
||||||
}
|
}
|
||||||
|
|
||||||
enable_option_rewrite_url($loginUrl);
|
|
||||||
enable_option_disable_xmlrpc();
|
enable_option_disable_xmlrpc();
|
||||||
enable_option_block_authorscan();
|
enable_option_block_authorscan();
|
||||||
enable_option_block_execution_in_uploads();
|
enable_option_block_execution_in_uploads();
|
||||||
@ -83,14 +82,19 @@ class Security
|
|||||||
public static function SetPageFilters() {
|
public static function SetPageFilters() {
|
||||||
global $wp;
|
global $wp;
|
||||||
|
|
||||||
|
add_action('template_redirect', [Security::class, 'protectAuthorScan']);
|
||||||
|
|
||||||
|
if (null !== is_login_rewritten()) {
|
||||||
if (str_contains($_SERVER['REQUEST_URI'], 'wp-login.php?action=logout')) {
|
if (str_contains($_SERVER['REQUEST_URI'], 'wp-login.php?action=logout')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_action('template_redirect', [Security::class, 'protectAuthorScan']);
|
|
||||||
Security::protectLoginSecurity();
|
Security::protectLoginSecurity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static function protectLoginSecurity() {
|
public static function protectLoginSecurity() {
|
||||||
$hideLogin = is_login_rewritten();
|
$hideLogin = is_login_rewritten();
|
||||||
|
|
||||||
|
@ -86,12 +86,6 @@ function disable_option_disable_wp_debug() {
|
|||||||
WpConfigEditor::updateConfig('WP_DEBUG', 'true');
|
WpConfigEditor::updateConfig('WP_DEBUG', 'true');
|
||||||
}
|
}
|
||||||
|
|
||||||
function enable_option_rewrite_url(?string $url = null) {
|
|
||||||
global $_POST;
|
|
||||||
$saveUrl = $url ?? $_POST['rewrite_login'];
|
|
||||||
update_option('kompass_sec_rewrite_login', $saveUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
function disable_option_rewrite_url() {
|
function disable_option_rewrite_url() {
|
||||||
update_option('kompass_sec_rewrite_login', null);
|
update_option('kompass_sec_rewrite_login', null);
|
||||||
}
|
}
|
||||||
@ -110,7 +104,6 @@ function kompass_sec_save_settings($settings) {
|
|||||||
'option_prohibit_bot_access',
|
'option_prohibit_bot_access',
|
||||||
'option_block_directory_listing',
|
'option_block_directory_listing',
|
||||||
'option_disable_wp_debug',
|
'option_disable_wp_debug',
|
||||||
'option_rewrite_url',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$enableSettings = array_intersect($allPossibleSettings, $settings);
|
$enableSettings = array_intersect($allPossibleSettings, $settings);
|
||||||
|
@ -98,20 +98,6 @@
|
|||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="bdp_setting_box">
|
|
||||||
<input <?php if (null !== is_login_rewritten()) {echo ' checked';} ?> type="checkbox" id="sec_mod_11" name="security_settings[]" value="option_rewrite_url" />
|
|
||||||
<label for="sec_mod_11">
|
|
||||||
<?= __('Change Login URL', BDP_LV_PLUGIN_SLUG); ?><br />
|
|
||||||
<span>
|
|
||||||
<?= __('Changing the default login URL of WordPress is advisable to enhance the security of your website. By default, WordPress login URLs is /wp-admin or /wp-login.php, which are easily guessed by hackers and facilitate attacks such as brute-force attacks. Changing the login URL to something unique and difficult to guess increases security since potential attackers will struggle to find the correct URL. This can help protect your website from unauthorized access and other malicious activities.', BDP_LV_PLUGIN_SLUG); ?><br />
|
|
||||||
<label style="font-weight: bold;">
|
|
||||||
<?= __('Login-URL', BDP_LV_PLUGIN_SLUG) ?>: <?= get_site_url(); ?>/<input style="width: 100px;" class="long_text" type="text" name="rewrite_login" id="rewrite_login" value="<?= is_login_rewritten(); ?>">
|
|
||||||
</label>
|
|
||||||
</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<input type="submit" class="button" value="<?= __('Save changes', BDP_LV_PLUGIN_SLUG); ?>" />
|
<input type="submit" class="button" value="<?= __('Save changes', BDP_LV_PLUGIN_SLUG); ?>" />
|
||||||
|
Loading…
Reference in New Issue
Block a user