File: /var/www/html/wp-content/plugins/bsx/inc/cass-overview.php
<?php
/**
* Shortcode für Cassandra Übersicht
* Verwendung: [cassandra_overview]
*/
function get_all_cassandra_data() {
$args = array(
'post_type' => 'cassandra',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$cassandras = get_posts($args);
$cass = [];
krsort($cassandras);
foreach($cassandras as $cas) {
$cass[$cas->ID] = $cas;
}
krsort($cass);
$stx = bsx_rest_get("styx");
$styx = [];
foreach($stx as $sx) {
$styx[$sx['cass_id']] = $sx;
}
krsort($stx);
foreach(array_keys($cass) as $key) {
$post_id = $cass[$key]->ID;
if(!isset($styx[$key])) {
$styx[$key] = ['cass_id' => $post_id,
'cmps' => 0,
'nbrCampaigns' => 0,
'nbrCompleted' => 0,
'shorttermImpact' => 0,
'investmentImpact'=> 0,
'pnlHigh' => 0,
'campHigh' => NULL,
'days2high' => NULL,
'daysHold' => NULL,
'rating' => 0,
'changed' => 0
];
}
$stx = $styx[$key];
// ACF Felder abrufen
$name = get_field('company_name', $post_id) ?: get_the_title($post_id);
$last_date = get_field('last publication date', $post_id) ?: get_the_date('Y-m-d');
// Logo
$logo_url = get_the_post_thumbnail_url($post_id, 'medium') ?: 'https://via.placeholder.com/150';
$nbr_camp = $stx['nbrCampaigns'];
$cass_data[] = array(
'id' => $post_id,
'name' => $name,
'logo' => $logo_url,
'campaigns' => intval($stx["nbrCampaigns"]),
'date' => $last_date,
'pnl_high' => sprintf("% 4.1f%%", 100*floatval($stx['pnlHigh'])),
'pnl_pivot' => sprintf("%4.1f days", floatval($stx["days2high"])),
'date_timestamp' => strtotime($last_date),
'initial' => sprintf("% 4.1f%%", 100*floatval($stx["shorttermImpact"])),
'total' =>sprintf("% 4.1f%%", 100*floatval($stx["investmentImpact"])),
'hold_time' => sprintf("%4.1f days", floatval($stx['daysHold'])),
'rating' => floatval($stx['rating']),
'link' => get_permalink($post_id)
);
wp_reset_postdata();
}
return $cass_data;
}
function render_cassandra_overview($atts) {
$atts = shortcode_atts(array(
'columns' => 3
), $atts);
$cass_data = get_all_cassandra_data();
$cassandra_json = wp_json_encode($cass_data);
ob_start();
if(current_user_can('mepr-active','rules:5177')): ?>
<script type="text/javascript">
var cassdata = <?php echo $cassandra_json; ?>;
</script>
<div class='cass-sidebar-wrapper'>
<div class="sort-controls">
<button class="sort-btn active" data-sort="name" data-order="asc">
Name <span class="arrow">↑</span>
</button>
<button class="sort-btn" data-sort="campaigns" data-order="desc">
Campaigns <span class="arrow">↓</span>
</button>
<button class="sort-btn" data-sort="date" data-order="desc">
Last Published <span class="arrow">↓</span>
</button>
<button class="sort-btn" data-sort="initial" data-order="desc">
Initial Impact <span class="arrow">↓</span>
</button>
<button class="sort-btn" data-sort="total" data-order="desc">
Investment Impact <span class="arrow">↓</span>
</button>
<button class="sort-btn" data-sort="hold_time" data-order="desc">
Average Holding Period <span class="arrow">↓</span>
</button>
<button class="sort-btn" data-sort="rating" data-order="desc">
Rating <span class="arrow">↓</span>
</button>
</div>
</div>
<?php endif;
return ob_get_clean();
}
add_shortcode('cassandra_overview', 'render_cassandra_overview');
function overview_cassandra_enqueue (){
// Cassandra Overview
// -------------------------------------------------------------------------------------------
wp_enqueue_style(
'overview-cassandra-css',
BSX_PLUGIN_URL . 'ass/css/overview-cassandra.css',
array(),
'1.0.0'
);
// JavaScript registrieren
wp_enqueue_script(
'overview-cassandra-js',
BSX_PLUGIN_URL . 'ass/js/overview-cassandra.js',
array(),
'1.0.0',
true
);
}
add_action('wp_enqueue_scripts', 'overview_cassandra_enqueue', 999);
// ==========================================================================================
function bsx_box_profile($id, $what = 'cassandra') {
global $wpdb;
if($what=='cassandra') {
$kp = $wpdb->get_results($wpdb->prepare(
"SELECT per, ord,
avg(min) min, avg(q1) q1, avg(median) median,
avg(q3) q3, avg(max) max, avg(dd) dd
from wp_bsx_stx where cass_id = %d
group by cass_id,per,ord
order by ord",
[$id]));
} else {
$kp = $wpdb->get_results($wpdb->prepare(
"SELECT per, ord, min, q1, median, q3, max, dd
from wp_bsx_stx where camp_id = %d
group by camp_id, per,ord
order by ord",
[$id]));
}
if(empty($kp)) {
return array(
'init' => 0,
'total_oe' => 0,
'total_bsx' => 0
);
}
$init = sprintf("% 6.2f%%", 100 * $kp[0]->q3);
$total_oe = sprintf("% 6.2f%%", 100 * $kp[count($kp)-1]->q3);
$x = [];
foreach($kp as $kpx) {
if($kpx->dd > -0.18) $x[] = $kpx;
}
$total_bsx = sprintf("% 6.2f%%", 100 * $x[count($x)-1]->q3);
$impact = array(
'init' => $init,
'total_oe' => $total_oe,
'total_bsx' => $total_bsx
);
return $impact;
}
// ==========================================================================================