Files
codecanyon-rest-api-for-per…/api/controllers/Api.php
2025-10-29 11:09:43 +01:00

220 lines
6.8 KiB
PHP

<?php
use \WpOrg\Requests\Requests as RestapiRequests;
defined('BASEPATH') or exit('No direct script access allowed');
class Api extends AdminController
{
public function __construct()
{
parent::__construct();
$this->load->model('api_model');
$this->load->library('app_modules');
if (!$this->app_modules->is_active('api')) {
access_denied("Api");
}
\modules\api\core\Apiinit::the_da_vinci_code('api');
}
public function api_management()
{
\modules\api\core\Apiinit::the_da_vinci_code('api');
$data['user_api'] = $this->api_model->get_user();
$data['title'] = _l('api_management');
$this->load->view('api_management', $data);
}
/* API user statistics */
public function user_stats($id = '')
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('User Statistics');
}
$data['title'] = _l('user_statistics');
$data['user_id'] = $id;
if ($id) {
$user_api = $this->api_model->get_user($id);
$data['user_api'] = $user_api && count($user_api) ? $user_api[0] : null;
if ($data['user_api']) {
$data['quota_summary'] = $this->api_model->get_quota_summary($data['user_api']['token']);
$data['quota_stats'] = $this->api_model->get_quota_stats($data['user_api']['token']);
$data['top_endpoints'] = $this->api_model->get_top_endpoints($data['user_api']['token']);
}
}
$data['api_users'] = $this->api_model->get_user();
$this->load->view('user_stats', $data);
}
public function api_guide()
{
fopen(APP_MODULES_PATH . 'api/views/apidoc/index.html', 'r');
}
/* Add new user or update existing*/
public function user()
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('Ticket Priorities');
}
if ($this->input->post()) {
\modules\api\core\Apiinit::the_da_vinci_code('api');
if (!$this->input->post('id')) {
$id = $this->api_model->add_user($this->input->post());
if ($id) {
set_alert('success', _l('added_successfully', _l('user_api')));
}
redirect(admin_url('api/api_management'));
} else {
$data = $this->input->post();
$id = $data['id'];
unset($data['id']);
$success = $this->api_model->update_user($data, $id);
if ($success) {
set_alert('success', _l('updated_successfully', _l('user_api')));
}
redirect(admin_url('api/api_management'));
}
die;
}
}
/* Update user quotas */
public function update_user_quotas()
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('User Quotas');
}
if ($this->input->post()) {
\modules\api\core\Apiinit::the_da_vinci_code('api');
$data = $this->input->post();
$id = $data['id'];
unset($data['id']);
// Add timestamp for quota update
$data['quota_updated_at'] = date('Y-m-d H:i:s');
$success = $this->api_model->update_user($data, $id);
if ($success) {
set_alert('success', _l('quota_updated_successfully'));
} else {
set_alert('danger', _l('quota_update_failed'));
}
redirect(admin_url('api/api_management'));
}
}
/* Edit user */
public function create_user()
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('User');
}
$data['title'] = _l('new_user_api');
$this->load->view('create_user_api', $data);
}
/* Edit user */
public function edit_user($id)
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('User');
}
if (!$id) {
redirect(admin_url('api/api_management'));
}
$user_api = $this->api_model->get_user($id);
$data['user_api'] = $user_api && count($user_api) ? $user_api[0] : null;
$data['title'] = _l('edit_user_api');
$this->load->view('edit_user_api', $data);
}
/* Delete user */
public function delete_user($id)
{
\modules\api\core\Apiinit::ease_of_mind('api');
if (!is_admin()) {
access_denied('User');
}
if (!$id) {
redirect(admin_url('api/api_management'));
}
$response = $this->api_model->delete_user($id);
if ($response == true) {
set_alert('success', _l('deleted', _l('user_api')));
}
redirect(admin_url('api/api_management'));
}
/* Get user statistics data via AJAX */
public function get_user_stats_data()
{
if (!$this->input->is_ajax_request()) {
show_404();
}
$user_id = $this->input->post('user_id');
$days = $this->input->post('days') ?: 30;
if ($user_id) {
$user_api = $this->api_model->get_user($user_id);
if ($user_api && count($user_api)) {
$api_key = $user_api[0]['token'];
$quota_summary = $this->api_model->get_quota_summary($api_key);
$quota_stats = $this->api_model->get_quota_stats($api_key, $days);
$top_endpoints = $this->api_model->get_top_endpoints($api_key);
echo json_encode([
'quota_summary' => $quota_summary,
'quota_stats' => $quota_stats,
'top_endpoints' => $top_endpoints
]);
return;
}
}
echo json_encode(['error' => 'User not found']);
}
/* Clean old logs */
public function clean_logs()
{
if (!is_admin()) {
access_denied('api_management');
}
$days = $this->input->post('days') ?: 90;
if ($this->api_model->clean_old_logs($days)) {
set_alert('success', _l('logs_cleaned_successfully'));
} else {
set_alert('danger', _l('log_cleaning_failed'));
}
redirect(admin_url('api/api_management'));
}
}