public static function get_events_listing()
 {
     $request_start = 0;
     $request_end = 0;
     $category = 0;
     $is_ajax = 0;
     if (isset($_REQUEST['is_ajax'])) {
         $is_ajax = (int) $_REQUEST['is_ajax'];
     }
     if (isset($_REQUEST['start'])) {
         $request_start = (int) $_REQUEST['start'];
     }
     if (isset($_REQUEST['end'])) {
         $request_end = (int) $_REQUEST['end'];
     }
     if (isset($_REQUEST['category'])) {
         $category = (int) $_REQUEST['category'];
     }
     $now = current_time('timestamp');
     $start = $request_start != 0 ? $request_start : $now;
     $days_in_curr_month = date('t', @mktime(0, 0, 0, date("m", $start), 1, date("Y", $start)));
     $distance = 60 * 60 * 24 * $days_in_curr_month - 1;
     if ($request_end == 0) {
         $end = $start + $distance;
     } else {
         $end = $request_end;
     }
     if ($request_start == 0) {
         //current month
         $distance = $end - $start;
     }
     $events = self::get_events($start, $end, $category);
     //events filtering
     $filtered_events = array();
     if (!empty($events)) {
         foreach ($events as $key => $value) {
             if ($value['end_mktime'] < $start) {
                 unset($events[$key]);
                 continue;
             }
             if ($_REQUEST['end'] > 0 && $value['start_mktime'] > $_REQUEST['end']) {
                 unset($events[$key]);
                 continue;
             }
             $filtered_events[] = $value;
         }
     }
     usort($filtered_events, function ($a, $b) {
         return $a['start_mktime'] < $b['start_mktime'] ? -1 : 1;
     });
     $events = $filtered_events;
     $args = array();
     $args['events'] = $events;
     $result = array();
     $result['html'] = TMM::draw_free_page(TMM_EVENTS_PLUGIN_PATH . '/views/templates/events_list_part.php', $args);
     $result['count'] = count($events);
     $result['year'] = date("Y", $start);
     $result['month'] = TMM_Helper::get_monts_names(date("m", $start) - 1);
     $result['month_num'] = date("m", $start);
     $result['next_time'] = $end + 1;
     $result['prev_time'] = $end - $distance - 1;
     if ($result['prev_time'] < $now) {
         $result['prev_time'] = $now;
     }
     $result['prev_time'] = strtotime(date("Y", $result['prev_time']) . '-' . date("m", $result['prev_time']) . '-' . 1 . " " . 00 . ":" . 00 . ":" . 00, $now);
     if ($is_ajax) {
         echo json_encode($result);
         exit;
     } else {
         return $result['html'];
     }
 }