HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux bsx-1-dev 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb 9 10:15:05 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
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;
    
            
}
    
// ==========================================================================================