202 lines
5.8 KiB
PHP
202 lines
5.8 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Plugin Name: BdP Kompass
|
||
|
* Description: Wordpress-Plugin zur Unterstützung von Stämmen im Bund der Pfadfinderinnen und Pfadfinder e.V. zur optimalen Verwaltung eurer Webseite
|
||
|
* Version: 4.1.1
|
||
|
* Tags: bdp, utility, helper
|
||
|
* Requires at least: 6.0
|
||
|
* Requires PHP: 8.2
|
||
|
* Author: Thomas Günther
|
||
|
* Author URI: https://www.sachsen.pfadfinden.de
|
||
|
* Update URI: https://lv-sachsen-main.bdp.mein-verein.online/wordpress/
|
||
|
* Text Domain: bdp-kompass
|
||
|
*/
|
||
|
|
||
|
use Bdp\Modules\Security\Security;
|
||
|
use Bdp\Modules\Seo\Seo;
|
||
|
|
||
|
define('BDP_LV_PLUGIN_DIR', ABSPATH . '/wp-content/plugins/bdp-kompass/');
|
||
|
define('BDP_LV_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||
|
define('BDP_LV_PLUGIN_SLUG', 'bdp-kompass');
|
||
|
|
||
|
require_once BDP_LV_PLUGIN_DIR . 'core/fileloader.php';
|
||
|
|
||
|
|
||
|
bdp_create_menu_structure();
|
||
|
|
||
|
function bdp_plugin_install() {
|
||
|
Seo::setup();
|
||
|
Calendar::setup();
|
||
|
Security::setup();
|
||
|
update_option('kompass_installation', true);
|
||
|
}
|
||
|
|
||
|
function bdp_plugin_init()
|
||
|
{
|
||
|
remove_menu_page('admin.php?page=limit-login-attempts&tab=dashboard');
|
||
|
if (get_option('kompass_installation') == true) {
|
||
|
delete_option('kompass_installation');
|
||
|
wp_redirect('admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=firstusage');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
register_activation_hook(__FILE__, 'bdp_plugin_install');
|
||
|
add_action('init', 'bdp_plugin_init');
|
||
|
|
||
|
function register_custom_theme_directory() {
|
||
|
$file = ABSPATH . '/wp-content/plugins/bdp-kompass/buena/' ;
|
||
|
|
||
|
system('mkdir ' . ABSPATH . 'wp-content/themes/buena/');
|
||
|
system('cp -r ' . $file . '* ' . ABSPATH . 'wp-content/themes/buena/');
|
||
|
|
||
|
switch_theme('buena');
|
||
|
}
|
||
|
|
||
|
#add_action( 'after_setup_theme', 'register_custom_theme_directory' );
|
||
|
|
||
|
class BdpVersionChecker
|
||
|
{
|
||
|
public $plugin_slug;
|
||
|
public $version;
|
||
|
public $cache_key;
|
||
|
public $cache_allowed;
|
||
|
public $updateUrl;
|
||
|
|
||
|
public function __construct()
|
||
|
{
|
||
|
$plugin_data = get_plugin_data(__FILE__);
|
||
|
$this->plugin_slug = 'bdp-kompass';
|
||
|
$this->updateUrl = $plugin_data['UpdateURI'] . '/info.json';
|
||
|
$this->version = $plugin_data['Version'];
|
||
|
$this->cache_key = 'bdp_kompass_upd';
|
||
|
$this->cache_allowed = true;
|
||
|
|
||
|
add_filter('plugins_api', array($this, 'info'), 20, 3);
|
||
|
add_filter('site_transient_update_plugins', array($this, 'update'));
|
||
|
add_action('upgrader_process_complete', array($this, 'purge'), 10, 2);
|
||
|
}
|
||
|
|
||
|
public function request()
|
||
|
{
|
||
|
$remote = get_transient($this->cache_key);
|
||
|
|
||
|
if (false === $remote || !$this->cache_allowed) {
|
||
|
|
||
|
$remote = wp_remote_get(
|
||
|
$this->updateUrl
|
||
|
,
|
||
|
array(
|
||
|
'timeout' => 10,
|
||
|
'headers' => array(
|
||
|
'Accept' => 'application/json'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
if (
|
||
|
is_wp_error($remote)
|
||
|
|| 200 !== wp_remote_retrieve_response_code($remote)
|
||
|
|| empty(wp_remote_retrieve_body($remote))
|
||
|
) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
set_transient($this->cache_key, $remote, 3600);
|
||
|
}
|
||
|
|
||
|
$remote = json_decode(wp_remote_retrieve_body($remote));
|
||
|
return $remote;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function info($res = '', $action = '', $args = '')
|
||
|
{
|
||
|
if (!isset($args->slug) || $args->slug !== $this->plugin_slug) {
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
// get updates
|
||
|
$remote = $this->request();
|
||
|
if (!$remote) {
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
$res = new stdClass();
|
||
|
|
||
|
$res->name = $remote->name;
|
||
|
$res->slug = $remote->slug;
|
||
|
$res->version = $remote->version;
|
||
|
$res->tested = $remote->tested;
|
||
|
$res->requires = $remote->requires;
|
||
|
$res->author = $remote->author;
|
||
|
$res->author_profile = $remote->author_profile;
|
||
|
$res->download_link = $remote->download_url;
|
||
|
$res->trunk = $remote->download_url;
|
||
|
$res->requires_php = $remote->requires_php;
|
||
|
$res->last_updated = $remote->last_updated;
|
||
|
|
||
|
$res->sections = array(
|
||
|
'description' => $remote->sections->description,
|
||
|
'installation' => $remote->sections->installation,
|
||
|
'changelog' => $remote->sections->changelog
|
||
|
);
|
||
|
|
||
|
if (!empty($remote->banners)) {
|
||
|
$res->banners = array(
|
||
|
'low' => $remote->banners->low,
|
||
|
'high' => $remote->banners->high
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
public function update($transient)
|
||
|
{
|
||
|
if (empty($transient->checked)) {
|
||
|
return $transient;
|
||
|
}
|
||
|
|
||
|
$remote = $this->request();
|
||
|
if(
|
||
|
$remote
|
||
|
&& version_compare( $this->version, $remote->version, '<' )
|
||
|
&& version_compare( $remote->requires, get_bloginfo( 'version' ), '<=' )
|
||
|
&& version_compare( $remote->requires_php, PHP_VERSION, '<' )
|
||
|
) {
|
||
|
$res = new stdClass();
|
||
|
$res->slug = $this->plugin_slug;
|
||
|
$res->plugin = plugin_basename( __FILE__ );
|
||
|
$res->new_version = $remote->version;
|
||
|
$res->tested = $remote->tested;
|
||
|
$res->package = $remote->download_url;
|
||
|
|
||
|
$transient->response[ $res->plugin ] = $res;
|
||
|
|
||
|
} else {
|
||
|
$res = new stdClass();
|
||
|
$res->slug = $this->plugin_slug;
|
||
|
$res->plugin = plugin_basename( __FILE__ );
|
||
|
$transient->no_update[ $res->plugin ] = $res;
|
||
|
}
|
||
|
|
||
|
return $transient;
|
||
|
}
|
||
|
|
||
|
public function purge($upgrader, $options)
|
||
|
{
|
||
|
if (
|
||
|
$this->cache_allowed
|
||
|
&& 'update' === $options['action']
|
||
|
&& 'plugin' === $options['type']
|
||
|
) {
|
||
|
delete_transient($this->cache_key);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$class = new BdpVersionChecker();
|
||
|
|
||
|
add_filter( 'plugins_api', array( $class, 'info' ), 20, 3 );
|