HEX
Server: Apache/2.4.59 (Debian)
System: Linux keymana 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
User: lijunjie (1003)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wp-content/themes/ormedia/keylabData/calendar/r_calendar.php
<?php
//ini_set('display_errors',1);
if(isset($_REQUEST['checking_api_file'])){
    exit();
}
$msg = "success";
$valid = true;
$a_status_text = [
    'open' => '開放',
    'pending' => '待辦',
    'completed' => '完成',
    'removed' => '移除'
];
if (isset($_REQUEST['period_s'])){
    $period = $_REQUEST['period_s'];
} else {
    $period_s = "-1 month";
}

if (isset($_REQUEST['period_e'])){
    $period_e = $_REQUEST['period_e'];
} else {
    $period_e = "+6 month";
}

if (isset($_REQUEST['type'])){
    provide_type();
} else {
    if (isset($_REQUEST['property_id'])) {
        $property_id = $_REQUEST['property_id'];
        if(isset($_REQUEST['agm'])) {
            $statement = "SELECT * FROM `keylab_calendar` WHERE property_id = $property_id AND type = 99 AND time > NOW() ORDER BY time ASC limit 1";
        } else {
            provide_type();
            if (isset($_REQUEST['date'])){
                $date = $_REQUEST['date'];
                $before = date('Y-m-d H:i:s', strtotime($period_s, strtotime($date)));
                $after = date('Y-m-d H:i:s', strtotime($period_e, strtotime($date)));
                $rv->period = $before." - ".$after;
                $statement = "SELECT * FROM `keylab_calendar` WHERE property_id = $property_id AND time > '$before' AND time < '$after' ORDER BY time DESC";
            } else {
                $statement = "SELECT * FROM `keylab_calendar` WHERE property_id = $property_id ORDER BY time DESC";
            }

        }
    } elseif (isset($_REQUEST['admin_wp_id'])) {
        provide_type();
        $admin_wp_id = $_REQUEST['admin_wp_id'];
        $statement = "SELECT * FROM `keylab_calendar` WHERE property_id IN (SELECT property_id FROM `keylab_property` WHERE admin_wp_id = $admin_wp_id) ORDER BY time DESC";
    } else {
        $valid = false;
        $msg = "insufficient arguments";
    }


    if ($valid) {
        $results = $wpdb->get_results($statement);
//        $rv->last_query = $wpdb->last_query;
        if($_REQUEST['platform']=="app"){
            get_agm();
        }
        if (isset($_REQUEST['by_date'])) {
            get_agm();
            $list = new stdClass();
            $results_r = array_reverse($results);
            $last_date = "";
            $index = -1;
            foreach ($results_r as $result) {
                $date = substr($result->time, 0, 10);
                if ($date != $last_date){
                    $index++;
                    $last_date = $date;
                }
//                $result->ann_list = unserialize($result->ann_list) ?: [];
//                $result->source = unserialize($result->source) ?: [];
                $result->ann_list = handle_object($result->ann_list);
                $result->source = handle_object($result->source);
                $list->$date[] = $result;
            }
            $rv->list = $list;
        } else {
            $rv->list = $results;
        }
    }

}

function handle_object($obj){
//    var_dump($obj);
    $res = unserialize($obj);
    
//    var_dump($res);
    if (!$res){
        return [];
    }
//    $res = str_replace(,$res);
    return $res;
}

function provide_type()
{
    global $rv;
    $rv->type = array(
        0 => "會議",
        1 => "工作項目",
        2 => "文件到期",
        3 => "通告",
        99 => "AGM",
    );
}

function get_agm(){
    global $rv;
    global $property_id;
    global $wpdb;
    $statement = "SELECT * FROM `keylab_calendar` WHERE property_id = $property_id AND type = 99 AND time > NOW() ORDER BY time ASC limit 1";
    $agm = $wpdb->get_results($statement);
    foreach ($agm as $key => $value) {
        $value->ann_list = handle_object($value->ann_list);
    }
    $rv->agm = $agm;
}

foreach ($rv->list as $key1 => $item){
    $item->ann_list = unserialize($item->ann_list) ?: [];

    foreach($item->ann_list as $key2 => $value2){

        if(is_array($value2)){
            if(!isset($value2['type']) || $value2['type'] == 0){
                $rv->list[$key1]->ann_list[$key2]['user_email'] = $wpdb->get_var("select user_email from wp_users where ID = ".$value2['id']);
            }
            if($value2['type'] == '1' || $value2['type'] == '2'){
                $rv->list[$key1]->ann_list[$key2]['user_email'] = $wpdb->get_var("select email from keylab_users where user_id = ".$value2['id']);
            }
        }else{
            if(!isset($value2->type) || $value2->type == 0){
                $rv->list[$key1]->ann_list[$key2]->user_email = $wpdb->get_var("select user_email from wp_users where ID = $value2->id");
            }
            if($value2->type == '1' || $value2->type == '2'){
                $rv->list[$key1]->ann_list[$key2]->user_email = $wpdb->get_var("select email from keylab_users where user_id = $value2->id");
            }
        }
        
    }

    if($item->new_type == ''){
        $item->new_type = $rv->type[$item->type];
    }

    $item->status_text = $a_status_text[$item->status];

    $item->source = unserialize($item->source) ?: [];
    $item->calendar_file = unserialize($item->calendar_file) ?: [];
}

$rv->msg = $msg;
// $rv->sql = $wpdb->last_query;
exit(json_encode($rv));



//var_dump($result);