Commit 3cae1b75d497c3e5f2a07e469b6e75cb7eabadf6
1 parent
05a089dd
-Analytics almost ready
Showing
8 changed files
with
313 additions
and
360 deletions
Show diff stats
backend/controllers/SettingsController.php deleted
| 1 | -<?php | |
| 2 | - namespace backend\controllers; | |
| 3 | - | |
| 4 | - use common\models\Settings; | |
| 5 | - use yii\base\InvalidConfigException; | |
| 6 | - use yii\filters\AccessControl; | |
| 7 | - use yii\web\Controller; | |
| 8 | - use Yii; | |
| 9 | - | |
| 10 | - /** | |
| 11 | - * Class SettingsController | |
| 12 | - * | |
| 13 | - * @package artbox\core\controllers | |
| 14 | - */ | |
| 15 | - class SettingsController extends Controller | |
| 16 | - { | |
| 17 | - /** | |
| 18 | - * @inheritdoc | |
| 19 | - */ | |
| 20 | - public function behaviors() | |
| 21 | - { | |
| 22 | - return [ | |
| 23 | - 'access' => [ | |
| 24 | - 'class' => AccessControl::className(), | |
| 25 | - 'rules' => [ | |
| 26 | - [ | |
| 27 | - 'actions' => [ | |
| 28 | - 'login', | |
| 29 | - 'error', | |
| 30 | - ], | |
| 31 | - 'allow' => true, | |
| 32 | - ], | |
| 33 | - [ | |
| 34 | - 'actions' => [ | |
| 35 | - 'logout', | |
| 36 | - 'index', | |
| 37 | - ], | |
| 38 | - 'allow' => true, | |
| 39 | - 'roles' => [ '@' ], | |
| 40 | - ], | |
| 41 | - ], | |
| 42 | - ], | |
| 43 | - ]; | |
| 44 | - } | |
| 45 | - /** | |
| 46 | - * @inheritdoc | |
| 47 | - */ | |
| 48 | - public function getViewPath() | |
| 49 | - { | |
| 50 | - return \Yii::getAlias('@artbox/core/views/settings'); | |
| 51 | - } | |
| 52 | - | |
| 53 | - /** | |
| 54 | - * Display site settings page | |
| 55 | - * | |
| 56 | - * @return string|\yii\web\Response | |
| 57 | - */ | |
| 58 | - public function actionIndex() | |
| 59 | - { | |
| 60 | - $model = $this->findSettings(); | |
| 61 | - | |
| 62 | - if ($model->load(Yii::$app->request->post()) && $model->save()) { | |
| 63 | - Yii::$app->session->setFlash('success', 'Settings saved'); | |
| 64 | - | |
| 65 | - return $this->goHome(); | |
| 66 | - } | |
| 67 | - | |
| 68 | - return $this->render( | |
| 69 | - 'settings', | |
| 70 | - [ | |
| 71 | - 'model' => $model, | |
| 72 | - ] | |
| 73 | - ); | |
| 74 | - } | |
| 75 | - | |
| 76 | - /** | |
| 77 | - * Find site settings | |
| 78 | - * | |
| 79 | - * @return \yii2tech\filedb\ActiveRecord | |
| 80 | - * @throws \yii\base\InvalidConfigException | |
| 81 | - */ | |
| 82 | - public function findSettings() | |
| 83 | - { | |
| 84 | - if ($model = Settings::find() | |
| 85 | - ->one() | |
| 86 | - ) { | |
| 87 | - return $model; | |
| 88 | - } else { | |
| 89 | - throw new InvalidConfigException('Settings file not found'); | |
| 90 | - } | |
| 91 | - } | |
| 92 | - } | |
| 93 | - | |
| 94 | 0 | \ No newline at end of file |
backend/controllers/SiteController.php
| 1 | 1 | <?php |
| 2 | 2 | namespace backend\controllers; |
| 3 | - | |
| 3 | + | |
| 4 | + use backend\models\Analytics; | |
| 5 | + use common\models\Settings; | |
| 4 | 6 | use Yii; |
| 5 | 7 | use yii\web\Controller; |
| 6 | 8 | use yii\filters\VerbFilter; |
| 7 | 9 | use yii\filters\AccessControl; |
| 8 | 10 | use common\models\LoginForm; |
| 9 | - | |
| 11 | + | |
| 10 | 12 | /** |
| 11 | 13 | * Site controller |
| 12 | 14 | */ |
| ... | ... | @@ -47,7 +49,7 @@ |
| 47 | 49 | ], |
| 48 | 50 | ]; |
| 49 | 51 | } |
| 50 | - | |
| 52 | + | |
| 51 | 53 | /** |
| 52 | 54 | * @inheritdoc |
| 53 | 55 | */ |
| ... | ... | @@ -59,7 +61,7 @@ |
| 59 | 61 | ], |
| 60 | 62 | ]; |
| 61 | 63 | } |
| 62 | - | |
| 64 | + | |
| 63 | 65 | /** |
| 64 | 66 | * Displays homepage. |
| 65 | 67 | * |
| ... | ... | @@ -67,9 +69,22 @@ |
| 67 | 69 | */ |
| 68 | 70 | public function actionIndex() |
| 69 | 71 | { |
| 70 | - return $this->render('index'); | |
| 71 | - } | |
| 72 | + $settings = Settings::getInstance(); | |
| 73 | + | |
| 74 | + $analytics = new Analytics( | |
| 75 | + [ | |
| 76 | + 'viewId' => $settings->analytics_key, | |
| 77 | + ] | |
| 78 | + ); | |
| 72 | 79 | |
| 80 | + return $this->render( | |
| 81 | + 'analytics', | |
| 82 | + [ | |
| 83 | + 'data' => $analytics->generateData(), | |
| 84 | + ] | |
| 85 | + ); | |
| 86 | + } | |
| 87 | + | |
| 73 | 88 | /** |
| 74 | 89 | * Login action. |
| 75 | 90 | * |
| ... | ... | @@ -80,7 +95,7 @@ |
| 80 | 95 | if (!Yii::$app->user->isGuest) { |
| 81 | 96 | return $this->goHome(); |
| 82 | 97 | } |
| 83 | - | |
| 98 | + | |
| 84 | 99 | $model = new LoginForm(); |
| 85 | 100 | if ($model->load(Yii::$app->request->post()) && $model->login()) { |
| 86 | 101 | return $this->goBack(); |
| ... | ... | @@ -93,7 +108,7 @@ |
| 93 | 108 | ); |
| 94 | 109 | } |
| 95 | 110 | } |
| 96 | - | |
| 111 | + | |
| 97 | 112 | /** |
| 98 | 113 | * Logout action. |
| 99 | 114 | * |
| ... | ... | @@ -102,10 +117,10 @@ |
| 102 | 117 | public function actionLogout() |
| 103 | 118 | { |
| 104 | 119 | Yii::$app->user->logout(); |
| 105 | - | |
| 120 | + | |
| 106 | 121 | return $this->goHome(); |
| 107 | 122 | } |
| 108 | - | |
| 123 | + | |
| 109 | 124 | public function actionAnalytic() |
| 110 | 125 | { |
| 111 | 126 | return $this->render('analytic'); | ... | ... |
| 1 | +<?php | |
| 2 | + namespace backend\models; | |
| 3 | + | |
| 4 | + use yii\base\Model; | |
| 5 | + | |
| 6 | + class Analytics extends Model | |
| 7 | + { | |
| 8 | + public $viewId; | |
| 9 | + | |
| 10 | + private function executeQuery() | |
| 11 | + { | |
| 12 | + $client = new \Google_Client(); | |
| 13 | + | |
| 14 | + $client->setAuthConfig(\Yii::getAlias('@common/config/Artbox-85b8559147bc.json')); | |
| 15 | + $client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY); | |
| 16 | + | |
| 17 | + $analytics = new \Google_Service_AnalyticsReporting($client); | |
| 18 | + | |
| 19 | + $profile_id = $this->viewId; | |
| 20 | + | |
| 21 | + $dateRange = new \Google_Service_AnalyticsReporting_DateRange(); | |
| 22 | + $dateRange->setStartDate("30daysAgo"); | |
| 23 | + $dateRange->setEndDate("today"); | |
| 24 | + | |
| 25 | + $sessions = new \Google_Service_AnalyticsReporting_Metric(); | |
| 26 | + $sessions->setExpression('ga:sessions'); | |
| 27 | + $sessions->setAlias('ะกะตะฐะฝัั'); | |
| 28 | + | |
| 29 | + $users = new \Google_Service_AnalyticsReporting_Metric(); | |
| 30 | + $users->setExpression('ga:users'); | |
| 31 | + $users->setAlias('ะะพะปัะทะพะฒะฐัะตะปะธ'); | |
| 32 | + | |
| 33 | + $views = new \Google_Service_AnalyticsReporting_Metric(); | |
| 34 | + $views->setExpression('ga:pageviews'); | |
| 35 | + $views->setAlias('ะัะพัะผะพััั'); | |
| 36 | + | |
| 37 | + $new_sessions = new \Google_Service_AnalyticsReporting_Metric(); | |
| 38 | + $new_sessions->setExpression('ga:percentNewSessions'); | |
| 39 | + $new_sessions->setAlias('ะะพะฒัะต ัะตััะธะธ'); | |
| 40 | + | |
| 41 | + $dimensions = new \Google_Service_AnalyticsReporting_Dimension(); | |
| 42 | + $dimensions->setName('ga:date'); | |
| 43 | + | |
| 44 | + $request = new \Google_Service_AnalyticsReporting_ReportRequest(); | |
| 45 | + $request->setViewId($profile_id); | |
| 46 | + $request->setDateRanges($dateRange); | |
| 47 | + $request->setMetrics( | |
| 48 | + [ | |
| 49 | + $sessions, | |
| 50 | + $users, | |
| 51 | + $views, | |
| 52 | + $new_sessions, | |
| 53 | + ] | |
| 54 | + ); | |
| 55 | + $request->setDimensions($dimensions); | |
| 56 | + | |
| 57 | + $body = new \Google_Service_AnalyticsReporting_GetReportsRequest(); | |
| 58 | + $body->setReportRequests([ $request ]); | |
| 59 | + $response = $analytics->reports->batchGet($body); | |
| 60 | + | |
| 61 | + return $response; | |
| 62 | + } | |
| 63 | + | |
| 64 | + public function generateData() | |
| 65 | + { | |
| 66 | + $reports = $this->executeQuery(); | |
| 67 | + | |
| 68 | + $data = []; | |
| 69 | + for ($reportIndex = 0; $reportIndex < count($reports); $reportIndex++) { | |
| 70 | + $report = $reports[ $reportIndex ]; | |
| 71 | + $header = $report->getColumnHeader(); | |
| 72 | + // $dimensionHeaders = $header->getDimensions(); | |
| 73 | + $metricHeaders = $header->getMetricHeader() | |
| 74 | + ->getMetricHeaderEntries(); | |
| 75 | + $rows = $report->getData() | |
| 76 | + ->getRows(); | |
| 77 | + $totals = $report->getData() | |
| 78 | + ->getTotals(); | |
| 79 | + $total_values = $totals[ 0 ]->getValues(); | |
| 80 | + | |
| 81 | + $data[ 'sessions' ] = $total_values[ 0 ]; | |
| 82 | + $data[ 'users' ] = $total_values[ 1 ]; | |
| 83 | + $data[ 'views' ] = $total_values[ 2 ]; | |
| 84 | + $data[ 'new' ] = $total_values[ 3 ]; | |
| 85 | + | |
| 86 | + for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { | |
| 87 | + // $dimensions = $row->getDimensions(); | |
| 88 | + // for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { | |
| 89 | + // print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); | |
| 90 | + // } | |
| 91 | + | |
| 92 | + $row = $rows[ $rowIndex ]; | |
| 93 | + $metrics = $row->getMetrics(); | |
| 94 | + for ($j = 0; $j < count($metricHeaders) && $j < count($metrics); $j++) { | |
| 95 | + $values = $metrics[ $j ]; | |
| 96 | + for ($valueIndex = 0; $valueIndex < count($values->getValues()); $valueIndex++) { | |
| 97 | + $value = $values->getValues()[ $valueIndex ]; | |
| 98 | + $data[ $valueIndex ][] = (int) $value; | |
| 99 | + } | |
| 100 | + } | |
| 101 | + } | |
| 102 | + } | |
| 103 | + | |
| 104 | + return $data; | |
| 105 | + } | |
| 106 | + } | |
| 0 | 107 | \ No newline at end of file | ... | ... |
backend/views/site/analytic.php renamed to backend/views/site/analytics.php
| 1 | 1 | <?php |
| 2 | + /** | |
| 3 | + * @var View $this | |
| 4 | + * @var array $data | |
| 5 | + */ | |
| 6 | + | |
| 2 | 7 | use artbox\gentelella\widgets\XPanel; |
| 3 | 8 | use dosamigos\highcharts\HighCharts; |
| 4 | - use yii\helpers\VarDumper; | |
| 5 | - | |
| 6 | - $client = new Google_Client(); | |
| 7 | - | |
| 8 | - $client->setAuthConfig(\Yii::getAlias('@common/config/Artbox-85b8559147bc.json')); | |
| 9 | - $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); | |
| 10 | - | |
| 11 | - $analytics = new Google_Service_AnalyticsReporting($client); | |
| 12 | - | |
| 13 | - $profile_id = "119240817"; | |
| 14 | - | |
| 15 | - $dateRange = new Google_Service_AnalyticsReporting_DateRange(); | |
| 16 | - $dateRange->setStartDate("30daysAgo"); | |
| 17 | - $dateRange->setEndDate("today"); | |
| 18 | - | |
| 19 | - $sessions = new Google_Service_AnalyticsReporting_Metric(); | |
| 20 | - $sessions->setExpression('ga:sessions'); | |
| 21 | - $sessions->setAlias('ะกะตะฐะฝัั'); | |
| 22 | - | |
| 23 | - $users = new Google_Service_AnalyticsReporting_Metric(); | |
| 24 | - $users->setExpression('ga:users'); | |
| 25 | - $users->setAlias('ะะพะปัะทะพะฒะฐัะตะปะธ'); | |
| 26 | - | |
| 27 | - $views = new Google_Service_AnalyticsReporting_Metric(); | |
| 28 | - $views->setExpression('ga:pageviews'); | |
| 29 | - $views->setAlias('ะัะพัะผะพััั'); | |
| 30 | - | |
| 31 | - $new_sessions = new Google_Service_AnalyticsReporting_Metric(); | |
| 32 | - $new_sessions->setExpression('ga:percentNewSessions'); | |
| 33 | - $new_sessions->setAlias('ะะพะฒัะต ัะตััะธะธ'); | |
| 34 | - | |
| 35 | - $dimensions = new Google_Service_AnalyticsReporting_Dimension(); | |
| 36 | - $dimensions->setName('ga:date'); | |
| 37 | - | |
| 38 | - $request = new Google_Service_AnalyticsReporting_ReportRequest(); | |
| 39 | - $request->setViewId($profile_id); | |
| 40 | - $request->setDateRanges($dateRange); | |
| 41 | - $request->setMetrics( | |
| 42 | - [ | |
| 43 | - $sessions, | |
| 44 | - $users, | |
| 45 | - $views, | |
| 46 | - $new_sessions, | |
| 47 | - ] | |
| 48 | - ); | |
| 49 | - $request->setDimensions($dimensions); | |
| 50 | - | |
| 51 | - $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); | |
| 52 | - $body->setReportRequests([ $request ]); | |
| 53 | - $response = $analytics->reports->batchGet($body); | |
| 54 | - | |
| 55 | - // VarDumper::dump($response, 10, true);die(); | |
| 56 | - | |
| 57 | - function printResults($reports) | |
| 58 | - { | |
| 59 | - $data = []; | |
| 60 | - for ($reportIndex = 0; $reportIndex < count($reports); $reportIndex++) { | |
| 61 | - $report = $reports[ $reportIndex ]; | |
| 62 | - $header = $report->getColumnHeader(); | |
| 63 | - $dimensionHeaders = $header->getDimensions(); | |
| 64 | - $metricHeaders = $header->getMetricHeader() | |
| 65 | - ->getMetricHeaderEntries(); | |
| 66 | - $rows = $report->getData() | |
| 67 | - ->getRows(); | |
| 68 | - $totals = $report->getData() | |
| 69 | - ->getTotals(); | |
| 70 | - $total_values = $totals[ 0 ]->getValues(); | |
| 71 | - | |
| 72 | - $data[ 'sessions' ] = $total_values[ 0 ]; | |
| 73 | - $data[ 'users' ] = $total_values[ 1 ]; | |
| 74 | - $data[ 'views' ] = $total_values[ 2 ]; | |
| 75 | - $data[ 'new' ] = $total_values[ 3 ]; | |
| 76 | - | |
| 77 | - for ($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { | |
| 78 | - $row = $rows[ $rowIndex ]; | |
| 79 | - $dimensions = $row->getDimensions(); | |
| 80 | - $metrics = $row->getMetrics(); | |
| 81 | - for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { | |
| 82 | - // print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n"); | |
| 83 | - } | |
| 84 | - | |
| 85 | - for ($j = 0; $j < count($metricHeaders) && $j < count($metrics); $j++) { | |
| 86 | - $values = $metrics[ $j ]; | |
| 87 | - for ($valueIndex = 0; $valueIndex < count($values->getValues()); $valueIndex++) { | |
| 88 | - $value = $values->getValues()[ $valueIndex ]; | |
| 89 | - $data[ $valueIndex ][] = (int) $value; | |
| 90 | - } | |
| 91 | - } | |
| 92 | - } | |
| 93 | - } | |
| 94 | - | |
| 95 | - return $data; | |
| 96 | - } | |
| 97 | - | |
| 98 | - $data = printResults($response->getReports()); | |
| 9 | + use yii\web\View; | |
| 99 | 10 | |
| 100 | 11 | ?> |
| 101 | 12 | |
| 102 | 13 | <div class="row"> |
| 103 | - <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 104 | - <div class="tile-stats"> | |
| 105 | - <div class="icon"><i class="fa fa-clock-o"></i> | |
| 106 | - </div> | |
| 107 | - <div class="count"><?= $data[ 'sessions' ] ?></div> | |
| 108 | - | |
| 109 | - <h3>Sessions</h3> | |
| 110 | - <p>Lorem ipsum psdea itgum rixt.</p> | |
| 111 | - </div> | |
| 14 | + <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 15 | + <div class="tile-stats"> | |
| 16 | + <div class="icon"><i class="fa fa-clock-o"></i> | |
| 17 | + </div> | |
| 18 | + <div class="count"><?= $data[ 'sessions' ] ?></div> | |
| 19 | + | |
| 20 | + <h3>Sessions</h3> | |
| 21 | + <p>Lorem ipsum psdea itgum rixt.</p> | |
| 112 | 22 | </div> |
| 113 | - <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 114 | - <div class="tile-stats"> | |
| 115 | - <div class="icon"><i class="fa fa-user"></i> | |
| 116 | - </div> | |
| 117 | - <div class="count"><?= $data[ 'users' ] ?></div> | |
| 118 | - | |
| 119 | - <h3>Users</h3> | |
| 120 | - <p>Lorem ipsum psdea itgum rixt.</p> | |
| 121 | - </div> | |
| 23 | + </div> | |
| 24 | + <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 25 | + <div class="tile-stats"> | |
| 26 | + <div class="icon"><i class="fa fa-user"></i> | |
| 27 | + </div> | |
| 28 | + <div class="count"><?= $data[ 'users' ] ?></div> | |
| 29 | + | |
| 30 | + <h3>Users</h3> | |
| 31 | + <p>Lorem ipsum psdea itgum rixt.</p> | |
| 122 | 32 | </div> |
| 123 | - <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 124 | - <div class="tile-stats"> | |
| 125 | - <div class="icon"><i class="fa fa-eye"></i> | |
| 126 | - </div> | |
| 127 | - <div class="count"><?= $data[ 'views' ] ?></div> | |
| 128 | - | |
| 129 | - <h3>Page views</h3> | |
| 130 | - <p>Lorem ipsum psdea itgum rixt.</p> | |
| 131 | - </div> | |
| 33 | + </div> | |
| 34 | + <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 35 | + <div class="tile-stats"> | |
| 36 | + <div class="icon"><i class="fa fa-eye"></i> | |
| 37 | + </div> | |
| 38 | + <div class="count"><?= $data[ 'views' ] ?></div> | |
| 39 | + | |
| 40 | + <h3>Page views</h3> | |
| 41 | + <p>Lorem ipsum psdea itgum rixt.</p> | |
| 132 | 42 | </div> |
| 133 | - <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 134 | - <div class="tile-stats"> | |
| 135 | - <div class="icon"><i class="fa fa-plus"></i> | |
| 136 | - </div> | |
| 137 | - <div class="count"><?= round(intval($data[ 'new' ]), 2) ?> %</div> | |
| 138 | - | |
| 139 | - <h3>New sessions</h3> | |
| 140 | - <p>Lorem ipsum psdea itgum rixt.</p> | |
| 141 | - </div> | |
| 43 | + </div> | |
| 44 | + <div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12"> | |
| 45 | + <div class="tile-stats"> | |
| 46 | + <div class="icon"><i class="fa fa-plus"></i> | |
| 47 | + </div> | |
| 48 | + <div class="count"><?= round(intval($data[ 'new' ]), 2) ?> %</div> | |
| 49 | + | |
| 50 | + <h3>New sessions</h3> | |
| 51 | + <p>Lorem ipsum psdea itgum rixt.</p> | |
| 142 | 52 | </div> |
| 53 | + </div> | |
| 143 | 54 | </div> |
| 144 | 55 | |
| 145 | 56 | <div class="row"> |
| 146 | - <div class="col-md-12"> | |
| 147 | - <?php $panel = XPanel::begin( | |
| 148 | - [ | |
| 149 | - 'title' => 'Analytics', | |
| 150 | - 'toolbarLayout' => '{collapse}', | |
| 151 | - ] | |
| 152 | - ); ?> | |
| 153 | - | |
| 154 | - <?php | |
| 155 | - echo HighCharts::widget( | |
| 156 | - [ | |
| 157 | - 'clientOptions' => [ | |
| 158 | - 'colors' => [ | |
| 159 | - '#9ABCC3', | |
| 160 | - '#A8E3D6', | |
| 161 | - ], | |
| 162 | - 'chart' => [ | |
| 163 | - 'type' => 'area', | |
| 164 | - 'zoomType' => 'x', | |
| 165 | - ], | |
| 166 | - 'title' => [ | |
| 167 | - 'text' => 'Analytics', | |
| 168 | - ], | |
| 169 | - 'yAxis' => [ | |
| 170 | - 'title' => [ | |
| 171 | - 'text' => 'Sessions count', | |
| 172 | - ], | |
| 173 | - ], | |
| 174 | - 'series' => [ | |
| 175 | - [ | |
| 176 | - 'name' => 'Sessions', | |
| 177 | - 'data' => $data[ 0 ], | |
| 178 | - ], | |
| 179 | - [ | |
| 180 | - 'name' => 'Users', | |
| 181 | - 'data' => $data[ 1 ], | |
| 182 | - ], | |
| 183 | - ], | |
| 184 | - 'credits' => [ | |
| 185 | - 'enabled' => false, | |
| 186 | - ], | |
| 187 | - 'plotOptions' => [ | |
| 188 | - 'area' => [ | |
| 189 | - 'marker' => [ | |
| 190 | - 'enabled' => false, | |
| 191 | - 'symbol' => 'circle', | |
| 192 | - 'radius' => 2, | |
| 193 | - 'states' => [ | |
| 194 | - 'hover' => [ | |
| 195 | - 'enabled' => true, | |
| 196 | - ], | |
| 197 | - ], | |
| 198 | - ], | |
| 199 | - ], | |
| 200 | - ], | |
| 201 | - ], | |
| 202 | - ] | |
| 203 | - ); | |
| 204 | - ?> | |
| 205 | - | |
| 206 | - <?php $panel::end(); ?> | |
| 207 | - | |
| 208 | - </div> | |
| 57 | + <div class="col-md-12"> | |
| 58 | + <?php $panel = XPanel::begin( | |
| 59 | + [ | |
| 60 | + 'title' => 'Analytics', | |
| 61 | + 'toolbarLayout' => '{collapse}', | |
| 62 | + ] | |
| 63 | + ); ?> | |
| 64 | + | |
| 65 | + <?php | |
| 66 | + echo HighCharts::widget( | |
| 67 | + [ | |
| 68 | + 'clientOptions' => [ | |
| 69 | + 'colors' => [ | |
| 70 | + '#9ABCC3', | |
| 71 | + '#A8E3D6', | |
| 72 | + ], | |
| 73 | + 'chart' => [ | |
| 74 | + 'type' => 'area', | |
| 75 | + 'zoomType' => 'x', | |
| 76 | + ], | |
| 77 | + 'title' => [ | |
| 78 | + 'text' => 'Analytics', | |
| 79 | + ], | |
| 80 | + 'yAxis' => [ | |
| 81 | + 'title' => [ | |
| 82 | + 'text' => 'Sessions count', | |
| 83 | + ], | |
| 84 | + ], | |
| 85 | + 'series' => [ | |
| 86 | + [ | |
| 87 | + 'name' => 'Sessions', | |
| 88 | + 'data' => $data[ 0 ], | |
| 89 | + ], | |
| 90 | + [ | |
| 91 | + 'name' => 'Users', | |
| 92 | + 'data' => $data[ 1 ], | |
| 93 | + ], | |
| 94 | + ], | |
| 95 | + 'credits' => [ | |
| 96 | + 'enabled' => false, | |
| 97 | + ], | |
| 98 | + 'plotOptions' => [ | |
| 99 | + 'area' => [ | |
| 100 | + 'marker' => [ | |
| 101 | + 'enabled' => false, | |
| 102 | + 'symbol' => 'circle', | |
| 103 | + 'radius' => 2, | |
| 104 | + 'states' => [ | |
| 105 | + 'hover' => [ | |
| 106 | + 'enabled' => true, | |
| 107 | + ], | |
| 108 | + ], | |
| 109 | + ], | |
| 110 | + ], | |
| 111 | + ], | |
| 112 | + ], | |
| 113 | + ] | |
| 114 | + ); | |
| 115 | + ?> | |
| 116 | + | |
| 117 | + <?php $panel::end(); ?> | |
| 118 | + | |
| 119 | + </div> | |
| 209 | 120 | </div> |
| 210 | 121 | |
| 211 | 122 | <div class="row"> |
| 212 | - <div class="col-lg-5 col-md-5 col-sm-12 col-xs-12"> | |
| 213 | - <?php $panel = XPanel::begin( | |
| 214 | - [ | |
| 215 | - 'title' => 'Analytics', | |
| 216 | - 'toolbarLayout' => '{collapse}', | |
| 217 | - ] | |
| 218 | - ); ?> | |
| 219 | - | |
| 220 | - <?php | |
| 221 | - echo HighCharts::widget( | |
| 222 | - [ | |
| 223 | - 'clientOptions' => [ | |
| 224 | - 'exporting' => [ | |
| 225 | - 'enabled' => false, | |
| 226 | - ], | |
| 227 | - 'colors' => [ | |
| 228 | - '#9ABCC3', | |
| 229 | - '#A8E3D6', | |
| 230 | - ], | |
| 231 | - 'chart' => [ | |
| 232 | - 'plotBackgroundColor' => null, | |
| 233 | - 'plotBorderWidth' => null, | |
| 234 | - 'plotShadow' => false, | |
| 235 | - 'type' => 'pie', | |
| 236 | - ], | |
| 237 | - 'title' => [ | |
| 238 | - 'text' => 'Analytics', | |
| 239 | - ], | |
| 240 | - 'series' => [ | |
| 241 | - [ | |
| 242 | - 'name' => 'Sessions', | |
| 243 | - 'data' => [ | |
| 244 | - [ | |
| 245 | - 'name' => 'New visitor', | |
| 246 | - 'y' => round(intval($data[ 'new' ]), 2), | |
| 247 | - ], | |
| 248 | - [ | |
| 249 | - 'name' => 'Returning Visitor', | |
| 250 | - 'y' => 100 - round(intval($data[ 'new' ]), 2), | |
| 251 | - ], | |
| 252 | - ], | |
| 253 | - ], | |
| 254 | - ], | |
| 255 | - 'credits' => [ | |
| 256 | - 'enabled' => false, | |
| 257 | - ], | |
| 258 | - 'plotOptions' => [ | |
| 259 | - 'pie' => [ | |
| 260 | - 'allowPointSelect' => true, | |
| 261 | - 'cursor' => 'pointer', | |
| 262 | - ], | |
| 263 | - ], | |
| 264 | - ], | |
| 265 | - ] | |
| 266 | - ); | |
| 267 | - ?> | |
| 268 | - | |
| 269 | - <?php $panel::end(); ?> | |
| 270 | - </div> | |
| 123 | + <div class="col-lg-5 col-md-5 col-sm-12 col-xs-12"> | |
| 124 | + <?php $panel = XPanel::begin( | |
| 125 | + [ | |
| 126 | + 'title' => 'Analytics', | |
| 127 | + 'toolbarLayout' => '{collapse}', | |
| 128 | + ] | |
| 129 | + ); ?> | |
| 130 | + | |
| 131 | + <?php | |
| 132 | + echo HighCharts::widget( | |
| 133 | + [ | |
| 134 | + 'clientOptions' => [ | |
| 135 | + 'exporting' => [ | |
| 136 | + 'enabled' => false, | |
| 137 | + ], | |
| 138 | + 'colors' => [ | |
| 139 | + '#9ABCC3', | |
| 140 | + '#A8E3D6', | |
| 141 | + ], | |
| 142 | + 'chart' => [ | |
| 143 | + 'plotBackgroundColor' => null, | |
| 144 | + 'plotBorderWidth' => null, | |
| 145 | + 'plotShadow' => false, | |
| 146 | + 'type' => 'pie', | |
| 147 | + ], | |
| 148 | + 'title' => [ | |
| 149 | + 'text' => 'Analytics', | |
| 150 | + ], | |
| 151 | + 'series' => [ | |
| 152 | + [ | |
| 153 | + 'name' => 'Sessions', | |
| 154 | + 'data' => [ | |
| 155 | + [ | |
| 156 | + 'name' => 'New visitor', | |
| 157 | + 'y' => round(intval($data[ 'new' ]), 2), | |
| 158 | + ], | |
| 159 | + [ | |
| 160 | + 'name' => 'Returning Visitor', | |
| 161 | + 'y' => 100 - round(intval($data[ 'new' ]), 2), | |
| 162 | + ], | |
| 163 | + ], | |
| 164 | + ], | |
| 165 | + ], | |
| 166 | + 'credits' => [ | |
| 167 | + 'enabled' => false, | |
| 168 | + ], | |
| 169 | + 'plotOptions' => [ | |
| 170 | + 'pie' => [ | |
| 171 | + 'allowPointSelect' => true, | |
| 172 | + 'cursor' => 'pointer', | |
| 173 | + ], | |
| 174 | + ], | |
| 175 | + ], | |
| 176 | + ] | |
| 177 | + ); | |
| 178 | + ?> | |
| 179 | + | |
| 180 | + <?php $panel::end(); ?> | |
| 181 | + </div> | |
| 271 | 182 | |
| 272 | 183 | </div> |
| 273 | 184 | \ No newline at end of file | ... | ... |
backend/views/site/index.php
common/config/.gitignore
common/config/settings.php
| ... | ... | @@ -5,7 +5,7 @@ return [ |
| 5 | 5 | 'id' => '1', |
| 6 | 6 | 'name' => 'Admin321', |
| 7 | 7 | 'description' => 'Site administrator', |
| 8 | - 'analytics' => '<!-- Google Analytics --> | |
| 8 | + 'analytics' => '<!-- Google Analytics --> | |
| 9 | 9 | <script> |
| 10 | 10 | (function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){ |
| 11 | 11 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), |
| ... | ... | @@ -16,5 +16,6 @@ return [ |
| 16 | 16 | ga(\'send\', \'pageview\'); |
| 17 | 17 | </script> |
| 18 | 18 | <!-- End Google Analytics -->', |
| 19 | + 'analytics_key' => '', | |
| 19 | 20 | ], |
| 20 | 21 | ]; |
| 21 | 22 | \ No newline at end of file | ... | ... |
common/models/Settings.php
| ... | ... | @@ -6,15 +6,19 @@ |
| 6 | 6 | |
| 7 | 7 | /** |
| 8 | 8 | * Class Settings |
| 9 | + | |
| 9 | 10 | * |
| 10 | - * @package artbox\core\models | |
| 11 | +*@package artbox\core\models | |
| 11 | 12 | * @property string $name |
| 12 | 13 | * @property string $id |
| 13 | 14 | * @property string $description |
| 14 | 15 | * @property string $analytics |
| 16 | + * @property string $analytics_key | |
| 15 | 17 | */ |
| 16 | 18 | class Settings extends ActiveRecord |
| 17 | 19 | { |
| 20 | + private static $instance; | |
| 21 | + | |
| 18 | 22 | /** |
| 19 | 23 | * @inheritdoc |
| 20 | 24 | */ |
| ... | ... | @@ -27,6 +31,7 @@ |
| 27 | 31 | 'description', |
| 28 | 32 | 'id', |
| 29 | 33 | 'analytics', |
| 34 | + 'analytics_key', | |
| 30 | 35 | ], |
| 31 | 36 | 'string', |
| 32 | 37 | ], |
| ... | ... | @@ -51,6 +56,7 @@ |
| 51 | 56 | 'name' => Yii::t('core', 'Name'), |
| 52 | 57 | 'description' => Yii::t('core', 'Description'), |
| 53 | 58 | 'analytics' => Yii::t('core', 'Google Analytics Code'), |
| 59 | + 'analytics_key' => Yii::t('core', 'Google Analytics Key'), | |
| 54 | 60 | ]; |
| 55 | 61 | } |
| 56 | 62 | |
| ... | ... | @@ -61,7 +67,12 @@ |
| 61 | 67 | */ |
| 62 | 68 | public static function getInstance() |
| 63 | 69 | { |
| 64 | - return self::findOne([ 'id' => 1 ]); | |
| 70 | + if (empty(self::$instance)) { | |
| 71 | + self::$instance = self::findOne([ 'id' => 1 ]); | |
| 72 | + return self::$instance; | |
| 73 | + } | |
| 74 | + | |
| 75 | + return self::$instance; | |
| 65 | 76 | } |
| 66 | 77 | } |
| 67 | 78 | |
| 68 | 79 | \ No newline at end of file | ... | ... |