You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
9.1 KiB
196 lines
9.1 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
use app\core\utils\Response;
|
|
use app\core\auth\Page;
|
|
|
|
class Dashboard extends MY_Controller {
|
|
|
|
public function __construct() {
|
|
//parent::__construct();
|
|
$this->my_parent_controller();
|
|
Response::handleSessionTimeout("bo");
|
|
$this->load_language_backoffice();
|
|
Page::authorize(PAGE_CODE['dashboard'], PRIVS[PAGE_CODE['dashboard']]['view'], true);
|
|
$this->clear_cache();
|
|
|
|
$this->load->model('dashboard_statistics_model');
|
|
}
|
|
|
|
public function get_access_and_refresh_tokens() {
|
|
//status expired
|
|
// 0 = alive, 1 = expired, 3 = no refresh_token
|
|
$oauth_code = $this->dashboard_statistics_model->get_refresh_token();
|
|
$date_now = time();
|
|
$token_expires_in = strtotime($oauth_code["access_token_expiration"]);
|
|
|
|
if ($oauth_code) {
|
|
if($date_now < $token_expires_in){
|
|
// output_to_json($this, $oauth_code);
|
|
$_SESSION['ga_token'] = $oauth_code;
|
|
return array("expired" => 0, "tokens" => $oauth_code);
|
|
} else {
|
|
return array("expired" => 1, "tokens" => $oauth_code);
|
|
}
|
|
} else {
|
|
return array("expired" => 2);
|
|
}
|
|
}
|
|
|
|
public function ganalytics() {
|
|
$tokens = $this->get_access_and_refresh_tokens();
|
|
//access_token is still alive
|
|
if($tokens["expired"] == 0) {
|
|
output_to_json($this, array("mtype" => "success", "message" => $tokens["tokens"]["access_token"],
|
|
"mdetail" => array("servertime" => new DateTime(), "access_token_expiration" => $tokens["tokens"]["access_token_expiration"])));
|
|
|
|
} else if($tokens["expired"] == 1) {
|
|
|
|
$new_tokens = $this->exec_get_access_and_refresh_token($tokens["tokens"]["refresh_token"]);
|
|
|
|
if($new_tokens["mtype"] == "success"){
|
|
$accessToken = $new_tokens["message"];
|
|
$access_token_expiration = date_modify(new DateTime(), "+" . $accessToken['expires_in'] . "seconds");
|
|
$access_token_expiration_ = $access_token_expiration->format("Y-m-d H:i:s");
|
|
|
|
//update the database
|
|
$updated = $this->dashboard_statistics_model->update_access_token($tokens["tokens"]["oauth_code_id"], array("access_token_expiration" => $access_token_expiration_, "access_token" => $accessToken["access_token"]));
|
|
if ($updated) {
|
|
$this->session->set_userdata('ga_token', array("access_token" => $accessToken["access_token"], "access_token_expiration" => $access_token_expiration_));
|
|
output_to_json($this, array("mtype" => "success", "message" => $accessToken["access_token"],
|
|
"mdetail" => array("servertime" => new DateTime(), "access_token_expiration" => $access_token_expiration_)));
|
|
} else {
|
|
output_to_json($this, array("mtype" => "error", "message" => "Reload the page. <a href='".base_url('dashboard/')."'>Please reload the page.</a>"));
|
|
}
|
|
} else {
|
|
//error
|
|
output_to_json($this, $new_tokens);
|
|
}
|
|
} else {
|
|
//sign-in again
|
|
output_to_json($this, array('mtype' => 'signin', 'message' => "Votre connexion à votre compte Google a expiré."));
|
|
}
|
|
}
|
|
|
|
public function oauth2callback() {
|
|
if($this->input->post("oauth_code")) {
|
|
$gapi_result = $this->exec_get_refresh_token($this->input->post("oauth_code"));
|
|
if ($gapi_result["mtype"] == "success") {
|
|
$accessToken = $gapi_result["message"];
|
|
$access_token_expiration = date_modify(new DateTime(), "+" . $accessToken['expires_in'] . "seconds");
|
|
$result = $this->dashboard_statistics_model->save_new_oauth_code(array(
|
|
"user_id" => $this->data["logged_in"]["user_id"],
|
|
"oauth_code" => $this->input->post("oauth_code"),
|
|
"access_token" => $accessToken["access_token"],
|
|
"refresh_token" => $accessToken["refresh_token"],
|
|
"access_token_expiration" => $access_token_expiration->format("Y-m-d H:i:s"),
|
|
"status" => 1
|
|
));
|
|
if ($result) {
|
|
session_start();
|
|
$_SESSION['ga_token'] = array("access_token" => $accessToken["access_token"], "access_token_expiration" => $access_token_expiration->format("Y-m-d H:i:s"));
|
|
output_to_json($this, array("mtype" => "success", "message" => $accessToken["access_token"],
|
|
"mdetail" => array("servertime" => new DateTime(), "access_token_expiration" => $access_token_expiration->format("Y-m-d H:i:s"))));
|
|
} else {
|
|
output_to_json($this, array("mtype" => "error", "message" => "Votre connexion à votre compte Google a expiré."));
|
|
}
|
|
} else {
|
|
output_to_json($this, $gapi_result);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function exec_get_access_and_refresh_token($refresh_token) {
|
|
$curl = curl_init( "https://accounts.google.com/o/oauth2/token" );
|
|
curl_setopt( $curl, CURLOPT_POST, true );
|
|
curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
|
|
'refresh_token' => $refresh_token,
|
|
'grant_type' => 'refresh_token',
|
|
'client_id' => GA_CLIENT_ID,
|
|
'client_secret' => GA_CLIENT_SECRET
|
|
));
|
|
|
|
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
|
|
$auth = curl_exec( $curl );
|
|
$auth_message = json_decode($auth);
|
|
|
|
if(isset($auth_message->error)){
|
|
return array(
|
|
'mtype' => 'error',
|
|
'message' => 'Error : '.$auth_message->error.((isset($auth_message->error_description))?'. Description : '.$auth_message->error_description:'')
|
|
);
|
|
} else if(isset($auth_message->access_token)) {
|
|
return array(
|
|
'mtype' => 'success',
|
|
'message' => (array) $auth_message
|
|
);
|
|
} else {
|
|
return array(
|
|
'mtype' => 'signin',
|
|
'message' => "Votre connexion à votre compte Google a expiré."
|
|
);
|
|
}
|
|
}
|
|
|
|
private function exec_get_refresh_token($get_oauth_code) {
|
|
$curl = curl_init( "https://accounts.google.com/o/oauth2/token" );
|
|
curl_setopt( $curl, CURLOPT_POST, true );
|
|
curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
|
|
'client_id' => GA_CLIENT_ID,
|
|
'client_secret' => GA_CLIENT_SECRET,
|
|
'redirect_uri' => "postmessage",
|
|
'code' => $get_oauth_code, // The code from the previous request
|
|
'grant_type' => 'authorization_code'));
|
|
|
|
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
|
|
$auth = curl_exec( $curl );
|
|
$auth_message = json_decode($auth);
|
|
|
|
if(isset($auth_message->error)){
|
|
return array(
|
|
'mtype' => 'error',
|
|
'message' => 'Error : '.$auth_message->error.((isset($auth_message->error_description))?'. Description : '.$auth_message->error_description:'')
|
|
);
|
|
} else if(isset($auth_message->access_token)) {
|
|
return array(
|
|
'mtype' => 'success',
|
|
'message' => (array) $auth_message
|
|
);
|
|
} else {
|
|
return array(
|
|
'mtype' => 'signin',
|
|
'message' => "Votre connexion à votre compte Google a expiré."
|
|
);
|
|
}
|
|
}
|
|
|
|
public function gsignout(){
|
|
if($this->input->post("type")){
|
|
$this->dashboard_statistics_model->gsignout_by_user($this->data["logged_in"]["user_id"]);
|
|
output_to_json($this, array("mtype" => "signin", "message" => "Votre connexion à votre compte Google a expiré."));
|
|
} else {
|
|
output_to_json($this, array("mtype" => "signin", "message" => "Votre connexion à votre compte Google a expiré."));
|
|
}
|
|
}
|
|
|
|
public function get_dashboard_table_data($category, $start = '7daysago', $end = 'yesterday'){
|
|
$dashboard_data = $this->dashboard_statistics_model->get_dashboard_table_data($category, $start, $end);
|
|
output_to_json($this, $dashboard_data);
|
|
}
|
|
|
|
public function get_ga_data($category, $data_tbl_col_abbrev, $user_type = 'all', $start = '7daysago', $end = 'yesterday'){
|
|
$ga_data = $this->dashboard_statistics_model->get_ga_data($category, $data_tbl_col_abbrev, $user_type, $start, $end);
|
|
output_to_json($this, $ga_data);
|
|
}
|
|
}
|
|
|
|
//access_token and refresh_token
|
|
//https://twittercommunity.com/t/how-to-check-whether-an-access-token-is-expired-or-not/783
|
|
//getting access token using refresh_token via curl
|
|
//http://stackoverflow.com/questions/30120759/get-access-token-using-refresh-token
|
|
//http://stackoverflow.com/questions/34384222/issue-with-google-api-php-client-getting-error-when-running-the-quick-start-scr
|
|
//http://stackoverflow.com/questions/19629561/moment-js-set-the-base-time-from-the-server
|
|
//https://github.com/auth0/auth0.js
|
|
|
|
|
|
|
|
// get google analytics data from database
|