Compare commits
No commits in common. "b5112ab12e210c47ddb7b9af51c86e94c75f0d3f" and "4869f1ef2fedba2f881dcad569147125fb0a7cf9" have entirely different histories.
b5112ab12e
...
4869f1ef2f
@ -1,52 +0,0 @@
|
|||||||
.bdp_cal_outer {
|
|
||||||
background-color: #ffffff;
|
|
||||||
width: 85%;
|
|
||||||
margin: auto;
|
|
||||||
padding: 10px;
|
|
||||||
border-style: solid; border-color: #d0d0d0; border-radius: 10px; padding: 15px; border-width: 1px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner {
|
|
||||||
border-style: solid; border-color: #d0d0d0; border-radius: 10px; padding: 15px; border-width: 1px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
width: 80%;
|
|
||||||
margin: 0 auto 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner legend {
|
|
||||||
background-color: #ffcb04;
|
|
||||||
background: linear-gradient(#ffffff 5%, #ffcb04);
|
|
||||||
color: #3163bd;
|
|
||||||
width: 150px;
|
|
||||||
padding: 5px 0 5px 25px;
|
|
||||||
font-weight: bold;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: #d0d0d0;
|
|
||||||
border-radius: 10px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner table {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner table tr td:first-child {
|
|
||||||
width: 100px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner table tr td:nth-child(2) {
|
|
||||||
padding:5px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_inner table tr td:last-child {
|
|
||||||
width: 100%;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.long_text {
|
|
||||||
width: 80%;
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
<style>
|
|
||||||
/* Dein benutzerdefiniertes CSS hier */
|
|
||||||
body.login {
|
|
||||||
background-color: #efefef;
|
|
||||||
background-image: url(%%BDP_LV_PLUGIN_URL%%/holz.jpg);
|
|
||||||
}
|
|
||||||
|
|
||||||
#login {
|
|
||||||
width: 800px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.login h1 {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#loginform {
|
|
||||||
width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #ffcb04;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
box-shadow: 2px 2px 5px #000000;
|
|
||||||
border-radius: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#loginform #wp-submit {
|
|
||||||
background-color: #3163bd !important;
|
|
||||||
color: #ffcb04;
|
|
||||||
border-radius: 10px;
|
|
||||||
font-size: 12pt;
|
|
||||||
font-weight: bold;
|
|
||||||
box-shadow: 5px 5px 5px #a0a0a0;
|
|
||||||
}
|
|
||||||
/* Weitere benutzerdefinierte Stile hier */
|
|
||||||
</style>
|
|
@ -1,55 +0,0 @@
|
|||||||
.bdp_security_outer {
|
|
||||||
background-color: #ffffff;
|
|
||||||
width: 85%;
|
|
||||||
margin: auto;
|
|
||||||
padding: 10px;
|
|
||||||
border-style: solid; border-color: #d0d0d0; border-radius: 10px; padding: 15px; border-width: 1px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner {
|
|
||||||
border-style: solid; border-color: #d0d0d0; border-radius: 10px; padding: 15px; border-width: 1px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
width: 80%;
|
|
||||||
margin: 0 auto 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner legend {
|
|
||||||
background-color: #ffcb04;
|
|
||||||
background: linear-gradient(#ffffff 5%, #ffcb04);
|
|
||||||
color: #3163bd;
|
|
||||||
width: 150px;
|
|
||||||
padding: 5px 0 5px 25px;
|
|
||||||
font-weight: bold;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: #d0d0d0;
|
|
||||||
border-radius: 10px;
|
|
||||||
box-shadow: 2px 2px 5px #c0c0c0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner table {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner table tr td:first-child {
|
|
||||||
width: 75px;
|
|
||||||
vertical-align: top;
|
|
||||||
font-weight: bold;
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner table tr td:nth-child(2) {
|
|
||||||
vertical-align: top;
|
|
||||||
padding:5px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_security_inner table tr td:last-child {
|
|
||||||
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.long_text {
|
|
||||||
width: 80%;
|
|
||||||
}
|
|
@ -1,87 +0,0 @@
|
|||||||
#adminmenu,
|
|
||||||
#wpadminbar,
|
|
||||||
#adminmenuwrap,
|
|
||||||
#adminmenuback {
|
|
||||||
background-color: #ffcb04 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toplevel_page_limit-login-attempts,
|
|
||||||
#wp-admin-bar-llar-root {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wp-submenu-wrap,
|
|
||||||
.wp-submenu-head {
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wp-has-submenu,
|
|
||||||
.wp-not-current-submenu,
|
|
||||||
.menu-top,
|
|
||||||
|
|
||||||
#collapse-button,
|
|
||||||
#wp-submenu ul,
|
|
||||||
#wp-admin-bar-site-name,
|
|
||||||
.ab-item
|
|
||||||
{
|
|
||||||
color: #46484d !important;
|
|
||||||
font-weight: bold !important;
|
|
||||||
}
|
|
||||||
.wp-menu-open ,
|
|
||||||
.wp-has-current-submenu li,
|
|
||||||
#adminmenu ul
|
|
||||||
{
|
|
||||||
background-color: #3163bd !important;
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wp-not-current-submenu:hover,
|
|
||||||
#wpadminbar .ab-item:hover
|
|
||||||
{
|
|
||||||
background-color: #3163bd !important;
|
|
||||||
color: #FFFFFF !important;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.ab-submenu {
|
|
||||||
background-color: #ffcb04 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wp-admin-bar-updates,
|
|
||||||
#wp-admin-bar-comments,
|
|
||||||
#wp-admin-bar-new-content,
|
|
||||||
#wp-admin-bar-wp-logo
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_submit:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #3163bd;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_submit {
|
|
||||||
background-color: #ffffff;
|
|
||||||
padding: 5px 25px;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 1px;
|
|
||||||
border-color: #769be7;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 2px 2px 2px #d0d0d0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#bdp_success {
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-color: #c3c4c7;
|
|
||||||
border-left-color: #00a32a;
|
|
||||||
padding: 10px 12px;
|
|
||||||
margin: 5px 0 15px;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-left-width: 4px;
|
|
||||||
width: 97%;
|
|
||||||
|
|
||||||
}
|
|
202
bdp-kompass.php
@ -1,202 +0,0 @@
|
|||||||
<?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 );
|
|
@ -1,96 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<!--[if IE 7]>
|
|
||||||
<html class="ie ie7" <?php language_attributes(); ?>>
|
|
||||||
<![endif]-->
|
|
||||||
<!--[if IE 8]>
|
|
||||||
<html class="ie ie8" <?php language_attributes(); ?>>
|
|
||||||
<![endif]-->
|
|
||||||
<!--[if !(IE 7) | !(IE 8) ]><!-->
|
|
||||||
<html <?php language_attributes(); ?>>
|
|
||||||
<!--<![endif]-->
|
|
||||||
<head>
|
|
||||||
<meta charset="<?php bloginfo( 'charset' ); ?>" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link rel="shortcut icon" href="<?php echo esc_url( get_template_directory_uri() ); ?>/img/favicon.ico" />
|
|
||||||
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
|
|
||||||
<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
|
|
||||||
<?php wp_head(); ?>
|
|
||||||
</head>
|
|
||||||
<!-- FIXME: Mehr ARIA role setzen -->
|
|
||||||
<body <?php body_class(); ?>>
|
|
||||||
<div id="wrap"><!-- FIXME: Klassen hfeed, site? -->
|
|
||||||
<header id="header" role="banner"><!-- FIXME: Klasse site-header? -->
|
|
||||||
<hgroup id="branding">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php _e( 'Zurück zur Startseite', 'buena-theme' ); ?>">
|
|
||||||
<img alt="Bund der Pfadfinderinnen und Pfadfinder" src="<?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen.png" srcset="<?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen.png 1x, <?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen@2x.png 2x" width="390" height="79" />
|
|
||||||
</a>
|
|
||||||
</h1>
|
|
||||||
<h2 class="site-description">
|
|
||||||
<?php echo esc_html( get_bloginfo( 'name', 'display' ) ); ?>
|
|
||||||
</h2>
|
|
||||||
</hgroup>
|
|
||||||
<nav class="screen-reader-text">
|
|
||||||
<!-- FIXME: Tollere Navigation ausdenken -->
|
|
||||||
<a href="#content">
|
|
||||||
<?php _e( 'Zum Inhalt springen', 'buena-theme' ); ?>
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
<?php do_action( 'buena_search_form' ); ?>
|
|
||||||
</header>
|
|
||||||
<div id="left">
|
|
||||||
<?php wp_nav_menu( [ 'theme_location' => 'primary', 'depth' => 2, 'container' => 'nav', 'container_class' => 'nav-menu' ] ); ?>
|
|
||||||
<?php if ( is_active_sidebar( 'below-navigation' ) ): ?>
|
|
||||||
<ul class="widgets">
|
|
||||||
<?php dynamic_sidebar( 'below-navigation' ); ?>
|
|
||||||
</ul>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<div id="teaser">
|
|
||||||
<?php if ( is_page() || have_posts() && is_single() ): the_post(); ?>
|
|
||||||
<?php if ( has_post_thumbnail() ): ?>
|
|
||||||
<?php the_post_thumbnail( 'poster', [ 'alt' => '' ] ); ?>
|
|
||||||
<?php else: ?>
|
|
||||||
<img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" />
|
|
||||||
<?php endif; ?>
|
|
||||||
<div id="teaserTitle">
|
|
||||||
<h2><?php the_title(); ?></h2>
|
|
||||||
</div>
|
|
||||||
<?php rewind_posts(); ?>
|
|
||||||
<?php elseif ( get_header_image() ): ?>
|
|
||||||
<img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" />
|
|
||||||
<div id="teaserTitle">
|
|
||||||
<h2><?php bloginfo( 'description' ); ?></h2>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<div id="main" role="main">
|
|
||||||
<div id="content">
|
|
||||||
<?php if ( have_posts() ): ?>
|
|
||||||
<?php while ( have_posts() ): the_post(); ?>
|
|
||||||
<?php get_template_part( 'content', get_post_format() ); ?>
|
|
||||||
<?php endwhile; ?>
|
|
||||||
<?php else: // FIXME: Wenn berechtigt: Erstellen anbieten ?>
|
|
||||||
<article id="post-0" class="post no-results not-found">
|
|
||||||
<?php _e( 'Nicht gefunden.', 'buena-theme' ); ?>
|
|
||||||
</article>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<nav class="pagination">
|
|
||||||
<div class="previous"><?php previous_posts_link( __( '« Neuere Beiträge', 'buena-theme' ) ); ?></div>
|
|
||||||
<div class="next"><?php next_posts_link( __( 'Ältere Beiträge »', 'buena-theme' ) ); ?></div>
|
|
||||||
</nav>
|
|
||||||
<?php comments_template(); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php if ( is_active_sidebar( 'footer' ) ): ?>
|
|
||||||
<footer id="footer">
|
|
||||||
<ul class="widgets">
|
|
||||||
<?php dynamic_sidebar( 'footer' ); ?>
|
|
||||||
</ul>
|
|
||||||
</footer>
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php wp_footer(); ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if ( post_password_required() ) {
|
|
||||||
printf( '<p class="nocomments">%s</p>', __( 'Kommentare werden erst angezeigt, wenn das Kennwort eingegeben wurde.', 'buena-theme' ) );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: Hier sollten die Social-Media-Knöpfe auftauchen…
|
|
||||||
|
|
||||||
?>
|
|
||||||
<div class="comments">
|
|
||||||
<?php if ( have_comments() ) : ?>
|
|
||||||
<h4 id="comments"><?php comments_number( 'Keine Kommentare', 'Ein Kommentar', '% Kommentare' );?></h4>
|
|
||||||
<ul class="commentlist">
|
|
||||||
<?php wp_list_comments(); ?>
|
|
||||||
</ul>
|
|
||||||
<nav class="pagination">
|
|
||||||
<div class="alignleft"><?php previous_comments_link() ?></div>
|
|
||||||
<div class="alignright"><?php next_comments_link() ?></div>
|
|
||||||
</nav>
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php if ( comments_open() ) : ?>
|
|
||||||
<?php comment_form(); ?>
|
|
||||||
<?php else: ?>
|
|
||||||
<p class="nocomments screen-reader-text"><?php _e( 'Es kann nicht kommentiert werden.', 'buena-theme' ); ?></p>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
@ -1,17 +0,0 @@
|
|||||||
<article id="post-<?php the_ID(); ?>" <?php post_class( 'clearfix' ); ?>>
|
|
||||||
<?php if ( is_singular() ): ?>
|
|
||||||
<?php the_content(); ?>
|
|
||||||
<p><?php the_tags(); ?></p>
|
|
||||||
<?php wp_link_pages( array( 'before' => '<nav class="page-links">Seiten:', 'after' => '</nav>' ) ); ?>
|
|
||||||
<?php else: ?>
|
|
||||||
<a class="h h-box h-box-blaugelb<?php if ( ! has_post_thumbnail() ): ?> h-box-blaugelb-bildlos<?php endif; ?>" href="<?php echo esc_url( get_permalink() ); ?>">
|
|
||||||
<?php the_post_thumbnail( 'gallery-thumb', [ 'alt' => '' ] ); ?>
|
|
||||||
<?php if ( get_the_title() ): ?>
|
|
||||||
<header class="wrap">
|
|
||||||
<h3><?php the_title(); ?></h3>
|
|
||||||
</header>
|
|
||||||
<?php endif; ?>
|
|
||||||
</a>
|
|
||||||
<?php has_excerpt() ? the_excerpt() : the_content(); ?>
|
|
||||||
<?php endif; ?>
|
|
||||||
</article>
|
|
@ -1,104 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@import url("font/ihs.css");
|
|
||||||
|
|
||||||
html, body { border: 0 none; padding: 0; margin: 0; min-height: 100%; position: static; }
|
|
||||||
html { font-family: Sans-Serif; background: url("img/holz.jpg") #dbb97b; position: relative; }
|
|
||||||
body { margin: 1em; padding: 1em; max-width: 710px; background: #fff; font-size: 81.3% !important; }
|
|
||||||
body.post-type-gallery { background: transparent; }
|
|
||||||
header, hgroup, nav, footer, article { display: block; }
|
|
||||||
.h, h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 { margin: 0; font-family: IHS, Serif; font-size: 1em; font-weight: normal; font-style: normal; }
|
|
||||||
button, input, select, optgroup, option { margin: 0; font: inherit; color: inherit; }
|
|
||||||
button, input[type="button"], input[type="submit"], input[type="reset"] { cursor: pointer; }
|
|
||||||
p, ul, ol, dt { line-height: 1.5; }
|
|
||||||
abbr { border-bottom: 1px dotted; }
|
|
||||||
a { color: #1d4899; }
|
|
||||||
figure, .wp-caption { margin: 0; max-width: 100%; }
|
|
||||||
figcaption, .wp-caption-text { font-style: italic; padding: 0.5em 0; }
|
|
||||||
.screen-reader-text { display: none; }
|
|
||||||
.aligncenter { margin: 0 auto; }
|
|
||||||
.alignleft { float: left; margin: 0 1em 0 0; }
|
|
||||||
.alignright { float: right; margin: 0 0 0 1em; }
|
|
||||||
|
|
||||||
::-moz-selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
|
||||||
::selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
|
||||||
|
|
||||||
/* Media object */
|
|
||||||
.media { margin: 1em 0; }
|
|
||||||
.media, .bd { overflow: hidden; _overflow: visible; }
|
|
||||||
/*.media img { display: block; }*/
|
|
||||||
/* Clearfix */
|
|
||||||
.clearfix::after,
|
|
||||||
.clearfix::before,
|
|
||||||
.media::after,
|
|
||||||
.media::before { content: " "; display: table; }
|
|
||||||
.clearfix::after,
|
|
||||||
.media::after { clear: both; }
|
|
||||||
|
|
||||||
/* Überschriften mit Bild darunter */
|
|
||||||
.h-box { position: relative; display: block; margin-bottom: 1em; text-decoration: none; }
|
|
||||||
.h-box > img { position: absolute; top: 0; left: 0; height: 100%; width: 100%; }
|
|
||||||
.h-box > .wrap { position: absolute; max-width: 100%; left: 0; }
|
|
||||||
.h-box > .wrap > * { display: inline; -o-box-decoration-break: clone; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
|
||||||
|
|
||||||
.h-box-teaser { box-shadow: 0 5px 5px rgba(0, 0, 0, 0.3); margin-left: -240px; line-height: 1; display: inline-block; width: 1300px; max-width: 100%; }
|
|
||||||
.h-box-teaser > img { position: static; }
|
|
||||||
.h-box-teaser > .wrap { bottom: 1em; padding-left: 240px; }
|
|
||||||
.h-box-teaser > .wrap > * { background: rgba(56, 46, 35, 0.7); color: #ffcb04; padding: 2px 13px 4px; font-size: 52px; line-height: 78px; }
|
|
||||||
@media (max-width: 720px) {
|
|
||||||
.h-box-teaser { margin-top: 1em; margin-left: 0; }
|
|
||||||
.h-box-teaser > .wrap { padding-left: 1em; }
|
|
||||||
.h-box-teaser > .wrap > * { font-size: 2em; line-height: 39px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.h-box-blaugelb { padding-top: 47.1428571%; }
|
|
||||||
.h-box-blaugelb > .wrap { bottom: 0; font-size: 18px; }
|
|
||||||
.h-box-blaugelb > .wrap > * { color: #1d4899; background: #ffcb04; padding: 3px 5px; line-height: 26px; }
|
|
||||||
|
|
||||||
.h-box-blaugelb-bildlos { padding: 0; }
|
|
||||||
.h-box-blaugelb-bildlos > .wrap { position: static; }
|
|
||||||
/**/
|
|
||||||
|
|
||||||
.container { max-width: 1020px; }
|
|
||||||
.page .container,
|
|
||||||
.single-post:not(.single-format-gallery) .container { max-width: 710px; }
|
|
||||||
|
|
||||||
.content-singular .format-gallery { background: transparent; padding: 0; margin: 0; position: relative; }
|
|
||||||
.content-singular .format-gallery .gallery { display: flex; flex-wrap: wrap; align-content: space-between; align-items: flex-start; }
|
|
||||||
.content-singular .format-gallery .gallery-item { background: #fff; padding: 1em; margin: 0 1em 1em 0; }
|
|
||||||
.gallery-columns-1 .gallery-item { flex: 1 0 50%; }
|
|
||||||
.gallery-columns-2 .gallery-item { flex: 1 0 34%; }
|
|
||||||
.gallery-columns-3 .gallery-item { flex: 1 0 25%; }
|
|
||||||
.gallery-columns-4 .gallery-item { flex: 1 0 20%; }
|
|
||||||
|
|
||||||
.content-gallery { display: flex; position: relative; z-index: 10; flex-wrap: wrap; overflow: hidden; }
|
|
||||||
.content-gallery > article { flex: 1 1 25%; }
|
|
||||||
body > :first-child { margin-top: 0; }
|
|
||||||
body > :last-child { margin-bottom: 0; }
|
|
||||||
.content-singular > article:not(.format-gallery),
|
|
||||||
.content-gallery > article,
|
|
||||||
.commentlist article,
|
|
||||||
.comment-form { min-width: 20em; background: #fff; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); }
|
|
||||||
.content-gallery > article { max-width: calc(33.333% - 1em); }
|
|
||||||
@media (max-width: 800px) { .content-gallery > article { max-width: 100%; } }
|
|
||||||
|
|
||||||
/* WordPress-Wünsche */
|
|
||||||
.sticky {}
|
|
||||||
|
|
||||||
img { max-width: 100%; height: auto; border: 0 none; vertical-align: middle; }
|
|
||||||
ul, ol { padding-left: 2em; }
|
|
||||||
dl, ul, ol, h1, h2, h3, h4, h5, h6, blockquote, p, table { margin: 0.5em 0; }
|
|
||||||
dd, li > ol, li > ul { margin: 0; }
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
blockquote, dd { padding-left: 2em; }
|
|
||||||
body > p:empty:last-child { margin: -0.5em 0 0.5em; }
|
|
||||||
h3, .h3, h4, .h4, h5, .h5, h6, .h6 { display: inline-block; background: #ffcb04; color: #1d4899; margin-bottom: 0; padding: 2px 4px; }
|
|
||||||
h3, .h3 { font-size: 18px; padding: 3px 5px; }
|
|
||||||
h4, .h4 { font-size: 16px; }
|
|
||||||
h5, .h5 { font-size: 14px; }
|
|
||||||
.gallery-caption {}
|
|
||||||
.bypostauthor {}
|
|
||||||
.twitter-tweet {}
|
|
||||||
|
|
||||||
h1, .h1, h2, .h2 { font-size: 20px; }
|
|
||||||
h1::after, h2::after { color: red; background: black; display: block; padding: 5px; content: "Bitte Überschriften ab 3. Ordnung benutzen."; }
|
|
@ -1,11 +0,0 @@
|
|||||||
@font-face {
|
|
||||||
font-family: IHS;
|
|
||||||
src: url('ihs.eot');
|
|
||||||
src: url('ihs.eot?#iefix') format('embedded-opentype'),
|
|
||||||
url('ihs.woff2') format('woff2'),
|
|
||||||
url('ihs.woff') format('woff'),
|
|
||||||
url('ihs.ttf') format('truetype'),
|
|
||||||
url('ihs.svg#immenhausenregular') format('svg');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
1825
buena/font/ihs.svg
Before Width: | Height: | Size: 135 KiB |
@ -1,89 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
die( 'I’m a theme.' );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! function_exists( 'trigger_pfadfinden_plugin_error' ) ) {
|
|
||||||
/**
|
|
||||||
* Show an error message.
|
|
||||||
*
|
|
||||||
* @see http://www.squarepenguin.com/wordpress/?p=6 Inspiration
|
|
||||||
*
|
|
||||||
* @param string $message
|
|
||||||
* @param int $type optional
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function trigger_pfadfinden_plugin_error( $message, $type = 0 )
|
|
||||||
{
|
|
||||||
if ( isset( $_GET['action'] ) && 'error_scrape' === $_GET['action'] ) {
|
|
||||||
echo $message;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $type ) {
|
|
||||||
$type = E_USER_WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
return trigger_error( $message, $type );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check for suitable environment
|
|
||||||
if ( defined( 'PHP_VERSION_ID' ) && PHP_VERSION_ID >= 50400 ) {
|
|
||||||
// Register autoloader if updater plugin missing
|
|
||||||
if ( ! class_exists( 'Shy\WordPress\Theme' ) ) {
|
|
||||||
if ( ! include_once __DIR__ . '/use/shy-wordpress/src/autoloader.php' ) {
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
__( 'Das Theme ist unvollständig und konnte nicht geladen werden. Neuinstallation müsste helfen.', 'buena-theme' ),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register our autoloader
|
|
||||||
if ( ! include_once __DIR__ . '/src/autoloader.php' ) {
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
__( 'Das Theme ist unvollständig und konnte nicht geladen werden. Neuinstallation müsste helfen.', 'buena-theme' ),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return \Pfadfinden\WordPress\BuenaTheme
|
|
||||||
*/
|
|
||||||
function buena_get_theme()
|
|
||||||
{
|
|
||||||
static $theme = null;
|
|
||||||
if (!$theme) {
|
|
||||||
$theme = new ReflectionClass( 'Pfadfinden\WordPress\BuenaTheme' );
|
|
||||||
$theme = $theme->newInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $method
|
|
||||||
* @return callable
|
|
||||||
*/
|
|
||||||
function buena_get_callback( $method )
|
|
||||||
{
|
|
||||||
return array( buena_get_theme(), (string) $method );
|
|
||||||
}
|
|
||||||
|
|
||||||
return buena_get_theme();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Display error message
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
sprintf(
|
|
||||||
__( 'You need at least PHP 5.4 to use the Buena theme. Your are using %s.', 'buena-theme' ),
|
|
||||||
PHP_VERSION
|
|
||||||
),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
Before Width: | Height: | Size: 783 B |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 332 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 599 B |
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 561 B |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 34 KiB |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 2400 2400" width="14" height="14"><path style="fill:#fff;stroke:none" d="m 975,25 q 129,0 252,34 123,34 227,95.5 104,61.5 191.5,149 87.5,87.5 149,192 61.5,104.5 95.5,227.5 34,123 34,251 0,278 -152,514 l 588,588 q 15,14 15,35 0,21 -15,36 l -213,213 q -15,15 -36,15 -21,0 -35,-15 l -588,-588 q -235,152 -513,152 -129,0 -252,-34 Q 600,1856 496,1794.5 392,1733 304,1645.5 216,1558 155,1453.5 94,1349 59.5,1226 25,1103 25,974.5 25,846 59.5,723 94,600 155,495.5 216,391 304,303.5 392,216 496,154.5 600,93 723,59 846,25 975,25 Z m -0.5,302 Q 843,327 723,378 603,429 516.5,516 430,603 378.5,723 327,843 327,974.5 q 0,131.5 51.5,251.5 51.5,120 138,207 86.5,87 206.5,138 120,51 251.5,51 131.5,0 251.5,-51 120,-51 207,-138 87,-87 138.5,-207 Q 1623,1106 1623,974.5 1623,843 1571.5,723 1520,603 1433,516 1346,429 1226,378 1106,327 974.5,327 Z" /></svg>
|
|
Before Width: | Height: | Size: 907 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns='http://www.w3.org/2000/svg' height='300' width='470' viewBox='0 0 300 425' preserveAspectRatio='xMinYMin meet'><defs><linearGradient id='v' x1='0' y1='0' x2='0' y2='140%'><stop offset='0' stop-color='#000' stop-opacity='0.7' /><stop offset='50%' stop-color='#000' stop-opacity='0.4' /><stop offset='80%' stop-color='#000' stop-opacity='0.1' /><stop offset='100%' stop-color="#000" stop-opacity='0' /></linearGradient></defs><path d='M10,200 C150,170 450,180 615,190 L608,00 L15,0 Z' style='stroke:none;' fill='url(#v)'></path></svg>
|
|
Before Width: | Height: | Size: 545 B |
Before Width: | Height: | Size: 21 KiB |
106
buena/index.php
@ -1,106 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<!--[if IE 7]>
|
|
||||||
<html class="ie ie7" <?php language_attributes(); ?>>
|
|
||||||
<![endif]-->
|
|
||||||
<!--[if IE 8]>
|
|
||||||
<html class="ie ie8" <?php language_attributes(); ?>>
|
|
||||||
<![endif]-->
|
|
||||||
<!--[if !(IE 7) | !(IE 8) ]><!-->
|
|
||||||
<html <?php language_attributes(); ?>>
|
|
||||||
<!--<![endif]-->
|
|
||||||
<head>
|
|
||||||
<meta charset="<?php bloginfo( 'charset' ); ?>" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<?php if ( ! function_exists( 'has_site_icon' ) || ! has_site_icon() ): // FIXME: Remove workaround on 2016-02-16 ?>
|
|
||||||
<link rel="shortcut icon" href="<?php echo esc_url( get_template_directory_uri() ); ?>/img/favicon.ico" />
|
|
||||||
<?php endif; ?>
|
|
||||||
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
|
|
||||||
<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
|
|
||||||
<?php wp_head(); ?>
|
|
||||||
</head>
|
|
||||||
<!-- FIXME: Mehr ARIA role setzen -->
|
|
||||||
<body <?php body_class(); ?>>
|
|
||||||
<div id="wrap"><!-- FIXME: Klassen hfeed, site? -->
|
|
||||||
<header id="header" role="banner"><!-- FIXME: Klasse site-header? -->
|
|
||||||
<hgroup id="branding">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php _e( 'Zurück zur Startseite', 'buena-theme' ); ?>">
|
|
||||||
<img alt="Bund der Pfadfinderinnen und Pfadfinder" src="<?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen.png" srcset="<?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen.png 1x, <?php echo esc_url( get_template_directory_uri() ); ?>/img/bundeszeichen@2x.png 2x" width="390" height="79" />
|
|
||||||
</a>
|
|
||||||
</h1>
|
|
||||||
<h2 class="site-description">
|
|
||||||
<?php echo esc_html( get_bloginfo( 'name', 'display' ) ); ?>
|
|
||||||
</h2>
|
|
||||||
</hgroup>
|
|
||||||
<nav>
|
|
||||||
<!-- FIXME: Tollere Navigation ausdenken -->
|
|
||||||
<a href="#content" class="screen-reader-text"><?php _e( 'Zum Inhalt springen', 'buena-theme' ); ?></a>
|
|
||||||
<button type="button" id="responsiveMenu" title="<?php esc_attr_e( 'Menü', 'buena-theme' ); ?>">
|
|
||||||
<img alt="<?php esc_attr_e( 'Menü', 'buena-theme' ); ?>" src="<?php echo esc_url( get_template_directory_uri() ); ?>/img/hamburger.png" width="32" height="32" />
|
|
||||||
</button>
|
|
||||||
</nav>
|
|
||||||
<?php do_action( 'buena_search_form' ); ?>
|
|
||||||
</header>
|
|
||||||
<div id="left">
|
|
||||||
<?php wp_nav_menu( [ 'theme_location' => 'primary', 'depth' => 2, 'container' => 'nav', 'container_class' => 'nav-menu nav-menu-primary' ] ); ?>
|
|
||||||
<?php if ( is_active_sidebar( 'below-navigation' ) ): ?>
|
|
||||||
<ul class="widgets">
|
|
||||||
<?php dynamic_sidebar( 'below-navigation' ); ?>
|
|
||||||
</ul>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<?php if ( $buenaTeaserImage = buena_get_theme()->getTeaserImage() ): ?>
|
|
||||||
<header class="h h-box h-box-teaser">
|
|
||||||
<?php echo $buenaTeaserImage; ?>
|
|
||||||
<hgroup class="wrap">
|
|
||||||
<h2><?php buena_get_theme()->printTitle(); ?></h2>
|
|
||||||
</hgroup>
|
|
||||||
</header>
|
|
||||||
<?php else: ?>
|
|
||||||
<header class="h">
|
|
||||||
<h2><?php buena_get_theme()->printTitle(); ?></h2>
|
|
||||||
</header>
|
|
||||||
<?php endif; ?>
|
|
||||||
<div id="main" role="main" class="container">
|
|
||||||
<div id="content" class="content-<?php if ( is_singular() ): ?>singular<?php else: ?>gallery<?php endif; ?>">
|
|
||||||
<?php if ( have_posts() ): ?>
|
|
||||||
<?php while ( have_posts() ): the_post(); ?>
|
|
||||||
<?php get_template_part( 'content', get_post_format() ); ?>
|
|
||||||
<?php endwhile; ?>
|
|
||||||
<?php else: // FIXME: Wenn berechtigt: Erstellen anbieten ?>
|
|
||||||
<article id="post-0" class="post no-results not-found">
|
|
||||||
<?php _e( 'Nicht gefunden.', 'buena-theme' ); ?>
|
|
||||||
</article>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
<nav class="pagination">
|
|
||||||
<div class="alignright"><?php next_posts_link( __( 'Ältere Beiträge »', 'buena-theme' ) ); ?></div>
|
|
||||||
<div class="alignleft"><?php previous_posts_link( __( '« Neuere Beiträge', 'buena-theme' ) ); ?></div>
|
|
||||||
</nav>
|
|
||||||
<?php comments_template(); ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<footer id="footer">
|
|
||||||
<div class="wrapper media">
|
|
||||||
<?php if ( is_active_sidebar( 'footer' ) || has_nav_menu( 'footer' ) ): ?>
|
|
||||||
<header class="h">
|
|
||||||
<?php echo esc_html( get_bloginfo( 'name', 'display' ) ?: 'Bund der Pfadfinderinnen und Pfadfinder e.V.' ); ?>
|
|
||||||
</header>
|
|
||||||
<?php wp_nav_menu( [ 'theme_location' => 'footer', 'container' => 'nav', 'container_class' => 'nav-menu nav-menu-footer alignleft', 'fallback_cb' => '' ] ); ?>
|
|
||||||
<ul class="widgets bd">
|
|
||||||
<?php dynamic_sidebar( 'footer' ); ?>
|
|
||||||
</ul>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
<script>
|
|
||||||
+function() {
|
|
||||||
document.getElementById('responsiveMenu').addEventListener('click', function() {
|
|
||||||
document.body.classList.toggle('show-responsive-menu');
|
|
||||||
});
|
|
||||||
}();
|
|
||||||
</script>
|
|
||||||
<?php wp_footer(); ?>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
103
buena/readme.txt
@ -1,103 +0,0 @@
|
|||||||
Buena
|
|
||||||
=======
|
|
||||||
|
|
||||||
Das WordPress-Theme zum neuen Corporate Design des BdP.
|
|
||||||
|
|
||||||
Änderungswünsche? Kritik?
|
|
||||||
philipp.cordes@pfadfinden.de
|
|
||||||
|
|
||||||
|
|
||||||
Anderthalb Hinweise zur Benutzung
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
Das Theme ist noch nicht ganz fertig, an einigen Stellen wird noch gehobelt.
|
|
||||||
|
|
||||||
In Beiträgen mögt ihr bitte erst Überschriften ab 3. Ordnung verwenden,
|
|
||||||
die erster Ordnung sind für den Header und die zweiter Ordnung sind für
|
|
||||||
die Titel der Beiträge. Es gibt dafür auch fette Hinweise beim Bearbeiten.
|
|
||||||
|
|
||||||
|
|
||||||
Eine kleine Änderungshistorie
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
v1.0 - TODO
|
|
||||||
- Das Abschalten des Posterbilds für ist Seiten und Beiträge ohne Bild möglich.
|
|
||||||
- Beitragsarten und deren unterschiedliche Darstellung ist auch für Seiten verfügbar.
|
|
||||||
- Schmale Beitragsbilder (<1300px Breite) zerlegen das Layout nicht mehr.
|
|
||||||
- Login-Formular im Widgetbereich unterstützen.
|
|
||||||
|
|
||||||
v0.99.7 - 21.09.2015
|
|
||||||
- Safari bricht jetzt Artikelauflistungen richtig um. Die anderen machen es auch etwas besser.
|
|
||||||
- Safari zeigt jetzt Suchfelder richtig an.
|
|
||||||
- Safari malt die Trennline in der Navigation nicht mehr zu dick.
|
|
||||||
- Wenn das Ajax-Login-Formular benutzt wird, verschwindet das Hamburgermenü nicht mehr.
|
|
||||||
|
|
||||||
v0.99.6 - 19.09.2015
|
|
||||||
- Weitere Blau- und Gelbtöne einheitlich umgesetzt, v.a. im Editor.
|
|
||||||
- Update für Milu: Zusatz „Kategorie“ wird im Titel auf abendlager.pfadfinden.de nicht mehr angezeigt.
|
|
||||||
- Der linke Rand wird jetzt immer eingehalten, egal wie lang der Navigationsbereich ist.
|
|
||||||
- Anpassung an WordPress 4.3: Favicon kommt nur aus dem Theme, wenn kein eigenes gesetzt ist.
|
|
||||||
- Der Hinweis, dass Kommentare nicht möglich sind, wird standardmäßig ausgeblendet.
|
|
||||||
- Links in der Navigation färben sich jetzt anhand der Hierarchie im Menü ein, nicht derer der Seiten.
|
|
||||||
|
|
||||||
v0.99.5 - 19.08.2015
|
|
||||||
- Seitentitel beschreiben jetzt besser, was tatsächlich angezeigt wird.
|
|
||||||
- Farben aus dem Handbuch einheitlich umgesetzt.
|
|
||||||
|
|
||||||
v0.99.4 - 13.08.2015
|
|
||||||
- Das Menü wird automatisch wieder eingeblendet, wenn die Fensterbreite über 720px steigt.
|
|
||||||
- Fehlerkorrektur: Es werden keine Urls mehr unter dem Editorfeld ausgegeben.
|
|
||||||
- Das Theme ist nicht mehr auf das Plugin angewiesen. Die benötigte Bilbiothek shy-wordpress wird direkt mitgeliefert.
|
|
||||||
|
|
||||||
v0.99.3 - 01.08.2015
|
|
||||||
- Der Editor sollte jetzt in den meisten Fällen eine realistische Vorschau bieten.
|
|
||||||
- Überschriften sind jetzt blau auf gelb.
|
|
||||||
Überschriften erster und zweiter Ordnung in Beiträgen und Seiten werden durch Überschriften dritter Ordnung ersetzt.
|
|
||||||
- Schrift „Immenhausen“ durch verbesserte Variante ausgetauscht.
|
|
||||||
- Kleinere Korrekturen an Abständen.
|
|
||||||
|
|
||||||
v0.99.2 - 27.07.2015
|
|
||||||
- Kleinere Textanpassungen.
|
|
||||||
|
|
||||||
v0.99.1 - 27.07.2015
|
|
||||||
- Auf großen Displays wird das Beitragsbild nicht mehr verzerrt.
|
|
||||||
|
|
||||||
v0.99 - 26.07.2015
|
|
||||||
- Erster Kandidat zur Veröffentlichung als Version 1.0.
|
|
||||||
- Die Überschriften erstrahlen in vollem Glanz.
|
|
||||||
- Kommentare sehen besser aus.
|
|
||||||
- Das Theme ist responsive bis runter auf 300px.
|
|
||||||
- Fußleiste überarbeitet und zweigeteilt.
|
|
||||||
|
|
||||||
v0.9.1 - 07.07.2015
|
|
||||||
- Fehlerkorrektur: Der Titel wird nicht mehr doppelt angezeigt.
|
|
||||||
|
|
||||||
v0.9 - 03.07.2015
|
|
||||||
- Kommentare werden jetzt angezeigt.
|
|
||||||
- Etwas mehr responsive: Mindestbreite 700px für ordentliche Anzeige.
|
|
||||||
|
|
||||||
v0.8 - 21.06.2015
|
|
||||||
- Standardwidgets sehen jetzt in der Leiste gut aus.
|
|
||||||
- Die Fußzeile sitzt jetzt fester an ihrem Platz.
|
|
||||||
|
|
||||||
v0.7 - 18.06.2015
|
|
||||||
- Große Posterbilder hinzugefügt, die auch auf der Bundeswebseite zu sehen sind.
|
|
||||||
- Erhebliche Verbesserungen der Darstellung.
|
|
||||||
|
|
||||||
v0.6 - 16.06.2015
|
|
||||||
- Mehr Unterstützung für HTML5.
|
|
||||||
|
|
||||||
v0.5 - 16.06.2015
|
|
||||||
- Fehler behoben, der die WordPress-Installation unbrauchbar machen könnte.
|
|
||||||
|
|
||||||
v0.4 - 11.06.2015
|
|
||||||
- Navigation überarbeitet.
|
|
||||||
|
|
||||||
v0.3 - 10.06.2015
|
|
||||||
- Webfont Immenhausen für Überschriften.
|
|
||||||
|
|
||||||
v0.2 - 04.06.2015
|
|
||||||
- Grafiken eingebaut.
|
|
||||||
|
|
||||||
v0.1 - 20.04.2015
|
|
||||||
- Erste Veröffentlichung.
|
|
Before Width: | Height: | Size: 336 KiB |
@ -1,11 +0,0 @@
|
|||||||
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
|
|
||||||
<label>
|
|
||||||
<span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ); ?></span>
|
|
||||||
<?php if ( doing_action( 'buena_search_form' ) ): ?>
|
|
||||||
<input type="search" class="search-field" value="<?php echo get_search_query(); ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ); ?>" />
|
|
||||||
<?php else: ?>
|
|
||||||
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ); ?>" value="<?php echo get_search_query(); ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ); ?>" />
|
|
||||||
<?php endif; ?>
|
|
||||||
</label>
|
|
||||||
<button type="submit" class="search-submit" title="<?php esc_attr_e( 'Query search', 'buena-theme' ); ?>"><?php echo esc_html_x( 'Search', 'submit button' ); ?></button>
|
|
||||||
</form>
|
|
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Pfadfinden\WordPress;
|
|
||||||
|
|
||||||
use Shy\WordPress\CompositeOption;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BuenaSettings extends CompositeOption
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct( 'buena-theme' );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getDefaults()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'use_cdn' => false,
|
|
||||||
'always_show_poster' => true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Pfadfinden\WordPress;
|
|
||||||
|
|
||||||
use Shy\WordPress\Administration\SettingsPage;
|
|
||||||
use Shy\WordPress\Administration\CheckboxField;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BuenaSettingsPage extends SettingsPage
|
|
||||||
{
|
|
||||||
public function getFields()
|
|
||||||
{
|
|
||||||
$this->addSection( '', 'buena' );
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'use_cdn' => new CheckboxField(),
|
|
||||||
'always_show_poster' => new CheckboxField(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getParentSlug()
|
|
||||||
{
|
|
||||||
return 'themes.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return __( 'Buena-Einstellungen', 'buena-theme' );
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,317 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Pfadfinden\WordPress;
|
|
||||||
|
|
||||||
use Shy\WordPress\Theme;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BuenaTheme extends Theme
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var BuenaSettings
|
|
||||||
*/
|
|
||||||
protected $settings;
|
|
||||||
|
|
||||||
|
|
||||||
public function getContentWidth()
|
|
||||||
{
|
|
||||||
return 684;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
|
|
||||||
$this->settings = new BuenaSettings();
|
|
||||||
|
|
||||||
$this->addHookMethod( 'after_setup_theme', 'afterSetupTheme' );
|
|
||||||
$this->addHookMethod( 'wp_enqueue_scripts', 'enqueueScriptsStyles' );
|
|
||||||
|
|
||||||
$this->addHookMethod( 'buena_search_form', 'printSearchForm' );
|
|
||||||
|
|
||||||
$this->addHookMethod( 'admin_init', 'initAdministration' );
|
|
||||||
$this->addHookMethod( 'mce_css', 'filterEditorStylesheets' );
|
|
||||||
|
|
||||||
$this->addHookMethod( 'wp_page_menu', 'filterPageMenu' );
|
|
||||||
$this->addHookMethod( 'widgets_init', 'registerSidebars' );
|
|
||||||
|
|
||||||
$this->addHookMethod( 'the_content', 'filterContent' );
|
|
||||||
|
|
||||||
$this->addHookMethod( 'image_size_names_choose', 'filterImageSizeNames' );
|
|
||||||
$this->addHookMethod( 'media_upload_tabs', 'filterMediaTabs' );
|
|
||||||
$this->addHookMethod( 'media_view_settings', 'filterMediaViewSettings' );
|
|
||||||
$this->addHookMethod( 'media_view_strings', 'filterMediaViewSettings' );
|
|
||||||
$this->addHookMethod( 'print_media_templates', 'printMediaTemplates' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function afterSetupTheme()
|
|
||||||
{
|
|
||||||
add_theme_support( 'title-tag' );
|
|
||||||
add_theme_support( 'automatic-feed-links' );
|
|
||||||
|
|
||||||
register_nav_menu( 'primary', __( 'Hauptmenü', 'buena-theme' ) );
|
|
||||||
register_nav_menu( 'footer', __( 'Fußzeile', 'buena-theme' ) );
|
|
||||||
|
|
||||||
add_theme_support( 'html5', [
|
|
||||||
'comment-list', 'comment-form', 'search-form', 'gallery', 'caption',
|
|
||||||
] );
|
|
||||||
|
|
||||||
add_theme_support( 'post-thumbnails' );
|
|
||||||
$custom_header = [
|
|
||||||
'width' => apply_filters( 'buena_header_image_width', 1300 ),
|
|
||||||
'height' => apply_filters( 'buena_header_image_height', 635 ),
|
|
||||||
'flex-width' => true,
|
|
||||||
'flex-height' => true,
|
|
||||||
'default-image' => get_template_directory_uri() . '/img/leitbild_aktionen_low.jpg',
|
|
||||||
'uploads' => true,
|
|
||||||
'header-text' => false,
|
|
||||||
];
|
|
||||||
add_theme_support( 'custom-header', $custom_header );
|
|
||||||
set_post_thumbnail_size( $custom_header['width'], $custom_header['height'], true );
|
|
||||||
|
|
||||||
add_image_size( 'gallery-thumb', 350, 165, true );
|
|
||||||
|
|
||||||
register_default_headers( [
|
|
||||||
'aktionen' => [
|
|
||||||
'url' => '%s/img/leitbild_aktionen_low.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_aktionen_low_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild Aktionen', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
'bund' => [
|
|
||||||
'url' => '%s/img/leitbild_bund_crop.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_bund_crop_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild Bund', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
'ihs' => [
|
|
||||||
'url' => '%s/img/leitbild_ihs.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_ihs_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild Immenhausen', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
'international' => [
|
|
||||||
'url' => '%s/img/leitbild_int2_low.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_int2_low_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild International', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
'kontakt' => [
|
|
||||||
'url' => '%s/img/leitbild_Kontakt_low.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_Kontakt_low_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild Kontakt', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
'pfadfinden' => [
|
|
||||||
'url' => '%s/img/leitbild_pfadfinden_low.jpg',
|
|
||||||
'thumbnail_url' => '%s/img/leitbild_pfadfinden_low_klein.jpg',
|
|
||||||
'description' => __( 'Leitbild Pfadfinden', 'buena-theme' ),
|
|
||||||
],
|
|
||||||
] );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTeaserImage()
|
|
||||||
{
|
|
||||||
if ( is_page() || have_posts() && is_single() ) { // FIXME: is_singular()?
|
|
||||||
the_post();
|
|
||||||
$thumb = get_the_post_thumbnail( null, 'post-thumbnail', [ 'alt' => '' ] );
|
|
||||||
rewind_posts();
|
|
||||||
|
|
||||||
if ( $thumb ) {
|
|
||||||
return $thumb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( is_home() || $this->settings['always_show_poster'] ) {
|
|
||||||
return sprintf(
|
|
||||||
'<img src="%s" height="%d" width="%d" alt="" />',
|
|
||||||
get_header_image(),
|
|
||||||
get_custom_header()->height,
|
|
||||||
get_custom_header()->width
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gibt einen Titel für die aktuelle Seite aus.
|
|
||||||
*/
|
|
||||||
public function printTitle()
|
|
||||||
{
|
|
||||||
if ( is_singular() ) {
|
|
||||||
the_title();
|
|
||||||
} elseif ( is_category() && strpos( $_SERVER['HTTP_HOST'], 'abendlager.pfadfinden.de' ) !== false ) {
|
|
||||||
// FIXME: Workaround mit 1.0 entfernen.
|
|
||||||
single_cat_title( '', true );
|
|
||||||
} elseif ( is_archive() ) {
|
|
||||||
the_archive_title();
|
|
||||||
} elseif ( is_search() ) {
|
|
||||||
esc_html_e( sprintf(
|
|
||||||
__( 'Suche nach „%s“', 'buena-theme' ),
|
|
||||||
get_search_query( false )
|
|
||||||
) );
|
|
||||||
} else {
|
|
||||||
bloginfo( 'description' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function enqueueScriptsStyles()
|
|
||||||
{
|
|
||||||
wp_enqueue_style( 'immenhausen-font', get_template_directory_uri() . '/font/ihs.css' );
|
|
||||||
wp_enqueue_style( 'buena-style', get_stylesheet_uri() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gibt das Suchformular aus. Nötig, damit im Kopf anderer Code stehen kann als anderswo.
|
|
||||||
*/
|
|
||||||
public function printSearchForm()
|
|
||||||
{
|
|
||||||
get_search_form( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tut, was dransteht.
|
|
||||||
*/
|
|
||||||
public function registerSidebars()
|
|
||||||
{
|
|
||||||
register_sidebar( [
|
|
||||||
'id' => 'below-navigation',
|
|
||||||
'name' => __( 'Unter Navigation', 'buena-theme' ),
|
|
||||||
'description' => __( 'Ziemlich schmal.', 'buena-theme' ),
|
|
||||||
'before_title' => '<h4 class="h-widget">',
|
|
||||||
'after_title' => '</h4>',
|
|
||||||
] );
|
|
||||||
register_sidebar( [
|
|
||||||
'id' => 'footer',
|
|
||||||
'name' => __( 'Fußleiste', 'buena-theme' ),
|
|
||||||
'description' => __( 'Rechte Spalte des Briefumschlags. Recht flach. Füllt die ganze Breite aus, wenn kein Navigationsmenü zugewiesen ist.', 'buena-theme' ),
|
|
||||||
'before_title' => '<h4 class="h-widget">',
|
|
||||||
'after_title' => '</h4>',
|
|
||||||
] );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ausgabe von wp_page_menu() filtern, dass sie wie wp_nav_menu() aussieht.
|
|
||||||
*
|
|
||||||
* @param string $menu
|
|
||||||
* @param array $args
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function filterPageMenu( $menu, array $args )
|
|
||||||
{
|
|
||||||
if ( ! isset( $args['fallback_cb'] ) || $args['fallback_cb'] !== 'wp_page_menu' ) {
|
|
||||||
return $menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
$vorher = '<div class="' . esc_attr( $args['menu_class'] ) . '">';
|
|
||||||
|
|
||||||
$danach = '<' . $args['container'];
|
|
||||||
if ( $args['container_class'] ) {
|
|
||||||
// In diesem Fall doch optional…
|
|
||||||
$danach .= ' class="' . esc_attr( $args['container_class'] ) . '"';
|
|
||||||
}
|
|
||||||
if ( $args['container_id'] ) {
|
|
||||||
$danach .= ' id="' . esc_attr( $args['container_id'] ) . '"';
|
|
||||||
}
|
|
||||||
$danach .= '>';
|
|
||||||
|
|
||||||
if ( strpos( $menu, '<ul>' ) !== false ) {
|
|
||||||
// Wenn das Menü leer ist, enthält es den <ul>-Teil nicht.
|
|
||||||
$vorher .= '<ul>';
|
|
||||||
$danach .= '<ul class="' . esc_attr( $args['menu_class'] ) . '">';
|
|
||||||
}
|
|
||||||
|
|
||||||
$menu = str_replace( $vorher, $danach, $menu );
|
|
||||||
$menu = substr( $menu, 0, -5 ) . $args['container'] . ">\n";
|
|
||||||
|
|
||||||
$menu = str_replace( "class='children'", 'class="sub-menu"', $menu );
|
|
||||||
$menu = str_replace( 'current_page_item', 'current_page_item current-menu-item', $menu );
|
|
||||||
$menu = str_replace( 'current_page_ancestor', 'current_page_ancestor current-menu-ancestor', $menu );
|
|
||||||
|
|
||||||
return $menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Zusatzfunktionen für das Backend laden.
|
|
||||||
*/
|
|
||||||
public function initAdministration()
|
|
||||||
{
|
|
||||||
if ( isset( $_GET['exp'] ) && class_exists( 'Pfadfinden\WordPress\BuenaSettingsPage' ) ) {
|
|
||||||
new BuenaSettingsPage( $this->settings );
|
|
||||||
}
|
|
||||||
|
|
||||||
add_editor_style();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Standard-Skin des Editors rauswerfen.
|
|
||||||
*
|
|
||||||
* @param string $stylesheets
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function filterEditorStylesheets( $stylesheets )
|
|
||||||
{
|
|
||||||
$stylesheets = explode( ',', $stylesheets );
|
|
||||||
$stylesheets = array_filter( $stylesheets, function ( $url ) {
|
|
||||||
return strpos( $url, 'tinymce' ) === false;
|
|
||||||
} );
|
|
||||||
|
|
||||||
return implode( ',', $stylesheets );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Überschriften <h1> und <h2> durch <h3> ersetzen.
|
|
||||||
*
|
|
||||||
* @param string $content
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function filterContent( $content )
|
|
||||||
{
|
|
||||||
$content = preg_replace( '/\\<h[12]([^>]*)>(.*?)\\<\\/h[12]>/', '<h3$1>$2</h3>', $content );
|
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $names
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function filterImageSizeNames( array $names )
|
|
||||||
{
|
|
||||||
return $names;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $tabs
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function filterMediaTabs( $tabs )
|
|
||||||
{
|
|
||||||
return $tabs;
|
|
||||||
return $tabs + [
|
|
||||||
'insert-poster' => __( 'Posterbilder', 'buena-theme' ),
|
|
||||||
];
|
|
||||||
// Erzeugt einen <iframe> von wp-admin/media-upload.php?chromeless=1&post_id=123456&tab=insert-poster
|
|
||||||
}
|
|
||||||
|
|
||||||
public function filterMediaViewSettings( $settings )
|
|
||||||
{
|
|
||||||
//var_dump( $settings );
|
|
||||||
return $settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Weitere Templates für Medienbrowser ausgeben.
|
|
||||||
*/
|
|
||||||
public function printMediaTemplates()
|
|
||||||
{
|
|
||||||
global $_wp_default_headers;
|
|
||||||
?>
|
|
||||||
<script type="text/html" id="tmpl-insert-poster">
|
|
||||||
<ul>
|
|
||||||
<?php foreach ( $_wp_default_headers as $k => $header ) : ?>
|
|
||||||
<img alt="<?php esc_attr_e( $header['description'] ); ?>" src="<?php echo esc_url( sprintf( $header['thumbnail_url'], get_template_directory_uri() ) ); ?>" />
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</ul>
|
|
||||||
</script>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to load a Pfadfinden WordPress class.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function buena_autoloader( $name )
|
|
||||||
{
|
|
||||||
if ( substr( $name, 0, 21 ) !== 'Pfadfinden\\WordPress\\' ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = __DIR__ . '/' . str_replace( '\\', DIRECTORY_SEPARATOR, $name ) . '.php';
|
|
||||||
return is_file( $name ) && include( $name );
|
|
||||||
}
|
|
||||||
|
|
||||||
spl_autoload_register( 'buena_autoloader' );
|
|
250
buena/style.css
@ -1,250 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
/**
|
|
||||||
Theme Name: Buena
|
|
||||||
Version: 0.99.7
|
|
||||||
Theme URI: http://lab.hanseaten-bremen.de/themes/buena/
|
|
||||||
Author: Philipp Cordes <philipp.cordes@pfadfinden.de>
|
|
||||||
Description: Das neue Corporate Design, jetzt auch für WordPress.
|
|
||||||
License: Proprietary
|
|
||||||
Tags: one-column, three-columns, responsive-layout, automatic-feed-links, post-thumbnails, featured-images, custom-menu, blue, white, yellow, editor-style
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Farben:
|
|
||||||
- gelb: #ffcb04 (Handbuch, manchmal T3), #ffca28 (T3)
|
|
||||||
- Verlauf: #9f7515 bis #e1af22, #e0cb84 bis #fff (IE-Fallback)
|
|
||||||
- blass: #fff5d9 (T3-Zebra)
|
|
||||||
- blau: #1d4899 (Handbuch, manchmal T3), #0d52a5 (T3)
|
|
||||||
- Markierung (T3): #b3d4fc
|
|
||||||
*/
|
|
||||||
|
|
||||||
html, body { border: 0 none; padding: 0; margin: 0; min-height: 100%; position: static; }
|
|
||||||
html { font-family: Sans-Serif; font-size: 81.3%; background: url("img/holz.jpg") #dbb97b; position: relative; }
|
|
||||||
header, hgroup, nav, footer, article { display: block; }
|
|
||||||
.h, h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 { margin: 0; font-family: IHS, Serif; font-size: 1em; font-weight: normal; font-style: normal; }
|
|
||||||
button, input, select, optgroup, option { margin: 0; font: inherit; color: inherit; }
|
|
||||||
button, input[type="button"], input[type="submit"], input[type="reset"] { cursor: pointer; }
|
|
||||||
input[type="search"] { -webkit-appearance: textfield; }
|
|
||||||
p, ul, ol, dt { line-height: 1.5; }
|
|
||||||
abbr { border-bottom: 1px dotted; }
|
|
||||||
a { color: #1d4899; }
|
|
||||||
figure, .wp-caption { margin: 0; max-width: 100%; }
|
|
||||||
figcaption, .wp-caption-text { font-style: italic; padding: 0.5em 0; }
|
|
||||||
.screen-reader-text { display: none; }
|
|
||||||
.aligncenter { margin: 0 auto; }
|
|
||||||
.alignleft { float: left; margin: 0 1em 0 0; }
|
|
||||||
.alignright { float: right; margin: 0 0 0 1em; }
|
|
||||||
|
|
||||||
::-moz-selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
|
||||||
::selection { background: #1d4899; color: #ffcb04; text-shadow: none; outline: 2px solid #1d4899; }
|
|
||||||
|
|
||||||
/* Media object */
|
|
||||||
.media { margin: 1em 0; }
|
|
||||||
.media, .bd { overflow: hidden; _overflow: visible; }
|
|
||||||
/*.media img { display: block; }*/
|
|
||||||
/* Clearfix */
|
|
||||||
.clearfix::after,
|
|
||||||
.clearfix::before,
|
|
||||||
.media::after,
|
|
||||||
.media::before { content: " "; display: table; }
|
|
||||||
.clearfix::after,
|
|
||||||
.media::after { clear: both; }
|
|
||||||
|
|
||||||
/* Layout */
|
|
||||||
#wrap { background: url("img/klufthemd.png") no-repeat; padding: 0 0 2em; }
|
|
||||||
#footer { background: url("img/loeffel-topf.png") no-repeat 100% 100%; position: absolute; width: 100%; bottom: 0; }
|
|
||||||
#footer .wrapper { background: url("img/briefumschlag.png") no-repeat; margin: 0 0 0 240px; padding: 112px 7px 0 21px; height: 286px; width: 700px; box-sizing: border-box; }
|
|
||||||
#footer header { color: #ffcb04; text-align: center; font-size: 25px; margin: -111px 0 13px; line-height: 111px; }
|
|
||||||
#footer .widgets { padding: 0 2em 0 0; }
|
|
||||||
|
|
||||||
#left { margin: -18px -200px 0 40px; width: 160px; z-index: 30; float: left; position: relative; }
|
|
||||||
#main { overflow: hidden; padding: 0 0 286px 240px; }
|
|
||||||
@media (max-width: 960px) {
|
|
||||||
/* Umschlag unter die Navigation umbrechen */
|
|
||||||
#left { margin-bottom: 300px; }
|
|
||||||
#footer .wrapper { margin-left: 0; }
|
|
||||||
}
|
|
||||||
@media (max-width: 720px) {
|
|
||||||
#main { padding-left: 0; }
|
|
||||||
#left { margin-right: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: Positionierung des Schattens weiter vereinfachen, auch Untertitel verlinken. */
|
|
||||||
/* FIXME: Branding umbenennen, siehe https://github.com/pfadfinden/wordpress-theme-updater/issues/13 */
|
|
||||||
#branding { min-height: 145px; padding: 0 33px 20px 240px; text-align: center; position: relative; width: 425px; margin-bottom: -27px; }
|
|
||||||
#branding::after { content: ""; display: block; position: absolute; bottom: 0; right: 0; z-index: 15; height: 143px; width: 457px; background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMzAwJyB3aWR0aD0nNDcwJyB2aWV3Qm94PScwIDAgMzAwIDQyNScgcHJlc2VydmVBc3BlY3RSYXRpbz0neE1pbllNaW4gbWVldCc+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSd2JyB4MT0nMCcgeTE9JzAnIHgyPScwJyB5Mj0nMTQwJSc+PHN0b3Agb2Zmc2V0PScwJyBzdG9wLWNvbG9yPScjMDAwJyBzdG9wLW9wYWNpdHk9JzAuNycgLz48c3RvcCBvZmZzZXQ9JzUwJScgc3RvcC1jb2xvcj0nIzAwMCcgc3RvcC1vcGFjaXR5PScwLjQnIC8+PHN0b3Agb2Zmc2V0PSc4MCUnIHN0b3AtY29sb3I9JyMwMDAnIHN0b3Atb3BhY2l0eT0nMC4xJyAvPjxzdG9wIG9mZnNldD0nMTAwJScgc3RvcC1jb2xvcj0iIzAwMCIgc3RvcC1vcGFjaXR5PScwJyAvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9J00xMCwyMDAgQzE1MCwxNzAgNDUwLDE4MCA2MTUsMTkwIEw2MDgsMDAgTDE1LDAgWicgc3R5bGU9J3N0cm9rZTpub25lOycgZmlsbD0ndXJsKCN2KSc+PC9wYXRoPjwvc3ZnPg0K") no-repeat 50% 0; }
|
|
||||||
#branding > * { margin: 0; position: relative; z-index: 20; }
|
|
||||||
.site-title { font-size: 20px; background: #ffcb04; color: #0d53a5; margin-top: auto; line-height: 115px; }
|
|
||||||
.site-title a { display: block; vertical-align: bottom; }
|
|
||||||
.site-title img { vertical-align: bottom; padding-bottom: 16px; }
|
|
||||||
.site-description { font-size: 18px; background: #0d53a5; color: #ffcb04; line-height: 30px; font-family: IHS, Serif; letter-spacing: 1px; word-spacing: 2px; }
|
|
||||||
|
|
||||||
#header .search-form { background: url("img/streichholzschachtel.png") no-repeat; position: absolute; height: 89px; left: 750px; top: 1.5em; width: 98px; padding: 25px 47px 0 35px; }
|
|
||||||
#header .search-form label { display: block; position: relative; margin: 25px 0 -50px; text-align: left; }
|
|
||||||
#header .search-field { background: transparent; border: 2px solid #ffcb04; padding: 2px; color: #fff; display: block; max-width: 100%; box-sizing: border-box; }
|
|
||||||
#header .search-submit { background: transparent; color: #ffcb04; border: 0 none; font-family: IHS, Serif; font-size: 1.4em; padding: 0; display: block; box-sizing: border-box; }
|
|
||||||
#header > nav { position: absolute; top: 0; right: 0; z-index: 9999; display: none; }/* FIXME: Workaround Branding-Doppelung */
|
|
||||||
#responsiveMenu { border: 0 none; background: transparent; height: 51px; margin: 1em; }
|
|
||||||
@media (max-width: 960px) { /* Suche ausblenden */
|
|
||||||
#header .search-form { display: none; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-menu ul { list-style: none; padding: 0; margin: 0; }
|
|
||||||
.nav-menu-primary > ul { font-family: IHS, Serif; }
|
|
||||||
.nav-menu-primary > ul > .current-menu-ancestor,
|
|
||||||
.nav-menu-primary > ul > .current-menu-item { background: #e1af22 no-repeat; background-image: linear-gradient(#9f7515 0%, #e1af22 100%); border-bottom: 1px solid #9f7515; border-top: 1px solid #9f7515; margin: 0.5em 0; padding: 0.5em 0; }
|
|
||||||
.nav-menu-primary .sub-menu { display: none; }
|
|
||||||
.nav-menu-primary a { padding: 0.4em 0.5em 0.4em 1em; display: block; text-decoration: none; color: #6b5742; font-size: 1.4em; }
|
|
||||||
.nav-menu-primary li ul a { font-family: Georgia, Serif; font-size: 12px; font-style: italic; padding: 5px 5px 5px 25px; color: #000; }
|
|
||||||
.nav-menu-primary .current-menu-ancestor .sub-menu,
|
|
||||||
.nav-menu-primary .current-menu-item .sub-menu { display: block; }
|
|
||||||
.nav-menu-primary .current-menu-ancestor a { color: #000; }
|
|
||||||
.nav-menu-primary .current-menu-item > a { color: #fff; }
|
|
||||||
.nav-menu-primary a:hover,
|
|
||||||
.nav-menu-primary a:focus { color: #000; }
|
|
||||||
.nav-menu .current-menu-ancestor a:hover,
|
|
||||||
.nav-menu .current-menu-ancestor a:focus,
|
|
||||||
.nav-menu .sub-menu a:hover,
|
|
||||||
.nav-menu .sub-menu a:focus,
|
|
||||||
.nav-menu-footer a:hover,
|
|
||||||
.nav-menu-footer a:focus { text-decoration: underline; }
|
|
||||||
.nav-menu-footer { font-family: Georgia, Serif; font-style: italic; padding-left: 2em; }
|
|
||||||
.nav-menu-footer > ul { width: 323px; height: 174px; position: relative; display: flex; -webkit-flex-flow: column; flex-flow: column; -webkit-justify-content: center; justify-content: center; -webkit-align-items: stretch; align-items: stretch; }
|
|
||||||
.nav-menu-footer li { margin-bottom: 0.75em; }
|
|
||||||
.nav-menu-footer a { padding: 4px 4px 4px 25px; text-decoration: none; }
|
|
||||||
|
|
||||||
.widget_recent_entries > ul,
|
|
||||||
.widget_recent_comments > ul,
|
|
||||||
.widget_archive > ul,
|
|
||||||
.widget_categories > ul,
|
|
||||||
.widget_meta > ul { list-style: none; padding: 0; margin: 0; }
|
|
||||||
|
|
||||||
#left > .nav-menu { background: #ffcb04; color: #6b5742; padding: 10px 0 2em; }
|
|
||||||
#left > .widgets { background: rgba(56, 46, 35, 0.7); color: #ffcb04; padding: 1em 15px 15px 20px; font-size: 13px; font-style: italic; }
|
|
||||||
#left > .widgets a { color: #fff; text-decoration: none; }
|
|
||||||
#left > .widgets a:hover,
|
|
||||||
#left > .widgets a:focus { text-decoration: underline; }
|
|
||||||
|
|
||||||
/* Widgets: Basisdarstellung */
|
|
||||||
.widgets { list-style: none; padding: 0; margin: 0; font-family: Georgia, Serif; font-style: italic; }
|
|
||||||
.widget_calendar table { text-align: center; }
|
|
||||||
|
|
||||||
/* Widgets: Korrekturen für unsere Seitenleiste */
|
|
||||||
#left .widget_search form { display: flex; }
|
|
||||||
#left .widget_search form > * { border: 2px solid #ffcb04; }
|
|
||||||
#left .widget_search input { box-sizing: border-box; width: 100%; border: 0 none; background: transparent; color: #fff; text-align: center; padding: 3px 0.25em 4px; }
|
|
||||||
#left .widget_search button { color: transparent; background: url("res/lupe.svg") 50% 50% no-repeat #ffcb04; width: 31px; }
|
|
||||||
|
|
||||||
#left .widget_calendar > div { margin: 0 -15px 0 -20px; }
|
|
||||||
#left .widget_calendar > div > table { text-align: center; margin: 0 auto; }
|
|
||||||
|
|
||||||
#left .widget_pages ul { padding-left: 2em; }
|
|
||||||
#left .widget_pages > ul { list-style: none; padding: 0; }
|
|
||||||
|
|
||||||
#left > .widgets .widget { margin: 0; padding: 1em 0; }
|
|
||||||
.widgets .h-widget { color: #ffcb04; font-size: 16px; }
|
|
||||||
#left > .widgets .menu,
|
|
||||||
.widgets .widget_categories ul { list-style: none; padding: 0; }
|
|
||||||
|
|
||||||
/* Überschriften mit Bild darunter */
|
|
||||||
.h-box { position: relative; display: block; margin-bottom: 1em; text-decoration: none; }
|
|
||||||
.h-box > img { position: absolute; top: 0; left: 0; height: 100%; width: 100%; }
|
|
||||||
.h-box > .wrap { position: absolute; max-width: 100%; left: 0; }
|
|
||||||
.h-box > .wrap > * { display: inline; -o-box-decoration-break: clone; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
|
||||||
|
|
||||||
.h-box-teaser { box-shadow: 0 5px 5px rgba(0, 0, 0, 0.3); line-height: 1; display: inline-block; width: 1300px; max-width: 100%; }
|
|
||||||
.h-box-teaser > img { position: static; }
|
|
||||||
.h-box-teaser > .wrap { bottom: 1em; padding-left: 240px; }
|
|
||||||
.h-box-teaser > .wrap > * { background: rgba(56, 46, 35, 0.7); color: #ffcb04; padding: 2px 13px 4px; font-size: 52px; line-height: 78px; }
|
|
||||||
@media (max-width: 720px) {
|
|
||||||
.h-box-teaser { margin-top: 1em; margin-left: 0; }
|
|
||||||
.h-box-teaser > .wrap { padding-left: 1em; }
|
|
||||||
.h-box-teaser > .wrap > * { font-size: 2em; line-height: 39px; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.h-box-blaugelb { padding-top: 47.1428571%; }
|
|
||||||
.h-box-blaugelb > .wrap { bottom: 0; font-size: 18px; }
|
|
||||||
.h-box-blaugelb > .wrap > * { color: #1d4899; background: #ffcb04; padding: 3px 5px; line-height: 26px; }
|
|
||||||
|
|
||||||
.h-box-blaugelb-bildlos { padding: 0; }
|
|
||||||
.h-box-blaugelb-bildlos > .wrap { position: static; }
|
|
||||||
/**/
|
|
||||||
|
|
||||||
.container { max-width: 1020px; }
|
|
||||||
.page .container,
|
|
||||||
.single-post:not(.single-format-gallery) .container { max-width: 710px; }
|
|
||||||
|
|
||||||
.content-singular .format-gallery { background: transparent; padding: 0; margin: 0; position: relative; }
|
|
||||||
.content-singular .format-gallery .gallery { display: flex; -webkit-flex-wrap: wrap; flex-wrap: wrap; -webkit-align-content: space-between; align-content: space-between; -webkit-align-items: flex-start; align-items: flex-start; }
|
|
||||||
.content-singular .format-gallery .gallery-item { background: #fff; padding: 1em; margin: 0 1em 1em 0; }
|
|
||||||
.gallery-columns-1 .gallery-item { flex: 1 0 50%; }
|
|
||||||
.gallery-columns-2 .gallery-item { flex: 1 0 34%; }
|
|
||||||
.gallery-columns-3 .gallery-item { flex: 1 0 25%; }
|
|
||||||
.gallery-columns-4 .gallery-item { flex: 1 0 20%; }
|
|
||||||
|
|
||||||
.content-gallery { display: flex; position: relative; z-index: 10; -webkit-flex-wrap: wrap; flex-wrap: wrap; overflow: hidden; }
|
|
||||||
.container article,
|
|
||||||
.commentlist article,
|
|
||||||
.comment-form { padding: 1em; margin: 0 1em 1em 0; transition: width 0.5s, height 0.5s; box-sizing: border-box; }
|
|
||||||
.container article > :first-child,
|
|
||||||
.comment-form > :first-child { margin-top: 0; }
|
|
||||||
.container article > :last-child,
|
|
||||||
.comment-form > .form-submit { margin-bottom: 0; }
|
|
||||||
.content-singular > article:not(.format-gallery),
|
|
||||||
.content-gallery > article,
|
|
||||||
.commentlist article,
|
|
||||||
.comment-form { min-width: 20em; background: #fff; box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1); }
|
|
||||||
.content-gallery > article { flex: 1 1 25%; max-width: calc(33.333% - 1em); }
|
|
||||||
@media (max-width: 1070px) { .content-gallery > article { flex: 1 1 34%; max-width: calc(50% - 1em); } }
|
|
||||||
@media (max-width: 800px) { .content-gallery > article { flex: 1 1 50%; max-width: 100%; } }
|
|
||||||
.container > .pagination { margin-right: 1em; }
|
|
||||||
|
|
||||||
/* WordPress-Wünsche */
|
|
||||||
.sticky {}
|
|
||||||
|
|
||||||
img { max-width: 100%; height: auto; border: 0 none; vertical-align: middle; }
|
|
||||||
ul, ol { padding-left: 2em; }
|
|
||||||
dl, ul, ol, h1, h2, h3, h4, h5, h6, blockquote, p, table { margin: 0.5em 0; }
|
|
||||||
dd, li > ol, li > ul { margin: 0; }
|
|
||||||
dt { font-weight: bold; }
|
|
||||||
blockquote, dd { padding-left: 2em; }
|
|
||||||
article > p:empty:last-child { margin: -0.5em 0 0.5em; }
|
|
||||||
article h3, article .h3, article h4, article .h4, article h5, article .h5, article h6, article .h6 { display: inline-block; background: #ffcb04; color: #1d4899; margin-bottom: 0; padding: 2px 4px; }
|
|
||||||
article h3, article .h3 { font-size: 18px; padding: 3px 5px; }
|
|
||||||
article h4, article .h4 { font-size: 16px; }
|
|
||||||
article h5, article .h5 { font-size: 14px; }
|
|
||||||
.gallery-caption {}
|
|
||||||
.bypostauthor {}
|
|
||||||
.twitter-tweet {}
|
|
||||||
|
|
||||||
/* Kommentare */
|
|
||||||
#comments, #reply-title { font-size: 2.5em; color: #fff; margin: 0.5em 0 0.25em; }
|
|
||||||
.commentlist { list-style: none; padding: 0; }
|
|
||||||
.commentlist .children { list-style: none; padding-left: 1em; }
|
|
||||||
.comment-form > p > * { vertical-align: top; }
|
|
||||||
.comment-form > p > label::after { content: ": "; }
|
|
||||||
.comment-body { position: relative; }
|
|
||||||
.comment-metadata { position: absolute; top: 1em; right: 1em; display: flex; -webkit-flex-direction: column; flex-direction: column; -webkit-justify-content: flex-end; justify-content: flex-end; }
|
|
||||||
.comment-form textarea { resize: vertical; display: block; box-sizing: border-box; width: 100%; }
|
|
||||||
|
|
||||||
/* Responsive: Der komplizierte Kram. Hurra! */
|
|
||||||
@media (max-width: 720px) { /* Gestapelt anordnen */
|
|
||||||
#main { padding-bottom: 0; }
|
|
||||||
#wrap, #footer .wrapper { background-image: none; }
|
|
||||||
#branding { text-align: left; width: auto; padding: 0; margin: 0; min-height: 0; }
|
|
||||||
#branding::after { display: none; background-image: none; }
|
|
||||||
#branding h1 { line-height: 51px; }
|
|
||||||
#branding h2 { padding: 0 1em; }
|
|
||||||
.site-title a { display: inline-block; }
|
|
||||||
.site-title img { height: 51px; width: auto; padding: 13px; }
|
|
||||||
#header > nav { display: block; }
|
|
||||||
#left { float: none; transition: 0.5s height; margin: 0; width: auto; }
|
|
||||||
#left, #left .widgets { display: none; }
|
|
||||||
.show-responsive-menu #left { display: block; }
|
|
||||||
#content, .comments { margin-left: 1em; }
|
|
||||||
#footer { background: #c4a164; position: static; }
|
|
||||||
#footer .wrapper { padding: 1em; height: auto; width: auto; }
|
|
||||||
#footer header { color: #000; margin: 0; line-height: 1.5; }
|
|
||||||
.nav-menu-footer, #footer .widgets { float: none; margin: 1em 0 0; padding: 1em; }
|
|
||||||
.nav-menu-footer > ul { height: auto; }
|
|
||||||
}
|
|
7
buena/use/shy-wordpress/.gitignore
vendored
@ -1,7 +0,0 @@
|
|||||||
# Eclipse project files
|
|
||||||
.buildpath
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
|
|
||||||
# Local PHPUnit configuration
|
|
||||||
phpunit.xml
|
|
@ -1,7 +0,0 @@
|
|||||||
<phpunit boostrap="tests/bootstrap.php">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite>
|
|
||||||
<directory suffix="Test.php" phpVersion="5.4.0">tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|
@ -1,98 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A composite option with a fixed number of suboptions and their default values.
|
|
||||||
*/
|
|
||||||
abstract class CompositeOption implements \ArrayAccess, \Countable, \IteratorAggregate
|
|
||||||
{
|
|
||||||
use HookableTrait;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $slug;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSlug()
|
|
||||||
{
|
|
||||||
return $this->slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected function __construct( $slug )
|
|
||||||
{
|
|
||||||
$this->slug = (string) $slug;
|
|
||||||
|
|
||||||
$this->addHookMethod( 'default_option_' . $this->slug, 'getDefaults' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return default values for all suboptions.
|
|
||||||
* Hooked into get_option() defaults.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
abstract public function getDefaults();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $offset
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getDefault( $offset )
|
|
||||||
{
|
|
||||||
return $this->getDefaults()[ $offset ];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function offsetExists( $offset )
|
|
||||||
{
|
|
||||||
$settings = get_option( $this->slug );
|
|
||||||
return isset( $settings[ $offset ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function offsetGet( $offset )
|
|
||||||
{
|
|
||||||
$settings = get_option( $this->slug );
|
|
||||||
if ( ! isset( $settings[ $offset ] ) ) {
|
|
||||||
throw new \OutOfBoundsException( "There is no setting '$offset'." );
|
|
||||||
}
|
|
||||||
|
|
||||||
return $settings[ $offset ];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function offsetSet( $offset, $value )
|
|
||||||
{
|
|
||||||
$settings = get_option( $this->slug );
|
|
||||||
if ( ! isset( $settings[ $offset ] ) ) {
|
|
||||||
throw new \OutOfBoundsException( "There is no setting '$offset'." );
|
|
||||||
}
|
|
||||||
|
|
||||||
$settings[ $offset ] = $value;
|
|
||||||
update_option( $this->slug, $settings );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function offsetUnset( $offset )
|
|
||||||
{
|
|
||||||
throw new \BadMethodCallException( 'You cannot unset settings.' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function count()
|
|
||||||
{
|
|
||||||
return count( $this->getDefaults() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getIterator()
|
|
||||||
{
|
|
||||||
return new \ArrayIterator( get_option( $this->slug ) );
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Making actions and filters how they should be.
|
|
||||||
*
|
|
||||||
* Default to pass all arguments.
|
|
||||||
*/
|
|
||||||
trait HookableTrait
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $action_or_filter
|
|
||||||
* @param string $method
|
|
||||||
* @param int $priority
|
|
||||||
* @param int $acceptedArgs
|
|
||||||
*/
|
|
||||||
protected function addHookMethod( $action_or_filter, $method, $priority = 10, $acceptedArgs = 99 )
|
|
||||||
{
|
|
||||||
add_filter( $action_or_filter, array( $this, $method ), $priority, $acceptedArgs );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $action_or_filter
|
|
||||||
* @param string $method
|
|
||||||
* @param int $priority
|
|
||||||
* @param int $acceptedArgs
|
|
||||||
*/
|
|
||||||
protected function removeHookMethod( $action_or_filter, $method, $priority = 10, $acceptedArgs = 99 )
|
|
||||||
{
|
|
||||||
remove_filter( $action_or_filter, array( $this, $method ), $priority, $acceptedArgs );
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Marker class for WordPress plugins.
|
|
||||||
*/
|
|
||||||
abstract class Plugin
|
|
||||||
{
|
|
||||||
use HookableTrait;
|
|
||||||
}
|
|
@ -1,383 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstracts common functionality and escaping for the Settings API.
|
|
||||||
*
|
|
||||||
* TODO: Check slug and field names for illegal characters.
|
|
||||||
* TODO: Refactor to not extend but use CompositeOption
|
|
||||||
*/
|
|
||||||
abstract class SettingsPage extends CompositeOption
|
|
||||||
{
|
|
||||||
use HookableTrait;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $capability;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Slug (file name) of the parent menu entry.
|
|
||||||
*
|
|
||||||
* @see add_submenu_page() for suggestions.
|
|
||||||
*
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
protected function getParentSlug()
|
|
||||||
{
|
|
||||||
return 'options-general.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Title for this setting page.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
abstract protected function getPageTitle();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* String to show in the menu entry.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function getMenuTitle()
|
|
||||||
{
|
|
||||||
return $this->getPageTitle();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $slug Page slug
|
|
||||||
* @param string $capability Required capability to view
|
|
||||||
*/
|
|
||||||
protected function __construct( $slug, $capability = 'manage_options' )
|
|
||||||
{
|
|
||||||
parent::__construct( $slug );
|
|
||||||
|
|
||||||
$this->capability = (string) $capability;
|
|
||||||
|
|
||||||
$this->addHookMethod( 'admin_menu', 'registerPage' );
|
|
||||||
$this->addHookMethod( 'admin_init', 'registerSettings' );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __toString()
|
|
||||||
{
|
|
||||||
return $this->slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register our options page.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function registerPage()
|
|
||||||
{
|
|
||||||
add_submenu_page(
|
|
||||||
$this->getParentSlug(),
|
|
||||||
$this->getPageTitle(),
|
|
||||||
$this->getMenuTitle(),
|
|
||||||
$this->capability,
|
|
||||||
$this->slug,
|
|
||||||
array( $this, 'renderPage' )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register the actual settings.
|
|
||||||
* Override and use addSection() and add*Field() methods.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function registerSettings()
|
|
||||||
{
|
|
||||||
register_setting(
|
|
||||||
$this->slug,
|
|
||||||
$this->slug,
|
|
||||||
array( $this, 'sanitizeOptions' )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sanitize option values after form submission.
|
|
||||||
*
|
|
||||||
* @param array $options
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
abstract public function sanitizeOptions( array $options );
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Section to add fields to.
|
|
||||||
*
|
|
||||||
* Parameter default from add_settings_field().
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $currentSection = 'default';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new section and return its generated name.
|
|
||||||
*
|
|
||||||
* @param string $title optional, can be empty
|
|
||||||
* @param string $name optional, will be generated if empty
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function addSection( $title = '', $name = '' )
|
|
||||||
{
|
|
||||||
$name = (string) $name;
|
|
||||||
if ( ! strlen( $name ) ) {
|
|
||||||
$name = $this->slug . '-section' . ( count( $this->getSections() ) + 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
add_settings_section(
|
|
||||||
$name,
|
|
||||||
esc_html( $title ),
|
|
||||||
array( $this, 'renderSectionTeaser' ),
|
|
||||||
$this->slug
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this->currentSection = $name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback before output of section fields.
|
|
||||||
*
|
|
||||||
* Teasers must escape their output themselves.
|
|
||||||
*
|
|
||||||
* @param array $section {
|
|
||||||
* @type string $id
|
|
||||||
* @type string $title
|
|
||||||
* @type callable $callback
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
public function renderSectionTeaser( array $section )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all known section names on this page.
|
|
||||||
*
|
|
||||||
* @global $wp_settings_fields
|
|
||||||
* @return array<string>
|
|
||||||
*/
|
|
||||||
public function getSections()
|
|
||||||
{
|
|
||||||
global $wp_settings_fields;
|
|
||||||
|
|
||||||
if ( ! isset( $wp_settings_fields[ $this->slug ] ) ) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_keys( $wp_settings_fields[ $this->slug ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @global $wp_settings_fields
|
|
||||||
* @param string $section
|
|
||||||
* @return array<string, array {
|
|
||||||
* @type string $id
|
|
||||||
* @type string $title
|
|
||||||
* @type callable $callback
|
|
||||||
* @type array $args
|
|
||||||
* }>
|
|
||||||
*/
|
|
||||||
public function getFieldsForSection( $section )
|
|
||||||
{
|
|
||||||
global $wp_settings_fields;
|
|
||||||
|
|
||||||
return $wp_settings_fields[ $this->slug ][ $section ];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a custom field to this setting page.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @param string $label
|
|
||||||
* @param callable $callback
|
|
||||||
* @param array $args
|
|
||||||
*/
|
|
||||||
protected function addField( $name, $label, $callback, $args = array() )
|
|
||||||
{
|
|
||||||
if ( ! is_callable( $callback ) ) {
|
|
||||||
throw new \InvalidArgumentException( 'Parameter $callback must be callable.' );
|
|
||||||
}
|
|
||||||
|
|
||||||
add_settings_field(
|
|
||||||
$name,
|
|
||||||
esc_html( $label ),
|
|
||||||
$callback,
|
|
||||||
$this->slug,
|
|
||||||
$this->currentSection,
|
|
||||||
$args
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a text field to this settings page.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @param string $label
|
|
||||||
* @param array $args
|
|
||||||
* @param string $callback
|
|
||||||
*/
|
|
||||||
protected function addTextField( $name, $label, $args = array(), $callback = '' )
|
|
||||||
{
|
|
||||||
if ( ! $callback || ! is_callable( $callback ) ) {
|
|
||||||
$callback = array( $this, 'renderTextField' );
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->addField(
|
|
||||||
$name,
|
|
||||||
$label,
|
|
||||||
$callback,
|
|
||||||
$args + array(
|
|
||||||
'label_for' => $this->slug . '-' . $name,
|
|
||||||
'name' => $name,
|
|
||||||
'attr' => array(),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $name
|
|
||||||
* @param string $label
|
|
||||||
* @param string $caption
|
|
||||||
* @param array $args
|
|
||||||
* @param callable $callback
|
|
||||||
*/
|
|
||||||
protected function addCheckboxField( $name, $label, $caption, $args = array(), $callback = '' )
|
|
||||||
{
|
|
||||||
if ( ! $callback || ! is_callable( $callback ) ) {
|
|
||||||
$callback = array( $this, 'renderCheckboxField' );
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->addField(
|
|
||||||
$name,
|
|
||||||
$label,
|
|
||||||
$callback,
|
|
||||||
$args + array(
|
|
||||||
'label_for' => $this->slug . '-' . $name,
|
|
||||||
'name' => $name,
|
|
||||||
'caption' => $caption,
|
|
||||||
'attr' => array(),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an error.
|
|
||||||
*
|
|
||||||
* @param string $code
|
|
||||||
* @param string $message
|
|
||||||
*/
|
|
||||||
protected function addError( $code, $message )
|
|
||||||
{
|
|
||||||
add_settings_error( $this->slug, $code, $message );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Errors for this setting.
|
|
||||||
*
|
|
||||||
* @return array {
|
|
||||||
* @type string $setting
|
|
||||||
* @type string $code
|
|
||||||
* @type string $message
|
|
||||||
* @type string $type 'error'
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
public function getErrors()
|
|
||||||
{
|
|
||||||
return get_settings_errors( $this->slug );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render a setting as text field.
|
|
||||||
*
|
|
||||||
* @param array $args {
|
|
||||||
* @type string $name
|
|
||||||
* @type string $label_for
|
|
||||||
* @type array $attr
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
public function renderTextField( array $args )
|
|
||||||
{
|
|
||||||
$name = $args['name'];
|
|
||||||
|
|
||||||
$this->renderInputTag( array(
|
|
||||||
'type' => 'text',
|
|
||||||
'id' => $args['label_for'],
|
|
||||||
'class' => 'regular-text',
|
|
||||||
'name' => $this->slug . '[' . $name . ']',
|
|
||||||
'value' => $this[ $name ],
|
|
||||||
) + $args['attr'] );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render a setting as checkbox.
|
|
||||||
*
|
|
||||||
* @param array $args {
|
|
||||||
* @type string $caption
|
|
||||||
* @type string $name
|
|
||||||
* @type string $label_for
|
|
||||||
* @type array $attr
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
public function renderCheckboxField( array $args )
|
|
||||||
{
|
|
||||||
$name = $args['name'];
|
|
||||||
|
|
||||||
echo '<label>';
|
|
||||||
$this->renderInputTag( array(
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'id' => isset( $args['label_for'] ) ? $args['label_for'] : null,
|
|
||||||
'name' => $this->slug . '[' . $name . ']',
|
|
||||||
'value' => '1',
|
|
||||||
'checked' => $this[ $name ] ? 'checked' : null,
|
|
||||||
) + $args['attr'] );
|
|
||||||
echo ' ' . esc_html( $args['caption'] ) . '</label>';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output an input tag with given HTML attributes.
|
|
||||||
*
|
|
||||||
* @param array $attr
|
|
||||||
*/
|
|
||||||
protected function renderInputTag( array $attr )
|
|
||||||
{
|
|
||||||
echo '<input';
|
|
||||||
foreach ( $attr as $k => $v ) {
|
|
||||||
if ( null !== $v ) {
|
|
||||||
printf( ' %s="%s"', $k, esc_attr( $v ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo ' />';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output settings page.
|
|
||||||
*/
|
|
||||||
public function renderPage()
|
|
||||||
{
|
|
||||||
if ( ! current_user_can( $this->capability ) ) {
|
|
||||||
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
<div class="wrap">
|
|
||||||
<h2><?php echo esc_html( $this->getPageTitle() ); ?></h2>
|
|
||||||
<form action="options.php" method="post">
|
|
||||||
<?php settings_errors( 'general' ); // “Settings saved.” message ?>
|
|
||||||
<?php settings_fields( $this->slug ); ?>
|
|
||||||
<?php do_settings_sections( $this->slug ); ?>
|
|
||||||
<?php submit_button(); ?>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
abstract class Theme extends Plugin
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$GLOBALS['content_width'] = $this->getContentWidth();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
abstract public function getContentWidth();
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to load a Shy WordPress class.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function shy_wordpress_autoloader( $name )
|
|
||||||
{
|
|
||||||
if ( substr( $name, 0, 14 ) !== 'Shy\\WordPress\\' ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = __DIR__ . '/' . str_replace( '\\', DIRECTORY_SEPARATOR, $name ) . '.php';
|
|
||||||
|
|
||||||
return is_file( $name ) && include( $name );
|
|
||||||
}
|
|
||||||
|
|
||||||
spl_autoload_register( 'shy_wordpress_autoloader' );
|
|
@ -1,40 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress\Tests;
|
|
||||||
|
|
||||||
use Shy\WordPress\HookableTrait;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that HookableTrait actually works.
|
|
||||||
*
|
|
||||||
* @author Philipp Cordes <pc@irgendware.net>
|
|
||||||
*/
|
|
||||||
class HookableTraitTest extends \WP_UnitTestCase
|
|
||||||
{
|
|
||||||
use HookableTrait;
|
|
||||||
|
|
||||||
|
|
||||||
public function actionMethod()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testWorksAsAction()
|
|
||||||
{
|
|
||||||
$this->addHookMethod( 'shywp_test_action', 'actionMethod' );
|
|
||||||
$this->assertTrue( has_action( 'shywp_test_action' ), 'Registering an action via addHookMethod() worked.' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function filterMethod( $value )
|
|
||||||
{
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testWorksAsFilter()
|
|
||||||
{
|
|
||||||
$this->addHookMethod( 'shywp_test_filter', 'filterMethod' );
|
|
||||||
$this->assertTrue( has_filter( 'shywp_test_filter' ), 'Registering a filter via addHookMethod() worked.' );
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,180 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Shy\WordPress\Tests;
|
|
||||||
|
|
||||||
use Shy\WordPress\SettingsPage;
|
|
||||||
use PHPUnit_Framework_MockObject_MockObject as MockObject;
|
|
||||||
use PHPUnit_Framework_MockObject_Builder_InvocationMocker as BuilderInvocationMocker;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SettingsPageTest extends \WP_UnitTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Mock a SettingsPage.
|
|
||||||
*
|
|
||||||
* @param string|null $slug
|
|
||||||
* @param string $capability
|
|
||||||
* @return SettingsPage|MockObject {
|
|
||||||
* @method BuilderInvocationMocker method(string)
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
protected function mockSettingsPage( $slug = null, $capability = 'manage_options' )
|
|
||||||
{
|
|
||||||
$builder = $this->getMockBuilder( 'Shy\WordPress\SettingsPage' )
|
|
||||||
->enableProxyingToOriginalMethods();
|
|
||||||
|
|
||||||
if ( null === $slug ) {
|
|
||||||
$builder->disableOriginalConstructor();
|
|
||||||
} else {
|
|
||||||
$builder->setConstructorArgs( array( $slug, $capability ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return $builder->getMock();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test reading defaults from the settings page.
|
|
||||||
*
|
|
||||||
* @covers SettingsPage::__construct()
|
|
||||||
* @covers SettingsPage::getDefaults()
|
|
||||||
* @covers SettingsPage::offsetExists()
|
|
||||||
* @covers SettingsPage::offsetGet()
|
|
||||||
* @expectedException OutOfBoundsException
|
|
||||||
*/
|
|
||||||
public function testReading()
|
|
||||||
{
|
|
||||||
$slug = 'shywp_settingspage_test_slug_reading';
|
|
||||||
$defaults = array( 'foo' => 'bar' );
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug );
|
|
||||||
$page->method( 'getDefaults' )->willReturn( $defaults );
|
|
||||||
|
|
||||||
$this->assertEquals( $defaults, get_option( $slug ) );
|
|
||||||
|
|
||||||
$this->assertArrayHasKey( 'foo', $page );
|
|
||||||
$this->assertEquals( $defaults['foo'], $page['foo'] );
|
|
||||||
|
|
||||||
$this->assertArrayNotHasKey( 'baz', $page );
|
|
||||||
$page['baz'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test writing to the settings page.
|
|
||||||
*
|
|
||||||
* @covers SettingsPage::offsetSet()
|
|
||||||
* @expectedException OutOfBoundsException
|
|
||||||
*/
|
|
||||||
public function testWriting()
|
|
||||||
{
|
|
||||||
$slug = 'shywp_settingspage_test_slug_writing';
|
|
||||||
$defaults = array( 'foo' => 'bar' );
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug );
|
|
||||||
$page->method( 'getDefaults' )->willReturn( $defaults );
|
|
||||||
|
|
||||||
$page['foo'] = 'foo';
|
|
||||||
$this->assertEquals( 'foo', $page['foo'] );
|
|
||||||
$page['baz'] = '123';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fail to remove a setting.
|
|
||||||
*
|
|
||||||
* @covers SettingPage::offsetUnset()
|
|
||||||
* @expectedException BadMethodCallException
|
|
||||||
*/
|
|
||||||
public function testRemoving()
|
|
||||||
{
|
|
||||||
$slug = 'shywp_settingspage_test_slug_removing';
|
|
||||||
$defaults = array();
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug );
|
|
||||||
$page->method( 'getDefaults' )->willReturn( $defaults );
|
|
||||||
|
|
||||||
unset( $page['baz'] );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test whether the settings page can be showed.
|
|
||||||
*
|
|
||||||
* @covers SettingsPage::__construct()
|
|
||||||
* @covers SettingsPage::getParentSlug()
|
|
||||||
* @covers SettingsPage::getPageTitle()
|
|
||||||
* @covers SettingsPage::getMenuTitle()
|
|
||||||
*/
|
|
||||||
public function testRegisterPage()
|
|
||||||
{
|
|
||||||
$this->expectOutputRegex( '/<page&title>/' );
|
|
||||||
|
|
||||||
$slug = 'shywp_settingspage_test_slug_registerpage';
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug );
|
|
||||||
$page->method( 'getParentSlug' )->willReturn( 'index.php' );
|
|
||||||
$page->method( 'getPageTitle' )->willReturn( '<page&title>' );
|
|
||||||
$page->method( 'getMenuTitle' )->willReturn( '<menu&title>' );
|
|
||||||
|
|
||||||
$page->expects( $this->once() )->method( 'registerPage' )->with();
|
|
||||||
$page->expects( $this->once() )->method( 'registerSettings' )->with();
|
|
||||||
|
|
||||||
// FIXME: Simulate display of backend.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers SettingsPage::sanitizeOptions()
|
|
||||||
*/
|
|
||||||
public function testSanitize()
|
|
||||||
{
|
|
||||||
$slug = 'shywp_settingspage_test_slug_sanitize';
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug );
|
|
||||||
$page->method( 'sanitizeOptions' )->will( $this->returnArgument( 0 ) );
|
|
||||||
$page->expects( $this->atLeastOnce() )->method( 'sanitizeOptions' );
|
|
||||||
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
// FIXME: Simulate form submission
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRenderTextField()
|
|
||||||
{
|
|
||||||
$this->expectOutputRegex( '/^<input type="text"/' );
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage();
|
|
||||||
$page->renderTextField( array(
|
|
||||||
'label_for' => 'foo',
|
|
||||||
'name' => 'bar',
|
|
||||||
) );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRenderCheckboxField()
|
|
||||||
{
|
|
||||||
$this->expectOutputRegex( '/^<label><input type="checkbox"/' );
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage();
|
|
||||||
$page->renderCheckboxField( array(
|
|
||||||
'label_for' => 'foo',
|
|
||||||
'name' => 'bar',
|
|
||||||
'caption' => 'baz',
|
|
||||||
) );
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRenderPage()
|
|
||||||
{
|
|
||||||
$this->markTestIncomplete();
|
|
||||||
$this->expectOutputRegex( '/<form action="options.php" method="post">.*<3&>.*cryptic_teaser.*</form>/' );
|
|
||||||
|
|
||||||
$slug = 'shywp_settingspage_test_slug_renderpage';
|
|
||||||
|
|
||||||
$page = $this->mockSettingsPage( $slug, 'read' );
|
|
||||||
$page->method( 'getPageTitle' )->willReturn( '<3&>' );
|
|
||||||
$page->method( 'renderSectionTeaser' )->will( $this->returnCallback( function () use ( $teaser ) {
|
|
||||||
echo 'cryptic_teaser';
|
|
||||||
} ) );
|
|
||||||
|
|
||||||
// FIXME: Simulate view of the settings page
|
|
||||||
$page->renderPage();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to load a Shy WordPress test class.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function shy_wordpress_tests_autoloader( $name )
|
|
||||||
{
|
|
||||||
if ( substr( $name, 0, 20 ) !== 'Shy\\WordPress\\Tests\\' ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = __DIR__ . '/' . str_replace( '\\', DIRECTORY_SEPARATOR, $name ) . '.php';
|
|
||||||
|
|
||||||
return is_file( $name ) && include( $name );
|
|
||||||
}
|
|
||||||
|
|
||||||
spl_autoload_register( 'shy_wordpress_tests_autoloader' );
|
|
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* PHPUnit bootstrap file
|
|
||||||
*
|
|
||||||
* Variant of the one from github.com/tierra/wordpress-plugins-tests
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once '../src/autoloader.php';
|
|
||||||
require_once 'autoloader.php';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
require_once ( getenv( 'WP_DEVELOP_DIR' ) ?: '../../../..' )
|
|
||||||
. '/tests/phpunit/includes/bootstrap.php';
|
|
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once (ABSPATH . '/wp-admin/includes/plugin.php');
|
|
||||||
require_once (ABSPATH . '/wp-admin/includes/class-wp-filesystem-base.php');
|
|
||||||
require_once (ABSPATH . '/wp-admin/includes/class-wp-filesystem-direct.php');
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/lib/ics-parser/Event.php');
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/lib/ics-parser/ICal.php');
|
|
||||||
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/seo/seo.php');
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/calendar/calendar.php');
|
|
||||||
require_once (ABSPATH . '/wp-includes/pluggable.php');
|
|
||||||
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/core/frontend-functions.php');
|
|
||||||
|
|
||||||
require_once (BDP_LV_PLUGIN_DIR . '/modules/security/security.php');
|
|
@ -1,179 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
add_action('admin_enqueue_scripts', 'bdp_update_dashboard_style');
|
|
||||||
add_action('login_enqueue_scripts', 'bdp_update_login_style');
|
|
||||||
|
|
||||||
function bdp_update_login_style() {
|
|
||||||
$css = file_get_contents(BDP_LV_PLUGIN_DIR . 'assets/dashboard.style.css.tpl');
|
|
||||||
echo str_replace('%%BDP_LV_PLUGIN_URL%%', BDP_LV_PLUGIN_URL, $css);
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_update_dashboard_style() {
|
|
||||||
wp_enqueue_style('custom-dashboard-styles', BDP_LV_PLUGIN_URL . '/assets/wordpress-bdp.css');
|
|
||||||
wp_enqueue_style('custom-calendar-styles', BDP_LV_PLUGIN_URL . '/assets/calendar.css');
|
|
||||||
wp_enqueue_style('custom-security-styles', BDP_LV_PLUGIN_URL . '/assets/security.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function bdp_add_menu_security() {
|
|
||||||
$moduleLoad = get_admin_url() . 'admin.php?page=' . BDP_LV_PLUGIN_SLUG . '/modules/index.php&loadmodule=';
|
|
||||||
|
|
||||||
add_menu_page(
|
|
||||||
'Sicherheit',
|
|
||||||
'Erweiterte<br />Sicherheit',
|
|
||||||
'manage_options',
|
|
||||||
'site-health.php',
|
|
||||||
'',
|
|
||||||
'dashicons-admin-network',
|
|
||||||
5
|
|
||||||
);
|
|
||||||
|
|
||||||
https://wordpress.local.development.contelli.de/wp-admin/admin.php?page=limit-login-attempts
|
|
||||||
add_submenu_page('site-health.php',
|
|
||||||
'Login-Kontrolle',
|
|
||||||
'Login-Kontrolle',
|
|
||||||
'manage_options',
|
|
||||||
get_admin_url() . 'admin.php?page=limit-login-attempts'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_add_menu_contents() {
|
|
||||||
add_menu_page(
|
|
||||||
'Beiträge',
|
|
||||||
'Inhalte',
|
|
||||||
'edit_posts',
|
|
||||||
'edit.php',
|
|
||||||
'',
|
|
||||||
'dashicons-format-aside',
|
|
||||||
4
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php',
|
|
||||||
'media',
|
|
||||||
'Medienverwaltung',
|
|
||||||
'edit_posts',
|
|
||||||
'upload.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php',
|
|
||||||
'media',
|
|
||||||
'Statische Seiten',
|
|
||||||
'edit_posts',
|
|
||||||
'edit.php?post_type=page'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('edit.php',
|
|
||||||
'comments',
|
|
||||||
'Kommentare',
|
|
||||||
'edit_posts',
|
|
||||||
'edit-comments.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_add_menu_mein_lv() {
|
|
||||||
$location = BDP_LV_PLUGIN_DIR . '/modules/';
|
|
||||||
$mainSlug = $location . 'index.php';
|
|
||||||
$moduleLoad = get_admin_url() . 'admin.php?page=' . BDP_LV_PLUGIN_SLUG . '/modules/index.php&loadmodule=';
|
|
||||||
|
|
||||||
add_menu_page(
|
|
||||||
'Mein BDP',
|
|
||||||
'BdP',
|
|
||||||
'manage_options',
|
|
||||||
$mainSlug,
|
|
||||||
'',
|
|
||||||
BDP_LV_PLUGIN_URL . '/icon.png',
|
|
||||||
3
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page($mainSlug,
|
|
||||||
'calendar_settings',
|
|
||||||
'Kalender-Einstellungen',
|
|
||||||
'manage_options',
|
|
||||||
$moduleLoad . 'calendar'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page($mainSlug,
|
|
||||||
'calendar_settings',
|
|
||||||
'Über',
|
|
||||||
'manage_options',
|
|
||||||
$moduleLoad . 'about'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function bdp_add_menu_setup() {
|
|
||||||
add_menu_page(
|
|
||||||
'Allgemeine Einstellungen',
|
|
||||||
'Webseiten-Setup',
|
|
||||||
'manage_options',
|
|
||||||
'users.php',
|
|
||||||
'',
|
|
||||||
'dashicons-admin-generic',
|
|
||||||
6
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('users.php',
|
|
||||||
'Allgemeine Einstellungen',
|
|
||||||
'Allgemeine Einstellungen',
|
|
||||||
'manage_options',
|
|
||||||
'options-general.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('users.php',
|
|
||||||
'Design-Einstellungen',
|
|
||||||
'Design',
|
|
||||||
'manage_options',
|
|
||||||
'customize.php?return=/wp-admin/'
|
|
||||||
);
|
|
||||||
|
|
||||||
add_submenu_page('users.php',
|
|
||||||
'plugins',
|
|
||||||
'Erweiterungen',
|
|
||||||
'manage_options',
|
|
||||||
'plugins.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
add_submenu_page('users.php',
|
|
||||||
'themes',
|
|
||||||
'Designs',
|
|
||||||
'manage_options',
|
|
||||||
'themes.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('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()
|
|
||||||
{
|
|
||||||
add_action('admin_menu', 'bdp_cleanup_menu');
|
|
||||||
bdp_add_menu_mein_lv();
|
|
||||||
}
|
|
51
icon.svg
@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
width="2000px" height="2000px" viewBox="0 0 2000 2000" style="enable-background:new 0 0 2000 2000;" xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<path style="fill:#1D4899;" d="M0,1000.023C0,447.935,447.769,0,1000.262,0C1552.209,0,2000,447.935,2000,1000.023
|
|
||||||
c0,552.054-447.791,999.977-999.738,999.977C447.769,2000,0,1552.077,0,1000.023"/>
|
|
||||||
<path style="fill:#FFCB04;" d="M1000.214,1797.409l-167.939-206.695c36.529-50.487,56.122-90.156,71.065-144.273
|
|
||||||
c7.235-25.315,13.948-69.101,13.45-78.887h-16.533c-6.215,60.333-39.708,148.484-85.014,204.097c0,0-65.468-78.839-73.225-88.614
|
|
||||||
c12.43-9.288,66.464-77.843,68.552-104.699c0.546-8.743-34.537-6.157-34.537-54.604c0-63.939,46.397-41.211,45.899-78.341
|
|
||||||
c-0.546-30.926-25.761-54.142-58.756-54.142c-30.979,0-43.835,34.544-42.791,56.229c1.542,37.082,1.044,51.033,1.044,55.113
|
|
||||||
c0,28.376-12.904,81.948-52.066,81.948c-17.506,0-45.852-46.858-257.697-304.064l248.921-297.99
|
|
||||||
c154.11,60.855,243.251,273.221,243.251,423.248v66.467h13.948c2.562-26.312,0.498-102.564,0.498-102.564
|
|
||||||
c-6.713-171.653-93.767-346.402-230.348-421.647l312.277-380.412l311.779,380.412c-132.952,80.382-227.762,264.407-226.742,433.462
|
|
||||||
c0,0-3.605,56.692,1.565,90.75h14.446c-4.128-37.629-1.044-78.887-1.044-78.887c2.538-155.129,76.237-343.271,242.753-411.327
|
|
||||||
l245.292,298.489c-211.799,256.661-243.75,304.064-261.326,304.064c-39.115,0-48.438-53.572-48.438-81.402
|
|
||||||
c0-4.626-0.498-18.577,1.044-55.659c1.044-21.14-11.86-56.229-42.744-56.229c-32.995,0-58.257,23.216-58.755,54.64
|
|
||||||
c-0.546,37.083,45.875,14.401,45.875,77.843c0,48.945-35.059,45.861-34.561,54.604c2.04,26.856,56.17,95.411,68.6,104.699
|
|
||||||
c-7.307,9.775-74.245,88.614-74.245,88.614c-43.289-58.233-70.639-136.575-77.85-204.097h-14.92c0,0,3.083,38.138,10.318,63.903
|
|
||||||
c14.397,54.153,29.888,99.967,66.464,159.257"/>
|
|
||||||
<path style="fill:#1D4899;" d="M832.772,1294.835h334.456c14.943,0,26.804,10.818,26.804,24.733
|
|
||||||
c0,13.939-11.86,24.758-26.804,24.758H832.772c-14.968,0-26.804-10.818-26.804-24.758
|
|
||||||
C805.969,1305.653,817.805,1294.835,832.772,1294.835"/>
|
|
||||||
<path style="fill:#1D4899;" d="M1000.214,425.277l262.347,318.536c-128.351,106.183-195.384,260.291-198.966,400.01
|
|
||||||
c0,0-4.128,81.426-1.542,128.33h-61.839"/>
|
|
||||||
<path style="fill:#1D4899;" d="M1000.214,1367.554h64.425c8.23,79.385,23.673,147.44,64.424,225.225l-128.849,154.689"/>
|
|
||||||
<path style="fill:#1D4899;" d="M663.718,828.94l-207.221,251.536c152.569,183.979,169.103,218.036,188.149,218.036
|
|
||||||
c9.773,0,16.486-15.493,16.486-25.221c0-45.908-53.655-102.611-53.655-152.601c0-47.451,44.38-87.144,87.147-87.144
|
|
||||||
c110.798,0,164.88,183.516,161.299,238.653h17.03c3.037-21.638,2.04-67.013,1.542-77.843
|
|
||||||
C867.76,1071.722,775.037,856.248,663.718,828.94"/>
|
|
||||||
<path style="fill:#1D4899;" d="M1336.33,828.94l207.103,251.536c-152.521,183.979-171.616,221.12-190.688,221.12
|
|
||||||
c-10.224,0-13.9-16.489-13.9-26.264c0-45.933,53.607-104.652,53.607-154.642c0-47.451-43.835-87.144-87.101-87.144
|
|
||||||
c-110.228,0-166.469,183.018-161.25,238.653h-17.031c-3.132-21.638-1.59-82.445-1.044-93.276
|
|
||||||
C1133.261,1046.977,1225.011,856.248,1336.33,828.94"/>
|
|
||||||
<path style="fill:#1D4899;" d="M853.955,1367.554h15.441c-2.586,38.684-38.664,135.044-49.457,130.418
|
|
||||||
c-11.409-3.618-11.409-7.248-12.382-14.438C806.016,1470.07,837.92,1410.805,853.955,1367.554"/>
|
|
||||||
<path style="fill:#1D4899;" d="M1148.157,1367.554h-15.537c3.132,38.684,38.19,131.912,49.552,129.92
|
|
||||||
c12.358-3.12,10.816-8.826,10.816-15.54C1191.945,1468.6,1164.643,1410.805,1148.157,1367.554"/>
|
|
||||||
<path style="fill:#FFCB04;" d="M812.61,169.624c77.328,0,145.855,22.741,187.604,76.313
|
|
||||||
c41.25-53.572,109.801-76.313,187.059-76.313c62.882,0,110.821,22.741,147.967,45.921
|
|
||||||
c47.938,29.894,104.061,104.629,114.877,190.729c3.132,26.785,0,69.017,0,69.017c-1.518,45.908-38.664,128.354-77.28,193.314
|
|
||||||
c-2.063,3.132,39.66-20.629,83.448-27.272c18.549-2.622,55.126-3.642,59.253-3.642c144.884,0,269.604,110.347,269.604,262.366
|
|
||||||
c0,61.876-20.162,140.217-74.742,180.42c50.477,44.283,74.742,112.387,74.742,187.11c0,137.606-109.303,256.696-257.198,260.326
|
|
||||||
c-26.852,1.044-88.146,7.687-196.879-75.803l302.553-371.634L999.716,315.523L366.36,1080.477l302.457,371.634
|
|
||||||
c-95.331,83.489-170.026,76.301-196.831,75.803c-138.621-1.044-256.653-122.72-256.653-260.326
|
|
||||||
c0-74.724,24.219-142.827,74.197-187.11c-54.58-40.203-74.197-118.544-74.197-180.42c0-152.02,124.247-262.366,269.012-262.366
|
|
||||||
c4.602,0,40.752,1.02,59.254,3.642c43.835,6.644,86.057,30.404,84.017,27.272c-39.186-64.96-76.261-147.406-77.802-193.314
|
|
||||||
c0,0-3.084-42.231,0-69.017c10.816-86.1,67.483-160.835,115.446-190.729C701.836,192.365,750.273,169.624,812.61,169.624"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,318 +0,0 @@
|
|||||||
<?php
|
|
||||||
ini_set('display_errors', '1');
|
|
||||||
ini_set('date.timezone', 'Europe/Berlin');
|
|
||||||
|
|
||||||
class Event
|
|
||||||
{
|
|
||||||
// phpcs:disable Generic.Arrays.DisallowLongArraySyntax
|
|
||||||
|
|
||||||
const HTML_TEMPLATE = '<p>%s: %s</p>';
|
|
||||||
|
|
||||||
public $category;
|
|
||||||
|
|
||||||
public $start = '';
|
|
||||||
public $startInt = 0;
|
|
||||||
|
|
||||||
public $end = '';
|
|
||||||
public $endInt = 0;
|
|
||||||
|
|
||||||
public $wholeDay = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/summary.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $summary;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/dtstart.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $dtstart;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/dtend.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $dtend;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/duration.html
|
|
||||||
*
|
|
||||||
* @var string|null
|
|
||||||
*/
|
|
||||||
public $duration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/dtstamp.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $dtstamp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When the event starts, represented as a timezone-adjusted string
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $dtstart_tz;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When the event ends, represented as a timezone-adjusted string
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $dtend_tz;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/uid.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $uid;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/created.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $created;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/lastModified.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $last_modified;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/description.html
|
|
||||||
*
|
|
||||||
* @var string|null
|
|
||||||
*/
|
|
||||||
public $description;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/location.html
|
|
||||||
*
|
|
||||||
* @var string|null
|
|
||||||
*/
|
|
||||||
public $location;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/sequence.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $sequence;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/status.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $status;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/transp.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $transp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/organizer.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $organizer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* https://www.kanzaki.com/docs/ical/attendee.html
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public $attendee;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Manage additional properties
|
|
||||||
*
|
|
||||||
* @var array<string, mixed>
|
|
||||||
*/
|
|
||||||
public $additionalProperties = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the Event object
|
|
||||||
*
|
|
||||||
* @param array $data
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __construct(array $data = array())
|
|
||||||
{
|
|
||||||
foreach ($data as $key => $value) {
|
|
||||||
if ($key == 'DTSTART_array' || $key == 'DTEND_array') {
|
|
||||||
|
|
||||||
$dateString = $value[1];
|
|
||||||
$dateTime = \DateTime::createFromFormat('Ymd\THis', $dateString);
|
|
||||||
if (false === $dateTime) {
|
|
||||||
$this->wholeDay = true;
|
|
||||||
$dateTime = \DateTime::createFromFormat('Ymd', $dateString);
|
|
||||||
}
|
|
||||||
|
|
||||||
$timeZone = 'Europe/Berlin';
|
|
||||||
if (isset($value[0]['TZID'])) {
|
|
||||||
$timeZone = $value[0]['TZID'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$dateTime->setTimezone(new \DateTimeZone($timeZone));
|
|
||||||
|
|
||||||
if ($key == 'DTSTART_array') {
|
|
||||||
$this->start = $dateTime->format('d.m.Y H:i:s');
|
|
||||||
$this->startInt = $dateTime->getTimestamp();
|
|
||||||
} else {
|
|
||||||
$this->end = $dateTime->format('d.m.Y H:i:s');
|
|
||||||
$this->endInt = $dateTime->getTimestamp();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$variable = self::snakeCase($key);
|
|
||||||
if (property_exists($this, $variable)) {
|
|
||||||
$this->{$variable} = $this->prepareData($value);
|
|
||||||
} elseif ($variable == 'categories') {
|
|
||||||
$this->category = $value;
|
|
||||||
} else {
|
|
||||||
$this->additionalProperties[$variable] = $this->prepareData($value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Magic getter method
|
|
||||||
*
|
|
||||||
* @param string $additionalPropertyName
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function __get($additionalPropertyName)
|
|
||||||
{
|
|
||||||
if (array_key_exists($additionalPropertyName, $this->additionalProperties)) {
|
|
||||||
return $this->additionalProperties[$additionalPropertyName];
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Magic isset method
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function __isset($name)
|
|
||||||
{
|
|
||||||
return is_null($this->$name) === false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepares the data for output
|
|
||||||
*
|
|
||||||
* @param mixed $value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
protected function prepareData($value)
|
|
||||||
{
|
|
||||||
if (is_string($value)) {
|
|
||||||
return stripslashes(trim(str_replace('\n', "\n", $value)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_array($value)) {
|
|
||||||
return array_map(function ($value) {
|
|
||||||
return $this->prepareData($value);
|
|
||||||
}, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getEventTime() {
|
|
||||||
$dateTime = explode(' ', $this->start);
|
|
||||||
|
|
||||||
if ($this->wholeDay) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($dateTime[1])) {
|
|
||||||
$time = explode(':', $dateTime[1]);
|
|
||||||
return $time[0] . ':' . $time[1] . ' Uhr';
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns Event data excluding anything blank
|
|
||||||
* within an HTML template
|
|
||||||
*
|
|
||||||
* @param string $html HTML template to use
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function printData($html = self::HTML_TEMPLATE)
|
|
||||||
{
|
|
||||||
$data = array(
|
|
||||||
'SUMMARY' => $this->summary,
|
|
||||||
'start' => $this->start,
|
|
||||||
'end' => $this->end,
|
|
||||||
'DTEND' => $this->dtend,
|
|
||||||
'DTSTART_TZ' => $this->dtstart_tz,
|
|
||||||
'DTEND_TZ' => $this->dtend_tz,
|
|
||||||
'DURATION' => $this->duration,
|
|
||||||
'DTSTAMP' => $this->dtstamp,
|
|
||||||
'UID' => $this->uid,
|
|
||||||
'CREATED' => $this->created,
|
|
||||||
'LAST-MODIFIED' => $this->last_modified,
|
|
||||||
'DESCRIPTION' => $this->description,
|
|
||||||
'LOCATION' => $this->location,
|
|
||||||
'SEQUENCE' => $this->sequence,
|
|
||||||
'STATUS' => $this->status,
|
|
||||||
'TRANSP' => $this->transp,
|
|
||||||
'ORGANISER' => $this->organizer,
|
|
||||||
'ATTENDEE(S)' => $this->attendee,
|
|
||||||
'CATEGORIES' => $this->category,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Remove any blank values
|
|
||||||
$data = array_filter($data);
|
|
||||||
|
|
||||||
$output = '';
|
|
||||||
foreach ($data as $key => $value) {
|
|
||||||
$output .= sprintf($html, $key, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the given input to snake_case
|
|
||||||
*
|
|
||||||
* @param string $input
|
|
||||||
* @param string $glue
|
|
||||||
* @param string $separator
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected static function snakeCase($input, $glue = '_', $separator = '-')
|
|
||||||
{
|
|
||||||
$inputSplit = preg_split('/(?<=[a-z])(?=[A-Z])/x', $input);
|
|
||||||
|
|
||||||
if ($inputSplit === false) {
|
|
||||||
return $input;
|
|
||||||
}
|
|
||||||
|
|
||||||
$inputSplit = implode($glue, $inputSplit);
|
|
||||||
$inputSplit = str_replace($separator, $glue, $inputSplit);
|
|
||||||
|
|
||||||
return strtolower($inputSplit);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
<div id="wpbody-content">
|
|
||||||
<h1>Über dieses Plugin</h1>
|
|
||||||
|
|
||||||
|
|
||||||
<form method="post" action="admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=security">
|
|
||||||
<div class="bdp_security_outer">
|
|
||||||
<fieldset class="bdp_security_inner">
|
|
||||||
<p>
|
|
||||||
Das Plugin Kompass (<span style="font-weight: bold;">Komp</span>onente zur<span style="font-weight: bold;">A</span>dministration, <span style="font-weight: bold;">S</span>icherung und <span style="font-weight: bold;">S</span>ynchronisierung) wurde entwickelt, um euch bei der Administration eurer Webseite zu helfen.<br />
|
|
||||||
Neben einer Vereinfachung der Navigation stellt das Plugin Sicherheitskomponenten bereit und installiert Plugins, die zur Absicherung eurer Webseite oder der Optimierung empfohlen werden.<br />
|
|
||||||
Die Plugin-Empfehlung und Optimierung der Einstellungen erfolgt auf Datenbasis, die vom LB IT des LV Sachsen verwaltwet wird.<br />
|
|
||||||
Auch bietet das Plugin Schnittstellen zur Integration und Darstellung von ausgesuchten externen Inhalten (eurem Stammes-Kalender im Wiki, der Veranstaltungsanmeldung auzf Mareike, ...) auf eurer Webseite.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Dieses Plugin wurde speziell für den Lanbdesverband Sachsen e.V. im Bund der Pfadfinderinnen und Pfadfinder e.V. ("BdP") entwickelt.<br />
|
|
||||||
Die Nutzung außerhalb des BdP bedarf der ausrücklichen Zustimmung des Authors.<br /><br />
|
|
||||||
Dies Plugin wurde speziell andie Anforderungen im LV Sachsen angepasst, innerhalb anderer Landesverbände kann es zu Kompatibilitätsproblemen kommen.
|
|
||||||
Sollte dies der Fall sein, so kontaktiert bitte den Author.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Die Urheberrechte aller extern nachgeladenen Plugins und Themes liegen weiterhin bei den Authoren der jeweiligen Komponenten.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p><span style="font-weight: bold;">Informationen zum Author:</span><br />
|
|
||||||
Thomas Günther, Aufbaugruppe Wilde Möhre im <a href="https://www.sachsen.pfadfinden.de/kontakt/gruppen-vor-ort/" target="_blank">LV Sachsen</a><br />
|
|
||||||
<a href="mailto:thomas.guenther@pfadfinden.de">E-Mail</a><br />
|
|
||||||
<a href="https://t.me/thomas_8611" target="_blank">Telegram</a>
|
|
||||||
|
|
||||||
|
|
||||||
</p>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/../../../../../wp-config.php';
|
|
||||||
require_once dirname(__FILE__) . '/../../../../../wp-includes/option.php';
|
|
||||||
require_once dirname(__FILE__) . '/../../../../../wp-includes/plugin.php';
|
|
||||||
require_once dirname(__FILE__) . '/../../../../../wp-includes/load.php';
|
|
||||||
require_once dirname(__FILE__) . '/../../../../../wp-includes/cache.php';
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/../../lib/ics-parser/Event.php';
|
|
||||||
require_once dirname(__FILE__) . '/../../lib/ics-parser/ICal.php';
|
|
||||||
require_once 'calendar.php';
|
|
||||||
$calendar = new Calendar();
|
|
||||||
echo $calendar->show();
|
|
@ -1,22 +0,0 @@
|
|||||||
// Funktion zum Laden des Kalenders über AJAX
|
|
||||||
function loadCalendar(month, year) {
|
|
||||||
// Erstelle ein XMLHttpRequest-Objekt
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
|
|
||||||
// Definiere die URL zum Laden des Kalenders (angepasst an deine Bedürfnisse)
|
|
||||||
var url = '/wp-content/plugins/bdp-kompass/modules/calendar/ajax-calendar.php?month=' + month + '&year=' + year;
|
|
||||||
|
|
||||||
// Öffne eine GET-Anfrage
|
|
||||||
xhr.open('GET', url, true);
|
|
||||||
|
|
||||||
// Setze die Callback-Funktion für die Antwort
|
|
||||||
xhr.onreadystatechange = function () {
|
|
||||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
||||||
// Aktualisiere den Inhalt des Container-Divs mit der Kalenderantwort
|
|
||||||
document.getElementById('calendarContainer').innerHTML = xhr.responseText;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Sende die Anfrage
|
|
||||||
xhr.send();
|
|
||||||
}
|
|
@ -1,217 +0,0 @@
|
|||||||
/*******************************Calendar Top Navigation*********************************/
|
|
||||||
div#calendar{
|
|
||||||
margin:0px auto;
|
|
||||||
padding:0px;
|
|
||||||
width: 100%;
|
|
||||||
font-family:Helvetica, "Times New Roman", Times, serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar div.box{
|
|
||||||
position:relative;
|
|
||||||
top:0px;
|
|
||||||
left:0px;
|
|
||||||
width:100%;
|
|
||||||
height:40px;
|
|
||||||
background-color: #ffcb04;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar div.header{
|
|
||||||
line-height:40px;
|
|
||||||
vertical-align:middle;
|
|
||||||
position:absolute;
|
|
||||||
left:11px;
|
|
||||||
top:0px;
|
|
||||||
width:100%;
|
|
||||||
height:40px;
|
|
||||||
text-align:center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar div.header a.prev,div#calendar div.header a.next{
|
|
||||||
position:absolute;
|
|
||||||
top:0px;
|
|
||||||
padding-right: 20px;
|
|
||||||
height: 17px;
|
|
||||||
display:block;
|
|
||||||
cursor:pointer;
|
|
||||||
text-decoration:none;
|
|
||||||
color:#3163bd;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar div.header span.title{
|
|
||||||
color:#3163bd;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size:18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div#calendar div.header a.prev{
|
|
||||||
left:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar div.header a.next{
|
|
||||||
right:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************Calendar Content Cells*********************************/
|
|
||||||
div#calendar div.box-content{
|
|
||||||
border-top:none;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
div#calendar ul.label{
|
|
||||||
float:left;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
margin-top:5px;
|
|
||||||
margin-left: 5px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#calendar ul.label li{
|
|
||||||
margin:0px;
|
|
||||||
padding:0px;
|
|
||||||
float:left;
|
|
||||||
list-style-type:none;
|
|
||||||
|
|
||||||
height:40px;
|
|
||||||
line-height:40px;
|
|
||||||
vertical-align:middle;
|
|
||||||
text-align:center;
|
|
||||||
color:#000;
|
|
||||||
font-size: 15px;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div#calendar ul.dates{
|
|
||||||
float:left;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
margin-left: 5px;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_day
|
|
||||||
{
|
|
||||||
padding-left: 5px;
|
|
||||||
color: #a0a0a0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bdp_cal_day td {
|
|
||||||
min-height: 100px;
|
|
||||||
}
|
|
||||||
.bdp_event_table {
|
|
||||||
width:95%;
|
|
||||||
}
|
|
||||||
.bdp_cal_day ul {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_day li {
|
|
||||||
list-style-type: none;
|
|
||||||
width:95%;
|
|
||||||
font-size: 8pt;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_red,
|
|
||||||
.bdp_cal_event_yellow,
|
|
||||||
.bdp_cal_event_blue,
|
|
||||||
.bdp_cal_event_green,
|
|
||||||
.bdp_cal_event_grey,
|
|
||||||
.bdp_cal_event_fuchsia,
|
|
||||||
.bdp_cal_event_orange
|
|
||||||
{
|
|
||||||
padding: 2px 4px;
|
|
||||||
border-radius: 5px;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_blue {
|
|
||||||
background-color: #1e88e5;
|
|
||||||
color: #FFFFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_green {
|
|
||||||
background-color: #00d084;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_red
|
|
||||||
{
|
|
||||||
.bdp_cal_event_entry;
|
|
||||||
background-color: #e91e63;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_yellow
|
|
||||||
{
|
|
||||||
.bdp_cal_event_entry;
|
|
||||||
background-color: #eeee88;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_orange
|
|
||||||
{
|
|
||||||
.bdp_cal_event_entry;
|
|
||||||
background-color: #ffa747;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bdp_cal_event_grey
|
|
||||||
{
|
|
||||||
.bdp_cal_event_entry;
|
|
||||||
background-color: #D5D5D5;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bdp_cal_event_fuchsia
|
|
||||||
{
|
|
||||||
.bdp_cal_event_entry;
|
|
||||||
background-color: #FF6EFF;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** overall width = width+padding-right**/
|
|
||||||
div#calendar ul.dates li{
|
|
||||||
margin:0px;
|
|
||||||
padding:0px;
|
|
||||||
padding-left: 2px;
|
|
||||||
padding-top: 10px;
|
|
||||||
vertical-align:bottom;
|
|
||||||
float:left;
|
|
||||||
list-style-type:none;
|
|
||||||
width:15%;
|
|
||||||
height:100px;
|
|
||||||
font-size:12pt;
|
|
||||||
background-color: #fff;
|
|
||||||
color:#000;
|
|
||||||
border-style: solid;
|
|
||||||
border-width:1px;
|
|
||||||
border-color: #add8e6;
|
|
||||||
}
|
|
||||||
|
|
||||||
:focus{
|
|
||||||
outline:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.clear{
|
|
||||||
clear:both;
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
<?php
|
|
||||||
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';
|
|
@ -1,315 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Calendar
|
|
||||||
{
|
|
||||||
public $ical;
|
|
||||||
private $categories = [];
|
|
||||||
|
|
||||||
public static function setup()
|
|
||||||
{
|
|
||||||
$pageName = 'Kalender';
|
|
||||||
$page_exists = get_page_by_path($pageName, OBJECT, 'page');
|
|
||||||
|
|
||||||
// Wenn die Seite nicht existiert, erstelle sie
|
|
||||||
if (!$page_exists) {
|
|
||||||
$page_id = wp_insert_post(array(
|
|
||||||
'post_title' => $pageName,
|
|
||||||
'post_content' => '{{calendar}}',
|
|
||||||
'post_status' => 'publish',
|
|
||||||
'post_type' => 'page',
|
|
||||||
));
|
|
||||||
|
|
||||||
update_option('bdp_calendar_source_url', 'https://wiki.sachsen.pfadfinden.de/rest/calendar-services/1.0/calendar/export/subcalendar/private/ff69f5a689391ac0d7f78a70189cfde7c48cb923.ics');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function printCalendar($content) {
|
|
||||||
// Der zu ersetzende String
|
|
||||||
$original_string = '{{calendar}}';
|
|
||||||
$calendar = new Calendar();
|
|
||||||
|
|
||||||
// Der Ersatzstring
|
|
||||||
$replacement_string = $calendar->show();
|
|
||||||
|
|
||||||
// Ersetze den Originalstring durch den Ersatzstring im Seiteninhalt
|
|
||||||
$content = str_replace($original_string, $replacement_string, $content);
|
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
|
|
||||||
$categories = get_option('bdp_calendar_categories', null);
|
|
||||||
if (null !== $categories) {
|
|
||||||
$categories = json_decode($categories, true);
|
|
||||||
} else {
|
|
||||||
$categories = [
|
|
||||||
'yellow' => 'Meute',
|
|
||||||
'blue' => 'Sippe',
|
|
||||||
'red' => 'Runde',
|
|
||||||
'green' => 'StaFü',
|
|
||||||
'fuchsia' => '',
|
|
||||||
'orange' => ''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($categories as $color => $keyname) {
|
|
||||||
$this->categories[$keyname] = $color;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$calendarUrl = get_option('bdp_calendar_source_url', 'https://wiki.sachsen.pfadfinden.de/rest/calendar-services/1.0/calendar/export/subcalendar/private/ff69f5a689391ac0d7f78a70189cfde7c48cb923.ics');
|
|
||||||
|
|
||||||
$this->ical = new \ICal('', array(
|
|
||||||
'defaultSpan' => 2, // Default value
|
|
||||||
'defaultTimeZone' => '',
|
|
||||||
'defaultWeekStart' => 'MO', // Default value
|
|
||||||
'disableCharacterReplacement' => false, // Default value
|
|
||||||
'filterDaysAfter' => null, // Default value
|
|
||||||
'filterDaysBefore' => null, // Default value
|
|
||||||
'httpUserAgent' => null, // Default value
|
|
||||||
'skipRecurrence' => false, // Default value
|
|
||||||
));
|
|
||||||
$this->ical->initUrl($calendarUrl);
|
|
||||||
$this->ical->events();
|
|
||||||
$this->naviHref = htmlentities($_SERVER['PHP_SELF']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************* PROPERTY ********************/
|
|
||||||
private $dayLabels = array("Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son");
|
|
||||||
|
|
||||||
private $monthLabels = ['', 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
|
|
||||||
|
|
||||||
private $currentYear = 0;
|
|
||||||
|
|
||||||
private $currentMonth = 0;
|
|
||||||
|
|
||||||
private $currentDay = 0;
|
|
||||||
|
|
||||||
private $currentDate = null;
|
|
||||||
|
|
||||||
private $daysInMonth = 0;
|
|
||||||
|
|
||||||
private $naviHref = null;
|
|
||||||
|
|
||||||
/********************* PUBLIC **********************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* print out the calendar
|
|
||||||
*/
|
|
||||||
public function show()
|
|
||||||
{
|
|
||||||
$year = null;
|
|
||||||
|
|
||||||
$month = null;
|
|
||||||
|
|
||||||
if (null == $year && isset($_GET['year'])) {
|
|
||||||
|
|
||||||
$year = $_GET['year'];
|
|
||||||
|
|
||||||
} else if (null == $year) {
|
|
||||||
|
|
||||||
$year = date("Y", time());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null == $month && isset($_GET['month'])) {
|
|
||||||
|
|
||||||
$month = $_GET['month'];
|
|
||||||
|
|
||||||
} else if (null == $month) {
|
|
||||||
|
|
||||||
$month = date("m", time());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->currentYear = $year;
|
|
||||||
|
|
||||||
$this->currentMonth = $month;
|
|
||||||
|
|
||||||
$this->daysInMonth = $this->_daysInMonth($month, $year);
|
|
||||||
|
|
||||||
$content = ' <div id="calendarContainer"><div id="calendar">' .
|
|
||||||
'<div class="box">' .
|
|
||||||
$this->_createNavi() .
|
|
||||||
'</div>' .
|
|
||||||
'<div class="box-content">' .
|
|
||||||
|
|
||||||
'<table style=" border-collapse: collapse; border-spacing: 0; table-layout: fixed;width: 100%;">
|
|
||||||
<tr>' . $this->_createLabels() . '</tr>';
|
|
||||||
|
|
||||||
|
|
||||||
$weeksInMonth = $this->_weeksInMonth($month, $year);
|
|
||||||
// Create weeks in a month
|
|
||||||
for ($i = 0; $i < $weeksInMonth; $i++) {
|
|
||||||
|
|
||||||
//Create days in a week
|
|
||||||
for ($j = 1; $j <= 7; $j++) {
|
|
||||||
if ($j % 7 == 1) {
|
|
||||||
$content .= '</tr><tr class="bdp_cal_day">';
|
|
||||||
}
|
|
||||||
$content .= $this->_showDay($i * 7 + $j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$content .= '</table></div>';
|
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getCssClass($category)
|
|
||||||
{
|
|
||||||
$cssClass = 'bdp_cal_event_' . ($this->categories[$category] ?? 'grey');
|
|
||||||
return $cssClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private function getEvent($date)
|
|
||||||
{
|
|
||||||
$eventString = '<ul>';
|
|
||||||
#echo '<pre>';
|
|
||||||
foreach ($this->ical->filterByDate($date) as $curEvent) {
|
|
||||||
$time = $curEvent->getEventTime() ?? 'Ganztags';
|
|
||||||
|
|
||||||
#print_r($curEvent);
|
|
||||||
$eventString .= '<li class="' . $this->getCssClass($curEvent->category) . '">' .
|
|
||||||
$time . ':<br />' .
|
|
||||||
$curEvent->summary . '</li>';
|
|
||||||
}
|
|
||||||
return $eventString;
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************* PRIVATE **********************/
|
|
||||||
/**
|
|
||||||
* create the li element for ul
|
|
||||||
*/
|
|
||||||
private function _showDay($cellNumber)
|
|
||||||
{
|
|
||||||
|
|
||||||
if ($this->currentDay == 0) {
|
|
||||||
|
|
||||||
$firstDayOfTheWeek = date('N', strtotime($this->currentYear . '-' . $this->currentMonth . '-01'));
|
|
||||||
|
|
||||||
if (intval($cellNumber) == intval($firstDayOfTheWeek)) {
|
|
||||||
|
|
||||||
$this->currentDay = 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($this->currentDay != 0) && ($this->currentDay <= $this->daysInMonth)) {
|
|
||||||
$date =
|
|
||||||
str_pad($this->currentDay, 2, '0', STR_PAD_LEFT) . '.' .
|
|
||||||
str_pad($this->currentMonth, 2, '0', STR_PAD_LEFT) . '.' .
|
|
||||||
$this->currentYear;
|
|
||||||
|
|
||||||
$this->currentDate = date('Y-m-d', strtotime($this->currentYear . '-' . $this->currentMonth . '-' . ($this->currentDay)));
|
|
||||||
|
|
||||||
$cellContent = '<span class="bdp_cal_day">' . $this->currentDay . '</span>' . $this->getEvent($date);
|
|
||||||
|
|
||||||
$this->currentDay++;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$this->currentDate = null;
|
|
||||||
|
|
||||||
$cellContent = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return '<td style="padding-top: 5px; border-color: #a0a0a0; height: 120px; border-style: solid; border-width:1px; vertical-align: top;">' . $cellContent . '</td>';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* create navigation
|
|
||||||
*/
|
|
||||||
private function _createNavi()
|
|
||||||
{
|
|
||||||
|
|
||||||
$nextMonth = $this->currentMonth == 12 ? 1 : intval($this->currentMonth) + 1;
|
|
||||||
|
|
||||||
$nextYear = $this->currentMonth == 12 ? intval($this->currentYear) + 1 : $this->currentYear;
|
|
||||||
|
|
||||||
$preMonth = $this->currentMonth == 1 ? 12 : intval($this->currentMonth) - 1;
|
|
||||||
|
|
||||||
$preYear = $this->currentMonth == 1 ? intval($this->currentYear) - 1 : $this->currentYear;
|
|
||||||
|
|
||||||
return
|
|
||||||
'<div class="header">' .
|
|
||||||
'<a class="prev" href="javascript:void(0);" onclick="loadCalendar(' . $preMonth . ',' . $preYear . ');"><< Vorheriger Monat</a>' .
|
|
||||||
'<span class="title">' . $this->monthLabels[(int)date('m', strtotime($this->currentYear . '-' . $this->currentMonth . '-1'))] . ' ' . date('Y', strtotime($this->currentYear . '-' . $this->currentMonth . '-1')) . '</span>' .
|
|
||||||
'<a class="next" href="javascript:void(0);" onclick="loadCalendar(' . $nextMonth . ',' . $nextYear . ');">Nächster Monat >></a>' .
|
|
||||||
'</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* create calendar week labels
|
|
||||||
*/
|
|
||||||
private function _createLabels()
|
|
||||||
{
|
|
||||||
|
|
||||||
$content = '';
|
|
||||||
|
|
||||||
foreach ($this->dayLabels as $index => $label) {
|
|
||||||
|
|
||||||
$content .= '<td style="max-width: 14.287%;">' . $label . '</td>';
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $content;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calculate number of weeks in a particular month
|
|
||||||
*/
|
|
||||||
private function _weeksInMonth($month = null, $year = null)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (null == ($year)) {
|
|
||||||
$year = date("Y", time());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null == ($month)) {
|
|
||||||
$month = date("m", time());
|
|
||||||
}
|
|
||||||
|
|
||||||
// find number of days in this month
|
|
||||||
$daysInMonths = $this->_daysInMonth($month, $year);
|
|
||||||
|
|
||||||
$numOfweeks = ($daysInMonths % 7 == 0 ? 0 : 1) + intval($daysInMonths / 7);
|
|
||||||
|
|
||||||
$monthEndingDay = date('N', strtotime($year . '-' . $month . '-' . $daysInMonths));
|
|
||||||
|
|
||||||
$monthStartDay = date('N', strtotime($year . '-' . $month . '-01'));
|
|
||||||
|
|
||||||
if ($monthEndingDay < $monthStartDay) {
|
|
||||||
|
|
||||||
$numOfweeks++;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $numOfweeks;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* calculate number of days in a particular month
|
|
||||||
*/
|
|
||||||
private function _daysInMonth($month = null, $year = null)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (null == ($year))
|
|
||||||
$year = date("Y", time());
|
|
||||||
|
|
||||||
if (null == ($month))
|
|
||||||
$month = date("m", time());
|
|
||||||
|
|
||||||
return date('t', strtotime($year . '-' . $month . '-01'));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,91 +0,0 @@
|
|||||||
<?php
|
|
||||||
echo '<div id="wpbody-content">';
|
|
||||||
echo '<h1>Kalender-Einstellungen</h1>';
|
|
||||||
if (isset($_POST['submit'])) {
|
|
||||||
echo '<div id="bdp_success">Die Einstellungen wurden gespeichert.</div>';
|
|
||||||
update_option('bdp_calendar_categories', json_encode($_POST['category']));
|
|
||||||
update_option('bdp_calendar_source_url', $_POST['ical_url']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$categories = get_option('bdp_calendar_categories', null);
|
|
||||||
if (null !== $categories) {
|
|
||||||
$categories = json_decode($categories, true);
|
|
||||||
} else {
|
|
||||||
$categories = [
|
|
||||||
'yellow' => 'Meute',
|
|
||||||
'blue' => 'Sippe',
|
|
||||||
'red' => 'Runde',
|
|
||||||
'green' => 'Stammesführung',
|
|
||||||
'fuchsia' => '',
|
|
||||||
'orange' => ''
|
|
||||||
];
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<form method="post" action="admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=calendar">
|
|
||||||
<div class="bdp_cal_outer">
|
|
||||||
<fieldset class="bdp_cal_inner">
|
|
||||||
<legend>Datenabfrage</legend>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr style="vertical-align: top;">
|
|
||||||
<td>Kalender-URL:</td>
|
|
||||||
<td><input class="long_text" type="text" name="ical_url" id="ical_url" required
|
|
||||||
value = "<?php echo get_option('bdp_calendar_source_url', ''); ?>"
|
|
||||||
><br />
|
|
||||||
<label style="font-weight: normal; color: #a0a0a0; font-style: italic">
|
|
||||||
Bitte gib hier die URL zur .ics - Datei eures Kalenbders im Wiki ein.
|
|
||||||
</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset class="bdp_cal_inner">
|
|
||||||
<legend>Labels</legend>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Gelb:</td>
|
|
||||||
<td><input type="text" name="category[yellow]" value="<?php echo $categories['yellow']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_yellow"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Blau:</td>
|
|
||||||
<td><input type="text" name="category[blue]" value="<?php echo $categories['blue']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_blue"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Rot:</td>
|
|
||||||
<td><input type="text" name="category[red]" value="<?php echo $categories['red']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_red"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Grün:</td>
|
|
||||||
<td><input type="text" name="category[green]" value="<?php echo $categories['green']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_green"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Fuchsia:</td>
|
|
||||||
<td><input type="text" name="category[fuchsia]" value="<?php echo $categories['fuchsia']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_fuchsia"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Orange:</td>
|
|
||||||
<td><input type="text" name="category[orange]" value="<?php echo $categories['orange']; ?>" /></td>
|
|
||||||
<td class="bdp_cal_event_orange"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Grau:</td>
|
|
||||||
<td>Standard</td>
|
|
||||||
<td class="bdp_cal_event_grey"></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</fieldset>
|
|
||||||
<input class="bdp_submit" type="submit" name="submit" value="Einstellungen speichern">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,55 +0,0 @@
|
|||||||
<?php
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace BDP_LV_Sachsen\WordpressHelper\DependenCyChecker;
|
|
||||||
|
|
||||||
class DependencyChecker
|
|
||||||
{
|
|
||||||
const depenedencies = ['pfadfinden-theme-updater' ];
|
|
||||||
|
|
||||||
public static function init() : void
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
foreach(self::depenedencies as $class) {
|
|
||||||
$file = ABSPATH . '/wp-content/plugins/bdp-kompass/plugins/' . $class;
|
|
||||||
|
|
||||||
system('cp -r ' . $file . '* ' . ABSPATH . 'wp-content/plugins/' . $class);
|
|
||||||
|
|
||||||
$plugin = 'pfadfinden-theme-updater/pfadfinden-theme-updater.php';
|
|
||||||
$pluginPath = ABSPATH . '/wp-content/plugins/' . $class . '/' . $class . '.php';
|
|
||||||
|
|
||||||
|
|
||||||
activate_plugin($pluginPath);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function recursive_copy($source, $destination) {
|
|
||||||
// Überprüfe, ob das Quellverzeichnis existiert
|
|
||||||
if (!file_exists($source)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Erstelle das Zielpfad, wenn es nicht existiert
|
|
||||||
if (!is_dir($destination)) {
|
|
||||||
mkdir($destination, 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Durchlaufe alle Dateien und Unterverzeichnisse im Quellverzeichnis
|
|
||||||
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
|
|
||||||
|
|
||||||
foreach ($iterator as $item) {
|
|
||||||
if ($item->isDir()) {
|
|
||||||
// Wenn es ein Verzeichnis ist, erstelle es im Zielverzeichnis
|
|
||||||
mkdir($destination . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
|
|
||||||
} else {
|
|
||||||
// Wenn es eine Datei ist, kopiere sie in das Zielverzeichnis
|
|
||||||
copy($item, $destination . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Bdp\Modules\Security;
|
|
||||||
|
|
||||||
|
|
||||||
use ZipArchive;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Security
|
|
||||||
{
|
|
||||||
public const required_security_plugins = [
|
|
||||||
'wps_hide_login' => ['downloadUrl' => 'https://downloads.wordpress.org/plugin/wps-hide-login.1.9.10.zip'],
|
|
||||||
'limit-login-attempts-reloaded' => ['downloadUrl' => 'https://downloads.wordpress.org/plugin/limit-login-attempts-reloaded.2.25.27.zip']];
|
|
||||||
|
|
||||||
|
|
||||||
public const delete_plugins = [
|
|
||||||
'akismet/akismet.php',
|
|
||||||
'hello.php'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static function setup()
|
|
||||||
{
|
|
||||||
self::deletePlugins();
|
|
||||||
foreach (self::required_security_plugins as $pluginSlug => $pluginData) {
|
|
||||||
if (!is_dir(WP_PLUGIN_DIR . '/' . $pluginSlug)) {
|
|
||||||
self::installSecurityPlugin($pluginSlug, $pluginData['downloadUrl']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$loginUrl = get_option('whl_page', 'bdp_login');
|
|
||||||
update_option('whl_page', $loginUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function deletePlugins() {
|
|
||||||
deactivate_plugins(self::delete_plugins);
|
|
||||||
delete_plugins(self::delete_plugins);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function installSecurityPlugin(string $pluginSlug, string $downloadUrl) : bool
|
|
||||||
{
|
|
||||||
$ch = curl_init();
|
|
||||||
$source = $downloadUrl;
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $source);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
||||||
$data = curl_exec ($ch);
|
|
||||||
curl_close ($ch);
|
|
||||||
|
|
||||||
$destination = WP_PLUGIN_DIR . '/' . $pluginSlug . '.zip';
|
|
||||||
$file = fopen($destination, "w+");
|
|
||||||
fputs($file, $data);
|
|
||||||
fclose($file);
|
|
||||||
|
|
||||||
$zip = new ZipArchive();
|
|
||||||
$zip->open($destination);
|
|
||||||
$zip->extractTo(WP_PLUGIN_DIR);
|
|
||||||
$zip->close();
|
|
||||||
unlink($destination);
|
|
||||||
|
|
||||||
$pluginInfos = get_plugins( '/'.$pluginSlug );
|
|
||||||
$installfile = $pluginSlug . '/';
|
|
||||||
if( ! empty( $pluginInfos ) ) {
|
|
||||||
foreach ($pluginInfos as $file => $info) :
|
|
||||||
$installfile .= $file;
|
|
||||||
endforeach;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$result = activate_plugin($installfile);
|
|
||||||
|
|
||||||
return $result === null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
echo '<div id="wpbody-content">';
|
|
||||||
echo '<h1>Installation erfolgreich!</h1>';
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
|
||||||
<form method="post" action="admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=security">
|
|
||||||
<div class="bdp_security_outer">
|
|
||||||
<fieldset class="bdp_security_inner">
|
|
||||||
<span style="font-weight: bold;">Herzlichen Glückwunsch!</span><br /><br />
|
|
||||||
Das Plugin Kompass wurde soeben erfolgreich installiert.<br />Im Hintergrund wurden bereits erste Optimierungen an der Webseite vorgenommen, so wurde die Navcigation vereinfacht, und falls dies noch nicht der Fall war, wurde die Webseite mit einer suchmaschinenfreundlichen Struktur ausgestattet.<br />
|
|
||||||
Es wurden bereits erste sicherheitsrelevante Plugins installiert. Du findest die Übersicht, welchePlugins aktiv sind, jederzeit <a href="plugins.php">hier</a><br /><br />
|
|
||||||
Über die Kalender-Einstellungen kannst du den Kalender deines Stammes aus dem Wiki auf deiner Webseite einbinden, dieser erscheint dann automatisch unt er der Adresse <a href="<?php echo get_site_url() . '/kalender'; ?>"><?php echo get_site_url() . '/kalender'; ?></a><br /><br />
|
|
||||||
Aus Sicherheitsgründen empfiehlt es sich, die Adresse zum Dashboard deiner Webseite ztu verschleiern. Ein hierfür notwendiges Plugin wurde automatisch installiert. Um dich zukünftig auf deiner Webseite einzuloggen, nutze folgende URL:<br />
|
|
||||||
<label><?php echo get_site_url(); ?>/</label><input style="width: 250px;" class="long_text" type="text" name="login_url" id="login_url" required
|
|
||||||
value = "<?php echo get_option('whl_page', 'bdp_login'); ?>">
|
|
||||||
<br /><input class="bdp_submit" type="submit" name="submit" value="Verändere diese URL noch einmal"><br /><br />
|
|
||||||
Falls du zu diesem Plugin Anmerkungen oder Fragen hast, wende dich bitte an den LB IT.
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/classes/Security.class.php';
|
|
@ -1,9 +0,0 @@
|
|||||||
<?php
|
|
||||||
if (!isset($_REQUEST['loadmodule']) ||
|
|
||||||
!is_file(BDP_LV_PLUGIN_DIR . 'modules/' . $_REQUEST['loadmodule'] . '/internal/index.php')) {
|
|
||||||
require_once BDP_LV_PLUGIN_DIR . 'modules/about/internal/index.php';
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
require_once BDP_LV_PLUGIN_DIR . 'modules/' . $_REQUEST['loadmodule'] . '/internal/index.php';
|
|
@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Bdp\Modules\Security;
|
|
||||||
|
|
||||||
|
|
||||||
use ZipArchive;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Security
|
|
||||||
{
|
|
||||||
public const required_security_plugins = [
|
|
||||||
'wps_hide_login' => ['downloadUrl' => 'https://downloads.wordpress.org/plugin/wps-hide-login.1.9.10.zip'],
|
|
||||||
'limit-login-attempts-reloaded' => ['downloadUrl' => 'https://downloads.wordpress.org/plugin/limit-login-attempts-reloaded.2.25.27.zip']];
|
|
||||||
|
|
||||||
|
|
||||||
public const delete_plugins = [
|
|
||||||
'akismet/akismet.php',
|
|
||||||
'hello.php'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static function setup()
|
|
||||||
{
|
|
||||||
self::deletePlugins();
|
|
||||||
foreach (self::required_security_plugins as $pluginSlug => $pluginData) {
|
|
||||||
if (!is_dir(WP_PLUGIN_DIR . '/' . $pluginSlug)) {
|
|
||||||
self::installSecurityPlugin($pluginSlug, $pluginData['downloadUrl']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$loginUrl = get_option('whl_page', 'bdp_login');
|
|
||||||
update_option('whl_page', $loginUrl);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function deletePlugins() {
|
|
||||||
deactivate_plugins(self::delete_plugins);
|
|
||||||
delete_plugins(self::delete_plugins);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function installSecurityPlugin(string $pluginSlug, string $downloadUrl) : bool
|
|
||||||
{
|
|
||||||
$ch = curl_init();
|
|
||||||
$source = $downloadUrl;
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $source);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
||||||
$data = curl_exec ($ch);
|
|
||||||
curl_close ($ch);
|
|
||||||
|
|
||||||
$destination = WP_PLUGIN_DIR . '/' . $pluginSlug . '.zip';
|
|
||||||
$file = fopen($destination, "w+");
|
|
||||||
fputs($file, $data);
|
|
||||||
fclose($file);
|
|
||||||
|
|
||||||
$zip = new ZipArchive();
|
|
||||||
$zip->open($destination);
|
|
||||||
$zip->extractTo(WP_PLUGIN_DIR);
|
|
||||||
$zip->close();
|
|
||||||
unlink($destination);
|
|
||||||
|
|
||||||
$pluginInfos = get_plugins( '/'.$pluginSlug );
|
|
||||||
$installfile = $pluginSlug . '/';
|
|
||||||
if( ! empty( $pluginInfos ) ) {
|
|
||||||
foreach ($pluginInfos as $file => $info) :
|
|
||||||
$installfile .= $file;
|
|
||||||
endforeach;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$result = activate_plugin($installfile);
|
|
||||||
|
|
||||||
return $result === null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
echo '<div class="health-check-body health-check-debug-tab hide-if-no-js">';
|
|
||||||
echo '<h1>Erweiterte Sicherheitseinstellungen</h1>';
|
|
||||||
if (isset($_POST['submit'])) {
|
|
||||||
echo '<div id="bdp_success">Die Einstellungen wurden gespeichert.</div>';
|
|
||||||
update_option('whl_page', $_POST['login_url']);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<form method="post" action="admin.php?page=bdp-kompass%2Fmodules%2Findex.php&loadmodule=security">
|
|
||||||
<div class="bdp_security_outer">
|
|
||||||
<fieldset class="bdp_security_inner">
|
|
||||||
<legend>Wordpress-Login</legend>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr style="vertical-align: top;">
|
|
||||||
<td>Login-URL:</td>
|
|
||||||
<td> <label><?php echo get_site_url(); ?>/</label><input style="width: 100px;" class="long_text" type="text" name="login_url" id="login_url" required
|
|
||||||
value = "<?php echo get_option('whl_page', 'bdp_login'); ?>"
|
|
||||||
>/<br />
|
|
||||||
<label style="font-weight: normal; color: #a0a0a0; font-style: italic">
|
|
||||||
Du erreichst das Dashboard deiner Seite zukünftig nur noch unter dieser URL
|
|
||||||
</label>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</fieldset>
|
|
||||||
<input class="bdp_submit" type="submit" name="submit" value="Einstellungen speichern">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
function wp_example_site_health_navigation_tabs( $tabs ) {
|
|
||||||
// translators: Tab heading for Site Health navigation.
|
|
||||||
$tabs['loginurl'] = esc_html_x( 'Login-URL', 'Site Health', 'text-domain' );
|
|
||||||
|
|
||||||
return $tabs;
|
|
||||||
}
|
|
||||||
add_filter( 'site_health_navigation_tabs', 'wp_example_site_health_navigation_tabs' );
|
|
||||||
|
|
||||||
|
|
||||||
function wp_example_site_health_tab_content($tab)
|
|
||||||
{
|
|
||||||
// Do nothing if this is not our tab.
|
|
||||||
if ('loginurl' === $tab) {
|
|
||||||
require_once dirname(__FILE__) . '/internal/index.php';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
add_action('site_health_tab_content', 'wp_example_site_health_tab_content');
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/classes/Security.class.php';
|
|
||||||
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Bdp\Modules\Seo;
|
|
||||||
class Seo
|
|
||||||
{
|
|
||||||
public static function setup()
|
|
||||||
{
|
|
||||||
if (get_option('permalink_structure') === '') {
|
|
||||||
update_option('permalink_structure', '/%postname%/');
|
|
||||||
flush_rewrite_rules();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once dirname(__FILE__) . '/classes/Seo.class.php';
|
|
@ -1,97 +0,0 @@
|
|||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: pfadfinden-theme-updater\n"
|
|
||||||
"POT-Creation-Date: 2015-08-26 01:49+0100\n"
|
|
||||||
"PO-Revision-Date: 2015-08-26 02:02+0100\n"
|
|
||||||
"Last-Translator: Philipp Cordes <philipp.cordes@pfadfinden.de>\n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: de_DE\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Generator: Poedit 1.6.10\n"
|
|
||||||
"X-Poedit-Basepath: ..\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
|
||||||
"X-Poedit-KeywordsList: __;_e;_x;esc_html_e;esc_html__;esc_attr_e;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2;\n"
|
|
||||||
"X-Poedit-SearchPath-0: .\n"
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:70
|
|
||||||
msgid ""
|
|
||||||
"Couldn’t load required library “shy-wordpress”. Reinstalling the plugin may "
|
|
||||||
"solve this problem."
|
|
||||||
msgstr ""
|
|
||||||
"Konnte die erforderliche Bibliothek „shy-wordpress“ nicht laden. "
|
|
||||||
"Neuinstallation des Plugins sollte das Problem beheben."
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:81
|
|
||||||
msgid "The plugin is incomplete. Reinstalling it may solve this problem."
|
|
||||||
msgstr ""
|
|
||||||
"Das Plugin ist unvollständig. Neuinstallation sollte das Problem beheben."
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:96
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"You need at least PHP 5.4 to use Pfadfinden Theme Updater. Your are using %s."
|
|
||||||
msgstr ""
|
|
||||||
"Du brauchst mindestens PHP 5.4, um den Pfadfinden-Theme-Updater zu benutzen. "
|
|
||||||
"Aktuell benutzt du PHP %s."
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:104
|
|
||||||
msgid "Pfadfinden Theme Updater"
|
|
||||||
msgstr "Pfadfinden-Theme-Updater"
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:105
|
|
||||||
msgid ""
|
|
||||||
"Adds the Pfadfinden theme repository to your choice of themes. Requires an "
|
|
||||||
"API key."
|
|
||||||
msgstr ""
|
|
||||||
"Fügt den Pfadfinden-Theme-Katalog zu Deiner Auswahl an Themes hinzu. "
|
|
||||||
"Benötigt einen API-Schlüssel."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:81
|
|
||||||
msgid "Your theme repository query is too long."
|
|
||||||
msgstr "Deine Anfrage an den Theme-Katalog ist zu lang."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:114
|
|
||||||
msgid "Unknown theme repository server error, no message attached."
|
|
||||||
msgstr ""
|
|
||||||
"Unbekannter Theme-Katalog-Serverfehler, keine Fehlerbeschreibung "
|
|
||||||
"mitgeschickt."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:186
|
|
||||||
msgid "Ambiguous result for single theme information call."
|
|
||||||
msgstr "Mehrere Ergebnisse für Abfrage nach Informationen zu einem Theme."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:69
|
|
||||||
msgid "Pfadfinden Theme Updater Settings"
|
|
||||||
msgstr "Pfadfinden-Theme-Updater-Einstellungen"
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:74
|
|
||||||
msgid "Pfadfinden Updater"
|
|
||||||
msgstr "Pfadfinden-Updater"
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:84
|
|
||||||
msgid "API Key"
|
|
||||||
msgstr "API-Schlüssel"
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:89
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:116
|
|
||||||
msgid "An API key consists of 10 alphanumeric characters."
|
|
||||||
msgstr "Ein API-Schlüssel besteht aus zehn alphanumerischen Zeichen."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:96
|
|
||||||
msgid "Keep Settings"
|
|
||||||
msgstr "Einstellungen merken"
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:97
|
|
||||||
msgid "Don’t delete settings when uninstalling the plugin."
|
|
||||||
msgstr "Einstellungen nicht löschen, wenn das Plugin deinstalliert wird."
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:107
|
|
||||||
msgid "Just testing? Try APITESTKEY."
|
|
||||||
msgstr ""
|
|
||||||
"Nur Ausprobieren? Nimm APITESTKEY. Aber BdP-Themes gibt es damit nicht…"
|
|
||||||
|
|
||||||
#~ msgid "Activated Features"
|
|
||||||
#~ msgstr "Aktivierte Funktionen"
|
|
@ -1,84 +0,0 @@
|
|||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: pfadfinden-theme-updater\n"
|
|
||||||
"POT-Creation-Date: 2015-08-26 01:49+0100\n"
|
|
||||||
"PO-Revision-Date: 2015-08-26 01:50+0100\n"
|
|
||||||
"Last-Translator: Philipp Cordes <philipp.cordes@pfadfinden.de>\n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: de_DE\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Generator: Poedit 1.6.10\n"
|
|
||||||
"X-Poedit-Basepath: ..\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
||||||
"X-Poedit-SourceCharset: UTF-8\n"
|
|
||||||
"X-Poedit-KeywordsList: __;_e;_x;esc_html_e;esc_html__;esc_attr_e;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2;\n"
|
|
||||||
"X-Poedit-SearchPath-0: .\n"
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:70
|
|
||||||
msgid ""
|
|
||||||
"Couldn’t load required library “shy-wordpress”. Reinstalling the plugin may "
|
|
||||||
"solve this problem."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:81
|
|
||||||
msgid "The plugin is incomplete. Reinstalling it may solve this problem."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:96
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"You need at least PHP 5.4 to use Pfadfinden Theme Updater. Your are using %s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:104
|
|
||||||
msgid "Pfadfinden Theme Updater"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pfadfinden-theme-updater.php:105
|
|
||||||
msgid ""
|
|
||||||
"Adds the Pfadfinden theme repository to your choice of themes. Requires an "
|
|
||||||
"API key."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:81
|
|
||||||
msgid "Your theme repository query is too long."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:114
|
|
||||||
msgid "Unknown theme repository server error, no message attached."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeRepository.php:186
|
|
||||||
msgid "Ambiguous result for single theme information call."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:69
|
|
||||||
msgid "Pfadfinden Theme Updater Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:74
|
|
||||||
msgid "Pfadfinden Updater"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:84
|
|
||||||
msgid "API Key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:89
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:116
|
|
||||||
msgid "An API key consists of 10 alphanumeric characters."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:96
|
|
||||||
msgid "Keep Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:97
|
|
||||||
msgid "Don’t delete settings when uninstalling the plugin."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Pfadfinden/WordPress/ThemeUpdaterSettings.php:107
|
|
||||||
msgid "Just testing? Try APITESTKEY."
|
|
||||||
msgstr ""
|
|
@ -1,149 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
Plugin Name: Pfadfinden Theme Updater
|
|
||||||
Plugin URI: http://lab.hanseaten-bremen.de/themes/
|
|
||||||
Description: Adds the Pfadfinden theme repository to your choice of themes. Requires an API key.
|
|
||||||
Version: 0.2
|
|
||||||
Author: Philipp Cordes
|
|
||||||
Text Domain: pfadfinden-theme-updater
|
|
||||||
Domain Path: /languages/
|
|
||||||
License: GPLv2 or later
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
|
||||||
die( 'I’m a plugin.' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load localized strings for the plugin.
|
|
||||||
*
|
|
||||||
* @see http://geertdedeckere.be/article/loading-wordpress-language-files-the-right-way
|
|
||||||
*/
|
|
||||||
function pfadfinden_theme_updater_load_textdomain()
|
|
||||||
{
|
|
||||||
remove_action( 'init', __FUNCTION__ );
|
|
||||||
|
|
||||||
$domain = 'pfadfinden-theme-updater';
|
|
||||||
// Filter known from load_plugin_textdomain().
|
|
||||||
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
|
|
||||||
|
|
||||||
load_textdomain( $domain, WP_LANG_DIR . "/pfadfinden-theme-updater/$domain-$locale.mo" );
|
|
||||||
load_plugin_textdomain( $domain, false, basename( __DIR__ ) . '/languages/' );
|
|
||||||
}
|
|
||||||
add_action( 'init', 'pfadfinden_theme_updater_load_textdomain' );
|
|
||||||
|
|
||||||
|
|
||||||
if ( ! function_exists( 'trigger_pfadfinden_plugin_error' ) ) {
|
|
||||||
/**
|
|
||||||
* Show an error message.
|
|
||||||
*
|
|
||||||
* @see http://www.squarepenguin.com/wordpress/?p=6 Inspiration
|
|
||||||
*
|
|
||||||
* @param string $message
|
|
||||||
* @param int $type optional
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function trigger_pfadfinden_plugin_error( $message, $type = 0 )
|
|
||||||
{
|
|
||||||
if ( isset( $_GET['action'] ) && 'error_scrape' === $_GET['action'] ) {
|
|
||||||
echo $message;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $type ) {
|
|
||||||
$type = E_USER_WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
return trigger_error( $message, $type );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check for suitable environment
|
|
||||||
if ( defined( 'PHP_VERSION_ID' ) && PHP_VERSION_ID >= 50400 ) {
|
|
||||||
// If we’re the first user of the library, use the bundled one
|
|
||||||
if ( ! class_exists( 'Shy\WordPress\Plugin' ) ) {
|
|
||||||
pfadfinden_theme_updater_load_textdomain();
|
|
||||||
if ( ! include_once __DIR__ . '/use/shy-wordpress/src/autoloader.php' ) {
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
__( 'Couldn’t load required library “shy-wordpress”. Reinstalling the plugin may solve this problem.', 'pfadfinden-theme-updater' ),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register our autoloader
|
|
||||||
if ( ! include_once __DIR__ . '/src/autoloader.php' ) {
|
|
||||||
pfadfinden_theme_updater_load_textdomain();
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
__( 'The plugin is incomplete. Reinstalling it may solve this problem.', 'pfadfinden-theme-updater' ),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PHP < 5.3 issues a parse error if we instance the class here
|
|
||||||
return require_once __DIR__ . '/startup.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Display error message
|
|
||||||
pfadfinden_theme_updater_load_textdomain();
|
|
||||||
trigger_pfadfinden_plugin_error(
|
|
||||||
sprintf(
|
|
||||||
__( 'You need at least PHP 5.4 to use Pfadfinden Theme Updater. Your are using %s.', 'pfadfinden-theme-updater' ),
|
|
||||||
PHP_VERSION
|
|
||||||
),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
|
|
||||||
if ( false ) {
|
|
||||||
// Dummy calls for translation to include metadata in translation files
|
|
||||||
__( 'Pfadfinden Theme Updater', 'pfadfinden-theme-updater' );
|
|
||||||
__( 'Adds the Pfadfinden theme repository to your choice of themes. Requires an API key.', 'pfadfinden-theme-updater' );
|
|
||||||
}
|
|
||||||
|
|
||||||
class Nginx {
|
|
||||||
|
|
||||||
private $plugin = 'nginx-helper/nginx-helper.php';
|
|
||||||
private $pluginPath = ABSPATH . 'wp-content/plugins/nginx-helper/nginx-helper.php';
|
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
if(is_readable($this->pluginPath)) {
|
|
||||||
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
|
|
||||||
$this->activatePlugin();
|
|
||||||
$this->loadCss();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function activatePlugin() {
|
|
||||||
if( is_plugin_active( $this->plugin ) && get_option('cloudpit_nginx_activated_once') == 1 ) {
|
|
||||||
//if the plugin is active already and our option is set, do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !is_plugin_active( $this->plugin ) && get_option('cloudpit_nginx_activated_once') == 1 ) {
|
|
||||||
//if the plugin is deactivated on purpuse after installation, do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
activate_plugin($this->pluginPath);
|
|
||||||
|
|
||||||
$options = 'a:23:{s:12:"enable_purge";s:1:"1";s:12:"cache_method";s:14:"enable_fastcgi";s:12:"purge_method";s:11:"get_request";s:10:"enable_map";N;s:10:"enable_log";N;s:9:"log_level";s:4:"INFO";s:12:"log_filesize";s:1:"5";s:12:"enable_stamp";N;s:22:"purge_homepage_on_edit";s:1:"1";s:21:"purge_homepage_on_del";s:1:"1";s:21:"purge_archive_on_edit";s:1:"1";s:20:"purge_archive_on_del";s:1:"1";s:28:"purge_archive_on_new_comment";N;s:32:"purge_archive_on_deleted_comment";N;s:17:"purge_page_on_mod";s:1:"1";s:25:"purge_page_on_new_comment";s:1:"1";s:29:"purge_page_on_deleted_comment";s:1:"1";s:14:"redis_hostname";s:9:"127.0.0.1";s:10:"redis_port";s:4:"6379";s:12:"redis_prefix";s:12:"nginx-cache:";s:9:"purge_url";s:0:"";s:25:"redis_enabled_by_constant";i:0;s:28:"smart_http_expire_form_nonce";s:10:"87a3b2c240";}';
|
|
||||||
add_option('rt_wp_nginx_helper_options', unserialize($options));
|
|
||||||
|
|
||||||
if(!get_option('cloudpit_nginx_activated_once')) {
|
|
||||||
add_option('cloudpit_nginx_activated_once', 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function loadCss() {
|
|
||||||
if( !is_plugin_active( $this->plugin ) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wp_enqueue_style('cloudpit-css', plugin_dir_url( __FILE__ ) . 'assets/style.css',array(), filemtime(plugin_dir_path( __FILE__ ) . 'assets/style.css'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
<phpunit bootstrap="tests/bootstrap.php">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite>
|
|
||||||
<directory suffix="Test.php" phpVersion="5.4.0">tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|