public function get_account_id()
 {
     // session_start();
     $ga = new GoogleAnalyticsAPI();
     $this->load->model('Creds');
     $this->Creds->get_gacreds();
     $valuesdb = $this->session->userdata('creds');
     $ga->auth->setClientId($valuesdb['ClientId']);
     $ga->auth->setClientSecret($valuesdb['Clientsecret']);
     $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi");
     /*
      * Step 1: Check if we have an oAuth access token in our session
      * If we've got $_GET['code'], move to the next step
      */
     if (!isset($_SESSION['oauth_access_token']) && !isset($_GET['code'])) {
         // Go get the url of the authentication page, redirect the client and go get that token!
         $url = $ga->auth->buildAuthUrl();
         header("Location: " . $url);
     }
     if (!isset($_SESSION['oauth_access_token']) && isset($_GET['code'])) {
         // $auth = $ga->auth->getAccessToken($_GET['code']);
         $code = $_GET['code'];
         $auth = $ga->auth->getAccessToken($code);
         if ($auth['http_code'] == 200) {
             $accessToken = $auth['access_token'];
             $refreshToken = $auth['refresh_token'];
             $tokenExpires = $auth['expires_in'];
             $tokenCreated = time();
             // For simplicity of the example we only store the accessToken
             // If it expires use the refreshToken to get a fresh one
             $_SESSION['oauth_access_token'] = $accessToken;
         } else {
             die("Sorry, something went wrong retrieving the oAuth tokens");
         }
     }
     if (time() - $tokenCreated >= $tokenExpires) {
         $auth = $ga->auth->refreshAccessToken($refreshToken);
     }
     $ga->setAccessToken($accessToken);
     $profiles = $ga->getProfiles();
     $accounts = array();
     foreach ($profiles['items'] as $item) {
         $id = "ga:{$item['id']}";
         $name = $item['name'];
         $accounts[$id] = $name;
     }
     $ga->setAccountId($id);
     $defaults = array('start-date' => date('Y-m-d', strtotime('-1 month')), 'end-date' => date('Y-m-d'));
     $ga->setDefaultQueryParams($defaults);
     $params = array('metrics' => 'ga:visits', 'demensions' => 'ga:date');
     $visits = $ga->query($params);
     return $visits;
 }
 public function queryapi()
 {
     $ga = new GoogleAnalyticsAPI();
     // get these values from db.
     // set up a model for setting session and can use it prettymuch any time.
     $this->load->model('Creds');
     $this->Creds->get_gacreds();
     $valuesdb = $this->session->userdata('creds');
     $ga->auth->setClientId($valuesdb['ClientId']);
     $ga->auth->setClientSecret($valuesdb['Clientsecret']);
     $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi");
     $code = $_GET['code'];
     $auth = $ga->auth->getAccessToken($code);
     if ($auth['http_code'] == 200) {
         $accessToken = $auth['access_token'];
         $refreshToken = $auth['refresh_token'];
         $tokenExpires = $auth['expires_in'];
         $tokenCreated = time();
     } elseif (!isset($accessToken)) {
         echo "<h1>Authentication Failed!</h1>";
         die;
     }
     // store these values in database.
     echo $accessToken . "|||||||||";
     echo $tokenCreated . "|||||||||";
     echo $tokenExpires . "|||||||||";
     echo $refreshToken . "|||||||||";
     $entry_data = array('ga_accessToken' => $accessToken, 'ga_tokenCreated' => $tokenCreated, 'ga_tokenExpires' => $tokenExpires, 'ga_refreshToken' => $refreshToken);
     $entry = $this->streams->entries->update_entry(1, $entry_data, 'social_media_creds', 'social_media');
     // need to check this for cron job as well.
     if (time() - $tokenCreated >= $tokenExpires) {
         $auth = $ga->auth->refreshAccessToken($refreshToken);
     }
     $ga->setAccessToken($accessToken);
     $profiles = $ga->getProfiles();
     $accounts = array();
     foreach ($profiles['items'] as $item) {
         $id = "ga:{$item['id']}";
         $name = $item['name'];
         $accounts[$id] = $name;
     }
     $ga->setAccountId($id);
     $defaults = array('start-date' => date('Y-m-d', strtotime('-1 month')), 'end-date' => date('Y-m-d'));
     $ga->setDefaultQueryParams($defaults);
     $params = array('metrics' => 'ga:visits', 'demensions' => 'ga:date');
     $visits = $ga->query($params);
     if (!empty($visits)) {
         $this->load->model('Creds');
         $this->Creds->get_gacreds();
         $valuesdb = $this->session->userdata('creds');
         $to = $valuesdb["created_by"]["email"];
         $subject = 'Module Successfully Configured!';
         $message = "Hey Developer," . "\r\n" . "Social Statistics Module is Installed on " . base_url() . "\r\n" . "User Cron Code " . $valuesdb['sender_crud_code'] . "\r\n" . "Client Name: " . $valuesdb['Analytics_ClientName'] . "\r\n" . "Please Setup Cron Job." . "\r\n" . "\r\n" . "Cron Job direct link :" . base_url() . "media_stats/Front_media/api/" . $valuesdb['sender_crud_code'];
         mail($to, $subject, $message);
         Events::trigger('page_build', $this->template);
         $this->template->build('admin/settings');
     }
 }
 public function api($value = "")
 {
     $this->load->model('Creds');
     $this->Creds->get_gacreds();
     $valuesdb = $this->session->userdata('creds');
     if ($value == $valuesdb['sender_crud_code']) {
         $ga = new GoogleAnalyticsAPI();
         // need to get this from database Will be same and need to get from user.
         // use model creds to set values to userdata and feed to the following
         $this->load->model('Creds');
         $this->Creds->get_gacreds();
         $valuesdb = $this->session->userdata('creds');
         $ga->auth->setClientId($valuesdb['ClientId']);
         $ga->auth->setClientSecret($valuesdb['Clientsecret']);
         $ga->auth->setRedirectUri(base_url() . "admin/media_stats/queryapi");
         // from database Will be same and generated from API.
         $accessToken = $valuesdb['ga_accessToken'];
         $ga->setAccessToken($accessToken);
         // should be constant all the time.
         $tokenExpires = $valuesdb["ga_tokenExpires"];
         // new in every cron job
         $tokenCreated = $valuesdb["ga_tokenCreated"];
         // store those values back to database so that we can use it later on.
         // $ga->auth->refreshAccessToken ( );
         if (time() - $tokenCreated >= $tokenExpires) {
             $auth = $ga->auth->refreshAccessToken($valuesdb["ga_refreshToken"]);
             $accessToken = $auth['access_token'];
             $refreshToken = $auth['refresh_token'];
             $tokenExpires = $auth['expires_in'];
             $entry_data = array('ga_accessToken' => $accessToken, 'ga_refreshToken' => $refreshToken, 'ga_tokenCreated' => time(), 'ga_tokenExpires' => $tokenExpires);
             $entry = $this->streams->entries->update_entry(1, $entry_data, 'social_media_creds', 'social_media');
             $this->api($valuesdb["sender_crud_code"]);
         }
         $profiles = $ga->getProfiles();
         $accounts = array();
         foreach ($profiles['items'] as $item) {
             $id = "ga:{$item['id']}";
             $name = $item['name'];
             $accounts[$id] = $name;
         }
         $ga->setAccountId($id);
         $defaults = array('start-date' => date('Y-m-d'), 'end-date' => date('Y-m-d'));
         $ga->setDefaultQueryParams($defaults);
         $visits = $ga->query();
         $totalvisits = $visits['totalsForAllResults']["ga:visits"];
         $referralTraffic = $ga->getReferralTraffic();
         // /dump($referralTraffic);
         $googleplustraffic = $facebooktraffic = $googletraffic = $redittraffic = $twittertraffic = $bingtraffic = $pininteresttraffic = $linkedintraffic = 0;
         if (array_key_exists("rows", $referralTraffic)) {
             foreach ($referralTraffic["rows"] as $key => $values) {
                 // dump($values);
                 $pieces = explode(".", $values[0]);
                 switch ($pieces[0]) {
                     case "facebook":
                     case "l":
                     case "lm":
                         $facebooktraffic = $facebooktraffic + intval($values[1]);
                         break;
                     case "google":
                     case "draft":
                         $googletraffic = $googletraffic + intval($values[1]);
                         break;
                     case "linkedin":
                         $linkedintraffic = $linkedintraffic + intval($values[1]);
                         break;
                     case "reddit":
                         $redittraffic = $redittraffic + intval($values[1]);
                         break;
                     case "bing":
                         $bingtraffic = $bingtraffic + intval($values[1]);
                         break;
                     case "plus":
                         $googleplustraffic = $googleplustraffic + intval($values[1]);
                         break;
                     case "pinterest":
                         $pininteresttraffic = $pininteresttraffic + intval($values[1]);
                         break;
                     case "t":
                         $twittertraffic = $twittertraffic + intval($values[1]);
                         break;
                 }
             }
             echo "<br>" . $facebooktraffic;
             echo "<br>" . $googletraffic;
             echo "<br> linkedintraffic" . $linkedintraffic;
             echo "<br> redittraffic" . $redittraffic;
             echo "<br> bingtraffic " . $bingtraffic;
             echo "<br>googleplustraffic " . $googleplustraffic;
             echo "<br>pininteresttraffic " . $pininteresttraffic;
             echo "<br> twittertraffic" . $twittertraffic;
         }
         if ($referralTraffic["http_code"] == 200) {
             $entry_data = array('raw_data' => json_encode($referralTraffic), 'total_visit' => $totalvisits, 'vbd_fb' => $facebooktraffic, 'vbd_google' => $googletraffic, 'vbd_reddit' => $redittraffic, 'vbd_Twitter' => $twittertraffic, 'vbd_bing' => $bingtraffic, 'vbd_pininterest' => $pininteresttraffic, 'vbd_linkedin' => $linkedintraffic);
             $params = array('stream' => 'google_analytics', 'namespace' => 'social_media', 'year' => intval(date('Y')), 'day' => intval(date('d')), 'month' => intval(date('m')));
             $databasevalue = $this->streams->entries->get_entries($params);
             $id = intval($databasevalue["entries"][0]["id"]);
             if (sizeof($databasevalue['entries']) == 1) {
                 $entry = $this->streams->entries->update_entry($id, $entry_data, 'google_analytics', 'social_media');
             } else {
                 $this->streams->entries->insert_entry($entry_data, 'google_analytics', 'social_media');
             }
         }
         // var_dump($visitsByCountry);
         // var_dump($visitsByLanguages = $ga->getVisitsByLanguages(array('start-date' => '2013-01-01' )));//Overwrite this from the defaultQueryParams)));
         // $visitsByOs = $ga->getVisitsBySystemOs(array('max-results' => 100));
         // var_dump($visitsByOs);
     } else {
         $this->load->model('Creds');
         $this->Creds->get_gacreds();
         $valuesdb = $this->session->userdata('creds');
         $to = $valuesdb["created_by"]["email"];
         echo "<h1>Authentication Failed. This attempt has been reported to Developer.</h1>";
         $subject = 'Unsuccessful Attempt';
         $message = "Hey Developer," . "\r\n" . "Cron job failed from IP Address :" . $this->get_ip() . "\r\n" . "Please check the cron code in server if you tried accessing it.";
         mail($to, $subject, $message);
     }
 }