<?php
/**
* @package Unlimited Elements
* @author unlimited-elements.com
* @copyright (C) 2021 Unlimited Elements, All Rights Reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
if ( ! defined( 'ABSPATH' ) ) exit;
class UCRequestsLogView extends WP_List_Table{
/**
* Gets a list of columns.
*
* @return array
*/
public function get_columns(){
$columns = array(
"url" => __("Request URL", "unlimited-elements-for-elementor"),
"time" => __("Time", "unlimited-elements-for-elementor"),
"user" => __("User", "unlimited-elements-for-elementor"),
);
return $columns;
}
/**
* Prepares the list of items for displaying.
*
* @return void
*/
public function prepare_items(){
// prepare columns
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array($columns, $hidden, $sortable);
// prepare items
$this->items = $this->prepareData();
}
/**
* Message to be displayed when there are no items
*
* @return void
*/
public function no_items(){
esc_attr_e("No requests found.", "unlimited-elements-for-elementor");
}
/**
* Displays the table.
*
* @return void
*/
public function display(){
// Check if changelog is enabled
$isChangelogEnabled = HelperProviderUC::isAddonChangelogEnabled();
if($isChangelogEnabled === false){
$this->displayHeader();
$this->displayDisabledMessage();
$this->displayFooter();
return;
}
$this->prepare_items();
$this->displayHeader();
parent::display();
$this->displayFooter();
}
/**
* Renders the url column.
*
* @param array $item
*
* @return string
*/
protected function column_url($item){
$url = $item["url"];
// Mask API key in URL
$url = preg_replace('/([?&]api_key=)([^&]+)/', '$1***', $url);
return '<code style="font-size: 11px;">' . esc_html($url) . '</code>';
}
/**
* Renders the time column.
*
* @param array $item
*
* @return string
*/
protected function column_time($item){
return esc_html($item["time"]);
}
/**
* Renders the user column.
*
* @param array $item
*
* @return string
*/
protected function column_user($item){
return esc_html($item["user"]);
}
/**
* Generates the table navigation above or below the table.
*
* @param string $which
*
* return void
*/
protected function display_tablenav($which){
// hide navigation
}
/**
* Prepares the list of items.
*
* @return array
*/
private function prepareData(){
global $wpdb;
$items = array();
// Get requests from changelog table
$changelogService = new UniteCreatorAddonChangelog();
$table = $changelogService->getTable();
$sql = $wpdb->prepare(
"SELECT id, text, user_id, created_at
FROM {$table}
WHERE type = %s
ORDER BY created_at DESC
LIMIT 50",
'request'
);
$results = $wpdb->get_results($sql, ARRAY_A);
foreach($results as $row){
$url = $row["text"];
$userId = intval($row["user_id"]);
$createdAt = $row["created_at"];
// Format time
$time = mysql2date("j F Y H:i:s", $createdAt);
// Get user or use "guest"
$user = "guest";
if($userId > 0){
$userObj = get_user_by("id", $userId);
if($userObj){
$user = $userObj->user_login;
}
}
$items[] = array(
"url" => $url,
"time" => $time,
"user" => $user,
);
}
return $items;
}
/**
* Display the header.
*
* @return void
*/
private function displayHeader(){
$headerTitle = __("Requests Log", "unlimited-elements-for-elementor");
require HelperUC::getPathTemplate("header");
}
/**
* Display disabled message.
*
* @return void
*/
private function displayDisabledMessage(){
?>
<div class="notice notice-warning">
<p><?php esc_html_e("The changelog feature is disabled in the general settings. Please enable it to view the requests log.", "unlimited-elements-for-elementor"); ?></p>
</div>
<?php
}
/**
* Display the footer.
*
* @return void
*/
private function displayFooter(){
$urlChangelog = HelperUC::getViewUrl(GlobalsUnlimitedElements::VIEW_CHANGELOG);
?>
<div style="margin-top: 20px;">
<a class="button" href="<?php echo esc_url($urlChangelog); ?>">
<?php echo esc_html__("Back to Changelog", "unlimited-elements-for-elementor"); ?>
</a>
</div>
<?php
}
}
$requestLog = new UCRequestsLogView();
$requestLog->display();