Google Analytics Dashboard for WP (GADWP) - Version 4.4

Version Description

  • Bug Fix: frontend reports and widget are not responsive
  • Bug Fix: random notices for today and yesterday reports
  • Enhancement: Italian translation, updated by Leo
  • Enhancement: admin widget responsive design and optimizations
  • Enhancement: added acquisition channel reports
  • Enhancement: added acquisition social networks reports
  • Enhancement: added acquisition search engines reports
  • Enhancement: new location report and countries/cities list table
  • Enhancement: new pages report (removed top 24 limit)
  • Enhancement: new searches report (removed top 24 limit)
  • Enhancement: new referrers report (removed top 24 limit)
  • Enhancement: frontend, per page reports (removed top 24 limit)
  • Enhancement: added campaigns in real-time report/screen
  • Enhancement: asynchronous reports loading and speed improvements
  • Enhancement: code optimization for all frontend and backend features
  • Enhancement: finished the error standardization process; easier debugging
  • Enhancement: GAPI library update
Download this release

Release Info

Developer deconf
Plugin Icon 128x128 Google Analytics Dashboard for WP (GADWP)
Version 4.4
Comparing to
See all releases

Version 4.4

Files changed (102) hide show
  1. admin/ajax-actions.php +147 -0
  2. admin/css/ga_dash.css +360 -0
  3. admin/dashboard_widgets.php +1043 -0
  4. admin/ga_dash_settings.php +1529 -0
  5. admin/images/clicky.png +0 -0
  6. admin/images/gadash-icon.png +0 -0
  7. admin/images/google-analytics-dashboard.png +0 -0
  8. admin/images/help.png +0 -0
  9. admin/images/mcdn.png +0 -0
  10. admin/images/ssl.png +0 -0
  11. admin/images/star.png +0 -0
  12. admin/images/wp.png +0 -0
  13. admin/js/admin.js +65 -0
  14. admin/js/wp-color-picker-script.js +3 -0
  15. config.php +280 -0
  16. front/ajax-actions.php +162 -0
  17. front/css/content_stats.css +58 -0
  18. front/frontend.php +182 -0
  19. front/js/content_stats.js +1 -0
  20. front/tracking.php +80 -0
  21. front/tracking/code-classic.php +28 -0
  22. front/tracking/code-universal.php +104 -0
  23. front/tracking/events-classic.php +42 -0
  24. front/tracking/events-universal.php +53 -0
  25. front/widgets.php +235 -0
  26. gadwp.php +87 -0
  27. install/install.php +136 -0
  28. install/uninstall.php +37 -0
  29. languages/ar.mo +0 -0
  30. languages/ar.po +987 -0
  31. languages/ga-dash-de_DE.mo +0 -0
  32. languages/ga-dash-de_DE.po +989 -0
  33. languages/ga-dash-es_ES.mo +0 -0
  34. languages/ga-dash-es_ES.po +1094 -0
  35. languages/ga-dash-fr_FR.mo +0 -0
  36. languages/ga-dash-fr_FR.po +996 -0
  37. languages/ga-dash-hu_HU.mo +0 -0
  38. languages/ga-dash-hu_HU.po +995 -0
  39. languages/ga-dash-it_IT.mo +0 -0
  40. languages/ga-dash-it_IT.po +1013 -0
  41. languages/ga-dash-pl_PL.mo +0 -0
  42. languages/ga-dash-pl_PL.po +983 -0
  43. languages/ga-dash-pt_BR.mo +0 -0
  44. languages/ga-dash-pt_BR.po +993 -0
  45. languages/ga-dash.pot +849 -0
  46. readme.txt +533 -0
  47. realtime/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  48. realtime/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  49. realtime/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  50. realtime/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  51. realtime/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  52. realtime/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  53. realtime/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  54. realtime/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  55. realtime/jquery/images/ui-icons_222222_256x240.png +0 -0
  56. realtime/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  57. realtime/jquery/images/ui-icons_454545_256x240.png +0 -0
  58. realtime/jquery/images/ui-icons_888888_256x240.png +0 -0
  59. realtime/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  60. realtime/jquery/jquery.ui.tooltip.html.css +57 -0
  61. realtime/jquery/jquery.ui.tooltip.html.js +7 -0
  62. tools/autoload.php +33 -0
  63. tools/gapi.php +971 -0
  64. tools/iso3166.php +247 -0
  65. tools/nprogress/nprogress.css +89 -0
  66. tools/nprogress/nprogress.js +476 -0
  67. tools/src/Google/Auth/Abstract.php +36 -0
  68. tools/src/Google/Auth/AppIdentity.php +105 -0
  69. tools/src/Google/Auth/AssertionCredentials.php +136 -0
  70. tools/src/Google/Auth/Exception.php +22 -0
  71. tools/src/Google/Auth/LoginTicket.php +69 -0
  72. tools/src/Google/Auth/OAuth2.php +633 -0
  73. tools/src/Google/Auth/Simple.php +64 -0
  74. tools/src/Google/Cache/Abstract.php +53 -0
  75. tools/src/Google/Cache/Apc.php +111 -0
  76. tools/src/Google/Cache/Exception.php +22 -0
  77. tools/src/Google/Cache/File.php +190 -0
  78. tools/src/Google/Cache/Memcache.php +182 -0
  79. tools/src/Google/Cache/Null.php +55 -0
  80. tools/src/Google/Client.php +686 -0
  81. tools/src/Google/Collection.php +96 -0
  82. tools/src/Google/Config.php +414 -0
  83. tools/src/Google/Exception.php +20 -0
  84. tools/src/Google/Http/Batch.php +141 -0
  85. tools/src/Google/Http/CacheParser.php +184 -0
  86. tools/src/Google/Http/MediaFileUpload.php +300 -0
  87. tools/src/Google/Http/REST.php +147 -0
  88. tools/src/Google/Http/Request.php +476 -0
  89. tools/src/Google/IO/Abstract.php +329 -0
  90. tools/src/Google/IO/Curl.php +159 -0
  91. tools/src/Google/IO/Exception.php +22 -0
  92. tools/src/Google/IO/Stream.php +230 -0
  93. tools/src/Google/IO/cacerts.pem +2183 -0
  94. tools/src/Google/Logger/Abstract.php +406 -0
  95. tools/src/Google/Logger/Exception.php +22 -0
  96. tools/src/Google/Logger/File.php +156 -0
  97. tools/src/Google/Logger/Null.php +41 -0
  98. tools/src/Google/Logger/Psr.php +91 -0
  99. tools/src/Google/Model.php +281 -0
  100. tools/src/Google/Service.php +39 -0
  101. tools/src/Google/Service/AdSense.php +3585 -0
  102. tools/src/Google/Service/Analytics.php +1784 -0
admin/ajax-actions.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: http://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_Backend_Ajax')) {
9
+
10
+ final class GADASH_Backend_Ajax
11
+ {
12
+
13
+ function __construct()
14
+ {
15
+ // Backend Widget Realtime action
16
+ add_action('wp_ajax_gadashadmin_get_realtime', array(
17
+ $this,
18
+ 'ajax_adminwidget_realtime'
19
+ ));
20
+ // Admin Widget get Reports action
21
+ add_action('wp_ajax_gadashadmin_get_widgetreports', array(
22
+ $this,
23
+ 'ajax_adminwidget_reports'
24
+ ));
25
+ }
26
+
27
+ /**
28
+ * Ajax handler for getting reports for Admin Widget
29
+ *
30
+ * @return string|int
31
+ */
32
+ function ajax_adminwidget_reports()
33
+ {
34
+ global $GADASH_Config;
35
+
36
+ $projectId = $_REQUEST['projectId'];
37
+ $from = $_REQUEST['from'];
38
+ $to = $_REQUEST['to'];
39
+ $query = $_REQUEST['query'];
40
+
41
+ if (! isset($_REQUEST['gadashadmin_security_widget_reports']) or ! wp_verify_nonce($_REQUEST['gadashadmin_security_widget_reports'], 'gadashadmin_get_widgetreports')) {
42
+ print(json_encode(- 30));
43
+ die();
44
+ }
45
+
46
+ /*
47
+ * Include Tools
48
+ */
49
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
50
+ $tools = new GADASH_Tools();
51
+
52
+ if (! $tools->check_roles($GADASH_Config->options['ga_dash_access_back'])) {
53
+ print(json_encode(- 31));
54
+ die();
55
+ }
56
+
57
+ if ($GADASH_Config->options['ga_dash_token'] and function_exists('curl_version') and $projectId and $from and $to) {
58
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
59
+ global $GADASH_GAPI;
60
+ } else {
61
+ print(json_encode(- 24));
62
+ die();
63
+ }
64
+
65
+ switch ($query) {
66
+ case 'referrers':
67
+ print($GADASH_GAPI->get_referrers($projectId, $from, $to));
68
+ break;
69
+ case 'contentpages':
70
+ print($GADASH_GAPI->get_contentpages($projectId, $from, $to));
71
+ break;
72
+ case 'locations':
73
+ print($GADASH_GAPI->get_locations($projectId, $from, $to));
74
+ break;
75
+ case 'bottomstats':
76
+ print(json_encode($GADASH_GAPI->get_bottomstats($projectId, $from, $to)));
77
+ break;
78
+ case 'trafficchannels':
79
+ print($GADASH_GAPI->get_trafficchannels($projectId, $from, $to));
80
+ break;
81
+ case 'medium':
82
+ print($GADASH_GAPI->get_trafficdetails($projectId, $from, $to, 'medium'));
83
+ break;
84
+ case 'visitorType':
85
+ print($GADASH_GAPI->get_trafficdetails($projectId, $from, $to, 'visitorType'));
86
+ break;
87
+ case 'socialNetwork':
88
+ print($GADASH_GAPI->get_trafficdetails($projectId, $from, $to, 'socialNetwork'));
89
+ break;
90
+ case 'source':
91
+ print($GADASH_GAPI->get_trafficdetails($projectId, $from, $to, 'source'));
92
+ break;
93
+ case 'searches':
94
+ print($GADASH_GAPI->get_searches($projectId, $from, $to));
95
+ break;
96
+ default:
97
+ print($GADASH_GAPI->get_mainreport($projectId, $from, $to, $query));
98
+ break;
99
+ }
100
+
101
+ die();
102
+ }
103
+
104
+ // Real-Time Request
105
+ /**
106
+ * Ajax handler for getting realtime analytics data for Admin widget
107
+ *
108
+ * @return string|int
109
+ */
110
+ function ajax_adminwidget_realtime()
111
+ {
112
+ global $GADASH_Config;
113
+
114
+ $projectId = $_REQUEST['projectId'];
115
+
116
+ if (! isset($_REQUEST['gadashadmin_security_widgetrealtime']) or ! wp_verify_nonce($_REQUEST['gadashadmin_security_widgetrealtime'], 'gadashadmin_get_realtime')) {
117
+ print(json_encode(- 30));
118
+ die();
119
+ }
120
+
121
+ /*
122
+ * Include Tools
123
+ */
124
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
125
+ $tools = new GADASH_Tools();
126
+
127
+ if (! $tools->check_roles($GADASH_Config->options['ga_dash_access_back'])) {
128
+ print(json_encode(- 31));
129
+ die();
130
+ }
131
+
132
+ if ($GADASH_Config->options['ga_dash_token'] and function_exists('curl_version') and $projectId) {
133
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
134
+ global $GADASH_GAPI;
135
+ } else {
136
+ print(json_encode(- 24));
137
+ die();
138
+ }
139
+
140
+ print($GADASH_GAPI->gadash_realtime_data($projectId));
141
+
142
+ die();
143
+ }
144
+ }
145
+ }
146
+
147
+ $GADASH_Backend_Ajax = new GADASH_Backend_Ajax();
admin/css/ga_dash.css ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Options pages */
2
+ table.options {
3
+ padding-left: 10px;
4
+ width: 100%;
5
+ }
6
+
7
+ .options td {
8
+ padding: 0px 5px 5px 5px;
9
+ }
10
+
11
+ td.title, td.info {
12
+ width: 130px;
13
+ padding-left: 20px;
14
+ }
15
+
16
+ td.title-select {
17
+ width: 300px;
18
+ }
19
+
20
+ td.debugging {
21
+ width: 150px;
22
+ }
23
+
24
+ td.info {
25
+ padding-bottom: 15px;
26
+ }
27
+
28
+ td.title label {
29
+ font-weight: bold;
30
+ }
31
+
32
+ .gadash-title {
33
+ float:left;
34
+ margin-right: 10px;
35
+ margin-top: 2px;
36
+ clear:left;
37
+ }
38
+
39
+ .gadash-desc {
40
+ font-size: 1em;
41
+ }
42
+
43
+ .gadash-top {
44
+ vertical-align: top;
45
+ }
46
+
47
+ pre.gadash {
48
+ }
49
+
50
+ .show_hide, .log_data {
51
+ display: none;
52
+ }
53
+
54
+ pre.log_data {
55
+ white-space: pre-wrap;
56
+ }
57
+
58
+ td.roles {
59
+ padding-bottom: 15px;
60
+ }
61
+
62
+ #ga_speed_samplerate, #ga_realtime_pages {
63
+ width: 50px;
64
+ }
65
+
66
+ .event-option, .event-option-desc {
67
+ float: left;
68
+ }
69
+
70
+ #gapi-access-code {
71
+ color: red !important;
72
+ }
73
+
74
+ /* Options pages ON/OFF Switch */
75
+ .onoffswitch {
76
+ position: relative;
77
+ width: 55px;
78
+ float: left;
79
+ -webkit-user-select: none;
80
+ -moz-user-select: none;
81
+ -ms-user-select: none;
82
+ }
83
+
84
+ .onoffswitch-checkbox {
85
+ display: none !important;
86
+ }
87
+
88
+ .onoffswitch-label {
89
+ display: block;
90
+ overflow: hidden;
91
+ cursor: pointer;
92
+ border: 2px solid #C9C9C9;
93
+ border-radius: 5px;
94
+ }
95
+
96
+ .onoffswitch-inner {
97
+ width: 200%;
98
+ margin-left: -100%;
99
+ -moz-transition: margin 0.3s ease-in 0s;
100
+ -webkit-transition: margin 0.3s ease-in 0s;
101
+ -o-transition: margin 0.3s ease-in 0s;
102
+ transition: margin 0.3s ease-in 0s;
103
+ }
104
+
105
+ .onoffswitch-inner:before, .onoffswitch-inner:after {
106
+ float: left;
107
+ width: 50%;
108
+ height: 18px;
109
+ padding: 0;
110
+ line-height: 18px;
111
+ font-size: 12px;
112
+ color: white;
113
+ font-family: Trebuchet, Arial, sans-serif;
114
+ font-weight: bold;
115
+ -moz-box-sizing: border-box;
116
+ -webkit-box-sizing: border-box;
117
+ box-sizing: border-box;
118
+ }
119
+
120
+ .onoffswitch-inner:before {
121
+ content: "ON";
122
+ padding-left: 6px;
123
+ background-color: #1269BA;
124
+ color: #FFFFFF;
125
+ }
126
+
127
+ .onoffswitch-inner:after {
128
+ content: "OFF";
129
+ padding-right: 6px;
130
+ background-color: #EEEEEE;
131
+ color: #999999;
132
+ text-align: right;
133
+ }
134
+
135
+ .onoffswitch-switch {
136
+ width: 18px;
137
+ margin: 0px;
138
+ background: #FFFFFF;
139
+ border: 2px solid #C9C9C9;
140
+ border-radius: 5px;
141
+ position: absolute;
142
+ top: 0;
143
+ bottom: 0;
144
+ right: 33px;
145
+ -moz-transition: all 0.3s ease-in 0s;
146
+ -webkit-transition: all 0.3s ease-in 0s;
147
+ -o-transition: all 0.3s ease-in 0s;
148
+ transition: all 0.3s ease-in 0s;
149
+ background-image: -moz-linear-gradient(center top, rgba(0, 0, 0, 0.1) 0%,
150
+ rgba(0, 0, 0, 0) 100%);
151
+ background-image: -webkit-linear-gradient(center top, rgba(0, 0, 0, 0.1)
152
+ 0%, rgba(0, 0, 0, 0) 100%);
153
+ background-image: -o-linear-gradient(center top, rgba(0, 0, 0, 0.1) 0%,
154
+ rgba(0, 0, 0, 0) 100%);
155
+ background-image: linear-gradient(center top, rgba(0, 0, 0, 0.1) 0%,
156
+ rgba(0, 0, 0, 0) 100%);
157
+ }
158
+
159
+ .onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner {
160
+ margin-left: 0;
161
+ }
162
+
163
+ .onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch {
164
+ right: 0px;
165
+ }
166
+
167
+ .switch-desc {
168
+ float: left;
169
+ margin-left: 10px;
170
+ }
171
+
172
+ /* Admin Widget & Real-Time Stats*/
173
+
174
+ /* Real-Time content */
175
+ .gadash-pline {
176
+ width: 100%;
177
+ margin: 0 0;
178
+ padding: 5px 0 5px 0;
179
+ background: #fff;
180
+ -moz-box-shadow: 0px 0px 3px 0px #BBB;
181
+ -webkit-box-shadow: 0px 0px 3px 0px #BBB;
182
+ box-shadow: 0px 0px 3px 0px #BBB;
183
+ display: table;
184
+ overflow: hidden;
185
+ }
186
+
187
+ .gadash-pleft {
188
+ width: 90%;
189
+ float: left;
190
+ padding-left:5px;
191
+ }
192
+
193
+ .gadash-pright {
194
+ width: 5%;
195
+ float: right;
196
+ padding-right:5px;
197
+ }
198
+
199
+ #gadash-widget .realtime {
200
+ margin: 10px 0 0 0;
201
+ width: 100%;
202
+ }
203
+
204
+ .gadash-rt-box {
205
+ width: 100%;
206
+ margin: 0 0;
207
+ background: #fff;
208
+ text-align: center;
209
+ -moz-box-shadow: 0px 0px 5px 0px #BBB;
210
+ -webkit-box-shadow: 0px 0px 5px 0px #BBB;
211
+ box-shadow: 0px 0px 5px 0px #BBB;
212
+ display: table;
213
+ }
214
+
215
+ .gadash-tdo-left {
216
+ width: 60%;
217
+ padding: 33px 0;
218
+ float: left;
219
+ text-align:center;
220
+ }
221
+
222
+ .gadash-tdo-right {
223
+ width: 35%;
224
+ margin: 0px 10px 0px 0;
225
+ text-align: left;
226
+ font-weight: bold;
227
+ vertical-align: middle;
228
+ float: right;
229
+ display:table;
230
+ }
231
+
232
+ .gadash-online {
233
+ font-size: 100px;
234
+ font-weight: normal;
235
+ line-height: 1em;
236
+ margin:0 auto;
237
+ width:80%;
238
+ }
239
+
240
+ .gadash-bigtext {
241
+ font-size: 14px;
242
+ width: 100%;
243
+ margin: 0 0;
244
+ padding: 5px 5px 5px 5px;
245
+ background: #fff;
246
+ -moz-box-shadow: 0px 0px 3px 0px #BBB;
247
+ -webkit-box-shadow: 0px 0px 3px 0px #BBB;
248
+ box-shadow: 0px 0px 3px 0px #BBB;
249
+ display: table;
250
+ overflow: hidden;
251
+ }
252
+
253
+ .gadash-bleft{
254
+ float:left;
255
+ width:80%;
256
+ }
257
+
258
+ .gadash-bright{
259
+ float:right;
260
+ width:20%;
261
+ }
262
+
263
+ .gadash-pgdetailsr {
264
+ padding-left: 20px;
265
+ text-align: right;
266
+ }
267
+
268
+ .gadash-pgdetailsl {
269
+ min-width: 250px;
270
+ }
271
+
272
+ #gadash-mainchart{
273
+ width: 98%;
274
+ height:100%;
275
+ margin: 10px auto 10px 0;
276
+ height: 250px;
277
+ }
278
+
279
+ .gadash-floatwraper{
280
+ display:table;
281
+ width:100%;
282
+ height:100%;
283
+ }
284
+
285
+ #gadash-trafficmediums, #gadash-traffictype, #gadash-socialnetworks, #gadash-trafficorganic{
286
+ width:47%;
287
+ margin:10px 0 0 0;
288
+ height: 200px;
289
+ }
290
+
291
+ #gadash-trafficmediums, #gadash-trafficorganic{
292
+ float:left;
293
+ }
294
+
295
+ #gadash-traffictype, #gadash-socialnetworks{
296
+ float:right;
297
+ }
298
+
299
+ #gadash-map, #gadash-prs{
300
+ width: 98%;
301
+ height:100%;
302
+ margin: 10px auto 10px 0;
303
+ }
304
+
305
+ #ga_dash_period, #ga_dash_profile_select {
306
+ font-size: 14px !important;
307
+ padding: 1px !important;
308
+ height: 26px !important;
309
+ }
310
+
311
+ #dashboard-widgets-wrap .postbox {
312
+ margin-right: 10px;
313
+ }
314
+
315
+ /* Admin Widget content */
316
+
317
+ #gadash-progressbar{
318
+ width:100%;
319
+ height:3px;
320
+ margin:5px 0 0px 0;
321
+ }
322
+
323
+ .gadash-wrapper {
324
+ width: 100%;
325
+ }
326
+
327
+ .gadash-wrapper .inside {
328
+ display: table;
329
+ margin: 0 auto;
330
+ padding: 0px;
331
+ }
332
+
333
+ .gadash-wrapper .inside .small-box {
334
+ width: 30%;
335
+ float: left;
336
+ margin: 0 5px 10px 5px;
337
+ background: #fff;
338
+ text-align: center;
339
+ -moz-box-shadow: 0px 0px 7px 0px #BBB;
340
+ -webkit-box-shadow: 0px 0px 7px 0px #BBB;
341
+ box-shadow: 0px 0px 7px 0px #BBB;
342
+ }
343
+
344
+ .gadash-wrapper .inside .small-box h3 {
345
+ font-size: 1em;
346
+ color: #777;
347
+ padding: 0px 5px 0px 5px;
348
+ margin: 0px 0px 0px 0px;
349
+ }
350
+
351
+ .gadash-wrapper .inside .small-box p {
352
+ font-size: 1.2em;
353
+ margin: 0px 0px 2px 0px;
354
+ }
355
+
356
+ @media screen and (max-width: 410px) {
357
+ .gadash-wrapper .inside .small-box {
358
+ width: 45%;
359
+ }
360
+ }
admin/dashboard_widgets.php ADDED
@@ -0,0 +1,1043 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_Widgets')) {
9
+
10
+ class GADASH_Widgets
11
+ {
12
+
13
+ function __construct()
14
+ {
15
+ global $GADASH_Config;
16
+ add_action('wp_dashboard_setup', array(
17
+ $this,
18
+ 'ga_dash_setup'
19
+ ));
20
+ // Admin Styles
21
+ add_action('admin_enqueue_scripts', array(
22
+ $this,
23
+ 'ga_dash_admin_enqueue_styles'
24
+ ));
25
+ // Admin Menu
26
+ add_action('admin_menu', array(
27
+ $this,
28
+ 'ga_dash_admin_actions'
29
+ ));
30
+ // Network Menu
31
+ add_action('network_admin_menu', array(
32
+ $this,
33
+ 'ga_dash_network_actions'
34
+ ));
35
+ // Plugin Settings link
36
+ add_filter("plugin_action_links_" . plugin_basename($GADASH_Config->plugin_path) . '/gadwp.php', array(
37
+ $this,
38
+ 'ga_dash_settings_link'
39
+ ));
40
+ }
41
+
42
+ function ga_dash_admin_actions()
43
+ {
44
+ global $GADASH_Config;
45
+ global $wp_version;
46
+
47
+ if (current_user_can('manage_options')) {
48
+ include ($GADASH_Config->plugin_path . '/admin/ga_dash_settings.php');
49
+
50
+ add_menu_page(__("Google Analytics", 'ga-dash'), __("Google Analytics", 'ga-dash'), 'manage_options', 'gadash_settings', array(
51
+ 'GADASH_Settings',
52
+ 'general_settings'
53
+ ), version_compare($wp_version, '3.8.0', '>=') ? 'dashicons-chart-area' : $GADASH_Config->plugin_url . '/admin/images/gadash-icon.png');
54
+ add_submenu_page('gadash_settings', __("General Settings", 'ga-dash'), __("General Settings", 'ga-dash'), 'manage_options', 'gadash_settings', array(
55
+ 'GADASH_Settings',
56
+ 'general_settings'
57
+ ));
58
+ add_submenu_page('gadash_settings', __("Backend Settings", 'ga-dash'), __("Backend Settings", 'ga-dash'), 'manage_options', 'gadash_backend_settings', array(
59
+ 'GADASH_Settings',
60
+ 'backend_settings'
61
+ ));
62
+ add_submenu_page('gadash_settings', __("Frontend Settings", 'ga-dash'), __("Frontend Settings", 'ga-dash'), 'manage_options', 'gadash_frontend_settings', array(
63
+ 'GADASH_Settings',
64
+ 'frontend_settings'
65
+ ));
66
+ add_submenu_page('gadash_settings', __("Tracking Code", 'ga-dash'), __("Tracking Code", 'ga-dash'), 'manage_options', 'gadash_tracking_settings', array(
67
+ 'GADASH_Settings',
68
+ 'tracking_settings'
69
+ ));
70
+ }
71
+ }
72
+
73
+ function ga_dash_network_actions()
74
+ {
75
+ global $GADASH_Config;
76
+ global $wp_version;
77
+
78
+ if (current_user_can('manage_netwrok')) {
79
+ include ($GADASH_Config->plugin_path . '/admin/ga_dash_settings.php');
80
+
81
+ add_menu_page(__("Google Analytics", 'ga-dash'), __("Google Analytics", 'ga-dash'), 'manage_netwrok', 'gadash_settings', array(
82
+ 'GADASH_Settings',
83
+ 'general_settings_network'
84
+ ), version_compare($wp_version, '3.8.0', '>=') ? 'dashicons-chart-area' : $GADASH_Config->plugin_url . '/admin/images/gadash-icon.png');
85
+ add_submenu_page('gadash_settings', __("General Settings", 'ga-dash'), __("General Settings", 'ga-dash'), 'manage_netwrok', 'gadash_settings', array(
86
+ 'GADASH_Settings',
87
+ 'general_settings_network'
88
+ ));
89
+ }
90
+ }
91
+
92
+ /*
93
+ * Include styles
94
+ */
95
+ function ga_dash_admin_enqueue_styles($hook)
96
+ {
97
+ global $GADASH_Config;
98
+ $valid_hooks = array(
99
+ 'toplevel_page_gadash_settings',
100
+ 'google-analytics_page_gadash_backend_settings',
101
+ 'google-analytics_page_gadash_frontend_settings',
102
+ 'google-analytics_page_gadash_tracking_settings'
103
+ );
104
+
105
+ if (! in_array($hook, $valid_hooks) and 'index.php' != $hook)
106
+ return;
107
+
108
+ wp_enqueue_style('ga_dash-nprogress', $GADASH_Config->plugin_url . '/tools/nprogress/nprogress.css', NULL, GADWP_CURRENT_VERSION);
109
+
110
+ wp_register_style('ga_dash', $GADASH_Config->plugin_url . '/admin/css/ga_dash.css', NULL, GADWP_CURRENT_VERSION);
111
+
112
+ wp_enqueue_style('ga_dash');
113
+ wp_enqueue_style('wp-color-picker');
114
+ wp_enqueue_script('wp-color-picker');
115
+ wp_enqueue_script('wp-color-picker-script-handle', plugins_url('js/wp-color-picker-script.js', __FILE__), array(
116
+ 'wp-color-picker'
117
+ ), false, true);
118
+ wp_enqueue_script('gadash-general-settings', plugins_url('js/admin.js', __FILE__), array(
119
+ 'jquery'
120
+ ), GADWP_CURRENT_VERSION);
121
+ if (! wp_script_is('googlejsapi')) {
122
+ wp_register_script('googlejsapi', 'https://www.google.com/jsapi');
123
+ wp_enqueue_script('googlejsapi');
124
+ }
125
+ wp_enqueue_script('ga_dash-nprogress', $GADASH_Config->plugin_url . '/tools/nprogress/nprogress.js', array(
126
+ 'jquery'
127
+ ), GADWP_CURRENT_VERSION);
128
+ }
129
+
130
+ function ga_dash_settings_link($links)
131
+ {
132
+ $settings_link = '<a href="' . get_admin_url(null, 'admin.php?page=gadash_settings') . '">' . __("Settings", 'ga-dash') . '</a>';
133
+ array_unshift($links, $settings_link);
134
+ return $links;
135
+ }
136
+
137
+ function ga_dash_setup()
138
+ {
139
+ global $GADASH_Config;
140
+
141
+ /*
142
+ * Include Tools
143
+ */
144
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
145
+ $tools = new GADASH_Tools();
146
+
147
+ if ($tools->check_roles($GADASH_Config->options['ga_dash_access_back'])) {
148
+ wp_add_dashboard_widget('gadash-widget', __("Google Analytics Dashboard", 'ga-dash'), array(
149
+ $this,
150
+ 'gadash_dashboard_widgets'
151
+ ), $control_callback = null);
152
+ }
153
+ }
154
+
155
+ function gadash_dashboard_widgets()
156
+ {
157
+ global $GADASH_Config;
158
+
159
+ /*
160
+ * Include GAPI
161
+ */
162
+ if ($GADASH_Config->options['ga_dash_token'] and function_exists('curl_version')) {
163
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
164
+ global $GADASH_GAPI;
165
+ } else {
166
+ echo '<p>' . __("This plugin needs an authorization:", 'ga-dash') . '</p><form action="' . menu_page_url('gadash_settings', false) . '" method="POST">' . get_submit_button(__("Authorize Plugin", 'ga-dash'), 'secondary') . '</form>';
167
+ return;
168
+ }
169
+
170
+ /*
171
+ * Include Tools
172
+ */
173
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
174
+ $tools = new GADASH_Tools();
175
+
176
+ $tools->ga_dash_cleanup_timeouts();
177
+
178
+ if (current_user_can('manage_options')) {
179
+
180
+ if (isset($_REQUEST['ga_dash_profile_select'])) {
181
+ $GADASH_Config->options['ga_dash_tableid'] = $_REQUEST['ga_dash_profile_select'];
182
+ }
183
+
184
+ $profiles = $GADASH_Config->options['ga_dash_profile_list'];
185
+ $profile_switch = '';
186
+
187
+ if (is_array($profiles)) {
188
+ if (! $GADASH_Config->options['ga_dash_tableid']) {
189
+ if ($GADASH_Config->options['ga_dash_tableid_jail']) {
190
+ $GADASH_Config->options['ga_dash_tableid'] = $GADASH_Config->options['ga_dash_tableid_jail'];
191
+ } else {
192
+ $GADASH_Config->options['ga_dash_tableid'] = $tools->guess_default_domain($profiles);
193
+ }
194
+ } else
195
+ if ($GADASH_Config->options['ga_dash_jailadmins'] and $GADASH_Config->options['ga_dash_tableid_jail']) {
196
+ $GADASH_Config->options['ga_dash_tableid'] = $GADASH_Config->options['ga_dash_tableid_jail'];
197
+ }
198
+
199
+ $profile_switch .= '<select id="ga_dash_profile_select" name="ga_dash_profile_select" onchange="this.form.submit()">';
200
+ foreach ($profiles as $profile) {
201
+ if (! $GADASH_Config->options['ga_dash_tableid']) {
202
+ $GADASH_Config->options['ga_dash_tableid'] = $profile[1];
203
+ }
204
+ if (isset($profile[3])) {
205
+ $profile_switch .= '<option value="' . esc_attr($profile[1]) . '" ';
206
+ $profile_switch .= selected($profile[1], $GADASH_Config->options['ga_dash_tableid'], false);
207
+ $profile_switch .= ' title="' . __("View Name:", 'ga-dash') . ' ' . esc_attr($profile[0]) . '">' . esc_attr($tools->ga_dash_get_profile_domain($profile[3])) . '</option>';
208
+ }
209
+ }
210
+ $profile_switch .= "</select>";
211
+ } else {
212
+ echo '<p>' . __("Something went wrong while retrieving profiles list.", 'ga-dash') . '</p><form action="' . menu_page_url('gadash_settings', false) . '" method="POST">' . get_submit_button(__("More details", 'ga-dash'), 'secondary') . '</form>';
213
+ return;
214
+ }
215
+ }
216
+
217
+ $GADASH_Config->set_plugin_options();
218
+
219
+ ?>
220
+ <form id="ga-dash" method="POST">
221
+ <?php
222
+
223
+ if (current_user_can('manage_options')) {
224
+ if ($GADASH_Config->options['ga_dash_jailadmins']) {
225
+ if ($GADASH_Config->options['ga_dash_tableid_jail']) {
226
+ $projectId = $GADASH_Config->options['ga_dash_tableid_jail'];
227
+ } else {
228
+ echo '<p>' . __("An admin should asign a default Google Analytics Profile.", 'ga-dash') . '</p><form action="' . menu_page_url('gadash_settings', false) . '" method="POST">' . get_submit_button(__("Select Domain", 'ga-dash'), 'secondary') . '</form>';
229
+ return;
230
+ }
231
+ } else {
232
+ echo $profile_switch;
233
+ $projectId = $GADASH_Config->options['ga_dash_tableid'];
234
+ }
235
+ } else {
236
+ if ($GADASH_Config->options['ga_dash_tableid_jail']) {
237
+ $projectId = $GADASH_Config->options['ga_dash_tableid_jail'];
238
+ } else {
239
+ echo '<p>' . __("An admin should asign a default Google Analytics Profile.", 'ga-dash') . '</p><form action="' . menu_page_url('gadash_settings', false) . '" method="POST">' . get_submit_button(__("Select Domain", 'ga-dash'), 'secondary') . '</form>';
240
+ return;
241
+ }
242
+ }
243
+
244
+ if (! ($projectId)) {
245
+ echo '<p>' . __("Something went wrong while retrieving property data. You need to create and properly configure a Google Analytics account:", 'ga-dash') . '</p> <form action="https://deconf.com/how-to-set-up-google-analytics-on-your-website/" method="POST">' . get_submit_button(__("Find out more!", 'ga-dash'), 'secondary') . '</form>';
246
+ return;
247
+ } else {
248
+ $profile_info = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $projectId);
249
+ if (isset($profile_info[4])) {
250
+ $GADASH_GAPI->timeshift = $profile_info[4];
251
+ } else {
252
+ $GADASH_GAPI->timeshift = (int) current_time('timestamp') - time();
253
+ }
254
+ }
255
+
256
+ if (isset($_REQUEST['query'])) {
257
+ $query = $_REQUEST['query'];
258
+ $GADASH_Config->options['ga_dash_default_metric'] = $query;
259
+ $GADASH_Config->set_plugin_options();
260
+ } else {
261
+ $query = isset($GADASH_Config->options['ga_dash_default_metric']) ? $GADASH_Config->options['ga_dash_default_metric'] : 'sessions';
262
+ }
263
+
264
+ if (isset($_REQUEST['period'])) {
265
+ $period = $_REQUEST['period'];
266
+ $GADASH_Config->options['ga_dash_default_dimension'] = $period;
267
+ $GADASH_Config->set_plugin_options();
268
+ } else {
269
+ $period = isset($GADASH_Config->options['ga_dash_default_dimension']) ? $GADASH_Config->options['ga_dash_default_dimension'] : '30daysAgo';
270
+ }
271
+
272
+ ?>
273
+
274
+ <select id="ga_dash_period" name="period" onchange="this.form.submit()">
275
+ <option value="realtime"
276
+ <?php selected ( "realtime", $period, true ); ?>><?php _e("Real-Time",'ga-dash'); ?></option>
277
+ <option value="today" <?php selected ( "today", $period, true ); ?>><?php _e("Today",'ga-dash'); ?></option>
278
+ <option value="yesterday"
279
+ <?php selected ( "yesterday", $period, true ); ?>><?php _e("Yesterday",'ga-dash'); ?></option>
280
+ <option value="7daysAgo"
281
+ <?php selected ( "7daysAgo", $period, true ); ?>><?php _e("Last 7 Days",'ga-dash'); ?></option>
282
+ <option value="14daysAgo"
283
+ <?php selected ( "14daysAgo", $period, true ); ?>><?php _e("Last 14 Days",'ga-dash'); ?></option>
284
+ <option value="30daysAgo"
285
+ <?php selected ( "30daysAgo", $period, true ); ?>><?php _e("Last 30 Days",'ga-dash'); ?></option>
286
+ <option value="90daysAgo"
287
+ <?php selected ( "90daysAgo", $period, true ); ?>><?php _e("Last 90 Days",'ga-dash'); ?></option>
288
+ </select>
289
+ <?php if ($period != 'realtime') {?>
290
+ <select id="ga_dash_query" name="query"
291
+ onchange="this.form.submit()">
292
+ <option value="sessions"
293
+ <?php selected ( "sessions", $query, true ); ?>><?php _e("Sessions",'ga-dash'); ?></option>
294
+ <option value="users" <?php selected ( "users", $query, true ); ?>><?php _e("Users",'ga-dash'); ?></option>
295
+ <option value="organicSearches"
296
+ <?php selected ( "organicSearches", $query, true ); ?>><?php _e("Organic",'ga-dash'); ?></option>
297
+ <option value="pageviews"
298
+ <?php selected ( "pageviews", $query, true ); ?>><?php _e("Page Views",'ga-dash'); ?></option>
299
+ <option value="visitBounceRate"
300
+ <?php selected ( "visitBounceRate", $query, true ); ?>><?php _e("Bounce Rate",'ga-dash'); ?></option>
301
+ <option value="locations"
302
+ <?php selected ( "locations", $query, true ); ?>><?php _e("Location",'ga-dash'); ?></option>
303
+ <option value="contentpages"
304
+ <?php selected ( "contentpages", $query, true ); ?>><?php _e("Pages",'ga-dash'); ?></option>
305
+ <option value="referrers"
306
+ <?php selected ( "referrers", $query, true ); ?>><?php _e("Referrers",'ga-dash'); ?></option>
307
+ <option value="searches"
308
+ <?php selected ( "searches", $query, true ); ?>><?php _e("Searches",'ga-dash'); ?></option>
309
+ <option value="trafficdetails"
310
+ <?php selected ( "trafficdetails", $query, true ); ?>><?php _e("Traffic Details",'ga-dash'); ?></option>
311
+ </select>
312
+ <?php }?>
313
+ </form>
314
+ <div id="gadash-progressbar"></div>
315
+ <?php
316
+ switch ($period) {
317
+
318
+ case 'today':
319
+ $from = 'today';
320
+ $to = 'today';
321
+ $haxis = 4;
322
+ break;
323
+
324
+ case 'yesterday':
325
+ $from = 'yesterday';
326
+ $to = 'yesterday';
327
+ $haxis = 4;
328
+ break;
329
+
330
+ case '7daysAgo':
331
+ $from = '7daysAgo';
332
+ $to = 'yesterday';
333
+ $haxis = 2;
334
+ break;
335
+
336
+ case '14daysAgo':
337
+ $from = '14daysAgo';
338
+ $to = 'yesterday';
339
+ $haxis = 3;
340
+ break;
341
+
342
+ case '30daysAgo':
343
+ $from = '30daysAgo';
344
+ $to = 'yesterday';
345
+ $haxis = 5;
346
+ break;
347
+
348
+ default:
349
+ $from = '90daysAgo';
350
+ $to = 'yesterday';
351
+ $haxis = 16;
352
+ break;
353
+ }
354
+
355
+ if ($query == 'visitBounceRate') {
356
+ $formater = "var formatter = new google.visualization.NumberFormat({
357
+ pattern: '#,##%',
358
+ fractionDigits: 2
359
+ });
360
+
361
+ formatter.format(data, 1); ";
362
+ } else {
363
+ $formater = '';
364
+ }
365
+
366
+ /*
367
+ * Include Tools
368
+ */
369
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
370
+ $tools = new GADASH_Tools();
371
+
372
+ if (isset($GADASH_Config->options['ga_dash_style'])) {
373
+ $light_color = $tools->colourVariator($GADASH_Config->options['ga_dash_style'], 40);
374
+ $dark_color = $tools->colourVariator($GADASH_Config->options['ga_dash_style'], - 20);
375
+ $css = "colors:['" . $GADASH_Config->options['ga_dash_style'] . "','" . $tools->colourVariator($GADASH_Config->options['ga_dash_style'], - 20) . "'],";
376
+ $color = $GADASH_Config->options['ga_dash_style'];
377
+ } else {
378
+ $css = "";
379
+ $color = "#3366CC";
380
+ }
381
+
382
+ if ($period == 'realtime') {
383
+
384
+ wp_register_style('jquery-ui-tooltip-html', $GADASH_Config->plugin_url . '/realtime/jquery/jquery.ui.tooltip.html.css');
385
+ wp_enqueue_style('jquery-ui-tooltip-html');
386
+
387
+ if (! wp_script_is('jquery')) {
388
+ wp_enqueue_script('jquery');
389
+ }
390
+ if (! wp_script_is('jquery-ui-tooltip')) {
391
+ wp_enqueue_script("jquery-ui-tooltip");
392
+ }
393
+ if (! wp_script_is('jquery-ui-core')) {
394
+ wp_enqueue_script("jquery-ui-core");
395
+ }
396
+ if (! wp_script_is('jquery-ui-position')) {
397
+ wp_enqueue_script("jquery-ui-position");
398
+ }
399
+ if (! wp_script_is('jquery-ui-position')) {
400
+ wp_enqueue_script("jquery-ui-position");
401
+ }
402
+
403
+ wp_register_script("jquery-ui-tooltip-html", $GADASH_Config->plugin_url . '/realtime/jquery/jquery.ui.tooltip.html.js');
404
+ wp_enqueue_script("jquery-ui-tooltip-html");
405
+ }
406
+
407
+ if ($period == 'realtime') {
408
+ ?>
409
+ <div class="realtime">
410
+ <div class="gadash-rt-box">
411
+ <div class='gadash-tdo-left'>
412
+ <div class='gadash-online' id='gadash-online'>0</div>
413
+ </div>
414
+ <div class='gadash-tdo-right' id='gadash-tdo-right'>
415
+ <div class="gadash-bigtext">
416
+ <div class="gadash-bleft"><?php _e( "REFERRAL", 'ga-dash' );?></div>
417
+ <div class="gadash-bright">0</div>
418
+ </div>
419
+ <div class="gadash-bigtext">
420
+ <div class="gadash-bleft"><?php _e( "ORGANIC", 'ga-dash' );?></div>
421
+ <div class="gadash-bright">0</div>
422
+ </div>
423
+ <div class="gadash-bigtext">
424
+ <div class="gadash-bleft"><?php _e( "SOCIAL", 'ga-dash' );?></div>
425
+ <div class="gadash-bright">0</div>
426
+ </div>
427
+ <div class="gadash-bigtext">
428
+ <div class="gadash-bleft"><?php _e( "CAMPAIGN", 'ga-dash' );?></div>
429
+ <div class="gadash-bright">0</div>
430
+ </div>
431
+ <div class="gadash-bigtext">
432
+ <div class="gadash-bleft"><?php _e( "DIRECT", 'ga-dash' );?></div>
433
+ <div class="gadash-bright">0</div>
434
+ </div>
435
+ <div class="gadash-bigtext">
436
+ <div class="gadash-bleft"><?php _e( "NEW", 'ga-dash' );?></div>
437
+ <div class="gadash-bright">0</div>
438
+ </div>
439
+ </div>
440
+ </div>
441
+ <div>
442
+ <div id='gadash-pages' class='gadash-pages'>&nbsp;</div>
443
+ </div>
444
+ </div>
445
+ <script type="text/javascript">
446
+
447
+ var focusFlag = 1;
448
+
449
+ jQuery(document).ready(function(){
450
+ jQuery(window).bind("focus",function(event){
451
+ focusFlag = 1;
452
+ }).bind("blur", function(event){
453
+ focusFlag = 0;
454
+ });
455
+ });
456
+
457
+ jQuery(function() {
458
+ jQuery( document ).tooltip();
459
+ });
460
+
461
+ function onlyUniqueValues(value, index, self) {
462
+ return self.indexOf(value) === index;
463
+ }
464
+
465
+ function countsessions(data, searchvalue) {
466
+ var count = 0;
467
+ for ( var i = 0; i < data["rows"].length; i = i + 1 ) {
468
+ if (jQuery.inArray(searchvalue, data["rows"][ i ])>-1){
469
+ count += parseInt(data["rows"][ i ][6]);
470
+ }
471
+ }
472
+ return count;
473
+ }
474
+
475
+ function gadash_generatetooltip(data) {
476
+ var count = 0;
477
+ var table = "";
478
+ for ( var i = 0; i < data.length; i = i + 1 ) {
479
+ count += parseInt(data[ i ].count);
480
+ table += "<tr><td class='gadash-pgdetailsl'>"+data[i].value+"</td><td class='gadash-pgdetailsr'>"+data[ i ].count+"</td></tr>";
481
+ };
482
+ if (count){
483
+ return("<table>"+table+"</table>");
484
+ }else{
485
+ return("");
486
+ }
487
+ }
488
+
489
+ function gadash_pagedetails(data, searchvalue) {
490
+ var newdata = [];
491
+ for ( var i = 0; i < data["rows"].length; i = i + 1 ){
492
+ var sant=1;
493
+ for ( var j = 0; j < newdata.length; j = j + 1 ){
494
+ if (data["rows"][i][0]+data["rows"][i][1]+data["rows"][i][2]+data["rows"][i][3]==newdata[j][0]+newdata[j][1]+newdata[j][2]+newdata[j][3]){
495
+ newdata[j][6] = parseInt(newdata[j][6]) + parseInt(data["rows"][i][6]);
496
+ sant = 0;
497
+ }
498
+ }
499
+ if (sant){
500
+ newdata.push(data["rows"][i].slice());
501
+ }
502
+ }
503
+
504
+ var countrfr = 0;
505
+ var countkwd = 0;
506
+ var countdrt = 0;
507
+ var countscl = 0;
508
+ var countcpg = 0;
509
+ var tablerfr = "";
510
+ var tablekwd = "";
511
+ var tablescl = "";
512
+ var tablecpg = "";
513
+ var tabledrt = "";
514
+ for ( var i = 0; i < newdata.length; i = i + 1 ) {
515
+ if (newdata[i][0] == searchvalue){
516
+ var pagetitle = newdata[i][5];
517
+
518
+ switch (newdata[i][3]){
519
+
520
+ case "REFERRAL": countrfr += parseInt(newdata[ i ][6]);
521
+ tablerfr += "<tr><td class='gadash-pgdetailsl'>"+newdata[i][1]+"</td><td class='gadash-pgdetailsr'>"+newdata[ i ][6]+"</td></tr>";
522
+ break;
523
+ case "ORGANIC": countkwd += parseInt(newdata[ i ][6]);
524
+ tablekwd += "<tr><td class='gadash-pgdetailsl'>"+newdata[i][2]+"</td><td class='gadash-pgdetailsr'>"+newdata[ i ][6]+"</td></tr>";
525
+ break;
526
+ case "SOCIAL": countscl += parseInt(newdata[ i ][6]);
527
+ tablescl += "<tr><td class='gadash-pgdetailsl'>"+newdata[i][1]+"</td><td class='gadash-pgdetailsr'>"+newdata[ i ][6]+"</td></tr>";
528
+ break;
529
+ case "CUSTOM": countcpg += parseInt(newdata[ i ][6]);
530
+ tablecpg += "<tr><td class='gadash-pgdetailsl'>"+newdata[i][1]+"</td><td class='gadash-pgdetailsr'>"+newdata[ i ][6]+"</td></tr>";
531
+ break;
532
+ case "DIRECT": countdrt += parseInt(newdata[ i ][6]);
533
+ break;
534
+ };
535
+ };
536
+ };
537
+ if (countrfr){
538
+ tablerfr = "<table><tr><td><?php _e("REFERRALS", 'ga-dash');?> ("+countrfr+")</td></tr>"+tablerfr+"</table><br />";
539
+ }
540
+ if (countkwd){
541
+ tablekwd = "<table><tr><td><?php _e("KEYWORDS", 'ga-dash');?> ("+countkwd+")</td></tr>"+tablekwd+"</table><br />";
542
+ }
543
+ if (countscl){
544
+ tablescl = "<table><tr><td><?php _e("SOCIAL", 'ga-dash');?> ("+countscl+")</td></tr>"+tablescl+"</table><br />";
545
+ }
546
+ if (countcpg){
547
+ tablecpg = "<table><tr><td><?php _e("CAMPAIGN", 'ga-dash');?> ("+countcpg+")</td></tr>"+tablecpg+"</table><br />";
548
+ }
549
+ if (countdrt){
550
+ tabledrt = "<table><tr><td><?php _e("DIRECT", 'ga-dash');?> ("+countdrt+")</td></tr></table><br />";
551
+ }
552
+ return ("<p><center><strong>"+pagetitle+"</strong></center></p>"+tablerfr+tablekwd+tablescl+tablecpg+tabledrt);
553
+ }
554
+
555
+ function online_refresh(){
556
+ if (focusFlag){
557
+
558
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_realtime", projectId: "<?php echo $projectId;?>", gadashadmin_security_widgetrealtime: "<?php echo wp_create_nonce('gadashadmin_get_realtime');?>"}, function(response){
559
+ var data = jQuery.parseJSON(response);
560
+
561
+ if (jQuery.isNumeric(data) || typeof data === "undefined"){
562
+ data = [];
563
+ data["totalsForAllResults"] = []
564
+ data["totalsForAllResults"]["rt:activeUsers"] = "0";
565
+ data["rows"]= [];
566
+ }
567
+
568
+ if (data["totalsForAllResults"]["rt:activeUsers"]!==document.getElementById("gadash-online").innerHTML){
569
+ jQuery("#gadash-online").fadeOut("slow");
570
+ jQuery("#gadash-online").fadeOut(500);
571
+ jQuery("#gadash-online").fadeOut("slow", function() {
572
+ if ((parseInt(data["totalsForAllResults"]["rt:activeUsers"]))<(parseInt(document.getElementById("gadash-online").innerHTML))){
573
+ jQuery("#gadash-online").css({'background-color' : '#FFE8E8'});
574
+ }else{
575
+ jQuery("#gadash-online").css({'background-color' : '#E0FFEC'});
576
+ }
577
+ document.getElementById("gadash-online").innerHTML = data["totalsForAllResults"]["rt:activeUsers"];
578
+ });
579
+ jQuery("#gadash-online").fadeIn("slow");
580
+ jQuery("#gadash-online").fadeIn(500);
581
+ jQuery("#gadash-online").fadeIn("slow", function() {
582
+ jQuery("#gadash-online").css({'background-color' : '#FFFFFF'});
583
+ });
584
+ };
585
+
586
+ if (data["totalsForAllResults"]["rt:activeUsers"] == 0){
587
+ data["rows"]= [];
588
+ };
589
+
590
+ var pagepath = [];
591
+ var referrals = [];
592
+ var keywords = [];
593
+ var social = [];
594
+ var visittype = [];
595
+ var custom = [];
596
+ for ( var i = 0; i < data["rows"].length; i = i + 1 ) {
597
+ pagepath.push( data["rows"][ i ][0] );
598
+ if (data["rows"][i][3]=="REFERRAL"){
599
+ referrals.push( data["rows"][ i ][1] );
600
+ }
601
+ if (data["rows"][i][3]=="ORGANIC"){
602
+ keywords.push( data["rows"][ i ][2] );
603
+ }
604
+ if (data["rows"][i][3]=="SOCIAL"){
605
+ social.push( data["rows"][ i ][1] );
606
+ }
607
+ if (data["rows"][i][3]=="CUSTOM"){
608
+ custom.push( data["rows"][ i ][1] );
609
+ }
610
+ visittype.push( data["rows"][ i ][3] );
611
+ }
612
+
613
+ var upagepathstats = [];
614
+ var upagepath = pagepath.filter(onlyUniqueValues);
615
+ for ( var i = 0; i < upagepath.length; i = i + 1 ) {
616
+ upagepathstats[i]={"pagepath":upagepath[i],"count":countsessions(data,upagepath[i])};
617
+ }
618
+ upagepathstats.sort( function(a,b){ return b.count - a.count } );
619
+
620
+ var pgstatstable = "";
621
+ for ( var i = 0; i < upagepathstats.length; i = i + 1 ) {
622
+ if (i < <?php echo $GADASH_Config->options['ga_realtime_pages']; ?>){
623
+ pgstatstable += '<div class="gadash-pline"><div class="gadash-pleft"><a href="#" title="'+gadash_pagedetails(data, upagepathstats[i].pagepath)+'">'+upagepathstats[i].pagepath.substring(0,70)+'</a></div><div class="gadash-pright">'+upagepathstats[i].count+'</div></div>';
624
+ }
625
+ }
626
+ document.getElementById("gadash-pages").innerHTML='<br /><div class="gadash-pg">'+pgstatstable+'</div>';
627
+
628
+ var ureferralsstats = [];
629
+ var ureferrals = referrals.filter(onlyUniqueValues);
630
+ for ( var i = 0; i < ureferrals.length; i = i + 1 ) {
631
+ ureferralsstats[i]={"value":ureferrals[i],"count":countsessions(data,ureferrals[i])};
632
+ }
633
+ ureferralsstats.sort( function(a,b){ return b.count - a.count } );
634
+
635
+ var ukeywordsstats = [];
636
+ var ukeywords = keywords.filter(onlyUniqueValues);
637
+ for ( var i = 0; i < ukeywords.length; i = i + 1 ) {
638
+ ukeywordsstats[i]={"value":ukeywords[i],"count":countsessions(data,ukeywords[i])};
639
+ }
640
+ ukeywordsstats.sort( function(a,b){ return b.count - a.count } );
641
+
642
+ var usocialstats = [];
643
+ var usocial = social.filter(onlyUniqueValues);
644
+ for ( var i = 0; i < usocial.length; i = i + 1 ) {
645
+ usocialstats[i]={"value":usocial[i],"count":countsessions(data,usocial[i])};
646
+ }
647
+ usocialstats.sort( function(a,b){ return b.count - a.count } );
648
+
649
+ var ucustomstats = [];
650
+ var ucustom = custom.filter(onlyUniqueValues);
651
+ for ( var i = 0; i < ucustom.length; i = i + 1 ) {
652
+ ucustomstats[i]={"value":ucustom[i],"count":countsessions(data,ucustom[i])};
653
+ }
654
+ ucustomstats.sort( function(a,b){ return b.count - a.count } );
655
+
656
+ var uvisittype = ["REFERRAL","ORGANIC","SOCIAL","CUSTOM"];
657
+ document.getElementById("gadash-tdo-right").innerHTML = '<div class="gadash-bigtext"><a href="#" title="'+gadash_generatetooltip(ureferralsstats)+'"><div class="gadash-bleft">'+'<?php _e("REFERRAL", 'ga-dash');?>'+'</a></div><div class="gadash-bright">'+countsessions(data,uvisittype[0])+'</div></div>';
658
+ document.getElementById("gadash-tdo-right").innerHTML += '<div class="gadash-bigtext"><a href="#" title="'+gadash_generatetooltip(ukeywordsstats)+'"><div class="gadash-bleft">'+'<?php _e("ORGANIC", 'ga-dash');?>'+'</a></div><div class="gadash-bright">'+countsessions(data,uvisittype[1])+'</div></div>';
659
+ document.getElementById("gadash-tdo-right").innerHTML += '<div class="gadash-bigtext"><a href="#" title="'+gadash_generatetooltip(usocialstats)+'"><div class="gadash-bleft">'+'<?php _e("SOCIAL", 'ga-dash');?>'+'</a></div><div class="gadash-bright">'+countsessions(data,uvisittype[2])+'</div></div>';
660
+ document.getElementById("gadash-tdo-right").innerHTML += '<div class="gadash-bigtext"><a href="#" title="'+gadash_generatetooltip(ucustomstats)+'"><div class="gadash-bleft">'+'<?php _e("CAMPAIGN", 'ga-dash');?>'+'</a></div><div class="gadash-bright">'+countsessions(data,uvisittype[3])+'</div></div>';
661
+
662
+ var uvisitortype = ["DIRECT","NEW"];
663
+ document.getElementById("gadash-tdo-right").innerHTML += '<div class="gadash-bigtext"><div class="gadash-bleft">'+'<?php _e("DIRECT", 'ga-dash');?>'+'</div><div class="gadash-bright">'+countsessions(data,uvisitortype[0])+'</div></div>';
664
+ document.getElementById("gadash-tdo-right").innerHTML += '<div class="gadash-bigtext"><div class="gadash-bleft">'+'<?php _e("NEW", 'ga-dash');?>'+'</div><div class="gadash-bright">'+countsessions(data,uvisitortype[1])+'</div></div>';
665
+
666
+ });
667
+ };
668
+ };
669
+ online_refresh();
670
+ setInterval(online_refresh, 60000);
671
+ </script>
672
+ <?php } else if (array_search($query, array('referrers','contentpages','searches')) !== FALSE) {?>
673
+ <div id="gadash-trafficchannels"></div>
674
+ <div id="gadash-prs"></div>
675
+ <script type="text/javascript">
676
+ google.load("visualization", "1", {packages:["table","orgchart"]})
677
+ NProgress.configure({ parent: "#gadash-progressbar" });
678
+ NProgress.configure({ showSpinner: false });
679
+ NProgress.start();
680
+ npcounter = 0;
681
+
682
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "<?php echo $query; ?>",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
683
+
684
+ if (!jQuery.isNumeric(response)){
685
+ gadash_prs=jQuery.parseJSON(response);
686
+ google.setOnLoadCallback(ga_dash_drawprs(gadash_prs));
687
+ }else{
688
+ jQuery("#gadash-prs").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
689
+ jQuery("#gadash-prs").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
690
+ checknpcounter(1);
691
+ }
692
+ });
693
+
694
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "trafficchannels",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
695
+
696
+ if (!jQuery.isNumeric(response)){
697
+ gadash_trafficchannels=jQuery.parseJSON(response);
698
+ google.setOnLoadCallback(ga_dash_drawtrafficchannels(gadash_trafficchannels));
699
+ }else{
700
+ jQuery("#gadash-trafficchannels").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
701
+ jQuery("#gadash-trafficchannels").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
702
+ checknpcounter(1);
703
+ }
704
+ });
705
+
706
+ function ga_dash_drawprs(gadash_prs) {
707
+ var data = google.visualization.arrayToDataTable(gadash_prs);
708
+ var options = {
709
+ page: 'enable',
710
+ pageSize: 10,
711
+ width: '100%',
712
+ allowHtml:true
713
+ };
714
+
715
+ var chart = new google.visualization.Table(document.getElementById('gadash-prs'));
716
+ chart.draw(data, options);
717
+ checknpcounter(1);
718
+ };
719
+
720
+ function ga_dash_drawtrafficchannels(gadash_trafficchannels) {
721
+ var data = google.visualization.arrayToDataTable(gadash_trafficchannels);
722
+ var options = {
723
+ allowCollapse:true,
724
+ allowHtml:true
725
+ };
726
+
727
+ var chart = new google.visualization.OrgChart(document.getElementById('gadash-trafficchannels'));
728
+ chart.draw(data, options);
729
+ checknpcounter(1);
730
+ };
731
+ </script>
732
+ <?php } else if ($query == 'trafficdetails') {?>
733
+ <div id="gadash-trafficchannels"></div>
734
+ <div class="gadash-floatwraper">
735
+ <div id="gadash-trafficmediums"></div>
736
+ <div id="gadash-traffictype"></div>
737
+ </div>
738
+ <div class="gadash-floatwraper">
739
+ <div id="gadash-trafficorganic"></div>
740
+ <div id="gadash-socialnetworks"></div>
741
+ </div>
742
+ <script type="text/javascript">
743
+ google.load("visualization", "1", {packages:["corechart","orgchart"]});
744
+ NProgress.configure({ parent: "#gadash-progressbar" });
745
+ NProgress.configure({ showSpinner: false });
746
+ NProgress.start();
747
+ npcounter = 0;
748
+
749
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "medium",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
750
+
751
+ if (!jQuery.isNumeric(response)){
752
+ gadash_trafficmediums=jQuery.parseJSON(response);
753
+ google.setOnLoadCallback(ga_dash_drawtrafficmediums(gadash_trafficmediums));
754
+ }else{
755
+ jQuery("#gadash-trafficmediums").css({"background-color":"#F7F7F7","height":"auto","padding-top":"80px","padding-bottom":"80px","color":"#000","text-align":"center"});
756
+ jQuery("#gadash-trafficmediums").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
757
+ checknpcounter(4);
758
+ }
759
+ });
760
+
761
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "visitorType",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
762
+
763
+ if (!jQuery.isNumeric(response)){
764
+ gadash_traffictype=jQuery.parseJSON(response);
765
+ google.setOnLoadCallback(ga_dash_drawtraffictype(gadash_traffictype));
766
+ }else{
767
+ jQuery("#gadash-traffictype").css({"background-color":"#F7F7F7","height":"auto","padding-top":"80px","padding-bottom":"80px","color":"#000","text-align":"center"});
768
+ jQuery("#gadash-traffictype").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
769
+ checknpcounter(4);
770
+ }
771
+ });
772
+
773
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "trafficchannels",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
774
+
775
+ if (!jQuery.isNumeric(response)){
776
+ gadash_trafficchannels=jQuery.parseJSON(response);
777
+ google.setOnLoadCallback(ga_dash_drawtrafficchannels(gadash_trafficchannels));
778
+ }else{
779
+ jQuery("#gadash-trafficchannels").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
780
+ jQuery("#gadash-trafficchannels").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
781
+ checknpcounter(4);
782
+ }
783
+ });
784
+
785
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "socialNetwork",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
786
+
787
+ if (!jQuery.isNumeric(response)){
788
+ gadash_socialnetworks=jQuery.parseJSON(response);
789
+ google.setOnLoadCallback(ga_dash_drawsocialnetworks(gadash_socialnetworks));
790
+ }else{
791
+ jQuery("#gadash-socialnetworks").css({"background-color":"#F7F7F7","height":"auto","padding-top":"80px","padding-bottom":"80px","color":"#000","text-align":"center"});
792
+ jQuery("#gadash-socialnetworks").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
793
+ checknpcounter(4);
794
+ }
795
+ });
796
+
797
+
798
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "source",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
799
+
800
+ if (!jQuery.isNumeric(response)){
801
+ gadash_trafficorganic=jQuery.parseJSON(response);
802
+ google.setOnLoadCallback(ga_dash_drawtrafficorganic(gadash_trafficorganic));
803
+ }else{
804
+ jQuery("#gadash-trafficorganic").css({"background-color":"#F7F7F7","height":"auto","padding-top":"80px","padding-bottom":"80px","color":"#000","text-align":"center"});
805
+ jQuery("#gadash-trafficorganic").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
806
+ checknpcounter(4);
807
+ }
808
+ });
809
+
810
+ function ga_dash_drawtrafficmediums(gadash_trafficmediums) {
811
+ var data = google.visualization.arrayToDataTable(gadash_trafficmediums);
812
+ var options = {
813
+ is3D: false,
814
+ tooltipText: 'percentage',
815
+ legend: 'none',
816
+ chartArea: {width: '99%',height: '80%'},
817
+ title: '<?php _e( "Traffic Mediums", 'ga-dash' ); ?>',
818
+ colors:['<?php echo esc_html($GADASH_Config->options ['ga_dash_style']); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 20 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 20 )); ?>']
819
+ };
820
+
821
+ var chart = new google.visualization.PieChart(document.getElementById('gadash-trafficmediums'));
822
+ chart.draw(data, options);
823
+ checknpcounter(4);
824
+ };
825
+
826
+ function ga_dash_drawtraffictype(gadash_traffictype) {
827
+ var data = google.visualization.arrayToDataTable(gadash_traffictype);
828
+ var options = {
829
+ is3D: false,
830
+ tooltipText: 'percentage',
831
+ legend: 'none',
832
+ chartArea: {width: '99%',height: '80%'},
833
+ title: '<?php _e( "Visitor Type", 'ga-dash' ); ?>',
834
+ colors:['<?php echo esc_html($GADASH_Config->options ['ga_dash_style']); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 20 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 20 )); ?>']
835
+ };
836
+
837
+ var chart = new google.visualization.PieChart(document.getElementById('gadash-traffictype'));
838
+ chart.draw(data, options);
839
+ checknpcounter(4);
840
+ };
841
+
842
+ function ga_dash_drawsocialnetworks(gadash_socialnetworks) {
843
+ var data = google.visualization.arrayToDataTable(gadash_socialnetworks);
844
+ var options = {
845
+ is3D: false,
846
+ tooltipText: 'percentage',
847
+ legend: 'none',
848
+ chartArea: {width: '99%',height: '80%'},
849
+ title: '<?php _e( "Social Networks", 'ga-dash' ); ?>',
850
+ colors:['<?php echo esc_html($GADASH_Config->options ['ga_dash_style']); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 20 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 20 )); ?>']
851
+ };
852
+
853
+ var chart = new google.visualization.PieChart(document.getElementById('gadash-socialnetworks'));
854
+ chart.draw(data, options);
855
+ checknpcounter(4);
856
+ };
857
+
858
+ function ga_dash_drawtrafficorganic(gadash_trafficorganic) {
859
+ var data = google.visualization.arrayToDataTable(gadash_trafficorganic);
860
+ var options = {
861
+ is3D: false,
862
+ tooltipText: 'percentage',
863
+ legend: 'none',
864
+ chartArea: {width: '99%',height: '80%'},
865
+ title: '<?php _e( "Search Engines", 'ga-dash' ); ?>',
866
+ colors:['<?php echo esc_html($GADASH_Config->options ['ga_dash_style']); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 20 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], + 10 )); ?>','<?php echo esc_html($tools->colourVariator ( $GADASH_Config->options ['ga_dash_style'], - 20 )); ?>']
867
+ };
868
+
869
+ var chart = new google.visualization.PieChart(document.getElementById('gadash-trafficorganic'));
870
+ chart.draw(data, options);
871
+ checknpcounter(4);
872
+ };
873
+
874
+ function ga_dash_drawtrafficchannels(gadash_trafficchannels) {
875
+ var data = google.visualization.arrayToDataTable(gadash_trafficchannels);
876
+ var options = {
877
+ allowCollapse:true,
878
+ allowHtml:true
879
+ };
880
+
881
+ var chart = new google.visualization.OrgChart(document.getElementById('gadash-trafficchannels'));
882
+ chart.draw(data, options);
883
+ checknpcounter(4);
884
+ };
885
+ </script>
886
+ <?php } else if ($query == 'locations') {?>
887
+ <div id="gadash-map"></div>
888
+ <div id="gadash-locations"></div>
889
+ <script type="text/javascript">
890
+ google.load("visualization", "1", {packages:["geochart","table"]});
891
+ NProgress.configure({ parent: "#gadash-progressbar" });
892
+ NProgress.configure({ showSpinner: false });
893
+ NProgress.start();
894
+ npcounter = 0;
895
+
896
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "<?php echo $query; ?>",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
897
+
898
+ if (!jQuery.isNumeric(response)){
899
+ gadash_locations=jQuery.parseJSON(response);
900
+ google.setOnLoadCallback(ga_dash_drawmaplocations(gadash_locations));
901
+ google.setOnLoadCallback(ga_dash_drawlocations(gadash_locations));
902
+ }else{
903
+ jQuery("#gadash-map").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
904
+ jQuery("#gadash-map").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
905
+ checknpcounter(1);
906
+ jQuery("#gadash-locations").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
907
+ jQuery("#gadash-locations").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
908
+ checknpcounter(1);
909
+ }
910
+ });
911
+ function ga_dash_drawmaplocations(gadash_locations) {
912
+
913
+ var data = google.visualization.arrayToDataTable(gadash_locations);
914
+
915
+ var options = {
916
+ chartArea: {width: '99%',height: '90%'},
917
+ colors: ['<?php echo $light_color; ?>', '<?php echo $dark_color; ?>'],
918
+ <?php
919
+ $GADASH_GAPI->getcountrycodes();
920
+ if ($GADASH_Config->options['ga_target_geomap'] and isset($GADASH_GAPI->country_codes[$GADASH_Config->options['ga_target_geomap']])) {
921
+ ?>
922
+ region : '<?php echo esc_html($GADASH_Config->options ['ga_target_geomap']); ?>',
923
+ displayMode : 'markers',
924
+ datalessRegionColor : 'EFEFEF'
925
+ <?php } ?>
926
+ }
927
+ var chart = new google.visualization.GeoChart(document.getElementById('gadash-map'));
928
+ chart.draw(data, options);
929
+ checknpcounter(1);
930
+ }
931
+
932
+ function ga_dash_drawlocations(gadash_locations) {
933
+ var data = google.visualization.arrayToDataTable(gadash_locations);
934
+ var options = {
935
+ page: 'enable',
936
+ pageSize: 10,
937
+ width: '100%',
938
+ allowHtml:true
939
+ };
940
+
941
+ var chart = new google.visualization.Table(document.getElementById('gadash-locations'));
942
+ chart.draw(data, options);
943
+ checknpcounter(1);
944
+ };
945
+ </script>
946
+ <?php } else {?>
947
+ <div id="gadash-mainchart"></div>
948
+ <div id="gadash-bottomstats" class="gadash-wrapper">
949
+ <div class="inside">
950
+ <div class="small-box">
951
+ <h3><?php _e( "Sessions", 'ga-dash' );?></h3>
952
+ <p id="gdsessions">&nbsp;</p>
953
+ </div>
954
+ <div class="small-box">
955
+ <h3><?php _e( "Users", 'ga-dash' );?></h3>
956
+ <p id="gdusers">&nbsp;</p>
957
+ </div>
958
+ <div class="small-box">
959
+ <h3><?php _e( "Page Views", 'ga-dash' );?></h3>
960
+ <p id="gdpageviews">&nbsp;</p>
961
+ </div>
962
+ <div class="small-box">
963
+ <h3><?php _e( "Bounce Rate", 'ga-dash' );?></h3>
964
+ <p id="gdbouncerate">&nbsp;</p>
965
+ </div>
966
+ <div class="small-box">
967
+ <h3><?php _e( "Organic Search", 'ga-dash' );?></h3>
968
+ <p id="gdorganicsearch">&nbsp;</p>
969
+ </div>
970
+ <div class="small-box">
971
+ <h3><?php _e( "Pages/Session", 'ga-dash' );?></h3>
972
+ <p id="gdpagespervisit">&nbsp;</p>
973
+ </div>
974
+ </div>
975
+ </div>
976
+ <script type="text/javascript">
977
+
978
+ google.load("visualization", "1", {packages:["corechart"]})
979
+ NProgress.configure({ parent: "#gadash-progressbar" });
980
+ NProgress.configure({ showSpinner: false });
981
+ NProgress.start();
982
+ npcounter = 0;
983
+
984
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "<?php echo $query; ?>",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
985
+
986
+ if (!jQuery.isNumeric(response)){
987
+ gadash_mainchart=jQuery.parseJSON(response);
988
+ google.setOnLoadCallback(ga_dash_drawmainchart(gadash_mainchart));
989
+ }else{
990
+ jQuery("#gadash-mainchart").css({"background-color":"#F7F7F7","height":"auto","padding-top":"125px","padding-bottom":"125px","color":"#000","text-align":"center"});
991
+ jQuery("#gadash-mainchart").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
992
+ checknpcounter(1);
993
+ }
994
+ });
995
+
996
+ jQuery.post(ajaxurl, {action: "gadashadmin_get_widgetreports",projectId: "<?php echo $projectId; ?>",from: "<?php echo $from; ?>",to: "<?php echo $to; ?>",query: "bottomstats",gadashadmin_security_widget_reports: "<?php echo wp_create_nonce('gadashadmin_get_widgetreports'); ?>"}, function(response){
997
+
998
+ if (!jQuery.isNumeric(response)){
999
+ gadash_bottomstats=jQuery.parseJSON(response);
1000
+ ga_dash_drawbottomstats(gadash_bottomstats);
1001
+ }else{
1002
+ jQuery("#gadash-bottomstats").css({"background-color":"#F7F7F7","height":"auto","padding-top":"40px","padding-bottom":"40px","color":"#000","text-align":"center","width": "98%"});
1003
+ jQuery("#gadash-bottomstats").html("<?php _e("This report is unavailable", 'ga-dash'); ?> ("+response+")");
1004
+ checknpcounter(1);
1005
+ }
1006
+ });
1007
+
1008
+ function ga_dash_drawbottomstats(gadash_bottomstats) {
1009
+ jQuery("#gadash-bottomstats #gdsessions").text(gadash_bottomstats[0]);
1010
+ jQuery("#gadash-bottomstats #gdusers").text(gadash_bottomstats[1]);
1011
+ jQuery("#gadash-bottomstats #gdpageviews").text(gadash_bottomstats[2]);
1012
+ jQuery("#gadash-bottomstats #gdbouncerate").text(parseFloat(gadash_bottomstats[3]).toFixed(2)+"%");
1013
+ jQuery("#gadash-bottomstats #gdorganicsearch").text(gadash_bottomstats[4]);
1014
+ jQuery("#gadash-bottomstats #gdpagespervisit").text(parseFloat(gadash_bottomstats[5]).toFixed(2));
1015
+ checknpcounter(1);
1016
+ }
1017
+
1018
+ function ga_dash_drawmainchart(gadash_mainchart) {
1019
+
1020
+ var data = google.visualization.arrayToDataTable(gadash_mainchart);
1021
+
1022
+ var options = {
1023
+ legend: {position: 'none'},
1024
+ pointSize: 3,<?php echo $css;?>
1025
+ chartArea: {width: '99%',height: '90%'},
1026
+ vAxis: { textPosition: "in", minValue: 0},
1027
+ hAxis: { textPosition: 'none' }
1028
+ };
1029
+ <?php echo $formater?>
1030
+ var chart = new google.visualization.AreaChart(document.getElementById('gadash-mainchart'));
1031
+ chart.draw(data, options);
1032
+ checknpcounter(1);
1033
+ };
1034
+ </script>
1035
+ <?php
1036
+ }
1037
+ }
1038
+ }
1039
+ }
1040
+
1041
+ if (is_admin()) {
1042
+ $GADASH_Widgets = new GADASH_Widgets();
1043
+ }
admin/ga_dash_settings.php ADDED
@@ -0,0 +1,1529 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Author: Alin Marcu
5
+ * Author URI: https://deconf.com
6
+ * License: GPLv2 or later
7
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
+ */
9
+ final class GADASH_Settings
10
+ {
11
+
12
+ private static function set_get_options($who)
13
+ {
14
+ global $GADASH_Config;
15
+ $network_settings = false;
16
+ $options = $GADASH_Config->options; // Get current options
17
+ if (isset($_POST['options']['ga_dash_hidden']) and isset($_POST['options']) and (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) and $who != 'Reset') {
18
+ $new_options = $_POST['options'];
19
+ if ($who == 'tracking') {
20
+ $options['ga_dash_anonim'] = 0;
21
+ $options['ga_event_tracking'] = 0;
22
+ $options['ga_enhanced_links'] = 0;
23
+ $options['ga_dash_remarketing'] = 0;
24
+ $options['ga_dash_adsense'] = 0;
25
+ $options['ga_event_bouncerate'] = 0;
26
+ $options['ga_crossdomain_tracking'] = 0;
27
+ $options['ga_aff_tracking'] = 0;
28
+ $options['ga_hash_tracking'] = 0;
29
+ if (isset($_POST['options']['ga_tracking_code'])) {
30
+ $new_options['ga_tracking_code'] = trim($new_options['ga_tracking_code'], "\t");
31
+ }
32
+ if (empty($new_options['ga_track_exclude'])) {
33
+ $new_options['ga_track_exclude'] = array();
34
+ }
35
+ } else
36
+ if ($who == 'backend') {
37
+ $options['ga_dash_jailadmins'] = 0;
38
+ if (empty($new_options['ga_dash_access_back'])) {
39
+ $new_options['ga_dash_access_back'][] = 'administrator';
40
+ }
41
+ } else
42
+ if ($who == 'frontend') {
43
+ $options['ga_dash_frontend_stats'] = 0;
44
+ $options['ga_dash_frontend_keywords'] = 0;
45
+ if (empty($new_options['ga_dash_access_front'])) {
46
+ $new_options['ga_dash_access_front'][] = 'administrator';
47
+ }
48
+ } else
49
+ if ($who == 'general') {
50
+ $options['ga_dash_userapi'] = 0;
51
+ } else
52
+ if ($who == 'network') {
53
+ $options['ga_dash_userapi'] = 0;
54
+ $options['ga_dash_network'] = 0;
55
+ $options['ga_dash_excludesa'] = 0;
56
+ $network_settings = true;
57
+ }
58
+ $options = array_merge($options, $new_options);
59
+ $GADASH_Config->options = $options;
60
+ $GADASH_Config->set_plugin_options($network_settings);
61
+ }
62
+ return $options;
63
+ }
64
+
65
+ public static function frontend_settings()
66
+ {
67
+ global $GADASH_Config;
68
+ if (! current_user_can('manage_options')) {
69
+ return;
70
+ }
71
+ $options = self::set_get_options('frontend');
72
+ if (isset($_POST['options']['ga_dash_hidden'])) {
73
+ $message = "<div class='updated'><p><strong>" . __("Settings saved.", 'ga-dash') . "</strong></p></div>";
74
+ if (! (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form'))) {
75
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
76
+ }
77
+ }
78
+ if (! $GADASH_Config->options['ga_dash_tableid_jail'] or ! $GADASH_Config->options['ga_dash_token']) {
79
+ $message = "<div class='error'><p><strong>" . __("Something went wrong, you need to", 'ga-dash') . "</strong> <a href='" . menu_page_url('gadash_settings', false) . "'>" . __('auhorize the plugin', 'ga-dash') . "</a><strong> " . __("or properly configure your", 'ga-dash') . '</strong> <a href="https://deconf.com/how-to-set-up-google-analytics-on-your-website/" target="_blank">' . __('Google Analytics account', 'ga-dash') . "</a>" . "<stong>!</strong></p></div>";
80
+ }
81
+ ?>
82
+ <form name="ga_dash_form" method="post"
83
+ action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>">
84
+ <div class="wrap">
85
+ <?php echo "<h2>" . __( "Google Analytics Frontend Settings", 'ga-dash' ) . "</h2>"; ?><hr>
86
+ </div>
87
+ <div id="poststuff">
88
+ <div id="post-body" class="metabox-holder columns-2">
89
+ <div id="post-body-content">
90
+ <div class="settings-wrapper">
91
+ <div class="inside">
92
+ <?php if (isset($message)) echo $message; ?>
93
+ <table class="options">
94
+ <tr>
95
+ <td colspan="2"><?php echo "<h2>" . __( "General Settings", 'ga-dash' ) . "</h2>"; ?></td>
96
+ </tr>
97
+ <tr>
98
+ <td class="roles title"><label for="ga_dash_access_front"><?php _e("Show stats to:", 'ga-dash' ); ?></label></td>
99
+ <td class="roles">
100
+ <?php
101
+ if (! isset($wp_roles)) {
102
+ $wp_roles = new WP_Roles();
103
+ }
104
+ $i = 0;
105
+ ?>
106
+ <table>
107
+ <tr>
108
+ <?php
109
+ foreach ($wp_roles->role_names as $role => $name) {
110
+ if ($role != 'subscriber') {
111
+ $i ++;
112
+ ?>
113
+ <td><label> <input
114
+ type="checkbox" name="options[ga_dash_access_front][]"
115
+ value="<?php echo $role; ?>"
116
+ <?php if (in_array($role,$options['ga_dash_access_front']) OR $role=='administrator') echo 'checked="checked"'; if ($role=='administrator') echo 'disabled="disabled"';?> />
117
+ <?php echo $name; ?>
118
+ </label></td>
119
+ <?php
120
+ }
121
+ if ($i % 4 == 0) {
122
+ ?>
123
+ </tr>
124
+ <tr>
125
+ <?php
126
+ }
127
+ }
128
+ ?>
129
+
130
+
131
+
132
+
133
+ </table>
134
+ </td>
135
+ </tr>
136
+ <tr>
137
+ <td colspan="2" class="title">
138
+ <div class="onoffswitch">
139
+ <input type="checkbox" name="options[ga_dash_frontend_stats]"
140
+ value="1" class="onoffswitch-checkbox"
141
+ id="ga_dash_frontend_stats"
142
+ <?php checked( $options['ga_dash_frontend_stats'], 1 ); ?>> <label
143
+ class="onoffswitch-label" for="ga_dash_frontend_stats">
144
+ <div class="onoffswitch-inner"></div>
145
+ <div class="onoffswitch-switch"></div>
146
+ </label>
147
+ </div>
148
+ <div class="switch-desc"><?php _e ( " show page sessions and users in frontend (after each article)", 'ga-dash' );?></div>
149
+ </td>
150
+ </tr>
151
+ <tr>
152
+ <td colspan="2" class="title">
153
+ <div class="onoffswitch">
154
+ <input type="checkbox"
155
+ name="options[ga_dash_frontend_keywords]" value="1"
156
+ class="onoffswitch-checkbox" id="ga_dash_frontend_keywords"
157
+ <?php checked( $options['ga_dash_frontend_keywords'], 1 ); ?>>
158
+ <label class="onoffswitch-label"
159
+ for="ga_dash_frontend_keywords">
160
+ <div class="onoffswitch-inner"></div>
161
+ <div class="onoffswitch-switch"></div>
162
+ </label>
163
+ </div>
164
+ <div class="switch-desc"><?php _e ( " show page searches (after each article)", 'ga-dash' );?></div>
165
+ </td>
166
+ </tr>
167
+ <tr>
168
+ <td colspan="2"><hr></td>
169
+ </tr>
170
+ <tr>
171
+ <td colspan="2" class="submit"><input type="submit"
172
+ name="Submit" class="button button-primary"
173
+ value="<?php _e('Save Changes', 'ga-dash' ) ?>" /></td>
174
+ </tr>
175
+ </table>
176
+ <input type="hidden" name="options[ga_dash_hidden]" value="Y">
177
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
178
+
179
+
180
+
181
+
182
+ </form>
183
+ <?php
184
+ self::output_sidebar();
185
+ }
186
+
187
+ public static function backend_settings()
188
+ {
189
+ global $GADASH_Config;
190
+ if (! current_user_can('manage_options')) {
191
+ return;
192
+ }
193
+ $options = self::set_get_options('backend');
194
+ if (isset($_POST['options']['ga_dash_hidden'])) {
195
+ $message = "<div class='updated'><p><strong>" . __("Settings saved.", 'ga-dash') . "</strong></p></div>";
196
+ if (! (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form'))) {
197
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
198
+ }
199
+ }
200
+ if (! $GADASH_Config->options['ga_dash_tableid_jail'] or ! $GADASH_Config->options['ga_dash_token']) {
201
+ $message = "<div class='error'><p><strong>" . __("Something went wrong, you need to", 'ga-dash') . "</strong> <a href='" . menu_page_url('gadash_settings', false) . "'>" . __('auhorize the plugin', 'ga-dash') . "</a><strong> " . __("or properly configure your", 'ga-dash') . '</strong> <a href="https://deconf.com/how-to-set-up-google-analytics-on-your-website/" target="_blank">' . __('Google Analytics account', 'ga-dash') . "</a>" . "<stong>!</strong></p></div>";
202
+ }
203
+ ?>
204
+ <form name="ga_dash_form" method="post"
205
+ action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>">
206
+ <div class="wrap">
207
+ <?php echo "<h2>" . __( "Google Analytics Dashboard Settings", 'ga-dash' ) . "</h2>"; ?><hr>
208
+ </div>
209
+ <div id="poststuff">
210
+ <div id="post-body" class="metabox-holder columns-2">
211
+ <div id="post-body-content">
212
+ <div class="settings-wrapper">
213
+ <div class="inside">
214
+ <?php if (isset($message)) echo $message; ?>
215
+ <table class="options">
216
+ <tr>
217
+ <td colspan="2"><?php echo "<h2>" . __( "General Settings", 'ga-dash' ) . "</h2>"; ?></td>
218
+ </tr>
219
+ <tr>
220
+ <td class="roles title"><label for="ga_dash_access_back"><?php _e("Show stats to:", 'ga-dash' ); ?></label></td>
221
+ <td class="roles">
222
+ <?php
223
+ if (! isset($wp_roles)) {
224
+ $wp_roles = new WP_Roles();
225
+ }
226
+ $i = 0;
227
+ ?>
228
+ <table>
229
+ <tr>
230
+ <?php
231
+ foreach ($wp_roles->role_names as $role => $name) {
232
+ if ($role != 'subscriber') {
233
+ $i ++;
234
+ ?>
235
+ <td><label> <input
236
+ type="checkbox" name="options[ga_dash_access_back][]"
237
+ value="<?php echo $role; ?>"
238
+ <?php if (in_array($role,$options['ga_dash_access_back']) OR $role=='administrator') echo 'checked="checked"'; if ($role=='administrator') echo 'disabled="disabled"';?> />
239
+ <?php echo $name; ?>
240
+ </label></td>
241
+ <?php
242
+ }
243
+ if ($i % 4 == 0) {
244
+ ?>
245
+ </tr>
246
+ <tr>
247
+ <?php
248
+ }
249
+ }
250
+ ?>
251
+
252
+
253
+
254
+
255
+ </table>
256
+ </td>
257
+ </tr>
258
+ <tr>
259
+ <td colspan="2" class="title">
260
+ <div class="onoffswitch">
261
+ <input type="checkbox" name="options[ga_dash_jailadmins]"
262
+ value="1" class="onoffswitch-checkbox"
263
+ id="ga_dash_jailadmins"
264
+ <?php checked( $options['ga_dash_jailadmins'], 1 ); ?>> <label
265
+ class="onoffswitch-label" for="ga_dash_jailadmins">
266
+ <div class="onoffswitch-inner"></div>
267
+ <div class="onoffswitch-switch"></div>
268
+ </label>
269
+ </div>
270
+ <div class="switch-desc"><?php _e ( "disable Switch Profile/View functionality", 'ga-dash' );?></div>
271
+ </td>
272
+ </tr>
273
+ <tr>
274
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Real-Time Settings", 'ga-dash' ) . "</h2>"; ?></td>
275
+ </tr>
276
+ <tr>
277
+ <td colspan="2" class="title"> <?php _e("Maximum number of pages to display on real-time tab:", 'ga-dash'); ?>
278
+ <input type="number" name="options[ga_realtime_pages]"
279
+ id="ga_realtime_pages"
280
+ value="<?php echo (int)$options['ga_realtime_pages']; ?>"
281
+ size="3">
282
+ <?php echo '('.__("find out more", 'ga-dash')?> <a
283
+ href="https://deconf.com/google-analytics-dashboard-real-time-reports/"
284
+ target="_blank"><?php _e("about this feature", 'ga-dash') ?></a>
285
+ )
286
+ </td>
287
+ </tr>
288
+ <tr>
289
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Location Settings", 'ga-dash' ) . "</h2>"; ?></td>
290
+ </tr>
291
+ <tr>
292
+ <td colspan="2" class="title">
293
+ <?php echo __("Target Geo Map to country:", 'ga-dash'); ?>
294
+ <input type="text" style="text-align: center;"
295
+ name="options[ga_target_geomap]"
296
+ value="<?php echo esc_attr($options['ga_target_geomap']); ?>"
297
+ size="3">
298
+ <?php echo '('.__("find out more", 'ga-dash')?>
299
+ <a
300
+ href="https://deconf.com/country-codes-for-google-analytics-dashboard/"
301
+ target="_blank"><?php _e("about this feature", 'ga-dash') ?></a>
302
+ )
303
+ </td>
304
+ </tr>
305
+ <tr>
306
+ <td colspan="2"><hr></td>
307
+ </tr>
308
+ <tr>
309
+ <td colspan="2" class="submit"><input type="submit"
310
+ name="Submit" class="button button-primary"
311
+ value="<?php _e('Save Changes', 'ga-dash' ) ?>" /></td>
312
+ </tr>
313
+ </table>
314
+ <input type="hidden" name="options[ga_dash_hidden]" value="Y">
315
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
316
+
317
+
318
+
319
+
320
+ </form>
321
+ <?php
322
+ self::output_sidebar();
323
+ }
324
+
325
+ public static function tracking_settings()
326
+ {
327
+ global $GADASH_Config;
328
+ /*
329
+ * Include Tools
330
+ */
331
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
332
+ $tools = new GADASH_Tools();
333
+ if (! current_user_can('manage_options')) {
334
+ return;
335
+ }
336
+ $options = self::set_get_options('tracking');
337
+ if (isset($_POST['options']['ga_dash_hidden'])) {
338
+ $message = "<div class='updated'><p><strong>" . __("Settings saved.", 'ga-dash') . "</strong></p></div>";
339
+ if (! (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form'))) {
340
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
341
+ }
342
+ }
343
+ if (! $GADASH_Config->options['ga_dash_tableid_jail'] or ! $GADASH_Config->options['ga_dash_token']) {
344
+ $message = "<div class='error'><p><strong>" . __("Something went wrong, you need to", 'ga-dash') . "</strong> <a href='" . menu_page_url('gadash_settings', false) . "'>" . __('auhorize the plugin', 'ga-dash') . "</a><strong> " . __("or properly configure your", 'ga-dash') . '</strong> <a href="https://deconf.com/how-to-set-up-google-analytics-on-your-website/" target="_blank">' . __('Google Analytics account', 'ga-dash') . "</a>" . "<stong>!</strong></p></div>";
345
+ }
346
+ ?>
347
+ <form name="ga_dash_form" method="post"
348
+ action="<?php esc_url($_SERVER['REQUEST_URI']); ?>">
349
+ <div class="wrap">
350
+ <?php echo "<h2>" . __( "Google Analytics Tracking Code", 'ga-dash' ) . "</h2>"; ?><hr>
351
+ </div>
352
+ <div id="poststuff">
353
+ <div id="post-body" class="metabox-holder columns-2">
354
+ <div id="post-body-content">
355
+ <div class="settings-wrapper">
356
+ <div class="inside">
357
+ <?php if (isset($message)) echo $message; ?>
358
+ <table class="options">
359
+ <tr>
360
+ <td colspan="2"><?php echo "<h2>" . __( "Tracking Settings", 'ga-dash' ) . "</h2>"; ?></td>
361
+ </tr>
362
+ <tr>
363
+ <td class="title"><label for="ga_dash_tracking"><?php _e("Tracking Options:", 'ga-dash' ); ?></label></td>
364
+ <td><select id="ga_dash_tracking"
365
+ name="options[ga_dash_tracking]" onchange="this.form.submit()">
366
+ <option value="0"
367
+ <?php selected( $options['ga_dash_tracking'], 0 ); ?>><?php _e("Disabled", 'ga-dash');?></option>
368
+ <option value="1"
369
+ <?php selected( $options['ga_dash_tracking'], 1 ); ?>><?php _e("Enabled", 'ga-dash');?></option>
370
+ </select></td>
371
+ </tr>
372
+ <?php
373
+ if ($options['ga_dash_tracking'] == 1) {
374
+ ?>
375
+ <tr>
376
+ <td class="title"></td>
377
+ <td><?php
378
+ $profile_info = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
379
+ echo '<pre>' . __("View Name:", 'ga-dash') . "\t" . esc_html($profile_info[0]) . "<br />" . __("Tracking ID:", 'ga-dash') . "\t" . esc_html($profile_info[2]) . "<br />" . __("Default URL:", 'ga-dash') . "\t" . esc_html($profile_info[3]) . "<br />" . __("Time Zone:", 'ga-dash') . "\t" . esc_html($profile_info[5]) . '</pre>';
380
+ ?></td>
381
+ </tr>
382
+ <?php
383
+ }
384
+ if ($options['ga_dash_tracking']) {
385
+ ?>
386
+ <tr>
387
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Basic Tracking", 'ga-dash' ) . "</h2>"; ?></td>
388
+ </tr>
389
+ <?php
390
+ if ($options['ga_dash_tracking'] == 1) {
391
+ ?>
392
+ <tr>
393
+ <td class="title"><label for="ga_dash_tracking_type"><?php _e("Tracking Type:", 'ga-dash' ); ?></label></td>
394
+ <td><select id="ga_dash_tracking_type"
395
+ name="options[ga_dash_tracking_type]">
396
+ <option value="classic"
397
+ <?php selected( $options['ga_dash_tracking_type'], 'classic' ); ?>><?php _e("Classic Analytics", 'ga-dash');?></option>
398
+ <option value="universal"
399
+ <?php selected( $options['ga_dash_tracking_type'], 'universal' ); ?>><?php _e("Universal Analytics", 'ga-dash');?></option>
400
+ </select></td>
401
+ </tr>
402
+ <tr>
403
+ <td colspan="2" class="title">
404
+ <div class="onoffswitch">
405
+ <input type="checkbox" name="options[ga_dash_anonim]"
406
+ value="1" class="onoffswitch-checkbox" id="ga_dash_anonim"
407
+ <?php checked( $options['ga_dash_anonim'], 1 ); ?>> <label
408
+ class="onoffswitch-label" for="ga_dash_anonim">
409
+ <div class="onoffswitch-inner"></div>
410
+ <div class="onoffswitch-switch"></div>
411
+ </label>
412
+ </div>
413
+ <div class="switch-desc"><?php _e ( " anonymize IPs while tracking", 'ga-dash' );?></div>
414
+ </td>
415
+ </tr>
416
+ <tr>
417
+ <td colspan="2" class="title">
418
+ <div class="onoffswitch">
419
+ <input type="checkbox" name="options[ga_dash_remarketing]"
420
+ value="1" class="onoffswitch-checkbox"
421
+ id="ga_dash_remarketing"
422
+ <?php checked( $options['ga_dash_remarketing'], 1 ); ?>> <label
423
+ class="onoffswitch-label" for="ga_dash_remarketing">
424
+ <div class="onoffswitch-inner"></div>
425
+ <div class="onoffswitch-switch"></div>
426
+ </label>
427
+ </div>
428
+ <div class="switch-desc"><?php _e ( " enable remarketing, demographics and interests reports", 'ga-dash' );?></div>
429
+ </td>
430
+ </tr>
431
+ <tr>
432
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Events Tracking", 'ga-dash' ) . "</h2>"; ?></td>
433
+ </tr>
434
+ <tr>
435
+ <td colspan="2" class="title">
436
+ <div class="onoffswitch">
437
+ <input type="checkbox" name="options[ga_event_tracking]"
438
+ value="1" class="onoffswitch-checkbox" id="ga_event_tracking"
439
+ <?php checked( $options['ga_event_tracking'], 1 ); ?>> <label
440
+ class="onoffswitch-label" for="ga_event_tracking">
441
+ <div class="onoffswitch-inner"></div>
442
+ <div class="onoffswitch-switch"></div>
443
+ </label>
444
+ </div>
445
+ <div class="switch-desc"><?php _e(" track downloads, mailto and outbound links", 'ga-dash' ); ?></div>
446
+ </td>
447
+ </tr>
448
+ <tr>
449
+ <td class="title"><label for="ga_event_downloads"><?php _e("Downloads Regex:", 'ga-dash'); ?></label></td>
450
+ <td><input type="text" id="ga_event_downloads"
451
+ name="options[ga_event_downloads]"
452
+ value="<?php echo esc_attr($options['ga_event_downloads']); ?>"
453
+ size="50"></td>
454
+ </tr>
455
+ <tr>
456
+ <td colspan="2" class="title">
457
+ <div class="onoffswitch">
458
+ <input type="checkbox" name="options[ga_aff_tracking]"
459
+ value="1" class="onoffswitch-checkbox" id="ga_aff_tracking"
460
+ <?php checked( $options['ga_aff_tracking'], 1 ); ?>> <label
461
+ class="onoffswitch-label" for="ga_aff_tracking">
462
+ <div class="onoffswitch-inner"></div>
463
+ <div class="onoffswitch-switch"></div>
464
+ </label>
465
+ </div>
466
+ <div class="switch-desc"><?php _e(" track affiliate links matching this regex", 'ga-dash' ); ?></div>
467
+ </td>
468
+ </tr>
469
+ <tr>
470
+ <td class="title"><label for="ga_event_affiliates"><?php _e("Affiliates Regex:", 'ga-dash'); ?></label></td>
471
+ <td><input type="text" id="ga_event_affiliates"
472
+ name="options[ga_event_affiliates]"
473
+ value="<?php echo esc_attr($options['ga_event_affiliates']); ?>"
474
+ size="50"></td>
475
+ </tr>
476
+ <tr>
477
+ <td colspan="2" class="title">
478
+ <div class="onoffswitch">
479
+ <input type="checkbox" name="options[ga_hash_tracking]"
480
+ value="1" class="onoffswitch-checkbox" id="ga_hash_tracking"
481
+ <?php checked( $options['ga_hash_tracking'], 1 ); ?>> <label
482
+ class="onoffswitch-label" for="ga_hash_tracking">
483
+ <div class="onoffswitch-inner"></div>
484
+ <div class="onoffswitch-switch"></div>
485
+ </label>
486
+ </div>
487
+ <div class="switch-desc"><?php _e(" track fragment identifiers, hashmarks (#) in URI links", 'ga-dash' ); ?></div>
488
+ </td>
489
+ </tr>
490
+ <tr>
491
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Custom Definitions", 'ga-dash' ) . "</h2>"; ?></td>
492
+ </tr>
493
+ <tr>
494
+ <td class="title"><label for="ga_author_dimindex"><?php _e("Authors:", 'ga-dash' ); ?></label></td>
495
+ <td><select id="ga_author_dimindex"
496
+ name="options[ga_author_dimindex]">
497
+ <?php for ($i=0;$i<21;$i++){?>
498
+ <option value="<?php echo $i;?>"
499
+ <?php selected( $options['ga_author_dimindex'], $i ); ?>><?php echo $i==0?'Disabled':'dimension '.$i; ?></option>
500
+ <?php } ?>
501
+ </select></td>
502
+ </tr>
503
+ <tr>
504
+ <td class="title"><label for="ga_pubyear_dimindex"><?php _e("Publication Year:", 'ga-dash' ); ?></label></td>
505
+ <td><select id="ga_pubyear_dimindex"
506
+ name="options[ga_pubyear_dimindex]">
507
+ <?php for ($i=0;$i<21;$i++){?>
508
+ <option value="<?php echo $i;?>"
509
+ <?php selected( $options['ga_pubyear_dimindex'], $i ); ?>><?php echo $i==0?'Disabled':'dimension '.$i; ?></option>
510
+ <?php } ?>
511
+ </select></td>
512
+ </tr>
513
+ <tr>
514
+ <td class="title"><label for="ga_category_dimindex"><?php _e("Categories:", 'ga-dash' ); ?></label></td>
515
+ <td><select id="ga_category_dimindex"
516
+ name="options[ga_category_dimindex]">
517
+ <?php for ($i=0;$i<21;$i++){?>
518
+ <option value="<?php echo $i;?>"
519
+ <?php selected( $options['ga_category_dimindex'], $i ); ?>><?php echo $i==0?'Disabled':'dimension '.$i; ?></option>
520
+ <?php } ?>
521
+ </select></td>
522
+ </tr>
523
+ <tr>
524
+ <td class="title"><label for="ga_user_dimindex"><?php _e("User Type:", 'ga-dash' ); ?></label></td>
525
+ <td><select id="ga_user_dimindex"
526
+ name="options[ga_user_dimindex]">
527
+ <?php for ($i=0;$i<21;$i++){?>
528
+ <option value="<?php echo $i;?>"
529
+ <?php selected( $options['ga_user_dimindex'], $i ); ?>><?php echo $i==0?'Disabled':'dimension '.$i; ?></option>
530
+ <?php } ?>
531
+ </select></td>
532
+ </tr>
533
+ <tr>
534
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Advanced Tracking", 'ga-dash' ) . "</h2>"; ?></td>
535
+ </tr>
536
+ <tr>
537
+ <td class="title"><label for="ga_speed_samplerate"><?php _e("Page Speed SR:", 'ga-dash'); ?></label></td>
538
+ <td><input type="number" id="ga_speed_samplerate"
539
+ name="options[ga_speed_samplerate]"
540
+ value="<?php echo (int)($options['ga_speed_samplerate']); ?>"
541
+ max="100" min="1"> %</td>
542
+ </tr>
543
+ <tr>
544
+ <td colspan="2" class="title">
545
+ <div class="onoffswitch">
546
+ <input type="checkbox" name="options[ga_event_bouncerate]"
547
+ value="1" class="onoffswitch-checkbox"
548
+ id="ga_event_bouncerate"
549
+ <?php checked( $options['ga_event_bouncerate'], 1 ); ?>> <label
550
+ class="onoffswitch-label" for="ga_event_bouncerate">
551
+ <div class="onoffswitch-inner"></div>
552
+ <div class="onoffswitch-switch"></div>
553
+ </label>
554
+ </div>
555
+ <div class="switch-desc"><?php _e ( " exclude events from bounce-rate calculation", 'ga-dash' );?></div>
556
+ </td>
557
+ </tr>
558
+ <tr>
559
+ <td colspan="2" class="title">
560
+ <div class="onoffswitch">
561
+ <input type="checkbox" name="options[ga_enhanced_links]"
562
+ value="1" class="onoffswitch-checkbox" id="ga_enhanced_links"
563
+ <?php checked( $options['ga_enhanced_links'], 1 ); ?>> <label
564
+ class="onoffswitch-label" for="ga_enhanced_links">
565
+ <div class="onoffswitch-inner"></div>
566
+ <div class="onoffswitch-switch"></div>
567
+ </label>
568
+ </div>
569
+ <div class="switch-desc"><?php _e ( " enable enhanced link attribution", 'ga-dash' );?></div>
570
+ </td>
571
+ </tr>
572
+ <tr>
573
+ <td colspan="2" class="title">
574
+ <div class="onoffswitch">
575
+ <input type="checkbox" name="options[ga_dash_adsense]"
576
+ value="1" class="onoffswitch-checkbox" id="ga_dash_adsense"
577
+ <?php checked( $options['ga_dash_adsense'], 1 ); ?>> <label
578
+ class="onoffswitch-label" for="ga_dash_adsense">
579
+ <div class="onoffswitch-inner"></div>
580
+ <div class="onoffswitch-switch"></div>
581
+ </label>
582
+ </div>
583
+ <div class="switch-desc"><?php _e ( " enable AdSense account linking", 'ga-dash' );?></div>
584
+ </td>
585
+ </tr>
586
+ <tr>
587
+ <td colspan="2" class="title">
588
+ <div class="onoffswitch">
589
+ <input type="checkbox" name="options[ga_crossdomain_tracking]"
590
+ value="1" class="onoffswitch-checkbox"
591
+ id="ga_crossdomain_tracking"
592
+ <?php checked( $options['ga_crossdomain_tracking'], 1 ); ?>>
593
+ <label class="onoffswitch-label" for="ga_crossdomain_tracking">
594
+ <div class="onoffswitch-inner"></div>
595
+ <div class="onoffswitch-switch"></div>
596
+ </label>
597
+ </div>
598
+ <div class="switch-desc"><?php _e(" enable cross domain tracking", 'ga-dash' ); ?></div>
599
+ </td>
600
+ </tr>
601
+ <tr>
602
+ <td class="title"><label for="ga_crossdomain_list"><?php _e("Cross Domains:", 'ga-dash'); ?></label></td>
603
+ <td><input type="text" id="ga_crossdomain_list"
604
+ name="options[ga_crossdomain_list]"
605
+ value="<?php echo esc_attr($options['ga_crossdomain_list']); ?>"
606
+ size="50"></td>
607
+ </tr>
608
+ <?php
609
+ }
610
+ ?>
611
+ <tr>
612
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Exclude Tracking", 'ga-dash' ) . "</h2>"; ?></td>
613
+ </tr>
614
+ <tr>
615
+ <td class="roles title"><label for="ga_track_exclude"><?php _e("Exclude tracking for:", 'ga-dash' ); ?></label></td>
616
+ <td class="roles">
617
+ <?php
618
+ if (! isset($wp_roles)) {
619
+ $wp_roles = new WP_Roles();
620
+ }
621
+ $i = 0;
622
+ ?> <table>
623
+ <tr>
624
+ <?php
625
+ foreach ($wp_roles->role_names as $role => $name) {
626
+ $i ++;
627
+ ?>
628
+ <td><label> <input type="checkbox"
629
+ name="options[ga_track_exclude][]"
630
+ value="<?php echo $role; ?>"
631
+ <?php if (in_array($role,$options['ga_track_exclude'])) echo 'checked="checked"'; ?> />
632
+ <?php echo $name; ?>
633
+ </label></td>
634
+ <?php
635
+ if ($i % 4 == 0) {
636
+ ?>
637
+ </tr>
638
+ <tr>
639
+ <?php
640
+ }
641
+ }
642
+ ?>
643
+
644
+
645
+
646
+
647
+ </table>
648
+ </td>
649
+ </tr>
650
+ <?php
651
+ }
652
+ ?>
653
+ <tr>
654
+ <td colspan="2"><hr></td>
655
+ </tr>
656
+ <tr>
657
+ <td colspan="2" class="submit"><input type="submit"
658
+ name="Submit" class="button button-primary"
659
+ value="<?php _e('Save Changes', 'ga-dash' ) ?>" /></td>
660
+ </tr>
661
+ </table>
662
+ <input type="hidden" name="options[ga_dash_hidden]" value="Y">
663
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
664
+
665
+
666
+
667
+
668
+ </form>
669
+ <?php
670
+ self::output_sidebar();
671
+ }
672
+
673
+ public static function general_settings()
674
+ {
675
+ global $GADASH_Config;
676
+ global $wp_version;
677
+ /*
678
+ * Include Tools
679
+ */
680
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
681
+ $tools = new GADASH_Tools();
682
+ if (! current_user_can('manage_options')) {
683
+ return;
684
+ }
685
+ $options = self::set_get_options('general');
686
+ /*
687
+ * Include GAPI
688
+ */
689
+ echo '<div id="gapi-warning" class="updated"><p><strong>' . __('Loading the required libraries. If this results in a blank screen or a fatal error, try this solution:', "ga-dash") . ' </strong><a href="https://deconf.com/ask/question/ga-dashboard-absolutely-empty-general-settings#answer-770">Library conflicts between WordPress plugins</a></p></div>';
690
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
691
+ global $GADASH_GAPI;
692
+ echo '<script type="text/javascript">jQuery("#gapi-warning").hide()</script>';
693
+ if (isset($_POST['ga_dash_code'])) {
694
+ if (! stripos('x' . $_POST['ga_dash_code'], 'UA-', 1) == 1) {
695
+ try {
696
+ $GADASH_GAPI->client->authenticate($_POST['ga_dash_code']);
697
+ $GADASH_Config->options['ga_dash_token'] = $GADASH_GAPI->client->getAccessToken();
698
+ $google_token = json_decode($GADASH_GAPI->client->getAccessToken());
699
+ $GADASH_Config->options['ga_dash_refresh_token'] = $google_token->refresh_token;
700
+ $GADASH_Config->set_plugin_options();
701
+ $message = "<div class='updated'><p><strong>" . __("Plugin authorization succeeded.", 'ga-dash') . "</strong></p></div>";
702
+ $options = self::set_get_options('general');
703
+ delete_transient('ga_dash_gapi_errors');
704
+ } catch (Google_IO_Exception $e) {
705
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
706
+ return false;
707
+ } catch (Google_Service_Exception $e) {
708
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
709
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
710
+ return $e->getCode();
711
+ } catch (Exception $e) {
712
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e) . "\nResponseHttpCode:" . $e->getCode());
713
+ $GADASH_GAPI->ga_dash_reset_token(false);
714
+ }
715
+ } else {
716
+ $message = "<div class='error'><p>" . __("The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> (UA-XXXXX-X). Try again, and use the red link to get your access code", 'ga-dash') . ".</p></div>";
717
+ }
718
+ }
719
+
720
+ if (function_exists('curl_version')) {
721
+ if ($GADASH_GAPI->client->getAccessToken()) {
722
+ if ($GADASH_Config->options['ga_dash_profile_list']) {
723
+ $profiles = $GADASH_Config->options['ga_dash_profile_list'];
724
+ } else {
725
+ $profiles = $GADASH_GAPI->refresh_profiles();
726
+ }
727
+ if ($profiles) {
728
+ $GADASH_Config->options['ga_dash_profile_list'] = $profiles;
729
+ if (! $GADASH_Config->options['ga_dash_tableid_jail']) {
730
+ $profile = $tools->guess_default_domain($profiles);
731
+ $GADASH_Config->options['ga_dash_tableid_jail'] = $profile;
732
+ $GADASH_Config->options['ga_dash_tableid'] = $profile;
733
+ }
734
+ $GADASH_Config->set_plugin_options();
735
+ $options = self::set_get_options('general');
736
+ }
737
+ }
738
+ }
739
+ if (isset($_POST['Clear'])) {
740
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
741
+ $tools->ga_dash_clear_cache();
742
+ $message = "<div class='updated'><p><strong>" . __("Cleared Cache.", 'ga-dash') . "</strong></p></div>";
743
+ } else {
744
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
745
+ }
746
+ }
747
+ if (isset($_POST['Reset'])) {
748
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
749
+ $GADASH_GAPI->ga_dash_reset_token(true);
750
+ $tools->ga_dash_clear_cache();
751
+ $message = "<div class='updated'><p><strong>" . __("Token Reseted and Revoked.", 'ga-dash') . "</strong></p></div>";
752
+ $options = self::set_get_options('Reset');
753
+ } else {
754
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
755
+ }
756
+ }
757
+ if (isset($_POST['Log'])) {
758
+ $message = "<div class='updated'><p><strong>" . __("Dumping log data.", 'ga-dash') . "</strong></p></div>";
759
+ }
760
+ if (isset($_POST['options']['ga_dash_hidden']) and ! isset($_POST['Clear']) and ! isset($_POST['Reset']) and ! isset($_POST['Log'])) {
761
+ $message = "<div class='updated'><p><strong>" . __("Settings saved.", 'ga-dash') . "</strong></p></div>";
762
+ if (! (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form'))) {
763
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
764
+ }
765
+ }
766
+ if (isset($_POST['Hide'])) {
767
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
768
+ $message = "<div class='updated'><p><strong>" . __("All other domains/properties were removed.", 'ga-dash') . "</strong></p></div>";
769
+ $lock_profile = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
770
+ $GADASH_Config->options['ga_dash_profile_list'] = array(
771
+ $lock_profile
772
+ );
773
+ $options = self::set_get_options('general');
774
+ } else {
775
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
776
+ }
777
+ }
778
+ if (! function_exists('curl_version')) {
779
+ $message = "<div class='error'><p><strong>" . __("PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!", 'ga-dash') . "</strong></p></div>";
780
+ }
781
+ ?>
782
+ <div class="wrap">
783
+ <?php echo "<h2>" . __( "Google Analytics Settings", 'ga-dash' ) . "</h2>"; ?><hr>
784
+ </div>
785
+ <div id="poststuff">
786
+ <div id="post-body" class="metabox-holder columns-2">
787
+ <div id="post-body-content">
788
+ <div class="settings-wrapper">
789
+ <div class="inside">
790
+
791
+ if ($GADASH_GAPI->gapi_errors_handler()) {
792
+ $message = "<div class='error'><p><strong>" . __("Something went wrong. Please check the Debugging Data section for possible errors", 'ga-dash') . ".</strong></p></div>";
793
+ }
794
+
795
+ if (isset($_POST['Authorize'])) {
796
+ $tools->ga_dash_clear_cache();
797
+ $GADASH_GAPI->token_request();
798
+ echo "<div class='updated'><p>" . __("Use the red link (see below) to generate and get your access code!", 'ga-dash') . "</p></div>";
799
+ } else {
800
+ if (isset($message))
801
+ echo $message;
802
+ ?>
803
+ <form name="ga_dash_form" method="post"
804
+ action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>">
805
+ <input type="hidden" name="options[ga_dash_hidden]" value="Y">
806
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
807
+ <table class="options">
808
+ <tr>
809
+ <td colspan="2"><?php echo "<h2>" . __( "Plugin Authorization", 'ga-dash' ) . "</h2>"; ?></td>
810
+ </tr>
811
+ <tr>
812
+ <td colspan="2" class="info">
813
+ <?php echo __("You should watch the",'ga-dash')." <a href='https://deconf.com/google-analytics-dashboard-wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=top_video&utm_campaign=gadwp' target='_blank'>". __("video",'ga-dash')."</a> ".__("and read this", 'ga-dash')." <a href='https://deconf.com/google-analytics-dashboard-wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=top_tutorial&utm_campaign=gadwp' target='_blank'>". __("tutorial",'ga-dash')."</a> ".__("before proceeding to authorization. This plugin requires a properly configured Google Analytics account", 'ga-dash')."!";?>
814
+ </td>
815
+ </tr>
816
+ <?php
817
+ if (! $options['ga_dash_token'] or $options['ga_dash_userapi']) {
818
+ ?>
819
+ <tr>
820
+ <td colspan="2" class="info"><input
821
+ name="options[ga_dash_userapi]" type="checkbox"
822
+ id="ga_dash_userapi" value="1"
823
+ <?php checked( $options['ga_dash_userapi'], 1 ); ?>
824
+ onchange="this.form.submit()"
825
+ <?php echo ($options['ga_dash_network'])?'disabled="disabled"':''; ?> /><?php _e ( " use your own API Project credentials", 'ga-dash' );?>
826
+ </td>
827
+ </tr>
828
+ }
829
+ if ($options['ga_dash_userapi']) {
830
+ ?>
831
+ <tr>
832
+ <td class="title"><label for="options[ga_dash_apikey]"><?php _e("API Key:", 'ga-dash'); ?></label>
833
+ </td>
834
+ <td><input type="text" name="options[ga_dash_apikey]"
835
+ value="<?php echo esc_attr($options['ga_dash_apikey']); ?>"
836
+ size="40" required="required"></td>
837
+ </tr>
838
+ <tr>
839
+ <td class="title"><label for="options[ga_dash_clientid]"><?php _e("Client ID:", 'ga-dash'); ?></label>
840
+ </td>
841
+ <td><input type="text" name="options[ga_dash_clientid]"
842
+ value="<?php echo esc_attr($options['ga_dash_clientid']); ?>"
843
+ size="40" required="required"></td>
844
+ </tr>
845
+ <tr>
846
+ <td class="title"><label for="options[ga_dash_clientsecret]"><?php _e("Client Secret:", 'ga-dash'); ?></label>
847
+ </td>
848
+ <td><input type="text" name="options[ga_dash_clientsecret]"
849
+ value="<?php echo esc_attr($options['ga_dash_clientsecret']); ?>"
850
+ size="40" required="required"> <input type="hidden"
851
+ name="options[ga_dash_hidden]" value="Y">
852
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
853
+ </td>
854
+ </tr>
855
+ <?php
856
+ }
857
+ ?>
858
+ <?php
859
+ if ($options['ga_dash_token']) {
860
+ ?>
861
+ <tr>
862
+ <td colspan="2"><input type="submit" name="Reset"
863
+ class="button button-secondary"
864
+ value="<?php _e( "Clear Authorization", 'ga-dash' ); ?>"
865
+ <?php echo $options['ga_dash_network']?'disabled="disabled"':''; ?> />
866
+ <input type="submit" name="Clear"
867
+ class="button button-secondary"
868
+ value="<?php _e( "Clear Cache", 'ga-dash' ); ?>" /></td>
869
+ </tr>
870
+ <tr>
871
+ <td colspan="2"><hr></td>
872
+ </tr>
873
+ <tr>
874
+ <td colspan="2"><?php echo "<h2>" . __( "General Settings", 'ga-dash' ) . "</h2>"; ?></td>
875
+ </tr>
876
+ <tr>
877
+ <td class="title"><label for="ga_dash_tableid_jail"><?php _e("Select Domain:", 'ga-dash' ); ?></label></td>
878
+ <td><select id="ga_dash_tableid_jail"
879
+ <?php disabled(is_array($options['ga_dash_profile_list']), false); ?>
880
+ name="options[ga_dash_tableid_jail]">
881
+ <?php
882
+ if (is_array($options['ga_dash_profile_list'])) {
883
+ foreach ($options['ga_dash_profile_list'] as $items) {
884
+ if ($items[3]) {
885
+ echo '<option value="' . esc_attr($items[1]) . '" ' . selected($items[1], $options['ga_dash_tableid_jail']);
886
+ echo ' title="' . __("View Name:", 'ga-dash') . ' ' . esc_attr($items[0]) . '">' . esc_html($tools->ga_dash_get_profile_domain($items[3])) . ' &#8658; ' . esc_attr($items[0]) . '</option>';
887
+ }
888
+ }
889
+ } else {
890
+ echo '<option value="">' . __("Property not found", 'ga-dash') . '</option>';
891
+ }
892
+ ?>
893
+ </select>
894
+ if (count($options['ga_dash_profile_list']) > 1) {
895
+ _e("and/or hide all other domains", 'ga-dash');
896
+ ?>
897
+ <input type="submit" name="Hide" class="button button-secondary"
898
+ value="<?php _e( "Hide Now", 'ga-dash' ); ?>" />
899
+ <?php
900
+ }
901
+ ?>
902
+ </td>
903
+ </tr>
904
+ <?php
905
+ if ($options['ga_dash_tableid_jail']) {
906
+ ?>
907
+ <tr>
908
+ <td class="title"></td>
909
+ <td><?php
910
+ $profile_info = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
911
+ echo '<pre>' . __("View Name:", 'ga-dash') . "\t" . esc_html($profile_info[0]) . "<br />" . __("Tracking ID:", 'ga-dash') . "\t" . esc_html($profile_info[2]) . "<br />" . __("Default URL:", 'ga-dash') . "\t" . esc_html($profile_info[3]) . "<br />" . __("Time Zone:", 'ga-dash') . "\t" . esc_html($profile_info[5]) . '</pre>';
912
+ ?></td>
913
+ </tr>
914
+ <?php
915
+ }
916
+ ?>
917
+ <td class="title"><label for="ga_dash_style"><?php _e("Theme Color:", 'ga-dash' ); ?></label></td>
918
+ <td><input type="text" id="ga_dash_style" class="ga_dash_style"
919
+ name="options[ga_dash_style]"
920
+ value="<?php echo esc_attr($options['ga_dash_style']); ?>"
921
+ size="10"></td>
922
+ </tr>
923
+ <tr>
924
+ <td colspan="2"><hr></td>
925
+ </tr>
926
+ <tr>
927
+ <td colspan="2"><?php echo __('A new frontend widget is available! To enable it, go to','ga-dash').' <a href="widgets.php">'.__('Appearance -> Widgets').'</a> '.__('and look for Google Analytics Dashboard.','ga-dash').' '.''; ?></td>
928
+ </tr>
929
+ <tr>
930
+ <td colspan="2"><hr></td>
931
+ </tr>
932
+ <tr>
933
+ <td class="debugging"><?php echo "<h2>" . __( "Debugging Data", 'ga-dash' ) . "</h2></td>".'<td><a href="#" id="show_hide" class="show_hide">Show Log</a>'; ?></td>
934
+ </tr>
935
+ <tr>
936
+ <td colspan="2">
937
+ <div class="log_data">
938
+ <?php
939
+ echo '<pre class="log_data">************************************* Start Log *************************************<br/><br/>';
940
+ $anonim = $GADASH_Config->options;
941
+ $anonim['wp_version'] = $wp_version;
942
+ $anonim['gadwp_version'] = GADWP_CURRENT_VERSION;
943
+ if ($anonim['ga_dash_token']) {
944
+ $anonim['ga_dash_token'] = 'HIDDEN';
945
+ }
946
+ if ($anonim['ga_dash_refresh_token']) {
947
+ $anonim['ga_dash_refresh_token'] = 'HIDDEN';
948
+ }
949
+ if ($anonim['ga_dash_clientid']) {
950
+ $anonim['ga_dash_clientid'] = 'HIDDEN';
951
+ }
952
+ if ($anonim['ga_dash_clientsecret']) {
953
+ $anonim['ga_dash_clientsecret'] = 'HIDDEN';
954
+ }
955
+ if ($anonim['ga_dash_apikey']) {
956
+ $anonim['ga_dash_apikey'] = 'HIDDEN';
957
+ }
958
+ echo esc_html(print_r($anonim, true));
959
+ echo '<br/>Last Error: ';
960
+ echo esc_html(print_r(get_option('gadash_lasterror', 'N/A'), true));
961
+ echo "\n" . esc_html(print_r(get_transient('ga_dash_gapi_errors'), true));
962
+ echo '<br/><br/>************************************* End Log *************************************</pre>';
963
+ ?>
964
+ </div>
965
+ </td>
966
+ </tr>
967
+ <tr>
968
+ <td colspan="2"><hr></td>
969
+ </tr>
970
+ <tr>
971
+ <td colspan="2" class="submit"><input type="submit"
972
+ name="Submit" class="button button-primary"
973
+ value="<?php _e('Save Changes', 'ga-dash' ) ?>" /></td>
974
+ </tr>
975
+ } else {
976
+ ?>
977
+ <tr>
978
+ <td colspan="2"><hr></td>
979
+ </tr>
980
+ <tr>
981
+ <td colspan="2"><input type="submit" name="Authorize"
982
+ class="button button-secondary" id="authorize"
983
+ value="<?php _e( "Authorize Plugin", 'ga-dash' ); ?>"
984
+ <?php echo ((!function_exists('curl_version') OR ($options['ga_dash_network']))?'disabled="disabled"':''); ?> />
985
+ <input type="submit" name="Clear"
986
+ class="button button-secondary"
987
+ value="<?php _e( "Clear Cache", 'ga-dash' ); ?>" /></td>
988
+ </tr>
989
+ <tr>
990
+ <td colspan="2"><hr></td>
991
+ </tr>
992
+ <tr>
993
+ <td class="debugging"><?php echo "<h2>" . __( "Debugging Data", 'ga-dash' ) . "</h2></td>".'<td><a href="#" id="show_hide" class="show_hide">Show Log</a>'; ?></td>
994
+ </tr>
995
+ <tr>
996
+ <td colspan="2">
997
+ <div class="log_data">
998
+ <?php
999
+ echo '<pre class="log_data">************************************* Start Log *************************************<br/><br/>';
1000
+ $anonim = $GADASH_Config->options;
1001
+ $anonim['wp_version'] = $wp_version;
1002
+ $anonim['gadwp_version'] = GADWP_CURRENT_VERSION;
1003
+ if ($anonim['ga_dash_token']) {
1004
+ $anonim['ga_dash_token'] = 'HIDDEN';
1005
+ }
1006
+ if ($anonim['ga_dash_refresh_token']) {
1007
+ $anonim['ga_dash_refresh_token'] = 'HIDDEN';
1008
+ }
1009
+ if ($anonim['ga_dash_clientid']) {
1010
+ $anonim['ga_dash_clientid'] = 'HIDDEN';
1011
+ }
1012
+ if ($anonim['ga_dash_clientsecret']) {
1013
+ $anonim['ga_dash_clientsecret'] = 'HIDDEN';
1014
+ }
1015
+ if ($anonim['ga_dash_apikey']) {
1016
+ $anonim['ga_dash_apikey'] = 'HIDDEN';
1017
+ }
1018
+ echo esc_html(print_r($anonim, true));
1019
+ echo '<br/>Last Error: ';
1020
+ echo esc_html(print_r(get_option('gadash_lasterror', 'N/A'), true));
1021
+ echo "\n" . esc_html(print_r(get_transient('ga_dash_gapi_errors'), true));
1022
+ echo '<br/><br/>************************************* End Log *************************************</pre>';
1023
+ ?>
1024
+ </div>
1025
+ </td>
1026
+ </tr>
1027
+ <tr>
1028
+ <td colspan="2"><hr></td>
1029
+ </tr>
1030
+ </table>
1031
+ </form>
1032
+ <?php
1033
+ self::output_sidebar();
1034
+ return;
1035
+ }
1036
+ ?>
1037
+ </form>
1038
+ }
1039
+ self::output_sidebar();
1040
+ }
1041
+ // Network Settings
1042
+ public static function general_settings_network()
1043
+ {
1044
+ global $GADASH_Config;
1045
+ global $wp_version;
1046
+ /*
1047
+ * Include Tools
1048
+ */
1049
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
1050
+ $tools = new GADASH_Tools();
1051
+ if (! current_user_can('manage_network_options')) {
1052
+ return;
1053
+ }
1054
+ $options = self::set_get_options('network');
1055
+ /*
1056
+ * Include GAPI
1057
+ */
1058
+ echo '<div id="gapi-warning" class="updated"><p><strong>' . __('Loading the required libraries. If this results in a blank screen or a fatal error, try this solution:', "ga-dash") . ' </strong><a href="https://deconf.com/ask/question/ga-dashboard-absolutely-empty-general-settings#answer-770">Library conflicts between WordPress plugins</a></p></div>';
1059
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
1060
+ global $GADASH_GAPI;
1061
+ echo '<script type="text/javascript">jQuery("#gapi-warning").hide()</script>';
1062
+ if (isset($_POST['ga_dash_code'])) {
1063
+ if (! stripos('x' . $_POST['ga_dash_code'], 'UA-', 1) == 1) {
1064
+ try {
1065
+ $GADASH_GAPI->client->authenticate($_POST['ga_dash_code']);
1066
+ $GADASH_Config->options['ga_dash_token'] = $GADASH_GAPI->client->getAccessToken();
1067
+ $google_token = json_decode($GADASH_GAPI->client->getAccessToken());
1068
+ $GADASH_Config->options['ga_dash_refresh_token'] = $google_token->refresh_token;
1069
+ $GADASH_Config->set_plugin_options(true);
1070
+ $message = "<div class='updated'><p><strong>" . __("Plugin authorization succeeded.", 'ga-dash') . "</strong></p></div>";
1071
+ $options = self::set_get_options('network');
1072
+ if (is_multisite()) { // Cleanup errors on the entire network
1073
+ foreach (wp_get_sites() as $blog) {
1074
+ switch_to_blog($blog['blog_id']);
1075
+ delete_transient('ga_dash_gapi_errors');
1076
+ restore_current_blog();
1077
+ }
1078
+ } else {
1079
+ delete_transient('ga_dash_gapi_errors');
1080
+ }
1081
+ } catch (Google_IO_Exception $e) {
1082
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
1083
+ return false;
1084
+ } catch (Google_Service_Exception $e) {
1085
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
1086
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
1087
+ return $e->getCode();
1088
+ } catch (Exception $e) {
1089
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e) . "\nResponseHttpCode:" . $e->getCode());
1090
+ $GADASH_GAPI->ga_dash_reset_token(false);
1091
+ }
1092
+ } else {
1093
+ $message = "<div class='error'><p>" . __("The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> (UA-XXXXX-X). Try again, and use the red link to get your access code", 'ga-dash') . ".</p></div>";
1094
+ }
1095
+ }
1096
+
1097
+ if (isset($_POST['Refresh'])) {
1098
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
1099
+ $GADASH_Config->options['ga_dash_profile_list'] = '';
1100
+ $message = "<div class='updated'><p><strong>" . __("Properties refreshed.", 'ga-dash') . "</strong></p></div>";
1101
+ $options = self::set_get_options('network');
1102
+ } else {
1103
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
1104
+ }
1105
+ }
1106
+
1107
+ if (function_exists('curl_version')) {
1108
+ if ($GADASH_GAPI->client->getAccessToken()) {
1109
+ if ($GADASH_Config->options['ga_dash_profile_list']) {
1110
+ $profiles = $GADASH_Config->options['ga_dash_profile_list'];
1111
+ } else {
1112
+ $profiles = $GADASH_GAPI->refresh_profiles();
1113
+ }
1114
+ if ($profiles) {
1115
+ $GADASH_Config->options['ga_dash_profile_list'] = $profiles;
1116
+ if (isset($GADASH_Config->options['ga_dash_tableid_jail']) and ! $GADASH_Config->options['ga_dash_tableid_jail']) {
1117
+ $profile = $tools->guess_default_domain($profiles);
1118
+ $GADASH_Config->options['ga_dash_tableid_jail'] = $profile;
1119
+ $GADASH_Config->options['ga_dash_tableid'] = $profile;
1120
+ }
1121
+ $GADASH_Config->set_plugin_options(true);
1122
+ $options = self::set_get_options('network');
1123
+ }
1124
+ }
1125
+ }
1126
+ if (isset($_POST['Clear'])) {
1127
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
1128
+ $tools->ga_dash_clear_cache();
1129
+ $message = "<div class='updated'><p><strong>" . __("Cleared Cache.", 'ga-dash') . "</strong></p></div>";
1130
+ } else {
1131
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
1132
+ }
1133
+ }
1134
+ if (isset($_POST['Reset'])) {
1135
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
1136
+ $GADASH_GAPI->ga_dash_reset_token(true);
1137
+ $tools->ga_dash_clear_cache();
1138
+ $message = "<div class='updated'><p><strong>" . __("Token Reseted and Revoked.", 'ga-dash') . "</strong></p></div>";
1139
+ $options = self::set_get_options('Reset');
1140
+ } else {
1141
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
1142
+ }
1143
+ }
1144
+ if (isset($_POST['Log'])) {
1145
+ $message = "<div class='updated'><p><strong>" . __("Dumping log data.", 'ga-dash') . "</strong></p></div>";
1146
+ }
1147
+ if (isset($_POST['options']['ga_dash_hidden']) and ! isset($_POST['Clear']) and ! isset($_POST['Reset']) and ! isset($_POST['Log']) and ! isset($_POST['Refresh'])) {
1148
+ $message = "<div class='updated'><p><strong>" . __("Settings saved.", 'ga-dash') . "</strong></p></div>";
1149
+ if (! (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form'))) {
1150
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
1151
+ }
1152
+ }
1153
+ if (isset($_POST['Hide'])) {
1154
+ if (isset($_POST['gadash_security']) && wp_verify_nonce($_POST['gadash_security'], 'gadash_form')) {
1155
+ $message = "<div class='updated'><p><strong>" . __("All other domains/properties were removed.", 'ga-dash') . "</strong></p></div>";
1156
+ $lock_profile = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
1157
+ $GADASH_Config->options['ga_dash_profile_list'] = array(
1158
+ $lock_profile
1159
+ );
1160
+ $options = self::set_get_options('network');
1161
+ } else {
1162
+ $message = "<div class='error'><p><strong>" . __("Cheating Huh?", 'ga-dash') . "</strong></p></div>";
1163
+ }
1164
+ }
1165
+ if (! function_exists('curl_version')) {
1166
+ $message = "<div class='error'><p><strong>" . __("PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!", 'ga-dash') . "</strong></p></div>";
1167
+ }
1168
+ ?>
1169
+ <div class="wrap">
1170
+ <?php echo "<h2>" . __( "Google Analytics Settings", 'ga-dash' ) . "</h2>"; ?><hr>
1171
+ </div>
1172
+ <div id="poststuff">
1173
+ <div id="post-body" class="metabox-holder columns-2">
1174
+ <div id="post-body-content">
1175
+ <div class="settings-wrapper">
1176
+ <div class="inside">
1177
+ if ($GADASH_GAPI->gapi_errors_handler()) {
1178
+ $message = "<div class='error'><p><strong>" . __("Something went wrong. Please check the Debugging Data section for possible errors", 'ga-dash') . ".</strong></p></div>";
1179
+ }
1180
+ if (isset($_POST['Authorize'])) {
1181
+ $tools->ga_dash_clear_cache();
1182
+ $GADASH_GAPI->token_request();
1183
+ echo "<div class='updated'><p>" . __("Use the red link (see below) to generate and get your access code!", 'ga-dash') . "</p></div>";
1184
+ } else {
1185
+ if (isset($message))
1186
+ echo $message;
1187
+ ?>
1188
+ <form name="ga_dash_form" method="post"
1189
+ action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>">
1190
+ <input type="hidden" name="options[ga_dash_hidden]" value="Y">
1191
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
1192
+ <table class="options">
1193
+ <tr>
1194
+ <td colspan="2"><?php echo "<h2>" . __( "Network Setup", 'ga-dash' ) . "</h2>"; ?></td>
1195
+ </tr>
1196
+ <tr>
1197
+ <td colspan="2" class="title">
1198
+ <div class="onoffswitch">
1199
+ <input type="checkbox" name="options[ga_dash_network]"
1200
+ value="1" class="onoffswitch-checkbox"
1201
+ id="ga_dash_network"
1202
+ <?php checked( $options['ga_dash_network'], 1); ?>
1203
+ onchange="this.form.submit()"> <label
1204
+ class="onoffswitch-label" for="ga_dash_network">
1205
+ <div class="onoffswitch-inner"></div>
1206
+ <div class="onoffswitch-switch"></div>
1207
+ </label>
1208
+ </div>
1209
+ <div class="switch-desc"><?php _e ( " use a single Google Analytics account for the entire network", 'ga-dash' );?></div>
1210
+ </td>
1211
+ </tr>
1212
+ <?php if ($options['ga_dash_network']){ //Network Mode check?>
1213
+ <tr>
1214
+ <td colspan="2"><hr></td>
1215
+ </tr>
1216
+ <tr>
1217
+ <td colspan="2"><?php echo "<h2>" . __( "Plugin Authorization", 'ga-dash' ) . "</h2>"; ?></td>
1218
+ </tr>
1219
+ <tr>
1220
+ <td colspan="2" class="info">
1221
+ <?php echo __("You should watch the",'ga-dash')." <a href='https://deconf.com/google-analytics-dashboard-wordpress/' target='_blank'>". __("video",'ga-dash')."</a> ".__("and read this", 'ga-dash')." <a href='https://deconf.com/google-analytics-dashboard-wordpress/' target='_blank'>". __("tutorial",'ga-dash')."</a> ".__("before proceeding to authorization. This plugin requires a properly configured Google Analytics account", 'ga-dash')."!";?>
1222
+ </td>
1223
+ </tr>
1224
+ <?php
1225
+ if (! $options['ga_dash_token'] or $options['ga_dash_userapi']) {
1226
+ ?>
1227
+ <tr>
1228
+ <td colspan="2" class="info"><input
1229
+ name="options[ga_dash_userapi]" type="checkbox"
1230
+ id="ga_dash_userapi" value="1"
1231
+ <?php checked( $options['ga_dash_userapi'], 1 ); ?>
1232
+ onchange="this.form.submit()" /><?php _e ( " use your own API Project credentials", 'ga-dash' );?>
1233
+ </td>
1234
+ </tr>
1235
+ }
1236
+ if ($options['ga_dash_userapi']) {
1237
+ ?>
1238
+ <tr>
1239
+ <td class="title"><label for="options[ga_dash_apikey]"><?php _e("API Key:", 'ga-dash'); ?></label>
1240
+ </td>
1241
+ <td><input type="text" name="options[ga_dash_apikey]"
1242
+ value="<?php echo esc_attr($options['ga_dash_apikey']); ?>"
1243
+ size="40" required="required"></td>
1244
+ </tr>
1245
+ <tr>
1246
+ <td class="title"><label for="options[ga_dash_clientid]"><?php _e("Client ID:", 'ga-dash'); ?></label>
1247
+ </td>
1248
+ <td><input type="text" name="options[ga_dash_clientid]"
1249
+ value="<?php echo esc_attr($options['ga_dash_clientid']); ?>"
1250
+ size="40" required="required"></td>
1251
+ </tr>
1252
+ <tr>
1253
+ <td class="title"><label
1254
+ for="options[ga_dash_clientsecret]"><?php _e("Client Secret:", 'ga-dash'); ?></label>
1255
+ </td>
1256
+ <td><input type="text" name="options[ga_dash_clientsecret]"
1257
+ value="<?php echo esc_attr($options['ga_dash_clientsecret']); ?>"
1258
+ size="40" required="required"> <input type="hidden"
1259
+ name="options[ga_dash_hidden]" value="Y">
1260
+ <?php wp_nonce_field('gadash_form','gadash_security'); ?>
1261
+ </td>
1262
+ </tr>
1263
+ <?php
1264
+ }
1265
+ ?>
1266
+ <?php
1267
+ if ($options['ga_dash_token']) {
1268
+ ?>
1269
+ <tr>
1270
+ <td colspan="2"><input type="submit" name="Reset"
1271
+ class="button button-secondary"
1272
+ value="<?php _e( "Clear Authorization", 'ga-dash' ); ?>" />
1273
+ <input type="submit" name="Clear"
1274
+ class="button button-secondary"
1275
+ value="<?php _e( "Clear Cache", 'ga-dash' ); ?>" /> <input
1276
+ type="submit" name="Refresh"
1277
+ class="button button-secondary"
1278
+ value="<?php _e( "Refresh Properties", 'ga-dash' ); ?>" /></td>
1279
+ </tr>
1280
+ <tr>
1281
+ <td colspan="2"><hr></td>
1282
+ </tr>
1283
+ <tr>
1284
+ <td colspan="2"><?php echo "<h2>" . __( "Properties/Views Settings", 'ga-dash' ) . "</h2>"; ?></td>
1285
+ </tr>
1286
+ <?php
1287
+ if (isset($options['ga_dash_tableid_network'])) {
1288
+ $options['ga_dash_tableid_network'] = json_decode(json_encode($options['ga_dash_tableid_network']), FALSE);
1289
+ }
1290
+ foreach (wp_get_sites() as $blog) {
1291
+ ?>
1292
+ <tr>
1293
+ <td class="title-select"><label
1294
+ for="ga_dash_tableid_network"><?php echo '<strong>'.$blog['domain'].$blog['path'].'</strong>: ';?></label></td>
1295
+ <td><select id="ga_dash_tableid_network"
1296
+ <?php disabled(is_array($options['ga_dash_profile_list']),false);?>
1297
+ name="options[ga_dash_tableid_network][<?php echo $blog['blog_id'];?>]">
1298
+ <?php
1299
+ if (is_array($options['ga_dash_profile_list'])) {
1300
+ foreach ($options['ga_dash_profile_list'] as $items) {
1301
+ if ($items[3]) {
1302
+ echo '<option value="' . esc_attr($items[1]) . '" ' . selected($items[1], isset($options['ga_dash_tableid_network']->$blog['blog_id']) ? $options['ga_dash_tableid_network']->$blog['blog_id'] : '');
1303
+ echo ' title="' . __("View Name:", 'ga-dash') . ' ' . esc_attr($items[0]) . '">' . $tools->ga_dash_get_profile_domain($items[3]) . ' &#8658; ' . esc_attr($items[0]) . '</option>';
1304
+ }
1305
+ }
1306
+ } else {
1307
+ echo '<option value="">' . __("Property not found", 'ga-dash') . '</option>';
1308
+ }
1309
+ ?>
1310
+ </select><br /></td>
1311
+ </tr>
1312
+ <?php
1313
+ }
1314
+ ?>
1315
+ <tr>
1316
+ <td colspan="2"><hr><?php echo "<h2>" . __( "Exclude Tracking", 'ga-dash' ) . "</h2>"; ?></td>
1317
+ </tr>
1318
+ <tr>
1319
+ <td colspan="2" class="title">
1320
+ <div class="onoffswitch">
1321
+ <input type="checkbox" name="options[ga_dash_excludesa]"
1322
+ value="1" class="onoffswitch-checkbox"
1323
+ id="ga_dash_excludesa"<?php checked( $options['ga_dash_excludesa'], 1); ?>">
1324
+ <label class="onoffswitch-label" for="ga_dash_excludesa">
1325
+ <div class="onoffswitch-inner"></div>
1326
+ <div class="onoffswitch-switch"></div>
1327
+ </label>
1328
+ </div>
1329
+ <div class="switch-desc"><?php _e ( " exclude Super Admin tracking for the entire network", 'ga-dash' );?></div>
1330
+ </td>
1331
+ </tr>
1332
+ <tr>
1333
+ <td colspan="2"><hr></td>
1334
+ </tr>
1335
+ <tr>
1336
+ <td class="debugging"><?php echo "<h2>" . __( "Debugging Data", 'ga-dash' ) . "</h2></td>".'<td><a href="#" id="show_hide" class="show_hide">Show Log</a>'; ?></td>
1337
+ </tr>
1338
+ <tr>
1339
+ <td colspan="2">
1340
+ <div class="log_data">
1341
+ <?php
1342
+ echo '<pre class="log_data">************************************* Start Log *************************************<br/><br/>';
1343
+ $anonim = $GADASH_Config->options;
1344
+ $anonim['wp_version'] = $wp_version;
1345
+ $anonim['gadwp_version'] = GADWP_CURRENT_VERSION;
1346
+ if ($anonim['ga_dash_token']) {
1347
+ $anonim['ga_dash_token'] = 'HIDDEN';
1348
+ }
1349
+ if ($anonim['ga_dash_refresh_token']) {
1350
+ $anonim['ga_dash_refresh_token'] = 'HIDDEN';
1351
+ }
1352
+ if ($anonim['ga_dash_clientid']) {
1353
+ $anonim['ga_dash_clientid'] = 'HIDDEN';
1354
+ }
1355
+ if ($anonim['ga_dash_clientsecret']) {
1356
+ $anonim['ga_dash_clientsecret'] = 'HIDDEN';
1357
+ }
1358
+ if ($anonim['ga_dash_apikey']) {
1359
+ $anonim['ga_dash_apikey'] = 'HIDDEN';
1360
+ }
1361
+ echo esc_html(print_r($anonim, true));
1362
+ echo '<br/>Last Error: ';
1363
+ echo esc_html(print_r(get_option('gadash_lasterror', 'N/A'), true));
1364
+ echo "\n" . esc_html(print_r(get_transient('ga_dash_gapi_errors'), true));
1365
+ echo '<br/><br/>************************************* End Log *************************************</pre>';
1366
+ ?>
1367
+ </div>
1368
+ </td>
1369
+ </tr>
1370
+ <tr>
1371
+ <td colspan="2"><hr></td>
1372
+ </tr>
1373
+ <tr>
1374
+ <td colspan="2" class="submit"><input type="submit"
1375
+ name="Submit" class="button button-primary"
1376
+ value="<?php _e('Save Changes', 'ga-dash' ) ?>" /></td>
1377
+ </tr>
1378
+ } else {
1379
+ ?>
1380
+ <td colspan="2"><hr></td>
1381
+ </tr>
1382
+ <tr>
1383
+ <td colspan="2"><input type="submit" name="Authorize"
1384
+ class="button button-secondary" id="authorize"
1385
+ value="<?php _e( "Authorize Plugin", 'ga-dash' ); ?>"
1386
+ <?php echo (!function_exists('curl_version')?'disabled="disabled"':''); ?> />
1387
+ <input type="submit" name="Clear"
1388
+ class="button button-secondary"
1389
+ value="<?php _e( "Clear Cache", 'ga-dash' ); ?>" /></td>
1390
+ </tr>
1391
+ <tr>
1392
+ <td colspan="2"><hr></td>
1393
+ </tr>
1394
+ <tr>
1395
+ <td class="debugging"><?php echo "<h2>" . __( "Debugging Data", 'ga-dash' ) . "</h2></td>".'<td><a href="#" id="show_hide" class="show_hide">Show Log</a>'; ?></td>
1396
+ </tr>
1397
+ <tr>
1398
+ <td colspan="2">
1399
+ <div class="log_data">
1400
+ <?php
1401
+ echo '<pre class="log_data">************************************* Start Log *************************************<br/><br/>';
1402
+ $anonim = $GADASH_Config->options;
1403
+ $anonim['wp_version'] = $wp_version;
1404
+ $anonim['gadwp_version'] = GADWP_CURRENT_VERSION;
1405
+ if ($anonim['ga_dash_token']) {
1406
+ $anonim['ga_dash_token'] = 'HIDDEN';
1407
+ }
1408
+ if ($anonim['ga_dash_refresh_token']) {
1409
+ $anonim['ga_dash_refresh_token'] = 'HIDDEN';
1410
+ }
1411
+ if ($anonim['ga_dash_clientid']) {
1412
+ $anonim['ga_dash_clientid'] = 'HIDDEN';
1413
+ }
1414
+ if ($anonim['ga_dash_clientsecret']) {
1415
+ $anonim['ga_dash_clientsecret'] = 'HIDDEN';
1416
+ }
1417
+ if ($anonim['ga_dash_apikey']) {
1418
+ $anonim['ga_dash_apikey'] = 'HIDDEN';
1419
+ }
1420
+ echo esc_html(print_r($anonim, true));
1421
+ echo '<br/>Last Error: ';
1422
+ echo esc_html(print_r(get_option('gadash_lasterror', 'N/A'), true));
1423
+ echo "\n" . esc_html(print_r(get_transient('ga_dash_gapi_errors'), true));
1424
+ echo '<br/><br/>************************************* End Log *************************************</pre>';
1425
+ ?>
1426
+ </div>
1427
+ </td>
1428
+ </tr>
1429
+ <?php } //Network Mode check?>
1430
+ <tr>
1431
+ <td colspan="2"><hr></td>
1432
+ </tr>
1433
+ </table>
1434
+ </form>
1435
+ <?php
1436
+ self::output_sidebar();
1437
+ return;
1438
+ }
1439
+ ?>
1440
+ </table>
1441
+ </form>
1442
+ <?php
1443
+ }
1444
+ self::output_sidebar();
1445
+ }
1446
+
1447
+ public static function output_sidebar()
1448
+ {
1449
+ ?>
1450
+ </div>
1451
+ </div>
1452
+ </div>
1453
+ <div id="postbox-container-1" class="postbox-container">
1454
+ <div class="meta-box-sortables">
1455
+ <div class="postbox">
1456
+ <h3>
1457
+ <span><?php _e("Setup Tutorial & Demo",'ga-dash') ?></span>
1458
+ </h3>
1459
+ <div class="inside">
1460
+ <a
1461
+ href="https://deconf.com/google-analytics-dashboard-wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=video&utm_campaign=gadwp"
1462
+ target="_blank"><img
1463
+ src="<?php echo plugins_url( 'images/google-analytics-dashboard.png' , __FILE__ );?>"
1464
+ width="100%" alt="" /></a>
1465
+ </div>
1466
+ </div>
1467
+ <div class="postbox">
1468
+ <h3>
1469
+ <span><?php _e("Support & Reviews",'ga-dash')?></span>
1470
+ </h3>
1471
+ <div class="inside">
1472
+ <div class="gadash-title">
1473
+ <a
1474
+ href="https://deconf.com/google-analytics-dashboard-wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=support&utm_campaign=gadwp"><img
1475
+ src="<?php echo plugins_url( 'images/help.png' , __FILE__ ); ?>" /></a>
1476
+ </div>
1477
+ <div class="gadash-desc"><?php echo __('Plugin documentation and support on', 'ga-dash') . ' <a href="https://deconf.com/google-analytics-dashboard-wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=support&utm_campaign=gadwp">deconf.com</a>.'; ?></div>
1478
+ <br />
1479
+ <div class="gadash-title">
1480
+ <a
1481
+ href="http://wordpress.org/support/view/plugin-reviews/google-analytics-dashboard-for-wp#plugin-info"><img
1482
+ src="<?php echo plugins_url( 'images/star.png' , __FILE__ ); ?>" /></a>
1483
+ </div>
1484
+ <div class="gadash-desc"><?php echo __('Your feedback and review are both important,', 'ga-dash').' <a href="http://wordpress.org/support/view/plugin-reviews/google-analytics-dashboard-for-wp#plugin-info">'.__('rate this plugin', 'ga-dash').'</a>!'; ?></div>
1485
+ </div>
1486
+ </div>
1487
+ <div class="postbox">
1488
+ <h3>
1489
+ <span><?php _e("Further Reading",'ga-dash')?></span>
1490
+ </h3>
1491
+ <div class="inside">
1492
+ <div class="gadash-title">
1493
+ <a href="https://deconf.com/move-website-https-ssl/?utm_source=gadwp_config&utm_medium=link&utm_content=ssl&utm_campaign=gadwp"><img
1494
+ src="<?php echo plugins_url( 'images/ssl.png' , __FILE__ ); ?>" /></a>
1495
+ </div>
1496
+ <div class="gadash-desc"><?php echo '<a href="https://deconf.com/move-website-https-ssl/?utm_source=gadwp_config&utm_medium=link&utm_content=ssl&utm_campaign=gadwp">'.__('Improve search rankings', 'ga-dash').'</a> '.__('by moving your website to HTTPS/SSL.', 'ga-dash'); ?></div>
1497
+ <br />
1498
+ <div class="gadash-title">
1499
+ <a href="https://deconf.com/wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=plugins&utm_campaign=gadwp"><img
1500
+ src="<?php echo plugins_url( 'images/wp.png' , __FILE__ ); ?>" /></a>
1501
+ </div>
1502
+ <div class="gadash-desc"><?php echo __('Other', 'ga-dash').' <a href="https://deconf.com/wordpress/?utm_source=gadwp_config&utm_medium=link&utm_content=plugins&utm_campaign=gadwp">'.__('WordPress Plugins', 'ga-dash').'</a> '.__('written by the same author', 'ga-dash').'.'; ?></div>
1503
+ </div>
1504
+ </div>
1505
+ <div class="postbox">
1506
+ <h3>
1507
+ <span><?php _e("Other Services",'ga-dash')?></span>
1508
+ </h3>
1509
+ <div class="inside">
1510
+ <div class="gadash-title">
1511
+ <a href="http://tracking.maxcdn.com/c/94142/36539/378"><img
1512
+ src="<?php echo plugins_url( 'images/mcdn.png' , __FILE__ ); ?>" /></a>
1513
+ </div>
1514
+ <div class="gadash-desc"><?php echo __('Speed up your website and plug into a whole', 'ga-dash').' <a href="http://tracking.maxcdn.com/c/94142/36539/378">'.__('new level of site speed', 'ga-dash').'</a>.'; ?></div>
1515
+ <br />
1516
+ <div class="gadash-title">
1517
+ <a href="https://deconf.com/clicky-web-analytics-review/?utm_source=gadwp_config&utm_medium=link&utm_content=clicky&utm_campaign=gadwp"><img
1518
+ src="<?php echo plugins_url( 'images/clicky.png' , __FILE__ ); ?>" /></a>
1519
+ </div>
1520
+ <div class="gadash-desc"><?php echo '<a href="https://deconf.com/clicky-web-analytics-review/?utm_source=gadwp_config&utm_medium=link&utm_content=clicky&utm_campaign=gadwp">'.__('Web Analytics', 'ga-dash').'</a> '.__('service with users tracking at IP level.', 'ga-dash'); ?></div>
1521
+ </div>
1522
+ </div>
1523
+ </div>
1524
+ </div>
1525
+ </div>
1526
+ </div>
1527
+ <?php
1528
+ }
1529
+ }
admin/images/clicky.png ADDED
Binary file
admin/images/gadash-icon.png ADDED
Binary file
admin/images/google-analytics-dashboard.png ADDED
Binary file
admin/images/help.png ADDED
Binary file
admin/images/mcdn.png ADDED
Binary file
admin/images/ssl.png ADDED
Binary file
admin/images/star.png ADDED
Binary file
admin/images/wp.png ADDED
Binary file
admin/js/admin.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function checknpcounter(max) {
2
+ if (npcounter == max) {
3
+ NProgress.done();
4
+ } else {
5
+ npcounter++;
6
+ NProgress.set((1/(max+1))*npcounter);
7
+ }
8
+ }
9
+
10
+ jQuery(document).ready(
11
+ function() {
12
+ jQuery(".log_data").hide();
13
+ jQuery(".show_hide").show();
14
+ jQuery('.show_hide').click(function() {
15
+ jQuery(".log_data").slideToggle();
16
+ jQuery(this).text(jQuery(this).text() == 'Show Log' ? 'Hide Log' : 'Show Log');
17
+ });
18
+ }
19
+ );
20
+
21
+ jQuery(window).resize(
22
+ function() {
23
+ if (typeof ga_dash_drawmainchart == "function"
24
+ && typeof gadash_mainchart !== 'undefined'
25
+ && !jQuery.isNumeric(gadash_mainchart)) {
26
+ ga_dash_drawmainchart(gadash_mainchart);
27
+ }
28
+ if (typeof ga_dash_drawlocations == "function"
29
+ && typeof gadash_locations !== 'undefined'
30
+ && !jQuery.isNumeric(gadash_locations)) {
31
+ ga_dash_drawmaplocations(gadash_locations);
32
+ ga_dash_drawlocations(gadash_locations);
33
+ }
34
+ if (typeof ga_dash_drawtrafficchannels == "function"
35
+ && typeof gadash_trafficchannels !== 'undefined'
36
+ && !jQuery.isNumeric(gadash_trafficchannels)) {
37
+ ga_dash_drawtrafficchannels(gadash_trafficchannels);
38
+ }
39
+ if (typeof ga_dash_drawprs == "function"
40
+ && typeof gadash_prs !== 'undefined'
41
+ && !jQuery.isNumeric(gadash_prs)) {
42
+ ga_dash_drawprs(gadash_prs);
43
+ }
44
+ if (typeof ga_dash_drawtrafficmediums == "function"
45
+ && typeof gadash_trafficmediums !== 'undefined'
46
+ && !jQuery.isNumeric(gadash_trafficmediums)) {
47
+ ga_dash_drawtrafficmediums(gadash_trafficmediums);
48
+ }
49
+ if (typeof ga_dash_drawtraffictype == "function"
50
+ && typeof gadash_traffictype !== 'undefined'
51
+ && !jQuery.isNumeric(gadash_traffictype)) {
52
+ ga_dash_drawtraffictype(gadash_traffictype);
53
+ }
54
+ if (typeof ga_dash_drawsocialnetworks == "function"
55
+ && typeof gadash_socialnetworks !== 'undefined'
56
+ && !jQuery.isNumeric(gadash_socialnetworks)) {
57
+ ga_dash_drawsocialnetworks(gadash_socialnetworks);
58
+ }
59
+ if (typeof ga_dash_drawtrafficorganic == "function"
60
+ && typeof gadash_trafficorganic !== 'undefined'
61
+ && !jQuery.isNumeric(gadash_trafficorganic)) {
62
+ ga_dash_drawtrafficorganic(gadash_trafficorganic);
63
+ }
64
+ }
65
+ );
admin/js/wp-color-picker-script.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ jQuery(document).ready(function($){
2
+ $('.ga_dash_style').wpColorPicker();
3
+ });
config.php ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_Config')) {
9
+
10
+ final class GADASH_Config
11
+ {
12
+
13
+ public $options;
14
+
15
+ public $country_codes;
16
+
17
+ public $plugin_path, $plugin_url;
18
+
19
+ public function __construct()
20
+ {
21
+ $this->getPluginPath();
22
+
23
+ // get plugin options
24
+ $this->get_plugin_options();
25
+ }
26
+
27
+ // Validates data before storing
28
+ private static function validate_data($options)
29
+ {
30
+ if (isset($options['ga_realtime_pages'])) {
31
+ $options['ga_realtime_pages'] = (int) $options['ga_realtime_pages'];
32
+ }
33
+ if (isset($options['ga_crossdomain_tracking'])) {
34
+ $options['ga_crossdomain_tracking'] = (int) $options['ga_crossdomain_tracking'];
35
+ }
36
+ if (isset($options['ga_crossdomain_list'])) {
37
+ $options['ga_crossdomain_list'] = sanitize_text_field($options['ga_crossdomain_list']);
38
+ }
39
+ if (isset($options['ga_dash_apikey'])) {
40
+ $options['ga_dash_apikey'] = sanitize_text_field($options['ga_dash_apikey']);
41
+ }
42
+ if (isset($options['ga_dash_clientid'])) {
43
+ $options['ga_dash_clientid'] = sanitize_text_field($options['ga_dash_clientid']);
44
+ }
45
+ if (isset($options['ga_dash_clientsecret'])) {
46
+ $options['ga_dash_clientsecret'] = sanitize_text_field($options['ga_dash_clientsecret']);
47
+ }
48
+ if (isset($options['ga_dash_style'])) {
49
+ $options['ga_dash_style'] = sanitize_text_field($options['ga_dash_style']);
50
+ }
51
+ if (isset($options['ga_event_downloads'])) {
52
+ if (empty($options['ga_event_downloads'])) {
53
+ $options['ga_event_downloads'] = 'zip|mp3*|mpe*g|pdf|docx*|pptx*|xlsx*|rar*';
54
+ }
55
+ $options['ga_event_downloads'] = sanitize_text_field($options['ga_event_downloads']);
56
+ }
57
+ if (isset($options['ga_speed_samplerate']) && ($options['ga_speed_samplerate'] < 1 || $options['ga_speed_samplerate'] > 100)) {
58
+ $options['ga_speed_samplerate'] = 1;
59
+ }
60
+
61
+ if (isset($options['ga_target_geomap'])) {
62
+ $options['ga_target_geomap'] = sanitize_text_field($options['ga_target_geomap']);
63
+ }
64
+
65
+ if (isset($options['ga_author_dimindex'])) {
66
+ $options['ga_author_dimindex'] = (int) $options['ga_author_dimindex'];
67
+ }
68
+ if (isset($options['ga_category_dimindex'])) {
69
+ $options['ga_category_dimindex'] = (int) $options['ga_category_dimindex'];
70
+ }
71
+ if (isset($options['ga_user_dimindex'])) {
72
+ $options['ga_user_dimindex'] = (int) $options['ga_user_dimindex'];
73
+ }
74
+ if (isset($options['ga_pubyear_dimindex'])) {
75
+ $options['ga_pubyear_dimindex'] = (int) $options['ga_pubyear_dimindex'];
76
+ }
77
+
78
+ if (isset($options['ga_aff_tracking'])) {
79
+ $options['ga_aff_tracking'] = (int) $options['ga_aff_tracking'];
80
+ }
81
+
82
+ if (isset($options['ga_event_affiliates'])) {
83
+ if (empty($options['ga_event_affiliates'])) {
84
+ $options['ga_event_affiliates'] = '/out/';
85
+ }
86
+ $options['ga_event_affiliates'] = sanitize_text_field($options['ga_event_affiliates']);
87
+ }
88
+
89
+ return $options;
90
+ }
91
+
92
+ public function set_plugin_options($network_settings = false)
93
+ {
94
+ // Handle Network Mode
95
+ $options = $this->options;
96
+ $get_network_options = get_site_option('gadash_network_options');
97
+ $old_network_options = (array) json_decode($get_network_options);
98
+
99
+ if (is_multisite()) {
100
+ if ($network_settings) { // Retrieve network options, clear blog options, store both to db
101
+ $network_options['ga_dash_token'] = $this->options['ga_dash_token'];
102
+ $options['ga_dash_token'] = '';
103
+ $network_options['ga_dash_refresh_token'] = $this->options['ga_dash_refresh_token'];
104
+ $options['ga_dash_refresh_token'] = '';
105
+ if (is_network_admin()) {
106
+ $network_options['ga_dash_profile_list'] = $this->options['ga_dash_profile_list'];
107
+ $options['ga_dash_profile_list'] = array();
108
+ $network_options['ga_dash_apikey'] = $this->options['ga_dash_apikey'];
109
+ $options['ga_dash_apikey'] = '';
110
+ $network_options['ga_dash_clientid'] = $this->options['ga_dash_clientid'];
111
+ $options['ga_dash_clientid'] = '';
112
+ $network_options['ga_dash_clientsecret'] = $this->options['ga_dash_clientsecret'];
113
+ $options['ga_dash_clientsecret'] = '';
114
+ $network_options['ga_dash_userapi'] = $this->options['ga_dash_userapi'];
115
+ $options['ga_dash_userapi'] = 0;
116
+ $network_options['ga_dash_network'] = $this->options['ga_dash_network'];
117
+ $network_options['ga_dash_excludesa'] = $this->options['ga_dash_excludesa'];
118
+ unset($options['ga_dash_network']);
119
+
120
+ if (isset($this->options['ga_dash_tableid_network'])) {
121
+ $network_options['ga_dash_tableid_network'] = $this->options['ga_dash_tableid_network'];
122
+ unset($options['ga_dash_tableid_network']);
123
+ }
124
+ }
125
+ update_site_option('gadash_network_options', json_encode($this->validate_data(array_merge($old_network_options, $network_options))));
126
+ }
127
+ }
128
+
129
+ if (current_user_can('manage_options')) {
130
+ update_option('gadash_options', json_encode($this->validate_data($options)));
131
+ }
132
+ }
133
+
134
+ public function getPluginPath()
135
+ {
136
+ /*
137
+ * Set Plugin Path
138
+ */
139
+ $this->plugin_path = dirname(__FILE__);
140
+ $this->plugin_url = plugins_url("", __FILE__);
141
+ }
142
+
143
+ private function get_plugin_options()
144
+ {
145
+ /*
146
+ * Get plugin options
147
+ */
148
+ global $blog_id;
149
+ /*
150
+ * Include Tools
151
+ */
152
+ include_once ($this->plugin_path . '/tools/tools.php');
153
+ $tools = new GADASH_Tools();
154
+
155
+ if (! get_option('gadash_options')) {
156
+ GADASH_Install::install();
157
+ }
158
+ $this->options = (array) json_decode(get_option('gadash_options'));
159
+
160
+ // Maintain Compatibility
161
+ $this->maintain_compatibility();
162
+
163
+ // Handle Network Mode
164
+ if (is_multisite()) {
165
+ $get_network_options = get_site_option('gadash_network_options');
166
+ $network_options = (array) json_decode($get_network_options);
167
+ if (isset($network_options['ga_dash_network']) && ($network_options['ga_dash_network'])) {
168
+
169
+ $network_options = (array) json_decode($get_network_options);
170
+
171
+ if (! is_network_admin() && ! empty($network_options['ga_dash_profile_list'])) {
172
+ $network_options['ga_dash_profile_list'] = array(
173
+ 0 => $tools->get_selected_profile($network_options['ga_dash_profile_list'], $network_options['ga_dash_tableid_network']->$blog_id)
174
+ );
175
+ $network_options['ga_dash_tableid_jail'] = $network_options['ga_dash_profile_list'][0][1];
176
+ }
177
+
178
+ $this->options = array_merge($this->options, $network_options);
179
+ }
180
+ }
181
+ }
182
+
183
+ private function maintain_compatibility()
184
+ {
185
+ if (GADWP_CURRENT_VERSION != get_option('gadwp_version')) {
186
+ include_once ($this->plugin_path . '/tools/tools.php');
187
+ $tools = new GADASH_Tools();
188
+ $tools->ga_dash_clear_cache();
189
+ delete_option('gadash_lasterror');
190
+ update_option('gadwp_version', GADWP_CURRENT_VERSION);
191
+ if (is_multisite()) { // Cleanup errors on the entire network
192
+ foreach (wp_get_sites() as $blog) {
193
+ switch_to_blog($blog['blog_id']);
194
+ delete_transient('ga_dash_gapi_errors');
195
+ restore_current_blog();
196
+ }
197
+ } else {
198
+ delete_transient('ga_dash_gapi_errors');
199
+ }
200
+ }
201
+
202
+ if (! isset($this->options['ga_enhanced_links'])) {
203
+ $this->options['ga_enhanced_links'] = 0;
204
+ }
205
+
206
+ if (! isset($this->options['ga_enhanced_network'])) {
207
+ $this->options['ga_dash_network'] = 0;
208
+ }
209
+
210
+ if (! isset($this->options['ga_enhanced_excludesa'])) {
211
+ $this->options['ga_dash_excludesa'] = 0;
212
+ }
213
+
214
+ if (! isset($this->options['ga_dash_remarketing'])) {
215
+ $this->options['ga_dash_remarketing'] = 0;
216
+ }
217
+
218
+ if (! isset($this->options['ga_dash_adsense'])) {
219
+ $this->options['ga_dash_adsense'] = 0;
220
+ }
221
+
222
+ if (! isset($this->options['ga_speed_samplerate'])) {
223
+ $this->options['ga_speed_samplerate'] = 1;
224
+ }
225
+
226
+ if (! isset($this->options['ga_event_bouncerate'])) {
227
+ $this->options['ga_event_bouncerate'] = 0;
228
+ }
229
+
230
+ if (! is_array($this->options['ga_dash_access_front']) or empty($this->options['ga_dash_access_front'])) {
231
+ $this->options['ga_dash_access_front'] = array();
232
+ $this->options['ga_dash_access_front'][] = 'administrator';
233
+ }
234
+
235
+ if (! is_array($this->options['ga_dash_access_back']) or empty($this->options['ga_dash_access_back'])) {
236
+ $this->options['ga_dash_access_back'] = array();
237
+ $this->options['ga_dash_access_back'][] = 'administrator';
238
+ }
239
+
240
+ if (! is_array($this->options['ga_track_exclude'])) {
241
+ $this->options['ga_track_exclude'] = array();
242
+ }
243
+
244
+ if (! isset($this->options['ga_crossdomain_tracking'])) {
245
+ $this->options['ga_crossdomain_tracking'] = 0;
246
+ }
247
+ if (! isset($this->options['ga_crossdomain_list'])) {
248
+ $this->options['ga_crossdomain_list'] = '';
249
+ }
250
+ if (! isset($this->options['ga_author_dimindex'])) {
251
+ $this->options['ga_author_dimindex'] = 0;
252
+ }
253
+ if (! isset($this->options['ga_category_dimindex'])) {
254
+ $this->options['ga_category_dimindex'] = 0;
255
+ }
256
+ if (! isset($this->options['ga_user_dimindex'])) {
257
+ $this->options['ga_user_dimindex'] = 0;
258
+ }
259
+ if (! isset($this->options['ga_pubyear_dimindex'])) {
260
+ $this->options['ga_pubyear_dimindex'] = 0;
261
+ }
262
+ if (! isset($this->options['ga_event_affiliates'])) {
263
+ $this->options['ga_event_affiliates'] = '/out/';
264
+ }
265
+ if (! isset($this->options['ga_aff_tracking'])) {
266
+ $this->options['ga_aff_tracking'] = 0;
267
+ }
268
+ if (! isset($this->options['ga_hash_tracking'])) {
269
+ $this->options['ga_hash_tracking'] = 0;
270
+ }
271
+ if (isset($this->options['ga_tracking_code'])) {
272
+ unset($this->options['ga_tracking_code']);
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+ if (! isset($GLOBALS['GADASH_Config'])) {
279
+ $GLOBALS['GADASH_Config'] = new GADASH_Config();
280
+ }
front/ajax-actions.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: http://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_Frontend_Ajax')) {
9
+
10
+ final class GADASH_Frontend_Ajax
11
+ {
12
+
13
+ function __construct()
14
+ {
15
+ // Frontend Reports/Page action
16
+ add_action('wp_ajax_gadash_get_frontend_pagereports', array(
17
+ $this,
18
+ 'ajax_afterpost_reports'
19
+ ));
20
+
21
+ // Frontend Widget actions
22
+ add_action('wp_ajax_gadash_get_frontendwidget_data', array(
23
+ $this,
24
+ 'ajax_frontend_widget'
25
+ ));
26
+
27
+ add_action('wp_ajax_nopriv_gadash_get_frontendwidget_data', array(
28
+ $this,
29
+ 'ajax_frontend_widget'
30
+ ));
31
+ }
32
+
33
+ // Frontend Reports/Page
34
+ /**
35
+ * Ajax handler for getting analytics data for frontend Views vs UniqueViews
36
+ *
37
+ * @return string|int
38
+ */
39
+ function ajax_afterpost_reports()
40
+ {
41
+ global $GADASH_Config;
42
+
43
+ $page_url = $_REQUEST['gadash_pageurl'];
44
+ $post_id = $_REQUEST['gadash_postid'];
45
+ $query = $_REQUEST['query'];
46
+
47
+ if (! isset($_REQUEST['gadash_security_pagereports']) or ! wp_verify_nonce($_REQUEST['gadash_security_pagereports'], 'gadash_get_frontend_pagereports')) {
48
+ print(json_encode(- 30));
49
+ die();
50
+ }
51
+
52
+ /*
53
+ * Include Tools
54
+ */
55
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
56
+ $tools = new GADASH_Tools();
57
+
58
+ if (! $tools->check_roles($GADASH_Config->options['ga_dash_access_front']) or ! ($GADASH_Config->options['ga_dash_frontend_stats'] or $GADASH_Config->options['ga_dash_frontend_keywords'])) {
59
+ print(json_encode(- 31));
60
+ die();
61
+ }
62
+
63
+ if ($GADASH_Config->options['ga_dash_token'] and function_exists('curl_version') and $GADASH_Config->options['ga_dash_tableid_jail']) {
64
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
65
+ global $GADASH_GAPI;
66
+ } else {
67
+ print(json_encode(- 24));
68
+ die();
69
+ }
70
+
71
+ $projectId = $GADASH_Config->options['ga_dash_tableid_jail'];
72
+ $profile_info = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $projectId);
73
+ if (isset($profile_info[4])) {
74
+ $GADASH_GAPI->timeshift = $profile_info[4];
75
+ } else {
76
+ $GADASH_GAPI->timeshift = (int) current_time('timestamp') - time();
77
+ }
78
+
79
+ if (! $GADASH_GAPI->client->getAccessToken()) {
80
+ print(json_encode(- 25));
81
+ die();
82
+ }
83
+
84
+ switch ($query) {
85
+
86
+ case 'pageviews':
87
+ print($GADASH_GAPI->frontend_afterpost_pageviews($projectId, $page_url, $post_id));
88
+ break;
89
+ case 'searches':
90
+ print($GADASH_GAPI->frontend_afterpost_searches($projectId, $page_url, $post_id));
91
+ break;
92
+ default:
93
+ die();
94
+ break;
95
+ }
96
+
97
+ die();
98
+ }
99
+
100
+ // Frontend Widget Reports
101
+ /**
102
+ * Ajax handler for getting analytics data for frontend Widget
103
+ *
104
+ * @return string|int
105
+ */
106
+ function ajax_frontend_widget()
107
+ {
108
+ global $GADASH_Config;
109
+
110
+ $anonim = (int)$_REQUEST['gadash_anonim'];
111
+ $period = $_REQUEST['gadash_period'];
112
+
113
+ switch ($period) { //make sure we have a valid request
114
+ case '7daysAgo':
115
+ $safeperiod = '7daysAgo';
116
+ break;
117
+ case '14daysAgo':
118
+ $safeperiod = '14daysAgo';
119
+ break;
120
+ default:
121
+ $safeperiod = '30daysAgo';
122
+ break;
123
+ }
124
+
125
+ if (! isset($_REQUEST['gadash_security_afw']) or ! wp_verify_nonce($_REQUEST['gadash_security_afw'], 'gadash_get_frontendwidget_data')) {
126
+ print(json_encode(- 30));
127
+ die();
128
+ }
129
+
130
+ if ($GADASH_Config->options['ga_dash_token'] and function_exists('curl_version') and $GADASH_Config->options['ga_dash_tableid_jail']) {
131
+ include_once ($GADASH_Config->plugin_path . '/tools/gapi.php');
132
+ global $GADASH_GAPI;
133
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
134
+ $tools = new GADASH_Tools();
135
+ } else {
136
+ print(json_encode(- 24));
137
+ die();
138
+ }
139
+
140
+ $projectId = $GADASH_Config->options['ga_dash_tableid_jail'];
141
+ $profile_info = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $projectId);
142
+ if (isset($profile_info[4])) {
143
+ $GADASH_GAPI->timeshift = $profile_info[4];
144
+ } else {
145
+ $GADASH_GAPI->timeshift = (int) current_time('timestamp') - time();
146
+ }
147
+
148
+ if (! $GADASH_GAPI->client->getAccessToken()) {
149
+ print(json_encode(- 25));
150
+ die();
151
+ }
152
+
153
+ $data_widget = $GADASH_GAPI->frontend_widget_stats($projectId, $safeperiod, $anonim);
154
+
155
+ print(json_encode($data_widget));
156
+
157
+ die();
158
+ }
159
+ }
160
+ }
161
+
162
+ $GADASH_Frontend_Ajax = new GADASH_Frontend_Ajax();
front/css/content_stats.css ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #gadwp {
2
+ font-family: 'Open Sans', sans-serif;
3
+ }
4
+
5
+ #gadwp-searches td {
6
+ line-height: 1.5em;
7
+ padding: 2px;
8
+ font-size: 1em;
9
+ }
10
+
11
+ #gadwp-searches {
12
+ line-height: 10px;
13
+ margin-top: 15px;
14
+ }
15
+
16
+ #gadwp-visits {
17
+ height: 200px;
18
+ margin-top: 15px;
19
+ }
20
+
21
+ #gadwp-content {
22
+ width: 100%;
23
+ }
24
+
25
+ #gadwp-title {
26
+ text-transform: uppercase;
27
+ font-weight: 600;
28
+ font-size: 14px;
29
+ padding-bottom: 5px;
30
+ }
31
+
32
+ #gadash-widget{
33
+ padding:0 5px;
34
+ }
35
+
36
+ #gadash-widgetchart {
37
+ width: 100%;
38
+ }
39
+
40
+ #gadash-widgettotals {
41
+ margin: 0 0 10px 0;
42
+ width: 100%;
43
+ display: table;
44
+ clear: both;
45
+ }
46
+
47
+ #gadash-widgettotals .gadash-left {
48
+ padding: 10px 0 0 0;
49
+ width: 45%;
50
+ float: left;
51
+ font-weight: 600;
52
+ }
53
+
54
+ #gadash-widgettotals .gadash-right {
55
+ padding: 10px 0 0 0;
56
+ float: left;
57
+ font-style: italic;
58
+ }
front/frontend.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+
9
+ if (! class_exists('GADASH_Frontend')) {
10
+
11
+ final class GADASH_Frontend
12
+ {
13
+
14
+ function __construct()
15
+ {
16
+ add_filter('the_content', array(
17
+ $this,
18
+ 'ga_dash_front_content'
19
+ ));
20
+ // Frontend Styles
21
+ add_action('wp_enqueue_scripts', array(
22
+ $this,
23
+ 'ga_dash_front_enqueue_styles'
24
+ ));
25
+ }
26
+
27
+ function ga_dash_front_enqueue_styles()
28
+ {
29
+ global $GADASH_Config;
30
+
31
+ if ((! is_page() and ! is_single()) or is_preview() or ! is_user_logged_in()) {
32
+ return;
33
+ }
34
+
35
+ wp_enqueue_style('ga_dash-front', $GADASH_Config->plugin_url . '/front/css/content_stats.css', NULL, GADWP_CURRENT_VERSION);
36
+ wp_enqueue_style('ga_dash-nprogress', $GADASH_Config->plugin_url . '/tools/nprogress/nprogress.css', NULL, GADWP_CURRENT_VERSION);
37
+ wp_enqueue_script('ga_dash-front', $GADASH_Config->plugin_url . '/front/js/content_stats.js', array(
38
+ 'jquery'
39
+ ), GADWP_CURRENT_VERSION);
40
+ wp_enqueue_script('ga_dash-nprogress', $GADASH_Config->plugin_url . '/tools/nprogress/nprogress.js', array(
41
+ 'jquery'
42
+ ), GADWP_CURRENT_VERSION);
43
+ wp_enqueue_script('googlejsapi', 'https://www.google.com/jsapi');
44
+ }
45
+
46
+ function ga_dash_front_content($content)
47
+ {
48
+ global $post;
49
+ global $GADASH_Config;
50
+
51
+ /*
52
+ * Include Tools
53
+ */
54
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
55
+ $tools = new GADASH_Tools();
56
+
57
+ if (! $tools->check_roles($GADASH_Config->options['ga_dash_access_front']) or ! ($GADASH_Config->options['ga_dash_frontend_stats'] or $GADASH_Config->options['ga_dash_frontend_keywords'])) {
58
+ return $content;
59
+ }
60
+
61
+ if ((is_page() || is_single()) && ! is_preview()) {
62
+
63
+ wp_enqueue_script('gadash-general-settings', plugins_url('admin/js/admin.js', dirname(__FILE__)), array(
64
+ 'jquery'
65
+ ));
66
+
67
+ $page_url = $_SERVER["REQUEST_URI"]; // str_replace(site_url(), "", get_permalink());
68
+
69
+ $post_id = $post->ID;
70
+
71
+ $content .= '<script type="text/javascript">
72
+ gadash_firstclick = true;
73
+ npcounter = 0;
74
+
75
+ jQuery(document).ready(function(){
76
+ jQuery("#gadwp-title").click(function(){
77
+ if (gadash_firstclick){
78
+ NProgress.configure({ parent: "#gadwp-content" });
79
+ NProgress.configure({ showSpinner: false });
80
+ NProgress.start();
81
+ if(typeof ga_dash_drawpagesessions == "function"){
82
+ jQuery.post("' . admin_url('admin-ajax.php') . '", {action: "gadash_get_frontend_pagereports",gadash_pageurl: "' . $page_url . '",gadash_postid: "' . $post_id . '",query: "pageviews",gadash_security_pagereports: "' . wp_create_nonce('gadash_get_frontend_pagereports') . '"}, function(response){
83
+ gadash_pagesessions = jQuery.parseJSON(response);
84
+ if (!jQuery.isNumeric(gadash_pagesessions)){
85
+ google.setOnLoadCallback(ga_dash_drawpagesessions(gadash_pagesessions));
86
+ }else{
87
+ jQuery("#gadwp-sessions").css({"background-color":"#F7F7F7","height":"auto","padding-top":"30px","padding-bottom":"30px","color":"#000","text-align":"center"});
88
+ jQuery("#gadwp-sessions").html("' . __("This report is unavailable", 'ga-dash') . ' ("+response+")");
89
+ checknpcounter(1);
90
+ }
91
+ });
92
+ }
93
+ if(typeof ga_dash_drawpagesearches == "function"){
94
+ jQuery.post("' . admin_url('admin-ajax.php') . '", {action: "gadash_get_frontend_pagereports",gadash_pageurl: "' . $page_url . '",gadash_postid: "' . $post_id . '",query: "searches",gadash_security_pagereports: "' . wp_create_nonce('gadash_get_frontend_pagereports') . '"}, function(response){
95
+ gadash_pagesearches = jQuery.parseJSON(response);
96
+ if (!jQuery.isNumeric(gadash_pagesearches)){
97
+ google.setOnLoadCallback(ga_dash_drawpagesearches(gadash_pagesearches));
98
+ }else{
99
+ jQuery("#gadwp-searches").css({"background-color":"#F7F7F7","height":"auto","padding-top":"30px","padding-bottom":"30px","color":"#000","text-align":"center"});
100
+ jQuery("#gadwp-searches").html("' . __("This report is unavailable", 'ga-dash') . ' ("+response+")");
101
+ checknpcounter(1);
102
+ }
103
+ });
104
+ }
105
+ gadash_firstclick = false;
106
+ }
107
+ });
108
+ });';
109
+
110
+ if ($GADASH_Config->options['ga_dash_frontend_stats']) {
111
+
112
+ $title = __("Views vs UniqueViews", 'ga-dash');
113
+
114
+ if (isset($GADASH_Config->options['ga_dash_style'])) {
115
+ $css = "colors:['" . $GADASH_Config->options['ga_dash_style'] . "','" . $tools->colourVariator($GADASH_Config->options['ga_dash_style'], - 20) . "'],";
116
+ $color = $GADASH_Config->options['ga_dash_style'];
117
+ } else {
118
+ $css = "";
119
+ $color = "#3366CC";
120
+ }
121
+
122
+ $content .= '
123
+ google.load("visualization", "1", {packages:["corechart"]});
124
+ function ga_dash_drawpagesessions(gadash_pagesessions) {
125
+
126
+ var data = google.visualization.arrayToDataTable(gadash_pagesessions);
127
+
128
+ var options = {
129
+ legend: {position: "none"},
130
+ pointSize: 3,' . $css . '
131
+ title: "' . $title . '",
132
+ vAxis: { textPosition: "in", minValue: 0},
133
+ chartArea: {width: "100%", height: "80%"},
134
+ hAxis: { textPosition: "none"}
135
+ };
136
+
137
+ var chart = new google.visualization.AreaChart(document.getElementById("gadwp-sessions"));
138
+ chart.draw(data, options);
139
+ checknpcounter(1);
140
+ }';
141
+ }
142
+
143
+ if ($GADASH_Config->options['ga_dash_frontend_keywords']) {
144
+
145
+ $content .= '
146
+ google.load("visualization", "1", {packages:["table"]})
147
+ function ga_dash_drawpagesearches(gadash_pagesearches) {
148
+
149
+ var datas = google.visualization.arrayToDataTable(gadash_pagesearches);
150
+
151
+ var options = {
152
+ page: "enable",
153
+ pageSize: 6,
154
+ width: "100%",
155
+ allowHtml:true
156
+ };
157
+
158
+ var chart = new google.visualization.Table(document.getElementById("gadwp-searches"));
159
+ chart.draw(datas, options);
160
+ checknpcounter(1);
161
+ }';
162
+ }
163
+
164
+ $content .= "</script>";
165
+ $content .= '<p>
166
+ <div id="gadwp">
167
+ <div id="gadwp-title">
168
+ <a href="#gadwp">' . __('Google Analytics Reports', "ga-dash") . ' <span id="gadwp-arrow">&#x25BC;</span></a>
169
+ </div>
170
+ <div id="gadwp-content">
171
+ ' . ($GADASH_Config->options['ga_dash_frontend_stats'] ? '<div id="gadwp-sessions" class="gadwp-spinner"></div>' : '') . ($GADASH_Config->options['ga_dash_frontend_keywords'] ? '<div id="gadwp-searches" class="gadwp-spinner"></div>' : '') . '
172
+ </div>
173
+ </div>
174
+ </p>';
175
+ }
176
+ return $content;
177
+ }
178
+ }
179
+ }
180
+ if (! is_admin()) {
181
+ $GADASH_Frontend = new GADASH_Frontend();
182
+ }
front/js/content_stats.js ADDED
@@ -0,0 +1 @@
 
0
 
1
 
2
  });
1
+ jQuery(document).ready(function(){
2
 
3
 
4
  });
front/tracking.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_Tracking')) {
9
+
10
+ class GADASH_Tracking
11
+ {
12
+
13
+ function __construct()
14
+ {
15
+ add_action('wp_head', array(
16
+ $this,
17
+ 'ga_dash_tracking'
18
+ ));
19
+ add_action('wp_enqueue_scripts', array(
20
+ $this,
21
+ 'ga_dash_enqueue_scripts'
22
+ ));
23
+ }
24
+
25
+ function ga_dash_enqueue_scripts()
26
+ {
27
+ global $GADASH_Config;
28
+ if ($GADASH_Config->options['ga_event_tracking'] and ! wp_script_is('jquery')) {
29
+ wp_enqueue_script('jquery');
30
+ }
31
+ }
32
+
33
+ function ga_dash_tracking($head)
34
+ {
35
+ global $GADASH_Config;
36
+ /*
37
+ * Include Tools
38
+ */
39
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
40
+ $tools = new GADASH_Tools();
41
+
42
+ if ($tools->check_roles($GADASH_Config->options['ga_track_exclude'], true) or ($GADASH_Config->options['ga_dash_excludesa'] and current_user_can('manage_network'))) {
43
+ return;
44
+ }
45
+
46
+ $traking_mode = $GADASH_Config->options['ga_dash_tracking'];
47
+ $traking_type = $GADASH_Config->options['ga_dash_tracking_type'];
48
+
49
+ if ($traking_mode > 0) {
50
+
51
+ if (! $GADASH_Config->options['ga_dash_tableid_jail']) {
52
+ return;
53
+ }
54
+
55
+ if ($traking_type == "classic") {
56
+ echo "\n<!-- BEGIN GADWP v" . GADWP_CURRENT_VERSION . " Classic Tracking - https://deconf.com/google-analytics-dashboard-wordpress/ -->\n";
57
+ if ($GADASH_Config->options['ga_event_tracking']) {
58
+ require_once 'tracking/events-classic.php';
59
+ }
60
+
61
+ require_once 'tracking/code-classic.php';
62
+ echo "\n<!-- END GADWP Classic Tracking -->\n\n";
63
+ } else {
64
+ echo "\n<!-- BEGIN GADWP v" . GADWP_CURRENT_VERSION . " Universal Tracking - https://deconf.com/google-analytics-dashboard-wordpress/ -->\n";
65
+ if ($GADASH_Config->options['ga_event_tracking'] or $GADASH_Config->options['ga_aff_tracking'] or $GADASH_Config->options['ga_hash_tracking']) {
66
+ require_once 'tracking/events-universal.php';
67
+ }
68
+
69
+ require_once 'tracking/code-universal.php';
70
+
71
+ echo "\n<!-- END GADWP Universal Tracking -->\n\n";
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ if (! is_admin()) {
79
+ $GADASH_Tracking = new GADASH_Tracking();
80
+ }
front/tracking/code-classic.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ $profile = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
9
+ ?>
10
+ <script type="text/javascript">
11
+ var _gaq = _gaq || [];
12
+ <?php if ($GADASH_Config->options ['ga_enhanced_links']) {?>
13
+ var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js';
14
+ _gaq.push(['_require', 'inpage_linkid', pluginUrl]);
15
+ <?php }?>
16
+ _gaq.push(['_setAccount', '<?php echo esc_html($profile[2]); ?>']);
17
+ _gaq.push(['_trackPageview']<?php if ($GADASH_Config->options ['ga_dash_anonim']) {?>, ['_gat._anonymizeIp']<?php }?>);
18
+
19
+ (function() {
20
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
21
+ <?php if ($GADASH_Config->options ['ga_dash_remarketing']) { ?>
22
+ ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
23
+ <?php }else{?>
24
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
25
+ <?php }?>
26
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
27
+ })();
28
+ </script>
front/tracking/code-universal.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ $profile = $tools->get_selected_profile($GADASH_Config->options['ga_dash_profile_list'], $GADASH_Config->options['ga_dash_tableid_jail']);
9
+ $rootdomain = $tools->get_root_domain($profile[3]);
10
+ ?>
11
+ <script>
12
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
13
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
14
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
15
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
16
+ <?php
17
+ $create_options = '{';
18
+ if ($GADASH_Config->options['ga_speed_samplerate'] != 1) {
19
+ $create_options .= "'siteSpeedSampleRate' : " . (int) $GADASH_Config->options['ga_speed_samplerate'];
20
+ }
21
+ if ($GADASH_Config->options['ga_crossdomain_tracking'] and $GADASH_Config->options['ga_crossdomain_list'] != '') {
22
+ if ($create_options != '{') {
23
+ $create_options .= ', ';
24
+ }
25
+ $create_options .= "'allowLinker' : true";
26
+ }
27
+ $create_options .= '}';
28
+ ?>
29
+ ga('create', '<?php echo esc_html($profile[2]); ?>', 'auto'<?php if ($create_options != '{}') {?>, <?php echo $create_options; }?>);
30
+ <?php if ($GADASH_Config->options ['ga_crossdomain_tracking'] AND $GADASH_Config->options ['ga_crossdomain_list']!='') {?>
31
+ ga('require', 'linker');
32
+ <?php
33
+ $crossdomain_list = explode(',', $GADASH_Config->options['ga_crossdomain_list']);
34
+ $crossdomain_list = array_map('trim', $crossdomain_list);
35
+ $crossdomain_list = strip_tags(implode("','", $crossdomain_list));
36
+ ?>
37
+ ga('linker:autoLink', ['<?php echo ($crossdomain_list)?>'] );
38
+ <?php
39
+ }
40
+
41
+ if ($GADASH_Config->options['ga_dash_remarketing']) {
42
+ ?>
43
+ ga('require', 'displayfeatures');
44
+ <?php
45
+ }
46
+
47
+ if ($GADASH_Config->options['ga_enhanced_links']) {
48
+ ?>
49
+ ga('require', 'linkid', 'linkid.js');
50
+ <?php
51
+ }
52
+
53
+ if ($GADASH_Config->options['ga_author_dimindex'] and (is_single() or is_page())) {
54
+ global $post;
55
+ $author_id = $post->post_author;
56
+ $author_name = get_the_author_meta('display_name', $author_id);
57
+ ?>
58
+ ga('set', 'dimension<?php echo (int)$GADASH_Config->options ['ga_author_dimindex']; ?>', '<?php echo $author_name; ?>');
59
+ <?php
60
+ }
61
+
62
+ if ($GADASH_Config->options['ga_pubyear_dimindex'] and is_single()) {
63
+ global $post;
64
+ $date = get_the_date('Y', $post->ID);
65
+ ?>
66
+ ga('set', 'dimension<?php echo (int)$GADASH_Config->options ['ga_pubyear_dimindex']; ?>', '<?php echo $date; ?>');
67
+ <?php
68
+ }
69
+
70
+ if ($GADASH_Config->options['ga_category_dimindex'] and is_category()) {
71
+ ?>
72
+ ga('set', 'dimension<?php echo (int)$GADASH_Config->options ['ga_category_dimindex']; ?>', '<?php echo single_tag_title(); ?>');
73
+ <?php
74
+ }
75
+
76
+ if ($GADASH_Config->options['ga_category_dimindex'] and is_single()) {
77
+ global $post;
78
+ $categories = get_the_category($post->ID);
79
+ foreach ($categories as $category) {
80
+ ?>
81
+ ga('set', 'dimension<?php echo (int)$GADASH_Config->options ['ga_category_dimindex']; ?>', '<?php echo $category->name; ?>');
82
+ <?php
83
+ break;
84
+ }
85
+ }
86
+
87
+ if ($GADASH_Config->options['ga_user_dimindex']) {
88
+ ?>
89
+ ga('set', 'dimension<?php echo (int)$GADASH_Config->options ['ga_user_dimindex']; ?>', '<?php echo is_user_logged_in()?'registered':'guest'; ?>');
90
+ <?php
91
+ }
92
+
93
+ do_action('ga_dash_addtrackingcode');
94
+
95
+ if ($GADASH_Config->options['ga_dash_anonim']) {
96
+ ?> ga('send', 'pageview', {'anonymizeIp': true});<?php } else {?> ga('send', 'pageview');
97
+ <?php
98
+ }
99
+ if ($GADASH_Config->options['ga_dash_adsense']) {
100
+ ?>
101
+
102
+ window.google_analytics_uacct = "<?php echo esc_html($profile[2]); ?>";
103
+ <?php }?>
104
+ </script>
front/tracking/events-classic.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ (function($){
3
+ $(window).load(function() {
4
+ if (this._gat) {
5
+ tks = this._gat._getTrackers();
6
+ ga_track = function(p) {
7
+ for (i=0; i < tks.length; i++) {
8
+ var n = tks[i]._getName() !== "" ? tks[i]._getName()+"." : "";
9
+ a = [];
10
+ for (i2=0; i2 < p.length; i2++) {
11
+ var b = i2===0 ? n+p[i2] : p[i2];
12
+ a.push(b);
13
+ }
14
+ _gaq.push(a);
15
+ }
16
+ };
17
+ $('a').filter(function() {
18
+ return this.href.match(/.*\.(<?php echo esc_js($GADASH_Config->options['ga_event_downloads']);?>)(\?.*)?$/);
19
+ }).click(function(e) {
20
+ ga_track(['_trackEvent', 'download', 'click', this.href]);
21
+ });
22
+ $('a[href^="mailto"]').click(function(e) {
23
+ ga_track(['_trackSocial', 'email', 'send', this.href]);
24
+ });
25
+ var loc = location.host.split('.');
26
+ while (loc.length > 2) { loc.shift(); }
27
+ loc = loc.join('.');
28
+ var localURLs = [
29
+ loc,
30
+ '<?php echo esc_html(get_option('siteurl'));?>'
31
+ ];
32
+ $('a[href^="http"]').filter(function() {
33
+ for (var i = 0; i < localURLs.length; i++) {
34
+ if (this.href.indexOf(localURLs[i]) == -1) return this.href;
35
+ }
36
+ }).click(function(e) {
37
+ ga_track(['_trackEvent', 'outbound', 'click', this.href]);
38
+ });
39
+ }
40
+ });
41
+ })(jQuery);
42
+ </script>
front/tracking/events-universal.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $domaindata = $tools->get_root_domain ( esc_html ( get_option ( 'siteurl' ) ) ); ?>
2
+ <script type="text/javascript">
3
+ (function($){
4
+ $(window).load(function() {
5
+ <?php if ($GADASH_Config->options['ga_event_tracking']){ ?>
6
+
7
+ //Track Downloads
8
+ $('a').filter(function() {
9
+ return this.href.match(/.*\.(<?php echo esc_js($GADASH_Config->options['ga_event_downloads']);?>)(\?.*)?$/);
10
+ }).click(function(e) {
11
+ ga('send','event', 'download', 'click', this.href<?php if(isset($GADASH_Config->options['ga_event_bouncerate']) && $GADASH_Config->options['ga_event_bouncerate']){echo ", {'nonInteraction': 1}";}?>);
12
+ });
13
+
14
+ //Track Mailto
15
+ $('a[href^="mailto"]').click(function(e) {
16
+ ga('send','event', 'email', 'send', this.href<?php if(isset($GADASH_Config->options['ga_event_bouncerate']) && $GADASH_Config->options['ga_event_bouncerate']){echo ", {'nonInteraction': 1}";}?>);
17
+ });
18
+ <?php if (isset ( $domaindata ['domain'] ) and $domaindata ['domain']) { ?>
19
+
20
+ //Track Outbound Links
21
+ $('a[href^="http"]').filter(function() {
22
+ if (!this.href.match(/.*\.(<?php echo esc_js($GADASH_Config->options['ga_event_downloads']);?>)(\?.*)?$/)){
23
+ if (this.href.indexOf('<?php echo $domaindata['domain']; ?>') == -1) return this.href;
24
+ }
25
+ }).click(function(e) {
26
+ ga('send','event', 'outbound', 'click', this.href<?php if(isset($GADASH_Config->options['ga_event_bouncerate']) && $GADASH_Config->options['ga_event_bouncerate']){echo ", {'nonInteraction': 1}";}?>);
27
+ });
28
+ <?php } ?>
29
+ <?php } ?>
30
+ <?php if ($GADASH_Config->options['ga_event_affiliates'] AND $GADASH_Config->options['ga_aff_tracking']){ ?>
31
+
32
+ //Track Affiliates
33
+ $('a').filter(function() {
34
+ if ('<?php echo esc_js($GADASH_Config->options['ga_event_affiliates']);?>'!=''){
35
+ return this.href.match(/(<?php echo str_replace('/','\/',(esc_js($GADASH_Config->options['ga_event_affiliates'])));?>)/);
36
+ }
37
+ }).click(function(event) {
38
+ ga('send','event', 'affiliates', 'click', this.href<?php if(isset($GADASH_Config->options['ga_event_bouncerate']) && $GADASH_Config->options['ga_event_bouncerate']){echo ", {'nonInteraction': 1}";}?>);
39
+ });
40
+ <?php } ?>
41
+ <?php if (isset ( $domaindata ['domain'] ) and $domaindata ['domain'] AND $GADASH_Config->options ['ga_hash_tracking']) { ?>
42
+
43
+ //Track Hashmarks
44
+ $('a').filter(function() {
45
+ if (this.href.indexOf('<?php echo $domaindata['domain']; ?>') != -1 || this.href.indexOf('://') == -1) return this.hash;
46
+ }).click(function(e) {
47
+ ga('send','event', 'hashmark', 'click', this.href<?php if(isset($GADASH_Config->options['ga_event_bouncerate']) && $GADASH_Config->options['ga_event_bouncerate']){echo ", {'nonInteraction': 1}";}?>);
48
+ });
49
+
50
+ <?php } ?>
51
+ });
52
+ })(jQuery);
53
+ </script>
front/widgets.php ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Author: Alin Marcu
5
+ * Author URI: https://deconf.com
6
+ * License: GPLv2 or later
7
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
+ */
9
+
10
+ class GADSH_Frontend_Widget extends WP_Widget
11
+ {
12
+
13
+ final function __construct()
14
+ {
15
+ parent::__construct('gadash_frontend_widget', __('Google Analytics Dashboard', 'ga-dash'), array(
16
+ 'description' => __("Will display your google analytics stats in a widget", 'ga-dash')
17
+ ));
18
+
19
+ // Frontend Styles
20
+ if (is_active_widget(false, false, $this->id_base, true)) {
21
+ add_action('wp_enqueue_scripts', array(
22
+ $this,
23
+ 'ga_dash_front_enqueue_styles'
24
+ ));
25
+ }
26
+ }
27
+
28
+ function ga_dash_front_enqueue_styles()
29
+ {
30
+ global $GADASH_Config;
31
+
32
+ wp_enqueue_style('ga_dash-front', $GADASH_Config->plugin_url . '/front/css/content_stats.css', NULL, GADWP_CURRENT_VERSION);
33
+ wp_enqueue_script('ga_dash-front', $GADASH_Config->plugin_url . '/front/js/content_stats.js', array(
34
+ 'jquery'
35
+ ), GADWP_CURRENT_VERSION);
36
+ wp_enqueue_script('googlejsapi', 'https://www.google.com/jsapi');
37
+ }
38
+
39
+ public function widget($args, $instance)
40
+ {
41
+ global $GADASH_Config;
42
+
43
+ $widget_title = apply_filters('widget_title', $instance['title']);
44
+ $title = __("Sessions", 'ga-dash') . ($instance['anonim'] ? "' " . __("trend", 'ga-dash') : '');
45
+
46
+ echo "\n<!-- BEGIN GADWP v" . GADWP_CURRENT_VERSION . " Widget - https://deconf.com/google-analytics-dashboard-wordpress/ -->\n";
47
+ echo $args['before_widget'];
48
+ if (! empty($widget_title)) {
49
+ echo $args['before_title'] . $widget_title . $args['after_title'];
50
+ }
51
+
52
+ /*
53
+ * Include Tools
54
+ */
55
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
56
+ $tools = new GADASH_Tools();
57
+
58
+ if (isset($GADASH_Config->options['ga_dash_style'])) {
59
+ $css = "colors:['" . $GADASH_Config->options['ga_dash_style'] . "','" . $tools->colourVariator($GADASH_Config->options['ga_dash_style'], - 20) . "'],";
60
+ $color = $GADASH_Config->options['ga_dash_style'];
61
+ } else {
62
+ $css = "";
63
+ $color = "#3366CC";
64
+ }
65
+
66
+ ob_start();
67
+
68
+ if ($instance['anonim']) {
69
+ $formater = "var formatter = new google.visualization.NumberFormat({
70
+ suffix: '%',
71
+ fractionDigits: 2
72
+ });
73
+
74
+ formatter.format(data, 1); ";
75
+ } else {
76
+ $formater = '';
77
+ }
78
+
79
+ $periodtext = "";
80
+
81
+ switch ($instance['period']) {
82
+ case '7daysAgo':
83
+ $periodtext = __('Last 7 Days', 'ga-dash');
84
+ break;
85
+ case '14daysAgo':
86
+ $periodtext = __('Last 14 Days', 'ga-dash');
87
+ break;
88
+ case '30daysAgo':
89
+ $periodtext = __('Last 30 Days', 'ga-dash');
90
+ break;
91
+ default:
92
+ $periodtext = "";
93
+ break;
94
+ }
95
+
96
+ switch ($instance['display']) {
97
+ case '1':
98
+ echo '<div id="gadash-widget"><div id="gadash-widgetchart"></div><div id="gadash-widgettotals"></div></div>';
99
+ break;
100
+ case '2':
101
+ echo '<div id="gadash-widget"><div id="gadash-widgetchart"></div></div>';
102
+ break;
103
+ case '3':
104
+ echo '<div id="gadash-widget"><div id="gadash-widgettotals"></div></div>';
105
+ break;
106
+ }
107
+
108
+ echo '<script type="text/javascript">
109
+
110
+ jQuery.post("' . admin_url('admin-ajax.php') . '", {action: "gadash_get_frontendwidget_data",gadash_anonim: "' . $instance['anonim'] . '",gadash_period: "' . $instance['period'] . '",gadash_display: "' . $instance['display'] . '",gadash_security_afw: "' . wp_create_nonce('gadash_get_frontendwidget_data') . '"}, function(response){
111
+ response = jQuery.parseJSON(response);
112
+ if (!jQuery.isNumeric(response)){
113
+ if (jQuery("#gadash-widgetchart")[0]){
114
+ gadash_widgetsessions=jQuery.parseJSON(response[0]);
115
+ google.setOnLoadCallback(ga_dash_drawfwidgetsessions(gadash_widgetsessions));
116
+ }
117
+ if (jQuery("#gadash-widgettotals")[0]){
118
+ ga_dash_drawtotalsstats(jQuery.parseJSON(response[1]));
119
+ }
120
+ }else{
121
+ jQuery("#gadash-widgetchart").css({"background-color":"#F7F7F7","height":"auto","padding-top":"50px","padding-bottom":"50px","color":"#000","text-align":"center"});
122
+ jQuery("#gadash-widgetchart").html("' . __("This report is unavailable", 'ga-dash') . ' ("+response+")");
123
+ }
124
+ });';
125
+
126
+ echo 'google.load("visualization", "1", {packages:["corechart"]});
127
+ function ga_dash_drawfwidgetsessions(response) {
128
+ var data = google.visualization.arrayToDataTable(response);
129
+ var options = {
130
+ legend: {position: "none"},
131
+ pointSize: 3,' . $css . '
132
+ title: "' . $title . '",
133
+ titlePosition: "in",
134
+ chartArea: {width: "95%",height:"75%"},
135
+ hAxis: { textPosition: "none"},
136
+ vAxis: { textPosition: "none", minValue: 0, gridlines: {color: "transparent"}, baselineColor: "transparent"},
137
+ allowHtml:true
138
+ }
139
+ var chart = new google.visualization.AreaChart(document.getElementById("gadash-widgetchart"));
140
+ ' . $formater . '
141
+ chart.draw(data, options);
142
+ }
143
+ function ga_dash_drawtotalsstats(response) {
144
+ if (response == null){
145
+ response = 0;
146
+ }
147
+ jQuery("#gadash-widgettotals").html("<div class=\"gadash-left\">' . __("Period:", 'ga-dash') . '</div> <div class=\"gadash-right\">' . $periodtext . '</div><div class=\"gadash-left\">' . __("Sessions:", 'ga-dash') . '</div> <div class=\"gadash-right\">"+response+"</div>");
148
+ }';
149
+
150
+ echo '</script>';
151
+
152
+ if ($instance['give_credits'] == 1)
153
+ echo '<div style="text-align:right;width:100%;font-size:0.8em;clear:both;margin-right:5px;">' . __('generated by', 'ga-dash') . ' <a href="https://deconf.com/google-analytics-dashboard-wordpress/" rel="nofollow" style="text-decoration:none;font-size:1em;">GADWP</a>&nbsp;</div>';
154
+
155
+ $widget_content = ob_get_contents();
156
+
157
+ ob_end_clean();
158
+
159
+ echo apply_filters('widget_html_content', $widget_content);
160
+
161
+ echo $args['after_widget'];
162
+ echo "\n<!-- END GADWP Widget -->\n";
163
+ }
164
+
165
+ public function form($instance)
166
+ {
167
+ $widget_title = (isset($instance['title']) ? $instance['title'] : __("Google Analytics Stats", 'ga-dash'));
168
+ $period = (isset($instance['period']) ? $instance['period'] : '7daysAgo');
169
+ $display = (isset($instance['display']) ? $instance['display'] : 1);
170
+ $give_credits = (isset($instance['give_credits']) ? $instance['give_credits'] : 1);
171
+ $anonim = (isset($instance['anonim']) ? $instance['anonim'] : 0);
172
+ ?>
173
+ <p>
174
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( "Title:",'ga-dash' ); ?></label>
175
+ <input class="widefat"
176
+ id="<?php echo $this->get_field_id( 'title' ); ?>"
177
+ name="<?php echo $this->get_field_name( 'title' ); ?>" type="text"
178
+ value="<?php echo esc_attr( $widget_title ); ?>">
179
+ </p>
180
+ <p>
181
+ <label for="<?php echo $this->get_field_id( 'display' ); ?>"><?php _e( "Display:",'ga-dash' ); ?></label>
182
+ <select id="<?php echo $this->get_field_id('display'); ?>"
183
+ class="widefat"
184
+ name="<?php echo $this->get_field_name( 'display' ); ?>">
185
+ <option value="1" <?php selected( $display, 1 ); ?>><?php _e('Chart & Totals', 'ga-dash');?></option>
186
+ <option value="2" <?php selected( $display, 2 ); ?>><?php _e('Chart', 'ga-dash');?></option>
187
+ <option value="3" <?php selected( $display, 3 ); ?>><?php _e('Totals', 'ga-dash');?></option>
188
+ </select>
189
+ </p>
190
+ <p>
191
+ <label for="<?php echo $this->get_field_id( 'anonim' ); ?>"><?php _e( "Anonimize chart&#39;s stats:",'ga-dash' ); ?></label>
192
+ <input class="widefat"
193
+ id="<?php echo $this->get_field_id( 'anonim' ); ?>"
194
+ name="<?php echo $this->get_field_name( 'anonim' ); ?>"
195
+ type="checkbox" <?php checked( $anonim, 1 ); ?> value="1">
196
+ </p>
197
+ <p>
198
+ <label for="<?php echo $this->get_field_id( 'period' ); ?>"><?php _e( "Stats for:",'ga-dash' ); ?></label>
199
+ <select id="<?php echo $this->get_field_id('period'); ?>"
200
+ class="widefat"
201
+ name="<?php echo $this->get_field_name( 'period' ); ?>">
202
+ <option value="7daysAgo" <?php selected( $period, '7daysAgo' ); ?>><?php _e('Last 7 Days', 'ga-dash');?></option>
203
+ <option value="14daysAgo" <?php selected( $period, '14daysAgo' ); ?>><?php _e('Last 14 Days', 'ga-dash');?></option>
204
+ <option value="30daysAgo" <?php selected( $period, '30daysAgo' ); ?>><?php _e('Last 30 Days', 'ga-dash');?></option>
205
+ </select>
206
+ </p>
207
+ <p>
208
+ <label for="<?php echo $this->get_field_id( 'give_credits' ); ?>"><?php _e( "Give credits:",'ga-dash' ); ?></label>
209
+ <input class="widefat"
210
+ id="<?php echo $this->get_field_id( 'give_credits' ); ?>"
211
+ name="<?php echo $this->get_field_name( 'give_credits' ); ?>"
212
+ type="checkbox" <?php checked( $give_credits, 1 ); ?> value="1">
213
+ </p>
214
+
215
+
216
+ <?php
217
+ }
218
+
219
+ public function update($new_instance, $old_instance)
220
+ {
221
+ $instance = array();
222
+ $instance['title'] = (! empty($new_instance['title'])) ? strip_tags($new_instance['title']) : 'Analytics Stats';
223
+ $instance['period'] = (! empty($new_instance['period'])) ? strip_tags($new_instance['period']) : '7daysAgo';
224
+ $instance['display'] = (! empty($new_instance['display'])) ? strip_tags($new_instance['display']) : 1;
225
+ $instance['give_credits'] = (! empty($new_instance['give_credits'])) ? strip_tags($new_instance['give_credits']) : 0;
226
+ $instance['anonim'] = (! empty($new_instance['anonim'])) ? strip_tags($new_instance['anonim']) : 0;
227
+ return $instance;
228
+ }
229
+ }
230
+
231
+ function register_GADSH_Frontend_Widget()
232
+ {
233
+ register_widget('GADSH_Frontend_Widget');
234
+ }
235
+ add_action('widgets_init', 'register_GADSH_Frontend_Widget');
gadwp.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: Google Analytics Dashboard for WP
4
+ * Plugin URI: https://deconf.com
5
+ * Description: Displays Google Analytics Reports and Real-Time Statistics in your Dashboard. Automatically inserts the tracking code in every page of your website.
6
+ * Author: Alin Marcu
7
+ * Version: 4.4
8
+ * Author URI: https://deconf.com
9
+ */
10
+ define('GADWP_CURRENT_VERSION', '4.4');
11
+
12
+ /*
13
+ * Include Install
14
+ */
15
+
16
+ include_once (dirname(__FILE__) . '/install/install.php');
17
+ register_activation_hook(__FILE__, array(
18
+ 'GADASH_Install',
19
+ 'install'
20
+ ));
21
+
22
+ /*
23
+ * Include Uninstall
24
+ */
25
+ include_once (dirname(__FILE__) . '/install/uninstall.php');
26
+ register_uninstall_hook(__FILE__, array(
27
+ 'GADASH_Uninstall',
28
+ 'uninstall'
29
+ ));
30
+
31
+ include_once (dirname(__FILE__) . '/config.php');
32
+
33
+ // Plugin i18n
34
+ add_action('plugins_loaded', 'ga_dash_load_i18n');
35
+
36
+ function ga_dash_load_i18n()
37
+ {
38
+ load_plugin_textdomain('ga-dash', false, basename(dirname(__FILE__)) . '/languages');
39
+ }
40
+
41
+ add_action('plugins_loaded', 'gadash_init');
42
+
43
+ function gadash_init()
44
+ {
45
+ global $GADASH_Config;
46
+
47
+ /*
48
+ * Include Tools
49
+ */
50
+ include_once ($GADASH_Config->plugin_path . '/tools/tools.php');
51
+ $tools = new GADASH_Tools();
52
+
53
+ if (is_admin()) {
54
+
55
+ /*
56
+ * Include backend widgets
57
+ */
58
+ if ($tools->check_roles($GADASH_Config->options['ga_dash_access_back'])) {
59
+ include_once (dirname(__FILE__) . '/admin/dashboard_widgets.php');
60
+ }
61
+ } else {
62
+ /*
63
+ * Include frontend stats
64
+ */
65
+ if ($tools->check_roles($GADASH_Config->options['ga_dash_access_front']) and ($GADASH_Config->options['ga_dash_frontend_stats'] or $GADASH_Config->options['ga_dash_frontend_keywords'])) {
66
+ include_once (dirname(__FILE__) . '/front/frontend.php');
67
+ }
68
+ /*
69
+ * Include tracking
70
+ */
71
+ if (! $tools->check_roles($GADASH_Config->options['ga_track_exclude'], true) and $GADASH_Config->options['ga_dash_tracking']) {
72
+ include_once (dirname(__FILE__) . '/front/tracking.php');
73
+ }
74
+ }
75
+ /*
76
+ * Include frontend widgets
77
+ */
78
+ include_once (dirname(__FILE__) . '/front/widgets.php');
79
+ /*
80
+ * Include Frontend Ajax actions
81
+ */
82
+ include_once ($GADASH_Config->plugin_path . '/front/ajax-actions.php');
83
+ /*
84
+ * Include Backend Ajax actions
85
+ */
86
+ include_once ($GADASH_Config->plugin_path . '/admin/ajax-actions.php');
87
+ }
install/install.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Author: Alin Marcu
5
+ * Author URI: https://deconf.com
6
+ * License: GPLv2 or later
7
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
+ */
9
+ class GADASH_Install
10
+ {
11
+
12
+ static function install()
13
+ {
14
+ if (! get_option('ga_dash_token')) {
15
+ $options = array();
16
+ $options['ga_dash_apikey'] = '';
17
+ $options['ga_dash_clientid'] = '';
18
+ $options['ga_dash_clientsecret'] = '';
19
+ $options['ga_dash_access_front'][] = 'administrator';
20
+ $options['ga_dash_access_back'][] = 'administrator';
21
+ $options['ga_dash_tableid_jail'] = '';
22
+ $options['ga_dash_style'] = '#1e73be';
23
+ $options['ga_dash_jailadmins'] = 1;
24
+ $options['ga_dash_cachetime'] = 3600;
25
+ $options['ga_dash_tracking'] = 1;
26
+ $options['ga_dash_tracking_type'] = 'universal';
27
+ $options['ga_dash_default_ua'] = '';
28
+ $options['ga_dash_anonim'] = 0;
29
+ $options['ga_dash_userapi'] = 0;
30
+ $options['ga_event_tracking'] = 0;
31
+ $options['ga_event_downloads'] = 'zip|mp3*|mpe*g|pdf|docx*|pptx*|xlsx*|rar*';
32
+ $options['ga_track_exclude'] = array();
33
+ $options['ga_target_geomap'] = '';
34
+ $options['ga_realtime_pages'] = 10;
35
+ $options['ga_dash_token'] = '';
36
+ $options['ga_dash_refresh_token'] = '';
37
+ $options['ga_dash_profile_list'] = '';
38
+ $options['ga_dash_tableid'] = '';
39
+ $options['ga_dash_frontend_keywords'] = 0;
40
+ $options['ga_tracking_code'] = '';
41
+ $options['ga_enhanced_links'] = 0;
42
+ $options['ga_dash_remarketing'] = 0;
43
+ $options['ga_dash_default_metric'] = 'sessions';
44
+ $options['ga_dash_default_dimension'] = '30daysAgo';
45
+ $options['ga_dash_frontend_stats'] = 0;
46
+ $options['ga_dash_network'] = 0;
47
+ $options['ga_dash_adsense'] = 0;
48
+ $options['ga_speed_samplerate'] = 1;
49
+ $options['ga_event_bouncerate'] = 0;
50
+ $options['ga_crossdomain_tracking'] = 0;
51
+ $options['ga_crossdomain_list'] = '';
52
+ $options['ga_author_dimindex'] = 0;
53
+ $options['ga_category_dimindex'] = 0;
54
+ $options['ga_user_dimindex'] = 0;
55
+ $options['ga_pubyear_dimindex'] = 0;
56
+ $options['ga_aff_tracking'] = 0;
57
+ $options['ga_event_affiliates'] = '/out/';
58
+ } else {
59
+ $options = array();
60
+ $options['ga_dash_apikey'] = get_option('ga_dash_apikey');
61
+ $options['ga_dash_clientid'] = get_option('ga_dash_clientid');
62
+ $options['ga_dash_clientsecret'] = get_option('ga_dash_clientsecret');
63
+ $options['ga_dash_access'] = get_option('ga_dash_access');
64
+ $options['ga_dash_access_front'][] = 'administrator';
65
+ $options['ga_dash_access_back'][] = 'administrator';
66
+ $options['ga_dash_tableid_jail'] = get_option('ga_dash_tableid_jail');
67
+ $options['ga_dash_frontend_stats'] = get_option('ga_dash_frontend');
68
+ $options['ga_dash_style'] = '#1e73be';
69
+ $options['ga_dash_jailadmins'] = get_option('ga_dash_jailadmins');
70
+ $options['ga_dash_cachetime'] = get_option('ga_dash_cachetime');
71
+
72
+ if (get_option('ga_dash_tracking') == 4) {
73
+ $options['ga_dash_tracking'] = 0;
74
+ } else {
75
+ $options['ga_dash_tracking'] = 1;
76
+ }
77
+
78
+ $options['ga_dash_tracking_type'] = get_option('ga_dash_tracking_type');
79
+ $options['ga_dash_default_ua'] = get_option('ga_dash_default_ua');
80
+ $options['ga_dash_anonim'] = get_option('ga_dash_anonim');
81
+ $options['ga_dash_userapi'] = get_option('ga_dash_userapi');
82
+ $options['ga_event_tracking'] = get_option('ga_event_tracking');
83
+ $options['ga_event_downloads'] = get_option('ga_event_downloads');
84
+ $options['ga_track_exclude'] = array();
85
+ $options['ga_target_geomap'] = get_option('ga_target_geomap');
86
+ $options['ga_realtime_pages'] = get_option('ga_realtime_pages');
87
+ $options['ga_dash_token'] = get_option('ga_dash_token');
88
+ $options['ga_dash_refresh_token'] = get_option('ga_dash_refresh_token');
89
+ $options['ga_dash_profile_list'] = get_option('ga_dash_profile_list');
90
+ $options['ga_dash_tableid'] = get_option('ga_dash_tableid');
91
+ $options['ga_dash_frontend_keywords'] = 0;
92
+ $options['ga_enhanced_links'] = 0;
93
+ $options['ga_dash_remarketing'] = 0;
94
+ $options['ga_dash_default_metric'] = 'sessions';
95
+ $options['ga_dash_default_dimension'] = '30daysAgo';
96
+ $options['ga_dash_network'] = 0;
97
+ $options['ga_event_bouncerate'] = 0;
98
+ $options['ga_crossdomain_tracking'] = 0;
99
+ $options['ga_crossdomain_list'] = '';
100
+ $options['ga_author_dimindex'] = 0;
101
+ $options['ga_category_dimindex'] = 0;
102
+ $options['ga_user_dimindex'] = 0;
103
+ $options['ga_pubyear_dimindex'] = 0;
104
+ $options['ga_event_affiliates'] = '/out/';
105
+ $options['ga_aff_tracking'] = 0;
106
+
107
+ delete_option('ga_dash_apikey');
108
+ delete_option('ga_dash_clientid');
109
+ delete_option('ga_dash_clientsecret');
110
+ delete_option('ga_dash_access');
111
+ delete_option('ga_dash_access_front');
112
+ delete_option('ga_dash_access_back');
113
+ delete_option('ga_dash_tableid_jail');
114
+ delete_option('ga_dash_frontend');
115
+ delete_option('ga_dash_style');
116
+ delete_option('ga_dash_jailadmins');
117
+ delete_option('ga_dash_cachetime');
118
+ delete_option('ga_dash_tracking');
119
+ delete_option('ga_dash_tracking_type');
120
+ delete_option('ga_dash_default_ua');
121
+ delete_option('ga_dash_anonim');
122
+ delete_option('ga_dash_userapi');
123
+ delete_option('ga_event_tracking');
124
+ delete_option('ga_event_downloads');
125
+ delete_option('ga_track_exclude');
126
+ delete_option('ga_target_geomap');
127
+ delete_option('ga_realtime_pages');
128
+ delete_option('ga_dash_token');
129
+ delete_option('ga_dash_refresh_token');
130
+ delete_option('ga_dash_profile_list');
131
+ delete_option('ga_dash_tableid');
132
+ }
133
+
134
+ add_option('gadash_options', json_encode($options));
135
+ }
136
+ }
install/uninstall.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Author: Alin Marcu
5
+ * Author URI: https://deconf.com
6
+ * License: GPLv2 or later
7
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
+ */
9
+ class GADASH_Uninstall
10
+ {
11
+
12
+ static function uninstall()
13
+ {
14
+ global $wpdb;
15
+ if (is_multisite()) { // Cleanup Network install
16
+ foreach (wp_get_sites() as $blog) {
17
+ switch_to_blog($blog['blog_id']);
18
+ $sqlquery = $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_gadash%%'");
19
+ $sqlquery = $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_gadash%%'");
20
+ delete_option('gadash_options');
21
+ delete_option('gadash_lasterror');
22
+ delete_transient('ga_dash_refresh_token');
23
+ delete_transient('ga_dash_gapi_errors');
24
+ restore_current_blog();
25
+ }
26
+ delete_site_option('gadash_network_options');
27
+ delete_site_transient('ga_dash_refresh_token');
28
+ } else { // Cleanup Single install
29
+ $sqlquery = $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_gadash%%'");
30
+ $sqlquery = $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_gadash%%'");
31
+ delete_option('gadash_options');
32
+ delete_option('gadash_lasterror');
33
+ delete_transient('ga_dash_refresh_token');
34
+ delete_transient('ga_dash_gapi_errors');
35
+ }
36
+ }
37
+ }
languages/ar.mo ADDED
Binary file
languages/ar.po ADDED
@@ -0,0 +1,987 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:25+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:25+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Ahmed Majed <admin@almobdaa.com>\n"
8
+ "Language: ar\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
17
+ "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
18
+ "X-Poedit-SearchPath-0: ../.\n"
19
+
20
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
21
+ msgid "Google Analytics"
22
+ msgstr "أحصائيات كوكل"
23
+
24
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
25
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
26
+ #: .././admin/ga_dash_settings.php:954
27
+ msgid "General Settings"
28
+ msgstr "الأعدادات العامة"
29
+
30
+ #: .././admin/dashboard_widgets.php:58
31
+ msgid "Backend Settings"
32
+ msgstr "أعدادات العمل"
33
+
34
+ #: .././admin/dashboard_widgets.php:62
35
+ msgid "Frontend Settings"
36
+ msgstr "اعدادات الظهور"
37
+
38
+ #: .././admin/dashboard_widgets.php:66
39
+ msgid "Tracking Code"
40
+ msgstr "كود التعقب"
41
+
42
+ #: .././admin/dashboard_widgets.php:132
43
+ msgid "Settings"
44
+ msgstr "الاعدادات"
45
+
46
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
47
+ msgid "Google Analytics Dashboard"
48
+ msgstr "لوحة أحصائيات كوكل"
49
+
50
+ #: .././admin/dashboard_widgets.php:166
51
+ msgid "This plugin needs an authorization:"
52
+ msgstr "هذه الاضافة تحتاج الى تصريح:"
53
+
54
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
55
+ #: .././admin/ga_dash_settings.php:1465
56
+ msgid "Authorize Plugin"
57
+ msgstr "صرح الأضافة "
58
+
59
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
60
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
61
+ #: .././admin/ga_dash_settings.php:1383
62
+ msgid "View Name:"
63
+ msgstr "شاهد الاسم:"
64
+
65
+ #: .././admin/dashboard_widgets.php:212
66
+ msgid "Something went wrong while retrieving profiles list."
67
+ msgstr "حدث خطأ ما اثناء استرجاع قائمة البروفايلات."
68
+
69
+ #: .././admin/dashboard_widgets.php:212
70
+ msgid "More details"
71
+ msgstr "المزيد من التفاصيل"
72
+
73
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
74
+ msgid "An admin should asign a default Google Analytics Profile."
75
+ msgstr "المدير يجب ان يحصل على حساب احصائيات كوكل رئيسي."
76
+
77
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
78
+ msgid "Select Domain"
79
+ msgstr "حدد النطاق"
80
+
81
+ #: .././admin/dashboard_widgets.php:245
82
+ msgid ""
83
+ "Something went wrong while retrieving property data. You need to create and "
84
+ "properly configure a Google Analytics account:"
85
+ msgstr ""
86
+ "حدث خطأ ما اثناء استرجاع بيانات الملكية. تحتاج الى انشاء واعداد حساب كوكل "
87
+ "للأحصائيات بصورة صحيحة:"
88
+
89
+ #: .././admin/dashboard_widgets.php:245
90
+ msgid "Find out more!"
91
+ msgstr "اعرف أكثر!"
92
+
93
+ #: .././admin/dashboard_widgets.php:276
94
+ msgid "Real-Time"
95
+ msgstr "الوقت الحقيقي"
96
+
97
+ #: .././admin/dashboard_widgets.php:277
98
+ msgid "Today"
99
+ msgstr "اليوم"
100
+
101
+ #: .././admin/dashboard_widgets.php:279
102
+ msgid "Yesterday"
103
+ msgstr "البارحة"
104
+
105
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
106
+ #: .././front/widgets.php:199
107
+ msgid "Last 7 Days"
108
+ msgstr "اخر ٧ ايام"
109
+
110
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
111
+ #: .././front/widgets.php:200
112
+ msgid "Last 14 Days"
113
+ msgstr "أخر ١٤ يوم"
114
+
115
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
116
+ #: .././front/widgets.php:201
117
+ msgid "Last 30 Days"
118
+ msgstr "اخر ٣٠ يوم"
119
+
120
+ #: .././admin/dashboard_widgets.php:287
121
+ msgid "Last 90 Days"
122
+ msgstr "أخر ٩٠ يوم"
123
+
124
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
125
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
126
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
127
+ #: .././tools/gapi.php:899
128
+ msgid "Sessions"
129
+ msgstr ""
130
+
131
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
132
+ #: .././tools/gapi.php:368
133
+ msgid "Users"
134
+ msgstr ""
135
+
136
+ #: .././admin/dashboard_widgets.php:296
137
+ msgid "Organic"
138
+ msgstr "عضوي"
139
+
140
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
141
+ #: .././tools/gapi.php:372
142
+ msgid "Page Views"
143
+ msgstr "مشاهدات الصفحة"
144
+
145
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
146
+ #: .././tools/gapi.php:376
147
+ msgid "Bounce Rate"
148
+ msgstr "نسبة القفز"
149
+
150
+ #: .././admin/dashboard_widgets.php:302
151
+ msgid "Location"
152
+ msgstr ""
153
+
154
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
155
+ msgid "Pages"
156
+ msgstr ""
157
+
158
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
159
+ msgid "Referrers"
160
+ msgstr ""
161
+
162
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
163
+ msgid "Searches"
164
+ msgstr ""
165
+
166
+ #: .././admin/dashboard_widgets.php:310
167
+ msgid "Traffic Details"
168
+ msgstr ""
169
+
170
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
171
+ msgid "REFERRAL"
172
+ msgstr "المصدر"
173
+
174
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
175
+ msgid "ORGANIC"
176
+ msgstr "عضوي"
177
+
178
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
179
+ #: .././admin/dashboard_widgets.php:659
180
+ msgid "SOCIAL"
181
+ msgstr "اجتماعي"
182
+
183
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
184
+ #: .././admin/dashboard_widgets.php:660
185
+ msgid "CAMPAIGN"
186
+ msgstr ""
187
+
188
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
189
+ #: .././admin/dashboard_widgets.php:663
190
+ msgid "DIRECT"
191
+ msgstr "مباشر"
192
+
193
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
194
+ msgid "NEW"
195
+ msgstr "جديد"
196
+
197
+ #: .././admin/dashboard_widgets.php:538
198
+ msgid "REFERRALS"
199
+ msgstr "المصادر"
200
+
201
+ #: .././admin/dashboard_widgets.php:541
202
+ msgid "KEYWORDS"
203
+ msgstr "الكلمات المفتاحية"
204
+
205
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
206
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
207
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
208
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
209
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
210
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
211
+ #: .././front/frontend.php:100 .././front/widgets.php:122
212
+ msgid "This report is unavailable"
213
+ msgstr ""
214
+
215
+ #: .././admin/dashboard_widgets.php:818
216
+ msgid "Traffic Mediums"
217
+ msgstr ""
218
+
219
+ #: .././admin/dashboard_widgets.php:834
220
+ msgid "Visitor Type"
221
+ msgstr ""
222
+
223
+ #: .././admin/dashboard_widgets.php:850
224
+ msgid "Social Networks"
225
+ msgstr ""
226
+
227
+ #: .././admin/dashboard_widgets.php:866
228
+ msgid "Search Engines"
229
+ msgstr ""
230
+
231
+ #: .././admin/dashboard_widgets.php:968
232
+ msgid "Organic Search"
233
+ msgstr ""
234
+
235
+ #: .././admin/dashboard_widgets.php:972
236
+ msgid "Pages/Session"
237
+ msgstr ""
238
+
239
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
240
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
241
+ #: .././admin/ga_dash_settings.php:1228
242
+ msgid "Settings saved."
243
+ msgstr ""
244
+
245
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
246
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
247
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
248
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
249
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
250
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
251
+ msgid "Cheating Huh?"
252
+ msgstr "تغش ها؟"
253
+
254
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
255
+ #: .././admin/ga_dash_settings.php:424
256
+ msgid "Something went wrong, you need to"
257
+ msgstr "حدث خطأ ما, تحتاج الى"
258
+
259
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
260
+ #: .././admin/ga_dash_settings.php:424
261
+ msgid "auhorize the plugin"
262
+ msgstr "صرح بالدخول للأضافة"
263
+
264
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
265
+ #: .././admin/ga_dash_settings.php:424
266
+ msgid "or properly configure your"
267
+ msgstr "أو عدل اعداداتك بصورة صحيحة"
268
+
269
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
270
+ #: .././admin/ga_dash_settings.php:424
271
+ msgid "Google Analytics account"
272
+ msgstr "حساب أحصائيات كوكل"
273
+
274
+ #: .././admin/ga_dash_settings.php:90
275
+ msgid "Google Analytics Frontend Settings"
276
+ msgstr "اعدادات الظهور الامامي لأحصائيات كوكل"
277
+
278
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
279
+ msgid "Show stats to:"
280
+ msgstr ""
281
+
282
+ #: .././admin/ga_dash_settings.php:153
283
+ msgid " show page sessions and users in frontend (after each article)"
284
+ msgstr ""
285
+
286
+ #: .././admin/ga_dash_settings.php:169
287
+ msgid " show page searches (after each article)"
288
+ msgstr "اظهر بحوث الصفحة (بعد كل مقالة)"
289
+
290
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
291
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
292
+ #: .././admin/ga_dash_settings.php:1456
293
+ msgid "Save Changes"
294
+ msgstr ""
295
+
296
+ #: .././admin/ga_dash_settings.php:212
297
+ msgid "Google Analytics Dashboard Settings"
298
+ msgstr "اعدادات الاضافة"
299
+
300
+ #: .././admin/ga_dash_settings.php:275
301
+ msgid "disable Switch Profile/View functionality"
302
+ msgstr "عطل امكانية تغيير اعدادات الحساب/المشاهدة"
303
+
304
+ #: .././admin/ga_dash_settings.php:279
305
+ msgid "Real-Time Settings"
306
+ msgstr "اعدادات الوقت الحقيقي"
307
+
308
+ #: .././admin/ga_dash_settings.php:282
309
+ msgid "Maximum number of pages to display on real-time tab:"
310
+ msgstr "اكثر عدد صفحات يتم اظهارها في قسم الوقت الحقيقي:"
311
+
312
+ #: .././admin/ga_dash_settings.php:287
313
+ msgid "(find out more"
314
+ msgstr "(اعرف المزيد"
315
+
316
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
317
+ msgid "about this feature"
318
+ msgstr "حول هذه الميزة"
319
+
320
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
321
+ msgid ")"
322
+ msgstr "("
323
+
324
+ #: .././admin/ga_dash_settings.php:293
325
+ msgid "Additional Stats & Charts"
326
+ msgstr "المزيد من الاحصائيات والاشكال"
327
+
328
+ #: .././admin/ga_dash_settings.php:306
329
+ msgid " show Geo Map chart for sessions"
330
+ msgstr ""
331
+
332
+ #: .././admin/ga_dash_settings.php:311
333
+ msgid "Target Geo Map to region:"
334
+ msgstr "حدد الخريطة الجغرافية لمنطقة معينة:"
335
+
336
+ #: .././admin/ga_dash_settings.php:316
337
+ msgid "and render top"
338
+ msgstr "واظهر الاعلى"
339
+
340
+ #: .././admin/ga_dash_settings.php:321
341
+ msgid "cities (find out more"
342
+ msgstr "المدن (اعرف المزيد"
343
+
344
+ #: .././admin/ga_dash_settings.php:339
345
+ msgid " show traffic overview"
346
+ msgstr "اظهر المرور بصورة عامة"
347
+
348
+ #: .././admin/ga_dash_settings.php:353
349
+ msgid " show top pages"
350
+ msgstr "اظهر الصفحات الاكثر شعبية"
351
+
352
+ #: .././admin/ga_dash_settings.php:367
353
+ msgid " show top referrers"
354
+ msgstr "اظهر المصادر الاكثر شعبية"
355
+
356
+ #: .././admin/ga_dash_settings.php:381
357
+ msgid " show top searches"
358
+ msgstr "اظهر كلمات البحث الاكثر شعبية"
359
+
360
+ #: .././admin/ga_dash_settings.php:430
361
+ msgid "Google Analytics Tracking Code"
362
+ msgstr "كود تعقب احصائيات كوكل"
363
+
364
+ #: .././admin/ga_dash_settings.php:440
365
+ msgid "Tracking Settings"
366
+ msgstr "اعدادات التعقب"
367
+
368
+ #: .././admin/ga_dash_settings.php:443
369
+ msgid "Tracking Options:"
370
+ msgstr ""
371
+
372
+ #: .././admin/ga_dash_settings.php:447
373
+ msgid "Disabled"
374
+ msgstr "تعطيل"
375
+
376
+ #: .././admin/ga_dash_settings.php:449
377
+ msgid "Enabled"
378
+ msgstr "تفعيل"
379
+
380
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
381
+ msgid "Tracking ID:"
382
+ msgstr "معرف التعقب:"
383
+
384
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
385
+ msgid "Default URL:"
386
+ msgstr "الرابط الرئيسي:"
387
+
388
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
389
+ msgid "Time Zone:"
390
+ msgstr "المنطقة الزمنية:"
391
+
392
+ #: .././admin/ga_dash_settings.php:467
393
+ msgid "Basic Tracking"
394
+ msgstr "التعقب الاساسي"
395
+
396
+ #: .././admin/ga_dash_settings.php:473
397
+ msgid "Tracking Type:"
398
+ msgstr ""
399
+
400
+ #: .././admin/ga_dash_settings.php:477
401
+ msgid "Classic Analytics"
402
+ msgstr "الاحصائيات الكلاسيكية"
403
+
404
+ #: .././admin/ga_dash_settings.php:479
405
+ msgid "Universal Analytics"
406
+ msgstr "الاحصائيات العالمية"
407
+
408
+ #: .././admin/ga_dash_settings.php:493
409
+ msgid " anonymize IPs while tracking"
410
+ msgstr "تجاهل الاي بي عند التعقب"
411
+
412
+ #: .././admin/ga_dash_settings.php:508
413
+ msgid " enable remarketing, demographics and interests reports"
414
+ msgstr "فعل تقارير اعادة التسويق, الديمغرافي والاهتمام"
415
+
416
+ #: .././admin/ga_dash_settings.php:512
417
+ msgid "Events Tracking"
418
+ msgstr "تعقب الافعال"
419
+
420
+ #: .././admin/ga_dash_settings.php:525
421
+ msgid " track downloads, mailto and outbound links"
422
+ msgstr "تعقب التحميلات, ارسل الى والروابط الخارجية"
423
+
424
+ #: .././admin/ga_dash_settings.php:529
425
+ msgid "Downloads Regex:"
426
+ msgstr "حمل التقارير"
427
+
428
+ #: .././admin/ga_dash_settings.php:546
429
+ msgid " track affiliate links matching this regex"
430
+ msgstr "تتبع روابط الداعمين التي تطابق هذا الجزء"
431
+
432
+ #: .././admin/ga_dash_settings.php:550
433
+ msgid "Affiliates Regex:"
434
+ msgstr "روابط الداعمين:"
435
+
436
+ #: .././admin/ga_dash_settings.php:567
437
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
438
+ msgstr ""
439
+
440
+ #: .././admin/ga_dash_settings.php:571
441
+ msgid "Custom Definitions"
442
+ msgstr "تعاريف مخصصة"
443
+
444
+ #: .././admin/ga_dash_settings.php:574
445
+ msgid "Authors:"
446
+ msgstr ""
447
+
448
+ #: .././admin/ga_dash_settings.php:584
449
+ msgid "Publication Year:"
450
+ msgstr ""
451
+
452
+ #: .././admin/ga_dash_settings.php:594
453
+ msgid "Categories:"
454
+ msgstr ""
455
+
456
+ #: .././admin/ga_dash_settings.php:604
457
+ msgid "User Type:"
458
+ msgstr ""
459
+
460
+ #: .././admin/ga_dash_settings.php:614
461
+ msgid "Advanced Tracking"
462
+ msgstr "تتبع متطور"
463
+
464
+ #: .././admin/ga_dash_settings.php:617
465
+ msgid "Page Speed SR:"
466
+ msgstr "سرعة الصفحة:"
467
+
468
+ #: .././admin/ga_dash_settings.php:635
469
+ msgid " exclude events from bounce-rate calculation"
470
+ msgstr "لا تحسب الافعال من حسابات نسبة القفز"
471
+
472
+ #: .././admin/ga_dash_settings.php:649
473
+ msgid " enable enhanced link attribution"
474
+ msgstr "فعل تعديل الرابط المحسن"
475
+
476
+ #: .././admin/ga_dash_settings.php:663
477
+ msgid " enable AdSense account linking"
478
+ msgstr "فعل ربط حساب ادسينس"
479
+
480
+ #: .././admin/ga_dash_settings.php:678
481
+ msgid " enable cross domain tracking"
482
+ msgstr "فعل التتبع عبر الروابط"
483
+
484
+ #: .././admin/ga_dash_settings.php:682
485
+ msgid "Cross Domains:"
486
+ msgstr "عبر الروابط التالية:"
487
+
488
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
489
+ msgid "Exclude Tracking"
490
+ msgstr "لا تتبع"
491
+
492
+ #: .././admin/ga_dash_settings.php:695
493
+ msgid "Exclude tracking for:"
494
+ msgstr ""
495
+
496
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
497
+ msgid ""
498
+ "Loading the required libraries. If this results in a blank screen or a fatal "
499
+ "error, try this solution:"
500
+ msgstr ""
501
+
502
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
503
+ msgid "Plugin authorization succeeded."
504
+ msgstr "تم تفعيل تصريح الاضافة بنجاح."
505
+
506
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
507
+ msgid ""
508
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
509
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
510
+ msgstr ""
511
+
512
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
513
+ msgid "Cleared Cache."
514
+ msgstr "الخزن المزال."
515
+
516
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
517
+ msgid "Token Reseted and Revoked."
518
+ msgstr "الجزء المراح والمعدل."
519
+
520
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
521
+ msgid "Dumping log data."
522
+ msgstr "امسح بيانات السجل."
523
+
524
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
525
+ msgid "All other domains/properties were removed."
526
+ msgstr "كل الروابط/والخصائص تم إزالتها."
527
+
528
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
529
+ msgid ""
530
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
531
+ msgstr ""
532
+
533
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
534
+ msgid "Google Analytics Settings"
535
+ msgstr "إعدادات احصائيات كوكل"
536
+
537
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
538
+ msgid ""
539
+ "Something went wrong. Please check the Debugging Data section for possible "
540
+ "errors"
541
+ msgstr "حدث خطأ ما. الرجاء التأكد من سجل الاصلاحات لرؤية الاخطاء المحتملة"
542
+
543
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
544
+ msgid "Use the red link (see below) to generate and get your access code!"
545
+ msgstr ""
546
+
547
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
548
+ msgid "Plugin Authorization"
549
+ msgstr "تصريح الأضافة"
550
+
551
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
552
+ msgid "You should watch the"
553
+ msgstr "يجب ان تشاهد هذا"
554
+
555
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
556
+ msgid "video"
557
+ msgstr "الڤيديو"
558
+
559
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
560
+ msgid "and read this"
561
+ msgstr "وأقرأ هذا"
562
+
563
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
564
+ msgid "tutorial"
565
+ msgstr "الدرس"
566
+
567
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
568
+ msgid ""
569
+ "before proceeding to authorization. This plugin requires a properly "
570
+ "configured Google Analytics account"
571
+ msgstr ""
572
+ "قبل ان تباشر التصريح. هذه الاضافة تتطلب حساب احصائيات كوكل معد بصورة صحيحة"
573
+
574
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
575
+ msgid " use your own API Project credentials"
576
+ msgstr "أستخدام معرفات مشروع API خاصتك"
577
+
578
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
579
+ msgid "API Key:"
580
+ msgstr "مفتاح API:"
581
+
582
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
583
+ msgid "Client ID:"
584
+ msgstr "معرف الزيون:"
585
+
586
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
587
+ msgid "Client Secret:"
588
+ msgstr "سر الزبون:"
589
+
590
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
591
+ msgid "Clear Authorization"
592
+ msgstr "أزل التصريحات"
593
+
594
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
595
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
596
+ msgid "Clear Cache"
597
+ msgstr "أزل الخزن"
598
+
599
+ #: .././admin/ga_dash_settings.php:957
600
+ msgid "Select Domain:"
601
+ msgstr ""
602
+
603
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
604
+ msgid "Property not found"
605
+ msgstr ""
606
+
607
+ #: .././admin/ga_dash_settings.php:975
608
+ msgid "and/or hide all other domains"
609
+ msgstr "و/أو أخفي كل الروابط الأخرى"
610
+
611
+ #: .././admin/ga_dash_settings.php:978
612
+ msgid "Hide Now"
613
+ msgstr "أخفي الأن"
614
+
615
+ #: .././admin/ga_dash_settings.php:997
616
+ msgid "Theme Color:"
617
+ msgstr ""
618
+
619
+ #: .././admin/ga_dash_settings.php:1007
620
+ msgid "A new frontend widget is available! To enable it, go to"
621
+ msgstr "هنالك ودجت أمامي جديدة متوفرة! لتفعلها, أذهب الى"
622
+
623
+ #: .././admin/ga_dash_settings.php:1007
624
+ msgid "Appearance -> Widgets"
625
+ msgstr "المظاهر -< المربعات الجانبية"
626
+
627
+ #: .././admin/ga_dash_settings.php:1007
628
+ msgid "and look for Google Analytics Dashboard."
629
+ msgstr "وابحث عن المربع الخاص بالأضافة."
630
+
631
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
632
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
633
+ msgid "Debugging Data"
634
+ msgstr "بيانات التصليح"
635
+
636
+ #: .././admin/ga_dash_settings.php:1180
637
+ msgid "Properties refreshed."
638
+ msgstr "تم تحديث الخصائص."
639
+
640
+ #: .././admin/ga_dash_settings.php:1274
641
+ msgid "Network Setup"
642
+ msgstr "اعدادات الشبكة"
643
+
644
+ #: .././admin/ga_dash_settings.php:1289
645
+ msgid " use a single Google Analytics account for the entire network"
646
+ msgstr "أستخدم حساب أحصائيات كوكل واحد للشبكة كلها"
647
+
648
+ #: .././admin/ga_dash_settings.php:1358
649
+ msgid "Refresh Properties"
650
+ msgstr "حدث الخصائص"
651
+
652
+ #: .././admin/ga_dash_settings.php:1364
653
+ msgid "Properties/Views Settings"
654
+ msgstr "اعدادات الخصائص/المشاهدة"
655
+
656
+ #: .././admin/ga_dash_settings.php:1409
657
+ msgid " exclude Super Admin tracking for the entire network"
658
+ msgstr ""
659
+
660
+ #: .././admin/ga_dash_settings.php:1537
661
+ msgid "Setup Tutorial & Demo"
662
+ msgstr "درس التنصيب"
663
+
664
+ #: .././admin/ga_dash_settings.php:1549
665
+ msgid "Support & Reviews"
666
+ msgstr "الدعم والتقييم"
667
+
668
+ #: .././admin/ga_dash_settings.php:1557
669
+ msgid "Plugin documentation and support on"
670
+ msgstr ""
671
+
672
+ #: .././admin/ga_dash_settings.php:1564
673
+ msgid "Your feedback and review are both important,"
674
+ msgstr "رأيك وتقييمك كلاهما مهمان,"
675
+
676
+ #: .././admin/ga_dash_settings.php:1564
677
+ msgid "rate this plugin"
678
+ msgstr "قيم هذه الاضافة"
679
+
680
+ #: .././admin/ga_dash_settings.php:1569
681
+ msgid "Further Reading"
682
+ msgstr "أكمل القراءة"
683
+
684
+ #: .././admin/ga_dash_settings.php:1576
685
+ msgid "Improve search rankings"
686
+ msgstr "حسن ترتيب البحث"
687
+
688
+ #: .././admin/ga_dash_settings.php:1576
689
+ msgid "by moving your website to HTTPS/SSL."
690
+ msgstr "حول موقعك الى بروتوكول HTTPs/SSl"
691
+
692
+ #: .././admin/ga_dash_settings.php:1582
693
+ msgid "Other"
694
+ msgstr "اخرى"
695
+
696
+ #: .././admin/ga_dash_settings.php:1582
697
+ msgid "WordPress Plugins"
698
+ msgstr "اضافات وردبريس"
699
+
700
+ #: .././admin/ga_dash_settings.php:1582
701
+ msgid "written by the same author"
702
+ msgstr "كتبت من قبل نفس صاحب الاضافة"
703
+
704
+ #: .././admin/ga_dash_settings.php:1587
705
+ msgid "Other Services"
706
+ msgstr ""
707
+
708
+ #: .././admin/ga_dash_settings.php:1594
709
+ msgid "Speed up your website and plug into a whole"
710
+ msgstr ""
711
+
712
+ #: .././admin/ga_dash_settings.php:1594
713
+ msgid "new level of site speed"
714
+ msgstr ""
715
+
716
+ #: .././admin/ga_dash_settings.php:1600
717
+ msgid "Web Analytics"
718
+ msgstr "احصائيات الويب"
719
+
720
+ #: .././admin/ga_dash_settings.php:1600
721
+ msgid "service with users tracking at IP level."
722
+ msgstr ""
723
+
724
+ #: .././front/frontend.php:112
725
+ msgid "Views vs UniqueViews"
726
+ msgstr "المشاهدات ضد المشاهدات الحقيقية"
727
+
728
+ #: .././front/frontend.php:168
729
+ msgid "Google Analytics Reports"
730
+ msgstr ""
731
+
732
+ #: .././front/widgets.php:16
733
+ msgid "Will display your google analytics stats in a widget"
734
+ msgstr "ستظهر احصائيات حسابك في مربع جانبي"
735
+
736
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
737
+ msgid "trend"
738
+ msgstr ""
739
+
740
+ #: .././front/widgets.php:144
741
+ msgid "Period:"
742
+ msgstr "الفترة:"
743
+
744
+ #: .././front/widgets.php:144
745
+ msgid "Sessions:"
746
+ msgstr ""
747
+
748
+ #: .././front/widgets.php:150
749
+ msgid "generated by"
750
+ msgstr "اظهرت بواسطة"
751
+
752
+ #: .././front/widgets.php:164
753
+ msgid "Google Analytics Stats"
754
+ msgstr "احصائيات كوكل"
755
+
756
+ #: .././front/widgets.php:171
757
+ msgid "Title:"
758
+ msgstr "العنوان:"
759
+
760
+ #: .././front/widgets.php:178
761
+ msgid "Display:"
762
+ msgstr "اظهر:"
763
+
764
+ #: .././front/widgets.php:182
765
+ msgid "Chart & Totals"
766
+ msgstr "الاحصائيات والكل"
767
+
768
+ #: .././front/widgets.php:183
769
+ msgid "Chart"
770
+ msgstr "الاحصائيات"
771
+
772
+ #: .././front/widgets.php:184
773
+ msgid "Totals"
774
+ msgstr "الكل"
775
+
776
+ #: .././front/widgets.php:188
777
+ msgid "Anonimize chart&#39;s stats:"
778
+ msgstr "عمم الاحصائيات:"
779
+
780
+ #: .././front/widgets.php:195
781
+ msgid "Stats for:"
782
+ msgstr "الاحصائيات لـ:"
783
+
784
+ #: .././front/widgets.php:205
785
+ msgid "Give credits:"
786
+ msgstr "أعطي الفضل:"
787
+
788
+ #: .././tools/gapi.php:140
789
+ msgid "Use this link to get your access code:"
790
+ msgstr "أستخدم هذا الرابط للحصول على كود التعقب الخاص بك:"
791
+
792
+ #: .././tools/gapi.php:140
793
+ msgid "Get Access Code"
794
+ msgstr "احصل على كود الدخول"
795
+
796
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
797
+ msgid "Use the red link to get your access code!"
798
+ msgstr ""
799
+
800
+ #: .././tools/gapi.php:145
801
+ msgid "Access Code:"
802
+ msgstr "كود الدخول:"
803
+
804
+ #: .././tools/gapi.php:157
805
+ msgid "Save Access Code"
806
+ msgstr "أحفظ كود الدخول"
807
+
808
+ #: .././tools/gapi.php:380
809
+ msgid "Organic Searches"
810
+ msgstr "البحث العضوي"
811
+
812
+ #: .././tools/gapi.php:391
813
+ msgid "Hour"
814
+ msgstr "الساعة"
815
+
816
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
817
+ msgid "Date"
818
+ msgstr "التاريخ"
819
+
820
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
821
+ msgid "Views"
822
+ msgstr "المشاهدات"
823
+
824
+ #: .././tools/gapi.php:611
825
+ msgid "Countries"
826
+ msgstr ""
827
+
828
+ #: .././tools/gapi.php:629
829
+ msgid "Cities from"
830
+ msgstr ""
831
+
832
+ #: .././tools/gapi.php:691
833
+ msgid "Channels"
834
+ msgstr ""
835
+
836
+ #: .././tools/gapi.php:754
837
+ msgid "Type"
838
+ msgstr "النوع"
839
+
840
+ #: .././tools/gapi.php:852
841
+ msgid "UniqueViews"
842
+ msgstr "المشاهدات الخاصة"
843
+
844
+ #: .././tools/gapi.php:899
845
+ msgid "Top Searches"
846
+ msgstr "البحث الاكثر شعبية"
847
+
848
+ #~ msgid "Error Log"
849
+ #~ msgstr "سجل الاخطاء"
850
+
851
+ #~ msgid "Visits"
852
+ #~ msgstr "الزيارات"
853
+
854
+ #~ msgid "Visitors"
855
+ #~ msgstr "الزائرين"
856
+
857
+ #~ msgid ""
858
+ #~ "No stats available. Please check the Debugging Data section for possible "
859
+ #~ "errors"
860
+ #~ msgstr ""
861
+ #~ "لا يوجد أحصائيات. الرجاء التأكد من بيانات الاخطاء لوجود أخطاء محتملة"
862
+
863
+ #~ msgid "Country/City"
864
+ #~ msgstr "الدولة/لمدينة"
865
+
866
+ #~ msgid "Source"
867
+ #~ msgstr "المصدر"
868
+
869
+ #~ msgid "Traffic Sources"
870
+ #~ msgstr "مصادر المرور"
871
+
872
+ #~ msgid "New vs. Returning"
873
+ #~ msgstr "الجديد ضد العائد"
874
+
875
+ #~ msgid "Top Pages"
876
+ #~ msgstr "الصفحات الأكثر شعبية"
877
+
878
+ #~ msgid "Top Referrers"
879
+ #~ msgstr "المشيرين الاكثر شعبية"
880
+
881
+ #~ msgid "Visits:"
882
+ #~ msgstr "الزيارات:"
883
+
884
+ #~ msgid "Visitors:"
885
+ #~ msgstr "الزوار:"
886
+
887
+ #~ msgid "Page Views:"
888
+ #~ msgstr "مشاهدات الصفحة:"
889
+
890
+ #~ msgid "Bounce Rate:"
891
+ #~ msgstr "نسبة القفز:"
892
+
893
+ #~ msgid "Organic Search:"
894
+ #~ msgstr "البحث العضوي:"
895
+
896
+ #~ msgid "Pages per Visit:"
897
+ #~ msgstr "الصفحات بالزيارة الواحدة:"
898
+
899
+ #~ msgid ""
900
+ #~ "This is a beta feature and is only available when using my Developer Key! "
901
+ #~ "("
902
+ #~ msgstr "هذه ميزة تجريبية وهي متوفرة فقط عند استخدام مفتاح التطوير خاصتي! ("
903
+
904
+ #~ msgid "more about this feature"
905
+ #~ msgstr "المزيد حول هذه الميزة"
906
+
907
+ #~ msgid "RETURN"
908
+ #~ msgstr "عائد"
909
+
910
+ #~ msgid "Visits from "
911
+ #~ msgstr "يزور من"
912
+
913
+ #~ msgid "Visits by Country"
914
+ #~ msgstr "الزيارات حسب البلد "
915
+
916
+ #~ msgid "Traffic Overview"
917
+ #~ msgstr "مشاهدة عامة للزيارات"
918
+
919
+ #~ msgid " show page visits and visitors in frontend (after each article)"
920
+ #~ msgstr "اظهر زيارات الصفحة والزوار في الواجهة (بعد كل مقالة)"
921
+
922
+ #~ msgid " show Geo Map chart for visits"
923
+ #~ msgstr "اظهر شكل خريطة جغرافي للزيارات"
924
+
925
+ #~ msgid "You can find support on"
926
+ #~ msgstr "يمكنك ايجاد الدعم في"
927
+
928
+ #~ msgid "DeConf.com"
929
+ #~ msgstr "DeConf.com"
930
+
931
+ #~ msgid "service with visitors tracking at IP level."
932
+ #~ msgstr "خدمة تتبع الزوار على مستوى الاي بي"
933
+
934
+ #~ msgid "Total Visits:"
935
+ #~ msgstr "الزيارات الكلية:"
936
+
937
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
938
+ #~ msgstr "PHP CURL مطلوب. الرجاء فعل/نصب PHP CURL!"
939
+
940
+ #~ msgid "Options saved."
941
+ #~ msgstr "تم حفظ الاعدادات."
942
+
943
+ #~ msgid "Show stats to: "
944
+ #~ msgstr "اظهر البيانات لـ:"
945
+
946
+ #~ msgid "Update Options"
947
+ #~ msgstr "حدث الاعدادات"
948
+
949
+ #~ msgid "Tracking Options: "
950
+ #~ msgstr "خيارات التعقب:"
951
+
952
+ #~ msgid "Tracking Type: "
953
+ #~ msgstr "نوع التعقب:"
954
+
955
+ #~ msgid "Authors: "
956
+ #~ msgstr "الكتاب:"
957
+
958
+ #~ msgid "Publication Year: "
959
+ #~ msgstr "سنة النشر:"
960
+
961
+ #~ msgid "Categories: "
962
+ #~ msgstr "التصنيفات:"
963
+
964
+ #~ msgid "User Type: "
965
+ #~ msgstr "نوع المستخدم:"
966
+
967
+ #~ msgid "Exclude tracking for: "
968
+ #~ msgstr "لا تتبع لـ:"
969
+
970
+ #~ msgid "Select Domain: "
971
+ #~ msgstr "حدد الرابط:"
972
+
973
+ #~ msgid "Theme Color: "
974
+ #~ msgstr "لون القالب:"
975
+
976
+ #~ msgid "&#39; trend"
977
+ #~ msgstr "&#39; النزعة"
978
+
979
+ #~ msgid "DeConf Help Center"
980
+ #~ msgstr "مركز المساعدة"
981
+
982
+ #~ msgid ""
983
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
984
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
985
+ #~ msgstr ""
986
+ #~ " (شاهد هذا <a href='http://deconf.com/projects/google-analytics-dashboard-"
987
+ #~ "for-wordpress/' target='_blank'>الفيديو الذي يعلمك خطوة بخطوة</a>)"
languages/ga-dash-de_DE.mo ADDED
Binary file
languages/ga-dash-de_DE.po ADDED
@@ -0,0 +1,989 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:25+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:25+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: pt_BR\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Allgemeine Einstellungen"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Backend Einstellungen"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Frontend Einstellungen"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Tracking Code"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Einstellungen"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Google Analytics Dashboard"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Diese Plugin benötigt eine Autorisierung:"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "Plugin autorisieren"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Anzeigename:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr ""
67
+ "Ein Fehler ist aufgetreten. Die Profilliste konnte nicht abgerufen werden."
68
+
69
+ #: .././admin/dashboard_widgets.php:212
70
+ msgid "More details"
71
+ msgstr "Mehr Details"
72
+
73
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
74
+ msgid "An admin should asign a default Google Analytics Profile."
75
+ msgstr "Ein Admin sollte ein Standardprofil festlegen."
76
+
77
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
78
+ msgid "Select Domain"
79
+ msgstr "Wähle eine Domain aus."
80
+
81
+ #: .././admin/dashboard_widgets.php:245
82
+ msgid ""
83
+ "Something went wrong while retrieving property data. You need to create and "
84
+ "properly configure a Google Analytics account:"
85
+ msgstr ""
86
+ "Ein Fehler ist aufgetreten. Dein Google Analytics Account muss erstellt und "
87
+ "fertig konfiguriert sein:"
88
+
89
+ #: .././admin/dashboard_widgets.php:245
90
+ msgid "Find out more!"
91
+ msgstr "Erfahre mehr!"
92
+
93
+ #: .././admin/dashboard_widgets.php:276
94
+ msgid "Real-Time"
95
+ msgstr "Echtzeit"
96
+
97
+ #: .././admin/dashboard_widgets.php:277
98
+ msgid "Today"
99
+ msgstr "Heute"
100
+
101
+ #: .././admin/dashboard_widgets.php:279
102
+ msgid "Yesterday"
103
+ msgstr "Gestern"
104
+
105
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
106
+ #: .././front/widgets.php:199
107
+ msgid "Last 7 Days"
108
+ msgstr "Letzten 7 Tage"
109
+
110
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
111
+ #: .././front/widgets.php:200
112
+ msgid "Last 14 Days"
113
+ msgstr "Letzten 14 Tage"
114
+
115
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
116
+ #: .././front/widgets.php:201
117
+ msgid "Last 30 Days"
118
+ msgstr "Letzten 30Tage"
119
+
120
+ #: .././admin/dashboard_widgets.php:287
121
+ msgid "Last 90 Days"
122
+ msgstr "Letzten 90Tage"
123
+
124
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
125
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
126
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
127
+ #: .././tools/gapi.php:899
128
+ msgid "Sessions"
129
+ msgstr ""
130
+
131
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
132
+ #: .././tools/gapi.php:368
133
+ msgid "Users"
134
+ msgstr ""
135
+
136
+ #: .././admin/dashboard_widgets.php:296
137
+ msgid "Organic"
138
+ msgstr "Organisch"
139
+
140
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
141
+ #: .././tools/gapi.php:372
142
+ msgid "Page Views"
143
+ msgstr "Seitenaufrufe"
144
+
145
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
146
+ #: .././tools/gapi.php:376
147
+ msgid "Bounce Rate"
148
+ msgstr "Absprungrate"
149
+
150
+ #: .././admin/dashboard_widgets.php:302
151
+ msgid "Location"
152
+ msgstr ""
153
+
154
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
155
+ msgid "Pages"
156
+ msgstr ""
157
+
158
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
159
+ msgid "Referrers"
160
+ msgstr ""
161
+
162
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
163
+ msgid "Searches"
164
+ msgstr ""
165
+
166
+ #: .././admin/dashboard_widgets.php:310
167
+ msgid "Traffic Details"
168
+ msgstr ""
169
+
170
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
171
+ msgid "REFERRAL"
172
+ msgstr "VERWEISUNG"
173
+
174
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
175
+ msgid "ORGANIC"
176
+ msgstr "ORGANISCH"
177
+
178
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
179
+ #: .././admin/dashboard_widgets.php:659
180
+ msgid "SOCIAL"
181
+ msgstr "SOZIAL"
182
+
183
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
184
+ #: .././admin/dashboard_widgets.php:660
185
+ msgid "CAMPAIGN"
186
+ msgstr ""
187
+
188
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
189
+ #: .././admin/dashboard_widgets.php:663
190
+ msgid "DIRECT"
191
+ msgstr "DIREKT"
192
+
193
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
194
+ msgid "NEW"
195
+ msgstr "NEUE"
196
+
197
+ #: .././admin/dashboard_widgets.php:538
198
+ msgid "REFERRALS"
199
+ msgstr "VERWEISUNGEN"
200
+
201
+ #: .././admin/dashboard_widgets.php:541
202
+ msgid "KEYWORDS"
203
+ msgstr "STICHWORTE"
204
+
205
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
206
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
207
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
208
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
209
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
210
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
211
+ #: .././front/frontend.php:100 .././front/widgets.php:122
212
+ msgid "This report is unavailable"
213
+ msgstr ""
214
+
215
+ #: .././admin/dashboard_widgets.php:818
216
+ msgid "Traffic Mediums"
217
+ msgstr ""
218
+
219
+ #: .././admin/dashboard_widgets.php:834
220
+ msgid "Visitor Type"
221
+ msgstr ""
222
+
223
+ #: .././admin/dashboard_widgets.php:850
224
+ msgid "Social Networks"
225
+ msgstr ""
226
+
227
+ #: .././admin/dashboard_widgets.php:866
228
+ msgid "Search Engines"
229
+ msgstr ""
230
+
231
+ #: .././admin/dashboard_widgets.php:968
232
+ msgid "Organic Search"
233
+ msgstr ""
234
+
235
+ #: .././admin/dashboard_widgets.php:972
236
+ msgid "Pages/Session"
237
+ msgstr ""
238
+
239
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
240
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
241
+ #: .././admin/ga_dash_settings.php:1228
242
+ msgid "Settings saved."
243
+ msgstr ""
244
+
245
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
246
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
247
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
248
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
249
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
250
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
251
+ msgid "Cheating Huh?"
252
+ msgstr ""
253
+
254
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
255
+ #: .././admin/ga_dash_settings.php:424
256
+ msgid "Something went wrong, you need to"
257
+ msgstr "Ein Fehler ist aufgetreten. Du musst"
258
+
259
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
260
+ #: .././admin/ga_dash_settings.php:424
261
+ msgid "auhorize the plugin"
262
+ msgstr "das Plugin autorisieren"
263
+
264
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
265
+ #: .././admin/ga_dash_settings.php:424
266
+ msgid "or properly configure your"
267
+ msgstr "oder eine richtige Konfiguration"
268
+
269
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
270
+ #: .././admin/ga_dash_settings.php:424
271
+ msgid "Google Analytics account"
272
+ msgstr "deines Google Analytics Accounts erstellen"
273
+
274
+ #: .././admin/ga_dash_settings.php:90
275
+ msgid "Google Analytics Frontend Settings"
276
+ msgstr "Google Analytics Frontend Einstellungen"
277
+
278
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
279
+ msgid "Show stats to:"
280
+ msgstr ""
281
+
282
+ #: .././admin/ga_dash_settings.php:153
283
+ msgid " show page sessions and users in frontend (after each article)"
284
+ msgstr ""
285
+
286
+ #: .././admin/ga_dash_settings.php:169
287
+ msgid " show page searches (after each article)"
288
+ msgstr "Suchen (nach jedem Artikel)"
289
+
290
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
291
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
292
+ #: .././admin/ga_dash_settings.php:1456
293
+ msgid "Save Changes"
294
+ msgstr ""
295
+
296
+ #: .././admin/ga_dash_settings.php:212
297
+ msgid "Google Analytics Dashboard Settings"
298
+ msgstr "Google Analytics Dashboard Einstellungen"
299
+
300
+ #: .././admin/ga_dash_settings.php:275
301
+ msgid "disable Switch Profile/View functionality"
302
+ msgstr "Deaktiviere bzw. ändere das Profil/Zeige die Funktionalität"
303
+
304
+ #: .././admin/ga_dash_settings.php:279
305
+ msgid "Real-Time Settings"
306
+ msgstr "Echtzeit Einstellungen"
307
+
308
+ #: .././admin/ga_dash_settings.php:282
309
+ msgid "Maximum number of pages to display on real-time tab:"
310
+ msgstr ""
311
+ "Maximale Anzahl der Seiten, die in einem Echtzeit-Tab angezeigt werden "
312
+ "sollen:"
313
+
314
+ #: .././admin/ga_dash_settings.php:287
315
+ msgid "(find out more"
316
+ msgstr "(Finde mehr heraus"
317
+
318
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
319
+ msgid "about this feature"
320
+ msgstr "über diese Funktion"
321
+
322
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
323
+ msgid ")"
324
+ msgstr ")"
325
+
326
+ #: .././admin/ga_dash_settings.php:293
327
+ msgid "Additional Stats & Charts"
328
+ msgstr "Zusätzliche Statistiken und Listen"
329
+
330
+ #: .././admin/ga_dash_settings.php:306
331
+ msgid " show Geo Map chart for sessions"
332
+ msgstr ""
333
+
334
+ #: .././admin/ga_dash_settings.php:311
335
+ msgid "Target Geo Map to region:"
336
+ msgstr "Bestimme die Geomap Region"
337
+
338
+ #: .././admin/ga_dash_settings.php:316
339
+ msgid "and render top"
340
+ msgstr "und gebe den Rekord aus"
341
+
342
+ #: .././admin/ga_dash_settings.php:321
343
+ msgid "cities (find out more"
344
+ msgstr "Städte (finde mehr heraus"
345
+
346
+ #: .././admin/ga_dash_settings.php:339
347
+ msgid " show traffic overview"
348
+ msgstr "Zeige die Übersicht des Datenverkehrs"
349
+
350
+ #: .././admin/ga_dash_settings.php:353
351
+ msgid " show top pages"
352
+ msgstr "Zeige die besten Seiten"
353
+
354
+ #: .././admin/ga_dash_settings.php:367
355
+ msgid " show top referrers"
356
+ msgstr "Zeige die besten Referrer"
357
+
358
+ #: .././admin/ga_dash_settings.php:381
359
+ msgid " show top searches"
360
+ msgstr "Zeige die besten Suchen"
361
+
362
+ #: .././admin/ga_dash_settings.php:430
363
+ msgid "Google Analytics Tracking Code"
364
+ msgstr "Google Analytics Tracking Code"
365
+
366
+ #: .././admin/ga_dash_settings.php:440
367
+ msgid "Tracking Settings"
368
+ msgstr "Tracking Einstellungen"
369
+
370
+ #: .././admin/ga_dash_settings.php:443
371
+ msgid "Tracking Options:"
372
+ msgstr ""
373
+
374
+ #: .././admin/ga_dash_settings.php:447
375
+ msgid "Disabled"
376
+ msgstr "Deaktiviert"
377
+
378
+ #: .././admin/ga_dash_settings.php:449
379
+ msgid "Enabled"
380
+ msgstr "Aktiviert"
381
+
382
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
383
+ msgid "Tracking ID:"
384
+ msgstr "Tracking ID:"
385
+
386
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
387
+ msgid "Default URL:"
388
+ msgstr "Standard URL:"
389
+
390
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
391
+ msgid "Time Zone:"
392
+ msgstr "Zeitzone"
393
+
394
+ #: .././admin/ga_dash_settings.php:467
395
+ msgid "Basic Tracking"
396
+ msgstr "Basic Tracking"
397
+
398
+ #: .././admin/ga_dash_settings.php:473
399
+ msgid "Tracking Type:"
400
+ msgstr ""
401
+
402
+ #: .././admin/ga_dash_settings.php:477
403
+ msgid "Classic Analytics"
404
+ msgstr "Klassische Analyse"
405
+
406
+ #: .././admin/ga_dash_settings.php:479
407
+ msgid "Universal Analytics"
408
+ msgstr "Universelle Analyse"
409
+
410
+ #: .././admin/ga_dash_settings.php:493
411
+ msgid " anonymize IPs while tracking"
412
+ msgstr "Anonymisiere die IPs während des Trackings"
413
+
414
+ #: .././admin/ga_dash_settings.php:508
415
+ msgid " enable remarketing, demographics and interests reports"
416
+ msgstr "Aktiviere remarketing, demografische und interessen berichte"
417
+
418
+ #: .././admin/ga_dash_settings.php:512
419
+ msgid "Events Tracking"
420
+ msgstr "Event Tracking"
421
+
422
+ #: .././admin/ga_dash_settings.php:525
423
+ msgid " track downloads, mailto and outbound links"
424
+ msgstr "Tracke Downlaods, mailtos und ausgehende Links"
425
+
426
+ #: .././admin/ga_dash_settings.php:529
427
+ msgid "Downloads Regex:"
428
+ msgstr "Download Filter:"
429
+
430
+ #: .././admin/ga_dash_settings.php:546
431
+ msgid " track affiliate links matching this regex"
432
+ msgstr ""
433
+
434
+ #: .././admin/ga_dash_settings.php:550
435
+ msgid "Affiliates Regex:"
436
+ msgstr ""
437
+
438
+ #: .././admin/ga_dash_settings.php:567
439
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
440
+ msgstr ""
441
+
442
+ #: .././admin/ga_dash_settings.php:571
443
+ msgid "Custom Definitions"
444
+ msgstr ""
445
+
446
+ #: .././admin/ga_dash_settings.php:574
447
+ msgid "Authors:"
448
+ msgstr ""
449
+
450
+ #: .././admin/ga_dash_settings.php:584
451
+ msgid "Publication Year:"
452
+ msgstr ""
453
+
454
+ #: .././admin/ga_dash_settings.php:594
455
+ msgid "Categories:"
456
+ msgstr ""
457
+
458
+ #: .././admin/ga_dash_settings.php:604
459
+ msgid "User Type:"
460
+ msgstr ""
461
+
462
+ #: .././admin/ga_dash_settings.php:614
463
+ msgid "Advanced Tracking"
464
+ msgstr "Advanced Tracking"
465
+
466
+ #: .././admin/ga_dash_settings.php:617
467
+ msgid "Page Speed SR:"
468
+ msgstr "Seiten pro Besuch:"
469
+
470
+ #: .././admin/ga_dash_settings.php:635
471
+ msgid " exclude events from bounce-rate calculation"
472
+ msgstr ""
473
+
474
+ #: .././admin/ga_dash_settings.php:649
475
+ msgid " enable enhanced link attribution"
476
+ msgstr "Aktiviere die erweiterte Linkzuordnung"
477
+
478
+ #: .././admin/ga_dash_settings.php:663
479
+ msgid " enable AdSense account linking"
480
+ msgstr ""
481
+
482
+ #: .././admin/ga_dash_settings.php:678
483
+ msgid " enable cross domain tracking"
484
+ msgstr ""
485
+
486
+ #: .././admin/ga_dash_settings.php:682
487
+ msgid "Cross Domains:"
488
+ msgstr ""
489
+
490
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
491
+ msgid "Exclude Tracking"
492
+ msgstr "Exkludiere Tracking"
493
+
494
+ #: .././admin/ga_dash_settings.php:695
495
+ msgid "Exclude tracking for:"
496
+ msgstr ""
497
+
498
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
499
+ msgid ""
500
+ "Loading the required libraries. If this results in a blank screen or a fatal "
501
+ "error, try this solution:"
502
+ msgstr ""
503
+
504
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
505
+ msgid "Plugin authorization succeeded."
506
+ msgstr "Plugin Autorisierung erfolgreich."
507
+
508
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
509
+ msgid ""
510
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
511
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
512
+ msgstr ""
513
+
514
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
515
+ msgid "Cleared Cache."
516
+ msgstr "Cache geleert."
517
+
518
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
519
+ msgid "Token Reseted and Revoked."
520
+ msgstr "Token zurückgesetzt und entzogen."
521
+
522
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
523
+ msgid "Dumping log data."
524
+ msgstr "Setze die Logs zurück."
525
+
526
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
527
+ msgid "All other domains/properties were removed."
528
+ msgstr "Alle anderen Domains/Einstellungen wurden entfernt."
529
+
530
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
531
+ msgid ""
532
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
533
+ msgstr ""
534
+
535
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
536
+ msgid "Google Analytics Settings"
537
+ msgstr "Google Analytics Einstellungen"
538
+
539
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
540
+ msgid ""
541
+ "Something went wrong. Please check the Debugging Data section for possible "
542
+ "errors"
543
+ msgstr ""
544
+ "Ein Fehler ist aufgetreten. Bitte überprüfe den Debug Log, um mögliche "
545
+ "Fehler anzuzeigen."
546
+
547
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
548
+ msgid "Use the red link (see below) to generate and get your access code!"
549
+ msgstr ""
550
+
551
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
552
+ msgid "Plugin Authorization"
553
+ msgstr "Plugin Autorisierung"
554
+
555
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
556
+ msgid "You should watch the"
557
+ msgstr "Du solltest dir das folgende"
558
+
559
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
560
+ msgid "video"
561
+ msgstr "Video ansehen"
562
+
563
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
564
+ msgid "and read this"
565
+ msgstr "und dieses"
566
+
567
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
568
+ msgid "tutorial"
569
+ msgstr "Tutorial lesen"
570
+
571
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
572
+ msgid ""
573
+ "before proceeding to authorization. This plugin requires a properly "
574
+ "configured Google Analytics account"
575
+ msgstr ""
576
+ "bevor du die Autorisierung fortsetzt. Hinweis: Dieses Plugin benötigt einen "
577
+ "fertig konfigurierten Google Analytics Account"
578
+
579
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
580
+ msgid " use your own API Project credentials"
581
+ msgstr "Nutze deinen eigenen API Projekt Berechtigungsnachweis"
582
+
583
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
584
+ msgid "API Key:"
585
+ msgstr "API Key:"
586
+
587
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
588
+ msgid "Client ID:"
589
+ msgstr "Client ID:"
590
+
591
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
592
+ msgid "Client Secret:"
593
+ msgstr "Client Secret:"
594
+
595
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
596
+ msgid "Clear Authorization"
597
+ msgstr "Entferne die Autorisierung"
598
+
599
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
600
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
601
+ msgid "Clear Cache"
602
+ msgstr "Cache leeren"
603
+
604
+ #: .././admin/ga_dash_settings.php:957
605
+ msgid "Select Domain:"
606
+ msgstr ""
607
+
608
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
609
+ msgid "Property not found"
610
+ msgstr ""
611
+
612
+ #: .././admin/ga_dash_settings.php:975
613
+ msgid "and/or hide all other domains"
614
+ msgstr "und/oder verberge alle anderen Domains"
615
+
616
+ #: .././admin/ga_dash_settings.php:978
617
+ msgid "Hide Now"
618
+ msgstr "Jetzt verbergen"
619
+
620
+ #: .././admin/ga_dash_settings.php:997
621
+ msgid "Theme Color:"
622
+ msgstr ""
623
+
624
+ #: .././admin/ga_dash_settings.php:1007
625
+ msgid "A new frontend widget is available! To enable it, go to"
626
+ msgstr "Ein neues Frontend Widget ist verfügbar! Um es zu aktivieren, gehe zu"
627
+
628
+ #: .././admin/ga_dash_settings.php:1007
629
+ msgid "Appearance -> Widgets"
630
+ msgstr "Design -> Widgets"
631
+
632
+ #: .././admin/ga_dash_settings.php:1007
633
+ msgid "and look for Google Analytics Dashboard."
634
+ msgstr "und suche nach Google Analytics Dashboard."
635
+
636
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
637
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
638
+ msgid "Debugging Data"
639
+ msgstr "Debug Informationen"
640
+
641
+ #: .././admin/ga_dash_settings.php:1180
642
+ msgid "Properties refreshed."
643
+ msgstr ""
644
+
645
+ #: .././admin/ga_dash_settings.php:1274
646
+ msgid "Network Setup"
647
+ msgstr ""
648
+
649
+ #: .././admin/ga_dash_settings.php:1289
650
+ msgid " use a single Google Analytics account for the entire network"
651
+ msgstr ""
652
+
653
+ #: .././admin/ga_dash_settings.php:1358
654
+ msgid "Refresh Properties"
655
+ msgstr ""
656
+
657
+ #: .././admin/ga_dash_settings.php:1364
658
+ msgid "Properties/Views Settings"
659
+ msgstr "Frontend Einstellungen"
660
+
661
+ #: .././admin/ga_dash_settings.php:1409
662
+ msgid " exclude Super Admin tracking for the entire network"
663
+ msgstr ""
664
+
665
+ #: .././admin/ga_dash_settings.php:1537
666
+ msgid "Setup Tutorial & Demo"
667
+ msgstr "Setup Tutorial & Demo"
668
+
669
+ #: .././admin/ga_dash_settings.php:1549
670
+ msgid "Support & Reviews"
671
+ msgstr "Support & Bewertungen"
672
+
673
+ #: .././admin/ga_dash_settings.php:1557
674
+ msgid "Plugin documentation and support on"
675
+ msgstr ""
676
+
677
+ #: .././admin/ga_dash_settings.php:1564
678
+ msgid "Your feedback and review are both important,"
679
+ msgstr "Deine Feedbacks und Bewertungen sind wichtig,"
680
+
681
+ #: .././admin/ga_dash_settings.php:1564
682
+ msgid "rate this plugin"
683
+ msgstr "Bewerte dieses Plugin"
684
+
685
+ #: .././admin/ga_dash_settings.php:1569
686
+ msgid "Further Reading"
687
+ msgstr "Mehr erfahren"
688
+
689
+ #: .././admin/ga_dash_settings.php:1576
690
+ msgid "Improve search rankings"
691
+ msgstr ""
692
+
693
+ #: .././admin/ga_dash_settings.php:1576
694
+ msgid "by moving your website to HTTPS/SSL."
695
+ msgstr ""
696
+
697
+ #: .././admin/ga_dash_settings.php:1582
698
+ msgid "Other"
699
+ msgstr "Andere"
700
+
701
+ #: .././admin/ga_dash_settings.php:1582
702
+ msgid "WordPress Plugins"
703
+ msgstr "WordPress Plugins"
704
+
705
+ #: .././admin/ga_dash_settings.php:1582
706
+ msgid "written by the same author"
707
+ msgstr "vom selben Autor"
708
+
709
+ #: .././admin/ga_dash_settings.php:1587
710
+ msgid "Other Services"
711
+ msgstr ""
712
+
713
+ #: .././admin/ga_dash_settings.php:1594
714
+ msgid "Speed up your website and plug into a whole"
715
+ msgstr ""
716
+
717
+ #: .././admin/ga_dash_settings.php:1594
718
+ msgid "new level of site speed"
719
+ msgstr ""
720
+
721
+ #: .././admin/ga_dash_settings.php:1600
722
+ msgid "Web Analytics"
723
+ msgstr "Web Analyse"
724
+
725
+ #: .././admin/ga_dash_settings.php:1600
726
+ msgid "service with users tracking at IP level."
727
+ msgstr ""
728
+
729
+ #: .././front/frontend.php:112
730
+ msgid "Views vs UniqueViews"
731
+ msgstr "Aufrufe vs. Einmalige Aufrufe"
732
+
733
+ #: .././front/frontend.php:168
734
+ msgid "Google Analytics Reports"
735
+ msgstr ""
736
+
737
+ #: .././front/widgets.php:16
738
+ msgid "Will display your google analytics stats in a widget"
739
+ msgstr "Zeigt deine Google Analytics Statistik in einem Widget an"
740
+
741
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
742
+ msgid "trend"
743
+ msgstr ""
744
+
745
+ #: .././front/widgets.php:144
746
+ msgid "Period:"
747
+ msgstr "Dauer:"
748
+
749
+ #: .././front/widgets.php:144
750
+ msgid "Sessions:"
751
+ msgstr ""
752
+
753
+ #: .././front/widgets.php:150
754
+ msgid "generated by"
755
+ msgstr "Generiert von"
756
+
757
+ #: .././front/widgets.php:164
758
+ msgid "Google Analytics Stats"
759
+ msgstr "Google Analytics Statistik"
760
+
761
+ #: .././front/widgets.php:171
762
+ msgid "Title:"
763
+ msgstr "Titel"
764
+
765
+ #: .././front/widgets.php:178
766
+ msgid "Display:"
767
+ msgstr "Anzeige"
768
+
769
+ #: .././front/widgets.php:182
770
+ msgid "Chart & Totals"
771
+ msgstr "Diagramm & Bilanz"
772
+
773
+ #: .././front/widgets.php:183
774
+ msgid "Chart"
775
+ msgstr "Diagramm"
776
+
777
+ #: .././front/widgets.php:184
778
+ msgid "Totals"
779
+ msgstr "Bilanz"
780
+
781
+ #: .././front/widgets.php:188
782
+ msgid "Anonimize chart&#39;s stats:"
783
+ msgstr "Anonymisiere die grafischen Statistiken"
784
+
785
+ #: .././front/widgets.php:195
786
+ msgid "Stats for:"
787
+ msgstr "Statistiken für:"
788
+
789
+ #: .././front/widgets.php:205
790
+ msgid "Give credits:"
791
+ msgstr "Verweise auf:"
792
+
793
+ #: .././tools/gapi.php:140
794
+ msgid "Use this link to get your access code:"
795
+ msgstr "Nutze diesen Link, um deinen Zugriffscode zu erhalten:"
796
+
797
+ #: .././tools/gapi.php:140
798
+ msgid "Get Access Code"
799
+ msgstr "Erhalte den Zugriffscode"
800
+
801
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
802
+ msgid "Use the red link to get your access code!"
803
+ msgstr ""
804
+
805
+ #: .././tools/gapi.php:145
806
+ msgid "Access Code:"
807
+ msgstr "Zugriffscode:"
808
+
809
+ #: .././tools/gapi.php:157
810
+ msgid "Save Access Code"
811
+ msgstr "Zugriffscode speichern"
812
+
813
+ #: .././tools/gapi.php:380
814
+ msgid "Organic Searches"
815
+ msgstr "Organische Suche"
816
+
817
+ #: .././tools/gapi.php:391
818
+ msgid "Hour"
819
+ msgstr "Stunde"
820
+
821
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
822
+ msgid "Date"
823
+ msgstr "Datum"
824
+
825
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
826
+ msgid "Views"
827
+ msgstr "Aufrufe"
828
+
829
+ #: .././tools/gapi.php:611
830
+ msgid "Countries"
831
+ msgstr ""
832
+
833
+ #: .././tools/gapi.php:629
834
+ msgid "Cities from"
835
+ msgstr ""
836
+
837
+ #: .././tools/gapi.php:691
838
+ msgid "Channels"
839
+ msgstr ""
840
+
841
+ #: .././tools/gapi.php:754
842
+ msgid "Type"
843
+ msgstr "Typ"
844
+
845
+ #: .././tools/gapi.php:852
846
+ msgid "UniqueViews"
847
+ msgstr "Einmalige Aufrufe"
848
+
849
+ #: .././tools/gapi.php:899
850
+ msgid "Top Searches"
851
+ msgstr "Besten Suchen"
852
+
853
+ #~ msgid "Error Log"
854
+ #~ msgstr "Error Log"
855
+
856
+ #~ msgid "Visits"
857
+ #~ msgstr "Besuche"
858
+
859
+ #~ msgid "Visitors"
860
+ #~ msgstr "Besucher"
861
+
862
+ #~ msgid ""
863
+ #~ "No stats available. Please check the Debugging Data section for possible "
864
+ #~ "errors"
865
+ #~ msgstr ""
866
+ #~ "Es stehen keine Statistiken zur Verfügung. Bitte überprüfe den Debug Log, "
867
+ #~ "um mögliche Fehler anzuzeigen."
868
+
869
+ #~ msgid "Country/City"
870
+ #~ msgstr "Land/Stadt"
871
+
872
+ #~ msgid "Source"
873
+ #~ msgstr "Ursprung"
874
+
875
+ #~ msgid "Traffic Sources"
876
+ #~ msgstr "Ursprung des Datenverkehrs"
877
+
878
+ #~ msgid "New vs. Returning"
879
+ #~ msgstr "Neue vs. Wiederkehrende"
880
+
881
+ #~ msgid "Top Pages"
882
+ #~ msgstr "Besten Seiten"
883
+
884
+ #~ msgid "Top Referrers"
885
+ #~ msgstr "Besten Referrer"
886
+
887
+ #~ msgid "Visits:"
888
+ #~ msgstr "Besuche:"
889
+
890
+ #~ msgid "Visitors:"
891
+ #~ msgstr "Besucher:"
892
+
893
+ #~ msgid "Page Views:"
894
+ #~ msgstr "Seitenaufrufe:"
895
+
896
+ #~ msgid "Bounce Rate:"
897
+ #~ msgstr "Absprungrate:"
898
+
899
+ #~ msgid "Organic Search:"
900
+ #~ msgstr "Organische Suche:"
901
+
902
+ #~ msgid "Pages per Visit:"
903
+ #~ msgstr "Seiten pro Besuch:"
904
+
905
+ #~ msgid ""
906
+ #~ "This is a beta feature and is only available when using my Developer Key! "
907
+ #~ "("
908
+ #~ msgstr ""
909
+ #~ "Dies ist eine Beta Funktion, welche nur bei der Benutzung meines "
910
+ #~ "Entwicklerschlüssels verfügbar ist! ("
911
+
912
+ #~ msgid "more about this feature"
913
+ #~ msgstr "Mehr über diese Funktion"
914
+
915
+ #~ msgid "RETURN"
916
+ #~ msgstr "WIEDERKEHRENDE"
917
+
918
+ #~ msgid "Visits from "
919
+ #~ msgstr "Besuche von"
920
+
921
+ #~ msgid "Visits by Country"
922
+ #~ msgstr "Besuche nach Land"
923
+
924
+ #~ msgid "Traffic Overview"
925
+ #~ msgstr "Übersicht des Datenverkehrs"
926
+
927
+ #~ msgid " show page visits and visitors in frontend (after each article)"
928
+ #~ msgstr "Seitenbesuche und Besucher im Frontend (nach jedem Artikel)"
929
+
930
+ #~ msgid " show Geo Map chart for visits"
931
+ #~ msgstr "Zeige die Geomap Liste für die Besuche"
932
+
933
+ #~ msgid "You can find support on"
934
+ #~ msgstr "Du findest Support im"
935
+
936
+ #~ msgid "service with visitors tracking at IP level."
937
+ #~ msgstr "Dienst mit Besucher Tracking im IP Level."
938
+
939
+ #~ msgid "Total Visits:"
940
+ #~ msgstr "Gesamte Besuche:"
941
+
942
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
943
+ #~ msgstr "CURL wird benötigt. Bitte installiere/aktiviere CURL!"
944
+
945
+ #~ msgid "Options saved."
946
+ #~ msgstr "Optionen gespeichert."
947
+
948
+ #~ msgid "Show stats to: "
949
+ #~ msgstr "Zeige die Statistiken der:"
950
+
951
+ #~ msgid "Update Options"
952
+ #~ msgstr "Einstellungen übernehmen"
953
+
954
+ #~ msgid "Tracking Options: "
955
+ #~ msgstr "Tracking Optionen"
956
+
957
+ #~ msgid "Tracking Type: "
958
+ #~ msgstr "Tracking Typ: "
959
+
960
+ #~ msgid "User Type: "
961
+ #~ msgstr "User Type: "
962
+
963
+ #~ msgid "Exclude tracking for: "
964
+ #~ msgstr "Exkludiere Tracking für:"
965
+
966
+ #~ msgid "Select Domain: "
967
+ #~ msgstr "Wähle die Domain aus:"
968
+
969
+ #~ msgid "Theme Color: "
970
+ #~ msgstr "Farbe des Designs:"
971
+
972
+ #~ msgid "&#39; trend"
973
+ #~ msgstr "&#39; Entwicklung"
974
+
975
+ #~ msgid "DeConf Help Center"
976
+ #~ msgstr "DeConf Hilfe Center"
977
+
978
+ #~ msgid "Custom Code"
979
+ #~ msgstr "Benutzerdefinierter Code"
980
+
981
+ #~ msgid "Your Tracking Code:"
982
+ #~ msgstr "Dein Trackingcode:"
983
+
984
+ #~ msgid ""
985
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
986
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
987
+ #~ msgstr ""
988
+ #~ " (Guck' dir das an: <a href='http://deconf.com/projects/google-analytics-"
989
+ #~ "dashboard-for-wordpress/' target='_blank'>Step By Step Video Tutorial</a>)"
languages/ga-dash-es_ES.mo ADDED
Binary file
languages/ga-dash-es_ES.po ADDED
@@ -0,0 +1,1094 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:25+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:25+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: \n"
8
+ "Language: es_ES\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-SearchPath-0: ../.\n"
17
+
18
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
19
+ msgid "Google Analytics"
20
+ msgstr "Google Analytics"
21
+
22
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
23
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
24
+ #: .././admin/ga_dash_settings.php:954
25
+ msgid "General Settings"
26
+ msgstr "Configuración general"
27
+
28
+ #: .././admin/dashboard_widgets.php:58
29
+ msgid "Backend Settings"
30
+ msgstr "Configuración del backend"
31
+
32
+ #: .././admin/dashboard_widgets.php:62
33
+ msgid "Frontend Settings"
34
+ msgstr "Configuración del frontend"
35
+
36
+ #: .././admin/dashboard_widgets.php:66
37
+ #, fuzzy
38
+ msgid "Tracking Code"
39
+ msgstr "Tipo de seguimiento:"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Ajustes"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Escritorio de Google Analytics"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr ""
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ #, fuzzy
56
+ msgid "Authorize Plugin"
57
+ msgstr "Autorizar aplicación"
58
+
59
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
60
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
61
+ #: .././admin/ga_dash_settings.php:1383
62
+ msgid "View Name:"
63
+ msgstr ""
64
+
65
+ #: .././admin/dashboard_widgets.php:212
66
+ msgid "Something went wrong while retrieving profiles list."
67
+ msgstr ""
68
+
69
+ #: .././admin/dashboard_widgets.php:212
70
+ msgid "More details"
71
+ msgstr ""
72
+
73
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
74
+ #, fuzzy
75
+ msgid "An admin should asign a default Google Analytics Profile."
76
+ msgstr "Pide a un administrador que asigne un perfil de Google Analytics"
77
+
78
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
79
+ #, fuzzy
80
+ msgid "Select Domain"
81
+ msgstr "un solo dominio"
82
+
83
+ #: .././admin/dashboard_widgets.php:245
84
+ msgid ""
85
+ "Something went wrong while retrieving property data. You need to create and "
86
+ "properly configure a Google Analytics account:"
87
+ msgstr ""
88
+
89
+ #: .././admin/dashboard_widgets.php:245
90
+ msgid "Find out more!"
91
+ msgstr ""
92
+
93
+ #: .././admin/dashboard_widgets.php:276
94
+ msgid "Real-Time"
95
+ msgstr "Tiempo real"
96
+
97
+ #: .././admin/dashboard_widgets.php:277
98
+ msgid "Today"
99
+ msgstr "Hoy"
100
+
101
+ #: .././admin/dashboard_widgets.php:279
102
+ msgid "Yesterday"
103
+ msgstr "Ayer"
104
+
105
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
106
+ #: .././front/widgets.php:199
107
+ msgid "Last 7 Days"
108
+ msgstr "Últimos 7 días "
109
+
110
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
111
+ #: .././front/widgets.php:200
112
+ msgid "Last 14 Days"
113
+ msgstr "Últimos 14 días"
114
+
115
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
116
+ #: .././front/widgets.php:201
117
+ msgid "Last 30 Days"
118
+ msgstr "Últimos 30 días"
119
+
120
+ #: .././admin/dashboard_widgets.php:287
121
+ msgid "Last 90 Days"
122
+ msgstr "Últimos 90 días"
123
+
124
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
125
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
126
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
127
+ #: .././tools/gapi.php:899
128
+ msgid "Sessions"
129
+ msgstr ""
130
+
131
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
132
+ #: .././tools/gapi.php:368
133
+ msgid "Users"
134
+ msgstr ""
135
+
136
+ #: .././admin/dashboard_widgets.php:296
137
+ msgid "Organic"
138
+ msgstr "Búsquedas orgánicas"
139
+
140
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
141
+ #: .././tools/gapi.php:372
142
+ msgid "Page Views"
143
+ msgstr "Páginas vistas"
144
+
145
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
146
+ #: .././tools/gapi.php:376
147
+ msgid "Bounce Rate"
148
+ msgstr "Porcenaje de rebote"
149
+
150
+ #: .././admin/dashboard_widgets.php:302
151
+ msgid "Location"
152
+ msgstr ""
153
+
154
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
155
+ msgid "Pages"
156
+ msgstr ""
157
+
158
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
159
+ msgid "Referrers"
160
+ msgstr ""
161
+
162
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
163
+ msgid "Searches"
164
+ msgstr ""
165
+
166
+ #: .././admin/dashboard_widgets.php:310
167
+ msgid "Traffic Details"
168
+ msgstr ""
169
+
170
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
171
+ msgid "REFERRAL"
172
+ msgstr "REFERENCIA"
173
+
174
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
175
+ msgid "ORGANIC"
176
+ msgstr "ORGÁNICO"
177
+
178
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
179
+ #: .././admin/dashboard_widgets.php:659
180
+ msgid "SOCIAL"
181
+ msgstr "SOCIAL"
182
+
183
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
184
+ #: .././admin/dashboard_widgets.php:660
185
+ msgid "CAMPAIGN"
186
+ msgstr ""
187
+
188
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
189
+ #: .././admin/dashboard_widgets.php:663
190
+ msgid "DIRECT"
191
+ msgstr "DIRECTO"
192
+
193
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
194
+ msgid "NEW"
195
+ msgstr "NUEVO"
196
+
197
+ #: .././admin/dashboard_widgets.php:538
198
+ msgid "REFERRALS"
199
+ msgstr ""
200
+
201
+ #: .././admin/dashboard_widgets.php:541
202
+ msgid "KEYWORDS"
203
+ msgstr ""
204
+
205
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
206
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
207
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
208
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
209
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
210
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
211
+ #: .././front/frontend.php:100 .././front/widgets.php:122
212
+ msgid "This report is unavailable"
213
+ msgstr ""
214
+
215
+ #: .././admin/dashboard_widgets.php:818
216
+ msgid "Traffic Mediums"
217
+ msgstr ""
218
+
219
+ #: .././admin/dashboard_widgets.php:834
220
+ msgid "Visitor Type"
221
+ msgstr ""
222
+
223
+ #: .././admin/dashboard_widgets.php:850
224
+ msgid "Social Networks"
225
+ msgstr ""
226
+
227
+ #: .././admin/dashboard_widgets.php:866
228
+ msgid "Search Engines"
229
+ msgstr ""
230
+
231
+ #: .././admin/dashboard_widgets.php:968
232
+ msgid "Organic Search"
233
+ msgstr ""
234
+
235
+ #: .././admin/dashboard_widgets.php:972
236
+ msgid "Pages/Session"
237
+ msgstr ""
238
+
239
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
240
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
241
+ #: .././admin/ga_dash_settings.php:1228
242
+ msgid "Settings saved."
243
+ msgstr ""
244
+
245
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
246
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
247
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
248
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
249
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
250
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
251
+ msgid "Cheating Huh?"
252
+ msgstr ""
253
+
254
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
255
+ #: .././admin/ga_dash_settings.php:424
256
+ msgid "Something went wrong, you need to"
257
+ msgstr ""
258
+
259
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
260
+ #: .././admin/ga_dash_settings.php:424
261
+ msgid "auhorize the plugin"
262
+ msgstr "autorizar aplicación"
263
+
264
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
265
+ #: .././admin/ga_dash_settings.php:424
266
+ msgid "or properly configure your"
267
+ msgstr ""
268
+
269
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
270
+ #: .././admin/ga_dash_settings.php:424
271
+ #, fuzzy
272
+ msgid "Google Analytics account"
273
+ msgstr "Seguimiento de Google Analytics"
274
+
275
+ #: .././admin/ga_dash_settings.php:90
276
+ msgid "Google Analytics Frontend Settings"
277
+ msgstr "Configuración del frontend de Google Analytics"
278
+
279
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
280
+ msgid "Show stats to:"
281
+ msgstr ""
282
+
283
+ #: .././admin/ga_dash_settings.php:153
284
+ msgid " show page sessions and users in frontend (after each article)"
285
+ msgstr ""
286
+
287
+ #: .././admin/ga_dash_settings.php:169
288
+ #, fuzzy
289
+ msgid " show page searches (after each article)"
290
+ msgstr ""
291
+ "mostrar las visitas de página y las busquedas principales en el frontend "
292
+ "(después de cada artículo)"
293
+
294
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
295
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
296
+ #: .././admin/ga_dash_settings.php:1456
297
+ msgid "Save Changes"
298
+ msgstr ""
299
+
300
+ #: .././admin/ga_dash_settings.php:212
301
+ msgid "Google Analytics Dashboard Settings"
302
+ msgstr "Configuración del escritorio de Google Analytics"
303
+
304
+ #: .././admin/ga_dash_settings.php:275
305
+ #, fuzzy
306
+ msgid "disable Switch Profile/View functionality"
307
+ msgstr " desactivar la funcionalidad de cambio de perfil en el escritorio"
308
+
309
+ #: .././admin/ga_dash_settings.php:279
310
+ #, fuzzy
311
+ msgid "Real-Time Settings"
312
+ msgstr "Configuración de la caché"
313
+
314
+ #: .././admin/ga_dash_settings.php:282
315
+ msgid "Maximum number of pages to display on real-time tab:"
316
+ msgstr ""
317
+
318
+ #: .././admin/ga_dash_settings.php:287
319
+ msgid "(find out more"
320
+ msgstr ""
321
+
322
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
323
+ msgid "about this feature"
324
+ msgstr ""
325
+
326
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
327
+ msgid ")"
328
+ msgstr ""
329
+
330
+ #: .././admin/ga_dash_settings.php:293
331
+ msgid "Additional Stats & Charts"
332
+ msgstr ""
333
+
334
+ #: .././admin/ga_dash_settings.php:306
335
+ msgid " show Geo Map chart for sessions"
336
+ msgstr ""
337
+
338
+ #: .././admin/ga_dash_settings.php:311
339
+ msgid "Target Geo Map to region:"
340
+ msgstr ""
341
+
342
+ #: .././admin/ga_dash_settings.php:316
343
+ msgid "and render top"
344
+ msgstr ""
345
+
346
+ #: .././admin/ga_dash_settings.php:321
347
+ msgid "cities (find out more"
348
+ msgstr ""
349
+
350
+ #: .././admin/ga_dash_settings.php:339
351
+ msgid " show traffic overview"
352
+ msgstr "mostrar vista general del tráfico"
353
+
354
+ #: .././admin/ga_dash_settings.php:353
355
+ msgid " show top pages"
356
+ msgstr "mostrar páginas principales"
357
+
358
+ #: .././admin/ga_dash_settings.php:367
359
+ msgid " show top referrers"
360
+ msgstr "mostrar referencias principales"
361
+
362
+ #: .././admin/ga_dash_settings.php:381
363
+ msgid " show top searches"
364
+ msgstr "mostrar búsquedas principales"
365
+
366
+ #: .././admin/ga_dash_settings.php:430
367
+ #, fuzzy
368
+ msgid "Google Analytics Tracking Code"
369
+ msgstr "Seguimiento de Google Analytics"
370
+
371
+ #: .././admin/ga_dash_settings.php:440
372
+ #, fuzzy
373
+ msgid "Tracking Settings"
374
+ msgstr "Configuración del backend"
375
+
376
+ #: .././admin/ga_dash_settings.php:443
377
+ msgid "Tracking Options:"
378
+ msgstr ""
379
+
380
+ #: .././admin/ga_dash_settings.php:447
381
+ msgid "Disabled"
382
+ msgstr "desactivado"
383
+
384
+ #: .././admin/ga_dash_settings.php:449
385
+ #, fuzzy
386
+ msgid "Enabled"
387
+ msgstr "desactivado"
388
+
389
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
390
+ #, fuzzy
391
+ msgid "Tracking ID:"
392
+ msgstr "Tipo de seguimiento:"
393
+
394
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
395
+ msgid "Default URL:"
396
+ msgstr ""
397
+
398
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
399
+ msgid "Time Zone:"
400
+ msgstr ""
401
+
402
+ #: .././admin/ga_dash_settings.php:467
403
+ #, fuzzy
404
+ msgid "Basic Tracking"
405
+ msgstr "Activar seguimiento:"
406
+
407
+ #: .././admin/ga_dash_settings.php:473
408
+ msgid "Tracking Type:"
409
+ msgstr ""
410
+
411
+ #: .././admin/ga_dash_settings.php:477
412
+ msgid "Classic Analytics"
413
+ msgstr ""
414
+
415
+ #: .././admin/ga_dash_settings.php:479
416
+ msgid "Universal Analytics"
417
+ msgstr ""
418
+
419
+ #: .././admin/ga_dash_settings.php:493
420
+ msgid " anonymize IPs while tracking"
421
+ msgstr "anonimizar IPs durante el seguimiento"
422
+
423
+ #: .././admin/ga_dash_settings.php:508
424
+ msgid " enable remarketing, demographics and interests reports"
425
+ msgstr ""
426
+
427
+ #: .././admin/ga_dash_settings.php:512
428
+ #, fuzzy
429
+ msgid "Events Tracking"
430
+ msgstr "Activar seguimiento:"
431
+
432
+ #: .././admin/ga_dash_settings.php:525
433
+ msgid " track downloads, mailto and outbound links"
434
+ msgstr ""
435
+
436
+ #: .././admin/ga_dash_settings.php:529
437
+ msgid "Downloads Regex:"
438
+ msgstr ""
439
+
440
+ #: .././admin/ga_dash_settings.php:546
441
+ msgid " track affiliate links matching this regex"
442
+ msgstr ""
443
+
444
+ #: .././admin/ga_dash_settings.php:550
445
+ msgid "Affiliates Regex:"
446
+ msgstr ""
447
+
448
+ #: .././admin/ga_dash_settings.php:567
449
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
450
+ msgstr ""
451
+
452
+ #: .././admin/ga_dash_settings.php:571
453
+ msgid "Custom Definitions"
454
+ msgstr ""
455
+
456
+ #: .././admin/ga_dash_settings.php:574
457
+ msgid "Authors:"
458
+ msgstr ""
459
+
460
+ #: .././admin/ga_dash_settings.php:584
461
+ msgid "Publication Year:"
462
+ msgstr ""
463
+
464
+ #: .././admin/ga_dash_settings.php:594
465
+ msgid "Categories:"
466
+ msgstr ""
467
+
468
+ #: .././admin/ga_dash_settings.php:604
469
+ msgid "User Type:"
470
+ msgstr ""
471
+
472
+ #: .././admin/ga_dash_settings.php:614
473
+ #, fuzzy
474
+ msgid "Advanced Tracking"
475
+ msgstr "Activar seguimiento:"
476
+
477
+ #: .././admin/ga_dash_settings.php:617
478
+ #, fuzzy
479
+ msgid "Page Speed SR:"
480
+ msgstr "Páginas por visita:"
481
+
482
+ #: .././admin/ga_dash_settings.php:635
483
+ msgid " exclude events from bounce-rate calculation"
484
+ msgstr ""
485
+
486
+ #: .././admin/ga_dash_settings.php:649
487
+ msgid " enable enhanced link attribution"
488
+ msgstr ""
489
+
490
+ #: .././admin/ga_dash_settings.php:663
491
+ msgid " enable AdSense account linking"
492
+ msgstr ""
493
+
494
+ #: .././admin/ga_dash_settings.php:678
495
+ msgid " enable cross domain tracking"
496
+ msgstr ""
497
+
498
+ #: .././admin/ga_dash_settings.php:682
499
+ msgid "Cross Domains:"
500
+ msgstr ""
501
+
502
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
503
+ #, fuzzy
504
+ msgid "Exclude Tracking"
505
+ msgstr "Activar seguimiento:"
506
+
507
+ #: .././admin/ga_dash_settings.php:695
508
+ msgid "Exclude tracking for:"
509
+ msgstr ""
510
+
511
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
512
+ msgid ""
513
+ "Loading the required libraries. If this results in a blank screen or a fatal "
514
+ "error, try this solution:"
515
+ msgstr ""
516
+
517
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
518
+ msgid "Plugin authorization succeeded."
519
+ msgstr ""
520
+
521
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
522
+ msgid ""
523
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
524
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
525
+ msgstr ""
526
+
527
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
528
+ msgid "Cleared Cache."
529
+ msgstr "Caché borrada."
530
+
531
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
532
+ #, fuzzy
533
+ msgid "Token Reseted and Revoked."
534
+ msgstr "Token reseteado."
535
+
536
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
537
+ msgid "Dumping log data."
538
+ msgstr ""
539
+
540
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
541
+ msgid "All other domains/properties were removed."
542
+ msgstr ""
543
+
544
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
545
+ msgid ""
546
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
547
+ msgstr ""
548
+
549
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
550
+ msgid "Google Analytics Settings"
551
+ msgstr "Configuración de Google Analytics"
552
+
553
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
554
+ msgid ""
555
+ "Something went wrong. Please check the Debugging Data section for possible "
556
+ "errors"
557
+ msgstr ""
558
+
559
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
560
+ msgid "Use the red link (see below) to generate and get your access code!"
561
+ msgstr ""
562
+
563
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
564
+ #, fuzzy
565
+ msgid "Plugin Authorization"
566
+ msgstr "Borrar autorización"
567
+
568
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
569
+ #, fuzzy
570
+ msgid "You should watch the"
571
+ msgstr "Deberías ver este"
572
+
573
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
574
+ msgid "video"
575
+ msgstr ""
576
+
577
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
578
+ msgid "and read this"
579
+ msgstr ""
580
+
581
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
582
+ #, fuzzy
583
+ msgid "tutorial"
584
+ msgstr "Tutorial de configuración"
585
+
586
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
587
+ msgid ""
588
+ "before proceeding to authorization. This plugin requires a properly "
589
+ "configured Google Analytics account"
590
+ msgstr ""
591
+
592
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
593
+ msgid " use your own API Project credentials"
594
+ msgstr ""
595
+
596
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
597
+ msgid "API Key:"
598
+ msgstr "API Key:"
599
+
600
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
601
+ msgid "Client ID:"
602
+ msgstr "Client ID:"
603
+
604
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
605
+ msgid "Client Secret:"
606
+ msgstr "Client Secret:"
607
+
608
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
609
+ msgid "Clear Authorization"
610
+ msgstr "Borrar autorización"
611
+
612
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
613
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
614
+ msgid "Clear Cache"
615
+ msgstr "Borrar caché"
616
+
617
+ #: .././admin/ga_dash_settings.php:957
618
+ msgid "Select Domain:"
619
+ msgstr ""
620
+
621
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
622
+ msgid "Property not found"
623
+ msgstr ""
624
+
625
+ #: .././admin/ga_dash_settings.php:975
626
+ msgid "and/or hide all other domains"
627
+ msgstr ""
628
+
629
+ #: .././admin/ga_dash_settings.php:978
630
+ msgid "Hide Now"
631
+ msgstr ""
632
+
633
+ #: .././admin/ga_dash_settings.php:997
634
+ msgid "Theme Color:"
635
+ msgstr ""
636
+
637
+ #: .././admin/ga_dash_settings.php:1007
638
+ msgid "A new frontend widget is available! To enable it, go to"
639
+ msgstr ""
640
+
641
+ #: .././admin/ga_dash_settings.php:1007
642
+ msgid "Appearance -> Widgets"
643
+ msgstr ""
644
+
645
+ #: .././admin/ga_dash_settings.php:1007
646
+ msgid "and look for Google Analytics Dashboard."
647
+ msgstr "y busca escritorio de Google Analytics."
648
+
649
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
650
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
651
+ msgid "Debugging Data"
652
+ msgstr ""
653
+
654
+ #: .././admin/ga_dash_settings.php:1180
655
+ msgid "Properties refreshed."
656
+ msgstr ""
657
+
658
+ #: .././admin/ga_dash_settings.php:1274
659
+ msgid "Network Setup"
660
+ msgstr ""
661
+
662
+ #: .././admin/ga_dash_settings.php:1289
663
+ msgid " use a single Google Analytics account for the entire network"
664
+ msgstr ""
665
+
666
+ #: .././admin/ga_dash_settings.php:1358
667
+ msgid "Refresh Properties"
668
+ msgstr ""
669
+
670
+ #: .././admin/ga_dash_settings.php:1364
671
+ #, fuzzy
672
+ msgid "Properties/Views Settings"
673
+ msgstr "Configuración del frontend"
674
+
675
+ #: .././admin/ga_dash_settings.php:1409
676
+ msgid " exclude Super Admin tracking for the entire network"
677
+ msgstr ""
678
+
679
+ #: .././admin/ga_dash_settings.php:1537
680
+ #, fuzzy
681
+ msgid "Setup Tutorial & Demo"
682
+ msgstr "Tutorial de configuración"
683
+
684
+ #: .././admin/ga_dash_settings.php:1549
685
+ #, fuzzy
686
+ msgid "Support & Reviews"
687
+ msgstr "Enlaces de soporte"
688
+
689
+ #: .././admin/ga_dash_settings.php:1557
690
+ msgid "Plugin documentation and support on"
691
+ msgstr ""
692
+
693
+ #: .././admin/ga_dash_settings.php:1564
694
+ msgid "Your feedback and review are both important,"
695
+ msgstr ""
696
+
697
+ #: .././admin/ga_dash_settings.php:1564
698
+ msgid "rate this plugin"
699
+ msgstr ""
700
+
701
+ #: .././admin/ga_dash_settings.php:1569
702
+ msgid "Further Reading"
703
+ msgstr ""
704
+
705
+ #: .././admin/ga_dash_settings.php:1576
706
+ msgid "Improve search rankings"
707
+ msgstr ""
708
+
709
+ #: .././admin/ga_dash_settings.php:1576
710
+ msgid "by moving your website to HTTPS/SSL."
711
+ msgstr ""
712
+
713
+ #: .././admin/ga_dash_settings.php:1582
714
+ msgid "Other"
715
+ msgstr ""
716
+
717
+ #: .././admin/ga_dash_settings.php:1582
718
+ msgid "WordPress Plugins"
719
+ msgstr ""
720
+
721
+ #: .././admin/ga_dash_settings.php:1582
722
+ msgid "written by the same author"
723
+ msgstr ""
724
+
725
+ #: .././admin/ga_dash_settings.php:1587
726
+ msgid "Other Services"
727
+ msgstr ""
728
+
729
+ #: .././admin/ga_dash_settings.php:1594
730
+ msgid "Speed up your website and plug into a whole"
731
+ msgstr ""
732
+
733
+ #: .././admin/ga_dash_settings.php:1594
734
+ msgid "new level of site speed"
735
+ msgstr ""
736
+
737
+ #: .././admin/ga_dash_settings.php:1600
738
+ msgid "Web Analytics"
739
+ msgstr "Analíticas web"
740
+
741
+ #: .././admin/ga_dash_settings.php:1600
742
+ msgid "service with users tracking at IP level."
743
+ msgstr ""
744
+
745
+ #: .././front/frontend.php:112
746
+ msgid "Views vs UniqueViews"
747
+ msgstr "Visitas vs visitas únicas"
748
+
749
+ #: .././front/frontend.php:168
750
+ msgid "Google Analytics Reports"
751
+ msgstr ""
752
+
753
+ #: .././front/widgets.php:16
754
+ msgid "Will display your google analytics stats in a widget"
755
+ msgstr ""
756
+
757
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
758
+ msgid "trend"
759
+ msgstr ""
760
+
761
+ #: .././front/widgets.php:144
762
+ msgid "Period:"
763
+ msgstr ""
764
+
765
+ #: .././front/widgets.php:144
766
+ msgid "Sessions:"
767
+ msgstr ""
768
+
769
+ #: .././front/widgets.php:150
770
+ msgid "generated by"
771
+ msgstr ""
772
+
773
+ #: .././front/widgets.php:164
774
+ msgid "Google Analytics Stats"
775
+ msgstr "Estadísticas de Google Analytics"
776
+
777
+ #: .././front/widgets.php:171
778
+ msgid "Title:"
779
+ msgstr ""
780
+
781
+ #: .././front/widgets.php:178
782
+ msgid "Display:"
783
+ msgstr ""
784
+
785
+ #: .././front/widgets.php:182
786
+ msgid "Chart & Totals"
787
+ msgstr ""
788
+
789
+ #: .././front/widgets.php:183
790
+ msgid "Chart"
791
+ msgstr ""
792
+
793
+ #: .././front/widgets.php:184
794
+ msgid "Totals"
795
+ msgstr ""
796
+
797
+ #: .././front/widgets.php:188
798
+ msgid "Anonimize chart&#39;s stats:"
799
+ msgstr ""
800
+
801
+ #: .././front/widgets.php:195
802
+ msgid "Stats for:"
803
+ msgstr ""
804
+
805
+ #: .././front/widgets.php:205
806
+ msgid "Give credits:"
807
+ msgstr ""
808
+
809
+ #: .././tools/gapi.php:140
810
+ msgid "Use this link to get your access code:"
811
+ msgstr ""
812
+
813
+ #: .././tools/gapi.php:140
814
+ msgid "Get Access Code"
815
+ msgstr ""
816
+
817
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
818
+ msgid "Use the red link to get your access code!"
819
+ msgstr ""
820
+
821
+ #: .././tools/gapi.php:145
822
+ msgid "Access Code:"
823
+ msgstr "Código de acceso:"
824
+
825
+ #: .././tools/gapi.php:157
826
+ msgid "Save Access Code"
827
+ msgstr ""
828
+
829
+ #: .././tools/gapi.php:380
830
+ msgid "Organic Searches"
831
+ msgstr "Búsquedas orgánicas"
832
+
833
+ #: .././tools/gapi.php:391
834
+ msgid "Hour"
835
+ msgstr "Hora"
836
+
837
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
838
+ msgid "Date"
839
+ msgstr "Fecha"
840
+
841
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
842
+ msgid "Views"
843
+ msgstr "Vistas"
844
+
845
+ #: .././tools/gapi.php:611
846
+ msgid "Countries"
847
+ msgstr ""
848
+
849
+ #: .././tools/gapi.php:629
850
+ msgid "Cities from"
851
+ msgstr ""
852
+
853
+ #: .././tools/gapi.php:691
854
+ msgid "Channels"
855
+ msgstr ""
856
+
857
+ #: .././tools/gapi.php:754
858
+ msgid "Type"
859
+ msgstr "Tipo"
860
+
861
+ #: .././tools/gapi.php:852
862
+ msgid "UniqueViews"
863
+ msgstr "Visitas únicas"
864
+
865
+ #: .././tools/gapi.php:899
866
+ msgid "Top Searches"
867
+ msgstr "Búsquedas principales"
868
+
869
+ #~ msgid "Visits"
870
+ #~ msgstr "Visitas"
871
+
872
+ #~ msgid "Visitors"
873
+ #~ msgstr "Visitantes"
874
+
875
+ #~ msgid "Country/City"
876
+ #~ msgstr "País/Ciudad"
877
+
878
+ #~ msgid "Source"
879
+ #~ msgstr "Fuente"
880
+
881
+ #~ msgid "Traffic Sources"
882
+ #~ msgstr "Fuentes de tráfico"
883
+
884
+ #~ msgid "New vs. Returning"
885
+ #~ msgstr "Nuevos vs Recurrentes"
886
+
887
+ #~ msgid "Top Pages"
888
+ #~ msgstr "Páginas principales"
889
+
890
+ #~ msgid "Top Referrers"
891
+ #~ msgstr "Referencias principales"
892
+
893
+ #~ msgid "Visits:"
894
+ #~ msgstr "Visitas:"
895
+
896
+ #~ msgid "Visitors:"
897
+ #~ msgstr "Visitantes:"
898
+
899
+ #~ msgid "Page Views:"
900
+ #~ msgstr "Páginas vistas:"
901
+
902
+ #~ msgid "Bounce Rate:"
903
+ #~ msgstr "Porcentaje de rebote:"
904
+
905
+ #~ msgid "Organic Search:"
906
+ #~ msgstr "Búsquedas orgánicas:"
907
+
908
+ #~ msgid "Pages per Visit:"
909
+ #~ msgstr "Páginas por visita:"
910
+
911
+ #, fuzzy
912
+ #~ msgid "RETURN"
913
+ #~ msgstr "RECURRENTE"
914
+
915
+ #~ msgid "Visits from "
916
+ #~ msgstr "Visitas desde"
917
+
918
+ #~ msgid "Visits by Country"
919
+ #~ msgstr "Visitas por país"
920
+
921
+ #~ msgid "Traffic Overview"
922
+ #~ msgstr "Vista general de tráfico"
923
+
924
+ #, fuzzy
925
+ #~ msgid " show page visits and visitors in frontend (after each article)"
926
+ #~ msgstr ""
927
+ #~ "mostrar las visitas de página y las busquedas principales en el frontend "
928
+ #~ "(después de cada artículo)"
929
+
930
+ #, fuzzy
931
+ #~ msgid " show Geo Map chart for visits"
932
+ #~ msgstr "mostrar geo mapa para visitas"
933
+
934
+ #~ msgid "Total Visits:"
935
+ #~ msgstr "Total de visitas:"
936
+
937
+ #~ msgid "Options saved."
938
+ #~ msgstr "Opciones guardadas."
939
+
940
+ #~ msgid "Update Options"
941
+ #~ msgstr "Actualizar opciones"
942
+
943
+ #, fuzzy
944
+ #~ msgid "Tracking Options: "
945
+ #~ msgstr "Tipo de seguimiento:"
946
+
947
+ #~ msgid "Tracking Type: "
948
+ #~ msgstr "Tipo de seguimiento:"
949
+
950
+ #, fuzzy
951
+ #~ msgid "Authors: "
952
+ #~ msgstr "autores"
953
+
954
+ #, fuzzy
955
+ #~ msgid "User Type: "
956
+ #~ msgstr "Tipo de seguimiento:"
957
+
958
+ #, fuzzy
959
+ #~ msgid "Exclude tracking for: "
960
+ #~ msgstr "Activar seguimiento:"
961
+
962
+ #, fuzzy
963
+ #~ msgid "Select Domain: "
964
+ #~ msgstr "un solo dominio"
965
+
966
+ #, fuzzy
967
+ #~ msgid "Your Tracking Code:"
968
+ #~ msgstr "Tipo de seguimiento:"
969
+
970
+ #, fuzzy
971
+ #~ msgid ""
972
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
973
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
974
+ #~ msgstr ""
975
+ #~ " (ver este <a href='http://www.deconf.com/en/projects/google-analytics-"
976
+ #~ "dashboard-for-wordpress/' target='_blank'>videotutorial paso a paso</a>)"
977
+
978
+ #~ msgid "Help on Wordpress Forum"
979
+ #~ msgstr "Ayuda en el foro de Wordpress"
980
+
981
+ #~ msgid "Support on Deconf Forum"
982
+ #~ msgstr "Soporte en el foro de Deconf"
983
+
984
+ #~ msgid "GA Dashboard"
985
+ #~ msgstr "GA Dashboard"
986
+
987
+ #~ msgid "Ask an admin to authorize this Application"
988
+ #~ msgstr "Pide a un administrador que autorice esta aplicación"
989
+
990
+ #~ msgid "Step by step video tutorial"
991
+ #~ msgstr "video tutorial paso a paso"
992
+
993
+ #~ msgid "step by step video tutorial"
994
+ #~ msgstr "video tutorial paso a paso"
995
+
996
+ #~ msgid ""
997
+ #~ "(the rest of the settings will show up after completing the authorization "
998
+ #~ "process)"
999
+ #~ msgstr ""
1000
+ #~ "(el resto de la configuración se mostrará después de completar el proceso "
1001
+ #~ "de autorización)"
1002
+
1003
+ #~ msgid "Google Analytics Dashboard Official Page"
1004
+ #~ msgstr "Página oficial de Google Analytics Dashboard"
1005
+
1006
+ #~ msgid "Google Analytics Dashboard Wordpress Support"
1007
+ #~ msgstr "Soporte de Wordpress de Google Analytics Dashboard"
1008
+
1009
+ #~ msgid "Google Analytics Dashboard on Deconf Forum"
1010
+ #~ msgstr "Google Analytics Dashboard en el foro de Deconf"
1011
+
1012
+ #~ msgid "Useful Plugins"
1013
+ #~ msgstr "Plugins de interés"
1014
+
1015
+ #~ msgid "YouTube Analytics Dashboard"
1016
+ #~ msgstr "YouTube Analytics Dashboard"
1017
+
1018
+ #~ msgid "Google Adsense Dashboard"
1019
+ #~ msgstr "Google Adsense Dashboard"
1020
+
1021
+ #~ msgid "Access Level"
1022
+ #~ msgstr "Nivel de acceso"
1023
+
1024
+ #~ msgid "View Access Level: "
1025
+ #~ msgstr "Mostrar nivel de acceso:"
1026
+
1027
+ #~ msgid "Administrators"
1028
+ #~ msgstr "administradores"
1029
+
1030
+ #~ msgid "Editors"
1031
+ #~ msgstr "editores"
1032
+
1033
+ #~ msgid "Contributors"
1034
+ #~ msgstr "colaboradores"
1035
+
1036
+ #~ msgid "Lock selected access level to this profile: "
1037
+ #~ msgstr "Bloquear el nivel de acceso seleccionado a este perfil:"
1038
+
1039
+ #~ msgid "your profile list needs an update:"
1040
+ #~ msgstr "tu lista de perfiles necesita una actualización:"
1041
+
1042
+ #~ msgid "Click here"
1043
+ #~ msgstr "Pulsa aqui"
1044
+
1045
+ #~ msgid "CSS Settings: "
1046
+ #~ msgstr "Configuración CSS:"
1047
+
1048
+ #~ msgid "Blue Theme"
1049
+ #~ msgstr "Tema azul"
1050
+
1051
+ #~ msgid "Light Theme"
1052
+ #~ msgstr "Tema claro"
1053
+
1054
+ #~ msgid "Cache Time: "
1055
+ #~ msgstr "Tiempo de caché:"
1056
+
1057
+ #~ msgid "15 minutes"
1058
+ #~ msgstr "15 minutos"
1059
+
1060
+ #~ msgid "30 minutes"
1061
+ #~ msgstr "30 minutos"
1062
+
1063
+ #~ msgid "1 hour"
1064
+ #~ msgstr "1 hora"
1065
+
1066
+ #~ msgid "2 hours"
1067
+ #~ msgstr "2 horas"
1068
+
1069
+ #~ msgid "Domain and Subdomains"
1070
+ #~ msgstr "dominio y subdominios"
1071
+
1072
+ #~ msgid "Multiple TLD Domains"
1073
+ #~ msgstr "multiples dominio TLD"
1074
+
1075
+ #~ msgid "Default Tracking Domain: "
1076
+ #~ msgstr "Dominio predeterminado de seguimiento:"
1077
+
1078
+ #~ msgid "None"
1079
+ #~ msgstr "Ninguno"
1080
+
1081
+ #~ msgid "Client ID, Client Secret or API Key is missing"
1082
+ #~ msgstr "Falta Client ID, Client Secret o API Key"
1083
+
1084
+ #~ msgid "API Key, Client ID or Client Secret is missing."
1085
+ #~ msgstr "Falta API Key, Client ID o Client Secret."
1086
+
1087
+ #~ msgid "ex: AIzaSyASK7dLaii4326AZVyZ6MCOIQOY6F30G_1"
1088
+ #~ msgstr "ej.: AIzaSyASK7dLaii4326AZVyZ6MCOIQOY6F30G_1"
1089
+
1090
+ #~ msgid "ex: 111342334706.apps.googleusercontent.com"
1091
+ #~ msgstr "ej.: 111342334706.apps.googleusercontent.com"
1092
+
1093
+ #~ msgid "ex: c62POy23C_2qK5fd3fdsec2o"
1094
+ #~ msgstr "ej.: c62POy23C_2qK5fd3fdsec2o"
languages/ga-dash-fr_FR.mo ADDED
Binary file
languages/ga-dash-fr_FR.po ADDED
@@ -0,0 +1,996 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:25+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:25+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: fr_FR\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Réglages Généraux"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Réglages B.O"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Réglages F.O"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Code de Tracking"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Réglages"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Tableau de Bord Google Analytics"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Ce plugin a besoin d&#39;une autorisation:"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "autoriser le plugin"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Nom de la vue:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr ""
67
+ "Quelque chose s&#39;est mal passé lors de la récupération de la liste des "
68
+ "profils."
69
+
70
+ #: .././admin/dashboard_widgets.php:212
71
+ msgid "More details"
72
+ msgstr "Plus de Détails"
73
+
74
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
75
+ msgid "An admin should asign a default Google Analytics Profile."
76
+ msgstr "Un administrateur doit assigner un profil Google Analytics par défaut."
77
+
78
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
79
+ msgid "Select Domain"
80
+ msgstr "Sélectionner un Domaine"
81
+
82
+ #: .././admin/dashboard_widgets.php:245
83
+ msgid ""
84
+ "Something went wrong while retrieving property data. You need to create and "
85
+ "properly configure a Google Analytics account:"
86
+ msgstr ""
87
+ "Quelque chose s&#39;est mal passé lors de la récupération des données de "
88
+ "propriété. Vous devez créer et configurer correctement un compte Google "
89
+ "Analytics:"
90
+
91
+ #: .././admin/dashboard_widgets.php:245
92
+ msgid "Find out more!"
93
+ msgstr "En savoir plus!"
94
+
95
+ #: .././admin/dashboard_widgets.php:276
96
+ msgid "Real-Time"
97
+ msgstr "Temps-Réel"
98
+
99
+ #: .././admin/dashboard_widgets.php:277
100
+ msgid "Today"
101
+ msgstr "Aujourd&#39;hui"
102
+
103
+ #: .././admin/dashboard_widgets.php:279
104
+ msgid "Yesterday"
105
+ msgstr "Hier"
106
+
107
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
108
+ #: .././front/widgets.php:199
109
+ msgid "Last 7 Days"
110
+ msgstr "7 Derniers Jours"
111
+
112
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
113
+ #: .././front/widgets.php:200
114
+ msgid "Last 14 Days"
115
+ msgstr "14 Derniers Jours"
116
+
117
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
118
+ #: .././front/widgets.php:201
119
+ msgid "Last 30 Days"
120
+ msgstr "30 Derniers Jours"
121
+
122
+ #: .././admin/dashboard_widgets.php:287
123
+ msgid "Last 90 Days"
124
+ msgstr "90 Derniers Jours"
125
+
126
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
127
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
128
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
129
+ #: .././tools/gapi.php:899
130
+ msgid "Sessions"
131
+ msgstr ""
132
+
133
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
134
+ #: .././tools/gapi.php:368
135
+ msgid "Users"
136
+ msgstr ""
137
+
138
+ #: .././admin/dashboard_widgets.php:296
139
+ msgid "Organic"
140
+ msgstr "Organique"
141
+
142
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
143
+ #: .././tools/gapi.php:372
144
+ msgid "Page Views"
145
+ msgstr "Pages vues"
146
+
147
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
148
+ #: .././tools/gapi.php:376
149
+ msgid "Bounce Rate"
150
+ msgstr "Taux de Rebond"
151
+
152
+ #: .././admin/dashboard_widgets.php:302
153
+ msgid "Location"
154
+ msgstr ""
155
+
156
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
157
+ msgid "Pages"
158
+ msgstr ""
159
+
160
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
161
+ msgid "Referrers"
162
+ msgstr ""
163
+
164
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
165
+ msgid "Searches"
166
+ msgstr ""
167
+
168
+ #: .././admin/dashboard_widgets.php:310
169
+ msgid "Traffic Details"
170
+ msgstr ""
171
+
172
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
173
+ msgid "REFERRAL"
174
+ msgstr "RENVOI"
175
+
176
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
177
+ msgid "ORGANIC"
178
+ msgstr "ORGANIQUE"
179
+
180
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
181
+ #: .././admin/dashboard_widgets.php:659
182
+ msgid "SOCIAL"
183
+ msgstr "SOCIAL"
184
+
185
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
186
+ #: .././admin/dashboard_widgets.php:660
187
+ msgid "CAMPAIGN"
188
+ msgstr ""
189
+
190
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
191
+ #: .././admin/dashboard_widgets.php:663
192
+ msgid "DIRECT"
193
+ msgstr "DIRECT"
194
+
195
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
196
+ msgid "NEW"
197
+ msgstr "NOUVEAU"
198
+
199
+ #: .././admin/dashboard_widgets.php:538
200
+ msgid "REFERRALS"
201
+ msgstr "RÉFÉRENCES"
202
+
203
+ #: .././admin/dashboard_widgets.php:541
204
+ msgid "KEYWORDS"
205
+ msgstr "MOTS-CLÉS"
206
+
207
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
208
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
209
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
210
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
211
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
212
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
213
+ #: .././front/frontend.php:100 .././front/widgets.php:122
214
+ msgid "This report is unavailable"
215
+ msgstr ""
216
+
217
+ #: .././admin/dashboard_widgets.php:818
218
+ msgid "Traffic Mediums"
219
+ msgstr ""
220
+
221
+ #: .././admin/dashboard_widgets.php:834
222
+ msgid "Visitor Type"
223
+ msgstr ""
224
+
225
+ #: .././admin/dashboard_widgets.php:850
226
+ msgid "Social Networks"
227
+ msgstr ""
228
+
229
+ #: .././admin/dashboard_widgets.php:866
230
+ msgid "Search Engines"
231
+ msgstr ""
232
+
233
+ #: .././admin/dashboard_widgets.php:968
234
+ msgid "Organic Search"
235
+ msgstr ""
236
+
237
+ #: .././admin/dashboard_widgets.php:972
238
+ msgid "Pages/Session"
239
+ msgstr ""
240
+
241
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
242
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
243
+ #: .././admin/ga_dash_settings.php:1228
244
+ msgid "Settings saved."
245
+ msgstr ""
246
+
247
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
248
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
249
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
250
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
251
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
252
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
253
+ msgid "Cheating Huh?"
254
+ msgstr "Tricher Hein?"
255
+
256
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
257
+ #: .././admin/ga_dash_settings.php:424
258
+ msgid "Something went wrong, you need to"
259
+ msgstr "Quelque chose s&#39;est mal passé, vous devez"
260
+
261
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
262
+ #: .././admin/ga_dash_settings.php:424
263
+ msgid "auhorize the plugin"
264
+ msgstr "autoriser le plugin"
265
+
266
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
267
+ #: .././admin/ga_dash_settings.php:424
268
+ msgid "or properly configure your"
269
+ msgstr "ou bien configurer votre"
270
+
271
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
272
+ #: .././admin/ga_dash_settings.php:424
273
+ msgid "Google Analytics account"
274
+ msgstr "Compte Google Analytics"
275
+
276
+ #: .././admin/ga_dash_settings.php:90
277
+ msgid "Google Analytics Frontend Settings"
278
+ msgstr "Google Analytics Paramètres Frontend"
279
+
280
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
281
+ msgid "Show stats to:"
282
+ msgstr ""
283
+
284
+ #: .././admin/ga_dash_settings.php:153
285
+ msgid " show page sessions and users in frontend (after each article)"
286
+ msgstr ""
287
+
288
+ #: .././admin/ga_dash_settings.php:169
289
+ msgid " show page searches (after each article)"
290
+ msgstr "Afficher la page de recherche (après chaque article)"
291
+
292
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
293
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
294
+ #: .././admin/ga_dash_settings.php:1456
295
+ msgid "Save Changes"
296
+ msgstr ""
297
+
298
+ #: .././admin/ga_dash_settings.php:212
299
+ msgid "Google Analytics Dashboard Settings"
300
+ msgstr "Paramètres du tableau de bord Google Analytics"
301
+
302
+ #: .././admin/ga_dash_settings.php:275
303
+ msgid "disable Switch Profile/View functionality"
304
+ msgstr "désactiver Changer Profil/Voir fonctionnalité"
305
+
306
+ #: .././admin/ga_dash_settings.php:279
307
+ msgid "Real-Time Settings"
308
+ msgstr "Paramètres Temps-Réel"
309
+
310
+ #: .././admin/ga_dash_settings.php:282
311
+ msgid "Maximum number of pages to display on real-time tab:"
312
+ msgstr "Nombre maximum de pages à afficher sur l&#39;onglet en temps réel:"
313
+
314
+ #: .././admin/ga_dash_settings.php:287
315
+ msgid "(find out more"
316
+ msgstr "(en savoir plus"
317
+
318
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
319
+ msgid "about this feature"
320
+ msgstr "sur cette fonction"
321
+
322
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
323
+ msgid ")"
324
+ msgstr ")"
325
+
326
+ #: .././admin/ga_dash_settings.php:293
327
+ msgid "Additional Stats & Charts"
328
+ msgstr "Statistiques et graphiques supplémentaires"
329
+
330
+ #: .././admin/ga_dash_settings.php:306
331
+ msgid " show Geo Map chart for sessions"
332
+ msgstr ""
333
+
334
+ #: .././admin/ga_dash_settings.php:311
335
+ msgid "Target Geo Map to region:"
336
+ msgstr "Cible Géo carte de la région:"
337
+
338
+ #: .././admin/ga_dash_settings.php:316
339
+ msgid "and render top"
340
+ msgstr "et rendre haut"
341
+
342
+ #: .././admin/ga_dash_settings.php:321
343
+ msgid "cities (find out more"
344
+ msgstr "villes (en savoir plus"
345
+
346
+ #: .././admin/ga_dash_settings.php:339
347
+ msgid " show traffic overview"
348
+ msgstr "Affiche la Vue d&#39;ensemble du Traffic"
349
+
350
+ #: .././admin/ga_dash_settings.php:353
351
+ msgid " show top pages"
352
+ msgstr "Affiche le Top pages"
353
+
354
+ #: .././admin/ga_dash_settings.php:367
355
+ msgid " show top referrers"
356
+ msgstr "Affiche le Top références"
357
+
358
+ #: .././admin/ga_dash_settings.php:381
359
+ msgid " show top searches"
360
+ msgstr "Affiche le Top recherches"
361
+
362
+ #: .././admin/ga_dash_settings.php:430
363
+ msgid "Google Analytics Tracking Code"
364
+ msgstr "Google Analytics Tracking Code"
365
+
366
+ #: .././admin/ga_dash_settings.php:440
367
+ msgid "Tracking Settings"
368
+ msgstr "Paramètres de suivi"
369
+
370
+ #: .././admin/ga_dash_settings.php:443
371
+ msgid "Tracking Options:"
372
+ msgstr ""
373
+
374
+ #: .././admin/ga_dash_settings.php:447
375
+ msgid "Disabled"
376
+ msgstr "Désactive"
377
+
378
+ #: .././admin/ga_dash_settings.php:449
379
+ msgid "Enabled"
380
+ msgstr "Active"
381
+
382
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
383
+ msgid "Tracking ID:"
384
+ msgstr "Suivi ID:"
385
+
386
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
387
+ msgid "Default URL:"
388
+ msgstr "URL par défaut:"
389
+
390
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
391
+ msgid "Time Zone:"
392
+ msgstr "Fuseau horaire:"
393
+
394
+ #: .././admin/ga_dash_settings.php:467
395
+ #, fuzzy
396
+ msgid "Basic Tracking"
397
+ msgstr "Suivi des événements"
398
+
399
+ #: .././admin/ga_dash_settings.php:473
400
+ msgid "Tracking Type:"
401
+ msgstr ""
402
+
403
+ #: .././admin/ga_dash_settings.php:477
404
+ msgid "Classic Analytics"
405
+ msgstr "Analytics classiques"
406
+
407
+ #: .././admin/ga_dash_settings.php:479
408
+ msgid "Universal Analytics"
409
+ msgstr "Universel Analytics"
410
+
411
+ #: .././admin/ga_dash_settings.php:493
412
+ msgid " anonymize IPs while tracking"
413
+ msgstr "anonymiser IP tout en suivant"
414
+
415
+ #: .././admin/ga_dash_settings.php:508
416
+ msgid " enable remarketing, demographics and interests reports"
417
+ msgstr ""
418
+ "permettre remarketing, les données démographiques et les rapports d&#39;"
419
+ "intérêts"
420
+
421
+ #: .././admin/ga_dash_settings.php:512
422
+ msgid "Events Tracking"
423
+ msgstr "Suivi des événements"
424
+
425
+ #: .././admin/ga_dash_settings.php:525
426
+ msgid " track downloads, mailto and outbound links"
427
+ msgstr "téléchargement de titres, mailto et liens sortants"
428
+
429
+ #: .././admin/ga_dash_settings.php:529
430
+ #, fuzzy
431
+ msgid "Downloads Regex:"
432
+ msgstr "Filtres téléchargement:"
433
+
434
+ #: .././admin/ga_dash_settings.php:546
435
+ msgid " track affiliate links matching this regex"
436
+ msgstr ""
437
+
438
+ #: .././admin/ga_dash_settings.php:550
439
+ msgid "Affiliates Regex:"
440
+ msgstr ""
441
+
442
+ #: .././admin/ga_dash_settings.php:567
443
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
444
+ msgstr ""
445
+
446
+ #: .././admin/ga_dash_settings.php:571
447
+ msgid "Custom Definitions"
448
+ msgstr ""
449
+
450
+ #: .././admin/ga_dash_settings.php:574
451
+ msgid "Authors:"
452
+ msgstr ""
453
+
454
+ #: .././admin/ga_dash_settings.php:584
455
+ msgid "Publication Year:"
456
+ msgstr ""
457
+
458
+ #: .././admin/ga_dash_settings.php:594
459
+ msgid "Categories:"
460
+ msgstr ""
461
+
462
+ #: .././admin/ga_dash_settings.php:604
463
+ msgid "User Type:"
464
+ msgstr ""
465
+
466
+ #: .././admin/ga_dash_settings.php:614
467
+ #, fuzzy
468
+ msgid "Advanced Tracking"
469
+ msgstr "Suivi des événements"
470
+
471
+ #: .././admin/ga_dash_settings.php:617
472
+ msgid "Page Speed SR:"
473
+ msgstr "Page Speed SR:"
474
+
475
+ #: .././admin/ga_dash_settings.php:635
476
+ #, fuzzy
477
+ msgid " exclude events from bounce-rate calculation"
478
+ msgstr " exclude the event hit from bounce-rate calculation"
479
+
480
+ #: .././admin/ga_dash_settings.php:649
481
+ msgid " enable enhanced link attribution"
482
+ msgstr "permettre une meilleure liaison attribution"
483
+
484
+ #: .././admin/ga_dash_settings.php:663
485
+ msgid " enable AdSense account linking"
486
+ msgstr "Permettre la liaison avec votre compte Adsense"
487
+
488
+ #: .././admin/ga_dash_settings.php:678
489
+ msgid " enable cross domain tracking"
490
+ msgstr ""
491
+
492
+ #: .././admin/ga_dash_settings.php:682
493
+ msgid "Cross Domains:"
494
+ msgstr ""
495
+
496
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
497
+ msgid "Exclude Tracking"
498
+ msgstr "Exclure Tracking"
499
+
500
+ #: .././admin/ga_dash_settings.php:695
501
+ msgid "Exclude tracking for:"
502
+ msgstr ""
503
+
504
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
505
+ msgid ""
506
+ "Loading the required libraries. If this results in a blank screen or a fatal "
507
+ "error, try this solution:"
508
+ msgstr ""
509
+
510
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
511
+ msgid "Plugin authorization succeeded."
512
+ msgstr "Autorisation Plugin réussi."
513
+
514
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
515
+ msgid ""
516
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
517
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
518
+ msgstr ""
519
+
520
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
521
+ msgid "Cleared Cache."
522
+ msgstr "Cache effacé."
523
+
524
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
525
+ msgid "Token Reseted and Revoked."
526
+ msgstr "Jeton remis à zéro et révoqué."
527
+
528
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
529
+ msgid "Dumping log data."
530
+ msgstr "D&#39;exporter les données du journal."
531
+
532
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
533
+ msgid "All other domains/properties were removed."
534
+ msgstr "Tous les autres domaines/propriétés ont été retirés."
535
+
536
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
537
+ msgid ""
538
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
539
+ msgstr ""
540
+
541
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
542
+ msgid "Google Analytics Settings"
543
+ msgstr "Réglages Google analytics"
544
+
545
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
546
+ msgid ""
547
+ "Something went wrong. Please check the Debugging Data section for possible "
548
+ "errors"
549
+ msgstr ""
550
+ "Quelque chose s&#39;est mal passé. S&#39;il vous plaît consulter la section "
551
+ "Mise au point de données pour d&#39;éventuelles erreurs"
552
+
553
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
554
+ msgid "Use the red link (see below) to generate and get your access code!"
555
+ msgstr ""
556
+
557
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
558
+ msgid "Plugin Authorization"
559
+ msgstr "Autorisation Plugin"
560
+
561
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
562
+ msgid "You should watch the"
563
+ msgstr "Vous devriez regarder la"
564
+
565
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
566
+ msgid "video"
567
+ msgstr "video"
568
+
569
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
570
+ msgid "and read this"
571
+ msgstr "et lire ce"
572
+
573
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
574
+ msgid "tutorial"
575
+ msgstr "Tutoriel"
576
+
577
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
578
+ msgid ""
579
+ "before proceeding to authorization. This plugin requires a properly "
580
+ "configured Google Analytics account"
581
+ msgstr ""
582
+ "avant de procéder à l&#39;autorisation. Ce plugin nécessite un compte Google "
583
+ "Analytics correctement configuré"
584
+
585
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
586
+ msgid " use your own API Project credentials"
587
+ msgstr ""
588
+ "utiliser vos propres informations d&#39;identification de projets de l&#39;"
589
+ "API"
590
+
591
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
592
+ msgid "API Key:"
593
+ msgstr "Clé API:"
594
+
595
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
596
+ msgid "Client ID:"
597
+ msgstr "Client ID:"
598
+
599
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
600
+ msgid "Client Secret:"
601
+ msgstr "Client Secret:"
602
+
603
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
604
+ msgid "Clear Authorization"
605
+ msgstr "Effacer autorisation"
606
+
607
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
608
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
609
+ msgid "Clear Cache"
610
+ msgstr "Effacer Cache"
611
+
612
+ #: .././admin/ga_dash_settings.php:957
613
+ msgid "Select Domain:"
614
+ msgstr ""
615
+
616
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
617
+ msgid "Property not found"
618
+ msgstr ""
619
+
620
+ #: .././admin/ga_dash_settings.php:975
621
+ msgid "and/or hide all other domains"
622
+ msgstr "et/ou masquer tous les autres domaines"
623
+
624
+ #: .././admin/ga_dash_settings.php:978
625
+ msgid "Hide Now"
626
+ msgstr "Cacher Maintenant"
627
+
628
+ #: .././admin/ga_dash_settings.php:997
629
+ msgid "Theme Color:"
630
+ msgstr ""
631
+
632
+ #: .././admin/ga_dash_settings.php:1007
633
+ msgid "A new frontend widget is available! To enable it, go to"
634
+ msgstr ""
635
+ "Un nouveau widget frontend est disponible! Pour l&#39;activer, allez dans"
636
+
637
+ #: .././admin/ga_dash_settings.php:1007
638
+ msgid "Appearance -> Widgets"
639
+ msgstr "Apparence -> Widgets"
640
+
641
+ #: .././admin/ga_dash_settings.php:1007
642
+ msgid "and look for Google Analytics Dashboard."
643
+ msgstr "et de chercher Google Analytics Dashboard."
644
+
645
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
646
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
647
+ msgid "Debugging Data"
648
+ msgstr "débogage des données"
649
+
650
+ #: .././admin/ga_dash_settings.php:1180
651
+ msgid "Properties refreshed."
652
+ msgstr "Propriétés rafraîchies."
653
+
654
+ #: .././admin/ga_dash_settings.php:1274
655
+ msgid "Network Setup"
656
+ msgstr "Configuration du réseau"
657
+
658
+ #: .././admin/ga_dash_settings.php:1289
659
+ msgid " use a single Google Analytics account for the entire network"
660
+ msgstr "utiliser un seul compte Google Analytics pour l&#39;ensemble du réseau"
661
+
662
+ #: .././admin/ga_dash_settings.php:1358
663
+ msgid "Refresh Properties"
664
+ msgstr "Propriétés Actualisées"
665
+
666
+ #: .././admin/ga_dash_settings.php:1364
667
+ msgid "Properties/Views Settings"
668
+ msgstr "Propriétés/Paramètres Vues"
669
+
670
+ #: .././admin/ga_dash_settings.php:1409
671
+ msgid " exclude Super Admin tracking for the entire network"
672
+ msgstr ""
673
+
674
+ #: .././admin/ga_dash_settings.php:1537
675
+ msgid "Setup Tutorial & Demo"
676
+ msgstr "Configuration Tutorial et Démo"
677
+
678
+ #: .././admin/ga_dash_settings.php:1549
679
+ msgid "Support & Reviews"
680
+ msgstr "Support & avis"
681
+
682
+ #: .././admin/ga_dash_settings.php:1557
683
+ msgid "Plugin documentation and support on"
684
+ msgstr ""
685
+
686
+ #: .././admin/ga_dash_settings.php:1564
687
+ msgid "Your feedback and review are both important,"
688
+ msgstr "Vos commentaires et avis sont importants,"
689
+
690
+ #: .././admin/ga_dash_settings.php:1564
691
+ msgid "rate this plugin"
692
+ msgstr "évaluer ce plugin"
693
+
694
+ #: .././admin/ga_dash_settings.php:1569
695
+ msgid "Further Reading"
696
+ msgstr "Lectures complémentaires"
697
+
698
+ #: .././admin/ga_dash_settings.php:1576
699
+ msgid "Improve search rankings"
700
+ msgstr ""
701
+
702
+ #: .././admin/ga_dash_settings.php:1576
703
+ msgid "by moving your website to HTTPS/SSL."
704
+ msgstr ""
705
+
706
+ #: .././admin/ga_dash_settings.php:1582
707
+ msgid "Other"
708
+ msgstr "Autres"
709
+
710
+ #: .././admin/ga_dash_settings.php:1582
711
+ msgid "WordPress Plugins"
712
+ msgstr "Plugin Wordpress"
713
+
714
+ #: .././admin/ga_dash_settings.php:1582
715
+ msgid "written by the same author"
716
+ msgstr "écrit par le même auteur"
717
+
718
+ #: .././admin/ga_dash_settings.php:1587
719
+ msgid "Other Services"
720
+ msgstr ""
721
+
722
+ #: .././admin/ga_dash_settings.php:1594
723
+ msgid "Speed up your website and plug into a whole"
724
+ msgstr ""
725
+
726
+ #: .././admin/ga_dash_settings.php:1594
727
+ msgid "new level of site speed"
728
+ msgstr ""
729
+
730
+ #: .././admin/ga_dash_settings.php:1600
731
+ msgid "Web Analytics"
732
+ msgstr "Web Analytics"
733
+
734
+ #: .././admin/ga_dash_settings.php:1600
735
+ msgid "service with users tracking at IP level."
736
+ msgstr ""
737
+
738
+ #: .././front/frontend.php:112
739
+ msgid "Views vs UniqueViews"
740
+ msgstr "Vues VS Unique Vues"
741
+
742
+ #: .././front/frontend.php:168
743
+ msgid "Google Analytics Reports"
744
+ msgstr ""
745
+
746
+ #: .././front/widgets.php:16
747
+ msgid "Will display your google analytics stats in a widget"
748
+ msgstr "Affichera vos statistiques Google Analytics dans un widget"
749
+
750
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
751
+ msgid "trend"
752
+ msgstr ""
753
+
754
+ #: .././front/widgets.php:144
755
+ msgid "Period:"
756
+ msgstr "Période:"
757
+
758
+ #: .././front/widgets.php:144
759
+ msgid "Sessions:"
760
+ msgstr ""
761
+
762
+ #: .././front/widgets.php:150
763
+ msgid "generated by"
764
+ msgstr "générée par"
765
+
766
+ #: .././front/widgets.php:164
767
+ msgid "Google Analytics Stats"
768
+ msgstr "Google Analytics Statistiques"
769
+
770
+ #: .././front/widgets.php:171
771
+ msgid "Title:"
772
+ msgstr "Titre:"
773
+
774
+ #: .././front/widgets.php:178
775
+ msgid "Display:"
776
+ msgstr "Affichage:"
777
+
778
+ #: .././front/widgets.php:182
779
+ msgid "Chart & Totals"
780
+ msgstr "Graphique & Totaux"
781
+
782
+ #: .././front/widgets.php:183
783
+ msgid "Chart"
784
+ msgstr "raphique"
785
+
786
+ #: .././front/widgets.php:184
787
+ msgid "Totals"
788
+ msgstr "Totaux"
789
+
790
+ #: .././front/widgets.php:188
791
+ msgid "Anonimize chart&#39;s stats:"
792
+ msgstr "Les statistiques de Anonimize graphique:"
793
+
794
+ #: .././front/widgets.php:195
795
+ msgid "Stats for:"
796
+ msgstr "Statistiques pour:"
797
+
798
+ #: .././front/widgets.php:205
799
+ msgid "Give credits:"
800
+ msgstr "Accorder des crédits:"
801
+
802
+ #: .././tools/gapi.php:140
803
+ msgid "Use this link to get your access code:"
804
+ msgstr "Utilisez ce lien pour obtenir votre code d&#39;accès:"
805
+
806
+ #: .././tools/gapi.php:140
807
+ msgid "Get Access Code"
808
+ msgstr "Obtenir le code d&#39;accès"
809
+
810
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
811
+ msgid "Use the red link to get your access code!"
812
+ msgstr ""
813
+
814
+ #: .././tools/gapi.php:145
815
+ msgid "Access Code:"
816
+ msgstr "Code d&#39;Accès:"
817
+
818
+ #: .././tools/gapi.php:157
819
+ msgid "Save Access Code"
820
+ msgstr "Sauver le Code d&#39;Accès"
821
+
822
+ #: .././tools/gapi.php:380
823
+ msgid "Organic Searches"
824
+ msgstr "Recherches Organique"
825
+
826
+ #: .././tools/gapi.php:391
827
+ msgid "Hour"
828
+ msgstr "Heure"
829
+
830
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
831
+ msgid "Date"
832
+ msgstr "Date"
833
+
834
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
835
+ msgid "Views"
836
+ msgstr "Vues"
837
+
838
+ #: .././tools/gapi.php:611
839
+ msgid "Countries"
840
+ msgstr ""
841
+
842
+ #: .././tools/gapi.php:629
843
+ msgid "Cities from"
844
+ msgstr ""
845
+
846
+ #: .././tools/gapi.php:691
847
+ msgid "Channels"
848
+ msgstr ""
849
+
850
+ #: .././tools/gapi.php:754
851
+ msgid "Type"
852
+ msgstr "Type"
853
+
854
+ #: .././tools/gapi.php:852
855
+ msgid "UniqueViews"
856
+ msgstr "Unique vues"
857
+
858
+ #: .././tools/gapi.php:899
859
+ msgid "Top Searches"
860
+ msgstr "Top Recherches"
861
+
862
+ #~ msgid "Error Log"
863
+ #~ msgstr "Log erreurs"
864
+
865
+ #~ msgid "Visits"
866
+ #~ msgstr "Visites"
867
+
868
+ #~ msgid "Visitors"
869
+ #~ msgstr "Visiteurs"
870
+
871
+ #~ msgid ""
872
+ #~ "No stats available. Please check the Debugging Data section for possible "
873
+ #~ "errors"
874
+ #~ msgstr ""
875
+ #~ "Aucune statistique n&#39;est disponible. S&#39;il vous plaît consulter la "
876
+ #~ "section Mise au point de données pour d&#39;éventuelles erreurs"
877
+
878
+ #~ msgid "Country/City"
879
+ #~ msgstr "Pays/Ville"
880
+
881
+ #~ msgid "Source"
882
+ #~ msgstr "source"
883
+
884
+ #~ msgid "Traffic Sources"
885
+ #~ msgstr "Sources de traffic"
886
+
887
+ #~ msgid "New vs. Returning"
888
+ #~ msgstr "Nouveaux VS Connus"
889
+
890
+ #~ msgid "Top Pages"
891
+ #~ msgstr "Top Pages"
892
+
893
+ #~ msgid "Top Referrers"
894
+ #~ msgstr "Top Références"
895
+
896
+ #~ msgid "Visits:"
897
+ #~ msgstr "Visites:"
898
+
899
+ #~ msgid "Visitors:"
900
+ #~ msgstr "Visiteurs:"
901
+
902
+ #~ msgid "Page Views:"
903
+ #~ msgstr "Pages Vues:"
904
+
905
+ #~ msgid "Bounce Rate:"
906
+ #~ msgstr "Taux de Rebond:"
907
+
908
+ #~ msgid "Organic Search:"
909
+ #~ msgstr "Recherches Organique:"
910
+
911
+ #~ msgid "Pages per Visit:"
912
+ #~ msgstr "Pages par visite:"
913
+
914
+ #~ msgid ""
915
+ #~ "This is a beta feature and is only available when using my Developer Key! "
916
+ #~ "("
917
+ #~ msgstr ""
918
+ #~ "Il s&#39;agit d&#39;une fonctionnalité bêta et est disponible uniquement "
919
+ #~ "lorsque vous utilisez ma clé de développeur! ("
920
+
921
+ #~ msgid "more about this feature"
922
+ #~ msgstr "plus sur cette fonction"
923
+
924
+ #~ msgid "RETURN"
925
+ #~ msgstr "RETOUR"
926
+
927
+ #~ msgid "Visits from "
928
+ #~ msgstr "Visites de"
929
+
930
+ #~ msgid "Visits by Country"
931
+ #~ msgstr "Visites par Pays"
932
+
933
+ #~ msgid "Traffic Overview"
934
+ #~ msgstr "Aperçu du Traffic"
935
+
936
+ #~ msgid " show page visits and visitors in frontend (after each article)"
937
+ #~ msgstr ""
938
+ #~ "Afficher la page visites et de visiteurs en frontend (après chaque "
939
+ #~ "article)"
940
+
941
+ #~ msgid " show Geo Map chart for visits"
942
+ #~ msgstr "montrer carte Géographique pour les visites"
943
+
944
+ #~ msgid "You can find support on"
945
+ #~ msgstr "Vous pouvez trouver de l&#39;aide sur"
946
+
947
+ #~ msgid "service with visitors tracking at IP level."
948
+ #~ msgstr "services auprès des visiteurs de suivi au niveau IP."
949
+
950
+ #~ msgid "Total Visits:"
951
+ #~ msgstr "Total visits"
952
+
953
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
954
+ #~ msgstr ""
955
+ #~ "PHP CURL est nécessaire. S&#39;il vous plaît installer / activer PHP CURL!"
956
+
957
+ #~ msgid "Options saved."
958
+ #~ msgstr "Options Sauvées"
959
+
960
+ #~ msgid "Show stats to: "
961
+ #~ msgstr "Voir les statistiques de:"
962
+
963
+ #~ msgid "Update Options"
964
+ #~ msgstr "Mise à jour des options"
965
+
966
+ #~ msgid "Tracking Options: "
967
+ #~ msgstr "Suivi Options:"
968
+
969
+ #~ msgid "Tracking Type: "
970
+ #~ msgstr "Type de suivi:"
971
+
972
+ #, fuzzy
973
+ #~ msgid "User Type: "
974
+ #~ msgstr "Type de suivi:"
975
+
976
+ #~ msgid "Exclude tracking for: "
977
+ #~ msgstr "Exclure tracking pour:"
978
+
979
+ #~ msgid "Select Domain: "
980
+ #~ msgstr "Sélectionner un domaine:"
981
+
982
+ #~ msgid "Theme Color: "
983
+ #~ msgstr "Couleur du Thème:"
984
+
985
+ #~ msgid "&#39; trend"
986
+ #~ msgstr "&#39; tendance"
987
+
988
+ #~ msgid "DeConf Help Center"
989
+ #~ msgstr "DeConf Centre d'aide"
990
+
991
+ #~ msgid ""
992
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
993
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
994
+ #~ msgstr ""
995
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
996
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
languages/ga-dash-hu_HU.mo ADDED
Binary file
languages/ga-dash-hu_HU.po ADDED
@@ -0,0 +1,995 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP 4.2.20\n"
4
+ "POT-Creation-Date: 2015-01-07 20:25+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:26+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: hu_HU\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Általános beállítások"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Admin beállítások"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Weblap beállítások"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Követőkód"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Beállítások"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Google Analytics vezérlőpult"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Ennek a bővítménynek engedélyre van szüksége:"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "Bővítmény engedélyezése"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Név:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr "Valami rosszul ment a profil lista lekérése közben."
67
+
68
+ #: .././admin/dashboard_widgets.php:212
69
+ msgid "More details"
70
+ msgstr "További részletek"
71
+
72
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
73
+ msgid "An admin should asign a default Google Analytics Profile."
74
+ msgstr ""
75
+ "Az alapértelmezett Google Analytics profilt egy admin képes kijelölni."
76
+
77
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
78
+ msgid "Select Domain"
79
+ msgstr "Domain kiválasztása"
80
+
81
+ #: .././admin/dashboard_widgets.php:245
82
+ msgid ""
83
+ "Something went wrong while retrieving property data. You need to create and "
84
+ "properly configure a Google Analytics account:"
85
+ msgstr ""
86
+ "Valami rosszul ment a tulajdon adat lekérése közben. Egy jól konfigurált "
87
+ "Google Analytics fiókra van szüksége:"
88
+
89
+ #: .././admin/dashboard_widgets.php:245
90
+ msgid "Find out more!"
91
+ msgstr "Tudjon meg többet!"
92
+
93
+ #: .././admin/dashboard_widgets.php:276
94
+ msgid "Real-Time"
95
+ msgstr "Valós idejű"
96
+
97
+ #: .././admin/dashboard_widgets.php:277
98
+ msgid "Today"
99
+ msgstr "Ma"
100
+
101
+ #: .././admin/dashboard_widgets.php:279
102
+ msgid "Yesterday"
103
+ msgstr "Tegnap"
104
+
105
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
106
+ #: .././front/widgets.php:199
107
+ msgid "Last 7 Days"
108
+ msgstr "Elmúlt 7 nap"
109
+
110
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
111
+ #: .././front/widgets.php:200
112
+ msgid "Last 14 Days"
113
+ msgstr "Elmúlt 14 nap"
114
+
115
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
116
+ #: .././front/widgets.php:201
117
+ msgid "Last 30 Days"
118
+ msgstr "Elmúlt 30 nap"
119
+
120
+ #: .././admin/dashboard_widgets.php:287
121
+ msgid "Last 90 Days"
122
+ msgstr "Elmúlt 90 nap"
123
+
124
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
125
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
126
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
127
+ #: .././tools/gapi.php:899
128
+ msgid "Sessions"
129
+ msgstr ""
130
+
131
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
132
+ #: .././tools/gapi.php:368
133
+ msgid "Users"
134
+ msgstr ""
135
+
136
+ #: .././admin/dashboard_widgets.php:296
137
+ msgid "Organic"
138
+ msgstr "Organikus"
139
+
140
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
141
+ #: .././tools/gapi.php:372
142
+ msgid "Page Views"
143
+ msgstr "Oldalmegtekintések"
144
+
145
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
146
+ #: .././tools/gapi.php:376
147
+ msgid "Bounce Rate"
148
+ msgstr "Visszafordulási arány"
149
+
150
+ #: .././admin/dashboard_widgets.php:302
151
+ msgid "Location"
152
+ msgstr ""
153
+
154
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
155
+ msgid "Pages"
156
+ msgstr ""
157
+
158
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
159
+ msgid "Referrers"
160
+ msgstr ""
161
+
162
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
163
+ msgid "Searches"
164
+ msgstr ""
165
+
166
+ #: .././admin/dashboard_widgets.php:310
167
+ msgid "Traffic Details"
168
+ msgstr ""
169
+
170
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
171
+ msgid "REFERRAL"
172
+ msgstr "HIVATKOZÓ"
173
+
174
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
175
+ msgid "ORGANIC"
176
+ msgstr "ORGANIKUS"
177
+
178
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
179
+ #: .././admin/dashboard_widgets.php:659
180
+ msgid "SOCIAL"
181
+ msgstr "KÖZÖSSÉGI"
182
+
183
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
184
+ #: .././admin/dashboard_widgets.php:660
185
+ msgid "CAMPAIGN"
186
+ msgstr ""
187
+
188
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
189
+ #: .././admin/dashboard_widgets.php:663
190
+ msgid "DIRECT"
191
+ msgstr "KÖZVETLEN"
192
+
193
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
194
+ msgid "NEW"
195
+ msgstr "ÚJ"
196
+
197
+ #: .././admin/dashboard_widgets.php:538
198
+ msgid "REFERRALS"
199
+ msgstr "HIVATKOZÓK"
200
+
201
+ #: .././admin/dashboard_widgets.php:541
202
+ msgid "KEYWORDS"
203
+ msgstr "KULCSSZAVAK"
204
+
205
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
206
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
207
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
208
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
209
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
210
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
211
+ #: .././front/frontend.php:100 .././front/widgets.php:122
212
+ msgid "This report is unavailable"
213
+ msgstr ""
214
+
215
+ #: .././admin/dashboard_widgets.php:818
216
+ msgid "Traffic Mediums"
217
+ msgstr ""
218
+
219
+ #: .././admin/dashboard_widgets.php:834
220
+ msgid "Visitor Type"
221
+ msgstr ""
222
+
223
+ #: .././admin/dashboard_widgets.php:850
224
+ msgid "Social Networks"
225
+ msgstr ""
226
+
227
+ #: .././admin/dashboard_widgets.php:866
228
+ msgid "Search Engines"
229
+ msgstr ""
230
+
231
+ #: .././admin/dashboard_widgets.php:968
232
+ msgid "Organic Search"
233
+ msgstr ""
234
+
235
+ #: .././admin/dashboard_widgets.php:972
236
+ msgid "Pages/Session"
237
+ msgstr ""
238
+
239
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
240
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
241
+ #: .././admin/ga_dash_settings.php:1228
242
+ msgid "Settings saved."
243
+ msgstr ""
244
+
245
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
246
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
247
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
248
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
249
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
250
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
251
+ msgid "Cheating Huh?"
252
+ msgstr ""
253
+
254
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
255
+ #: .././admin/ga_dash_settings.php:424
256
+ msgid "Something went wrong, you need to"
257
+ msgstr "Valami rosszul ment, szükséges a "
258
+
259
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
260
+ #: .././admin/ga_dash_settings.php:424
261
+ msgid "auhorize the plugin"
262
+ msgstr "bővítményt engedélyezni"
263
+
264
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
265
+ #: .././admin/ga_dash_settings.php:424
266
+ msgid "or properly configure your"
267
+ msgstr "vagy helyesen beállítani a"
268
+
269
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
270
+ #: .././admin/ga_dash_settings.php:424
271
+ msgid "Google Analytics account"
272
+ msgstr "Google Analytics fiókját"
273
+
274
+ #: .././admin/ga_dash_settings.php:90
275
+ msgid "Google Analytics Frontend Settings"
276
+ msgstr "Google Analytics weblap beállítások"
277
+
278
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
279
+ msgid "Show stats to:"
280
+ msgstr ""
281
+
282
+ #: .././admin/ga_dash_settings.php:153
283
+ msgid " show page sessions and users in frontend (after each article)"
284
+ msgstr ""
285
+
286
+ #: .././admin/ga_dash_settings.php:169
287
+ msgid " show page searches (after each article)"
288
+ msgstr "oldal keresések mutatása (minden cikk után)"
289
+
290
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
291
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
292
+ #: .././admin/ga_dash_settings.php:1456
293
+ msgid "Save Changes"
294
+ msgstr ""
295
+
296
+ #: .././admin/ga_dash_settings.php:212
297
+ msgid "Google Analytics Dashboard Settings"
298
+ msgstr "Google Analytics vezérlőpult beállítások"
299
+
300
+ #: .././admin/ga_dash_settings.php:275
301
+ msgid "disable Switch Profile/View functionality"
302
+ msgstr "Profil/Nézet Kapcsoló letiltása"
303
+
304
+ #: .././admin/ga_dash_settings.php:279
305
+ msgid "Real-Time Settings"
306
+ msgstr "Valós idejű beállítások"
307
+
308
+ #: .././admin/ga_dash_settings.php:282
309
+ msgid "Maximum number of pages to display on real-time tab:"
310
+ msgstr "Maximális oldalszám megjelenítése a valós idejű fülön:"
311
+
312
+ #: .././admin/ga_dash_settings.php:287
313
+ msgid "(find out more"
314
+ msgstr "(tudjon meg többet"
315
+
316
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
317
+ msgid "about this feature"
318
+ msgstr "erről a szolgáltatásról"
319
+
320
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
321
+ msgid ")"
322
+ msgstr ")"
323
+
324
+ #: .././admin/ga_dash_settings.php:293
325
+ msgid "Additional Stats & Charts"
326
+ msgstr "További statisztikák és grafikonok"
327
+
328
+ #: .././admin/ga_dash_settings.php:306
329
+ msgid " show Geo Map chart for sessions"
330
+ msgstr ""
331
+
332
+ #: .././admin/ga_dash_settings.php:311
333
+ msgid "Target Geo Map to region:"
334
+ msgstr "Cél földrajzi térkép a régióban:"
335
+
336
+ #: .././admin/ga_dash_settings.php:316
337
+ msgid "and render top"
338
+ msgstr "és mutassa a top"
339
+
340
+ #: .././admin/ga_dash_settings.php:321
341
+ msgid "cities (find out more"
342
+ msgstr "várost (tudjon meg többet"
343
+
344
+ #: .././admin/ga_dash_settings.php:339
345
+ msgid " show traffic overview"
346
+ msgstr "forgalom áttekintés bekapcsolása"
347
+
348
+ #: .././admin/ga_dash_settings.php:353
349
+ msgid " show top pages"
350
+ msgstr "legnépszerűbb oldalak bekapcsolása"
351
+
352
+ #: .././admin/ga_dash_settings.php:367
353
+ msgid " show top referrers"
354
+ msgstr "leggyakoribb hivatkozók bekapcsolása"
355
+
356
+ #: .././admin/ga_dash_settings.php:381
357
+ msgid " show top searches"
358
+ msgstr "legfőbb keresések bekapcsolása"
359
+
360
+ #: .././admin/ga_dash_settings.php:430
361
+ msgid "Google Analytics Tracking Code"
362
+ msgstr "Google Analytics követőkód"
363
+
364
+ #: .././admin/ga_dash_settings.php:440
365
+ msgid "Tracking Settings"
366
+ msgstr "Követési beállítások"
367
+
368
+ #: .././admin/ga_dash_settings.php:443
369
+ msgid "Tracking Options:"
370
+ msgstr ""
371
+
372
+ #: .././admin/ga_dash_settings.php:447
373
+ msgid "Disabled"
374
+ msgstr "Letiltva"
375
+
376
+ #: .././admin/ga_dash_settings.php:449
377
+ msgid "Enabled"
378
+ msgstr "Engedélyezve"
379
+
380
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
381
+ msgid "Tracking ID:"
382
+ msgstr "Követési azonosító:"
383
+
384
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
385
+ msgid "Default URL:"
386
+ msgstr "Alapértelmezett webcím:"
387
+
388
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
389
+ msgid "Time Zone:"
390
+ msgstr "Időzóna:"
391
+
392
+ #: .././admin/ga_dash_settings.php:467
393
+ #, fuzzy
394
+ msgid "Basic Tracking"
395
+ msgstr "Események követése"
396
+
397
+ #: .././admin/ga_dash_settings.php:473
398
+ msgid "Tracking Type:"
399
+ msgstr ""
400
+
401
+ #: .././admin/ga_dash_settings.php:477
402
+ msgid "Classic Analytics"
403
+ msgstr "Klasszikus Analytics"
404
+
405
+ #: .././admin/ga_dash_settings.php:479
406
+ msgid "Universal Analytics"
407
+ msgstr "Univerzális Analytics"
408
+
409
+ #: .././admin/ga_dash_settings.php:493
410
+ msgid " anonymize IPs while tracking"
411
+ msgstr "nyomon követés közben IP anonimizálása"
412
+
413
+ #: .././admin/ga_dash_settings.php:508
414
+ msgid " enable remarketing, demographics and interests reports"
415
+ msgstr "lehetővé remarketing, demográfia és érdeklődés jelentések"
416
+
417
+ #: .././admin/ga_dash_settings.php:512
418
+ msgid "Events Tracking"
419
+ msgstr "Események követése"
420
+
421
+ #: .././admin/ga_dash_settings.php:525
422
+ msgid " track downloads, mailto and outbound links"
423
+ msgstr "letöltések, mailto és kimenő linkek követése"
424
+
425
+ #: .././admin/ga_dash_settings.php:529
426
+ #, fuzzy
427
+ msgid "Downloads Regex:"
428
+ msgstr "Letöltés szűrők:"
429
+
430
+ #: .././admin/ga_dash_settings.php:546
431
+ msgid " track affiliate links matching this regex"
432
+ msgstr ""
433
+
434
+ #: .././admin/ga_dash_settings.php:550
435
+ msgid "Affiliates Regex:"
436
+ msgstr ""
437
+
438
+ #: .././admin/ga_dash_settings.php:567
439
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
440
+ msgstr ""
441
+
442
+ #: .././admin/ga_dash_settings.php:571
443
+ msgid "Custom Definitions"
444
+ msgstr ""
445
+
446
+ #: .././admin/ga_dash_settings.php:574
447
+ msgid "Authors:"
448
+ msgstr ""
449
+
450
+ #: .././admin/ga_dash_settings.php:584
451
+ msgid "Publication Year:"
452
+ msgstr ""
453
+
454
+ #: .././admin/ga_dash_settings.php:594
455
+ msgid "Categories:"
456
+ msgstr ""
457
+
458
+ #: .././admin/ga_dash_settings.php:604
459
+ msgid "User Type:"
460
+ msgstr ""
461
+
462
+ #: .././admin/ga_dash_settings.php:614
463
+ #, fuzzy
464
+ msgid "Advanced Tracking"
465
+ msgstr "Események követése"
466
+
467
+ #: .././admin/ga_dash_settings.php:617
468
+ #, fuzzy
469
+ msgid "Page Speed SR:"
470
+ msgstr "Oldal / látogató"
471
+
472
+ #: .././admin/ga_dash_settings.php:635
473
+ msgid " exclude events from bounce-rate calculation"
474
+ msgstr ""
475
+
476
+ #: .././admin/ga_dash_settings.php:649
477
+ msgid " enable enhanced link attribution"
478
+ msgstr "kibővített link tulajdonság engedélyezése"
479
+
480
+ #: .././admin/ga_dash_settings.php:663
481
+ msgid " enable AdSense account linking"
482
+ msgstr ""
483
+
484
+ #: .././admin/ga_dash_settings.php:678
485
+ msgid " enable cross domain tracking"
486
+ msgstr ""
487
+
488
+ #: .././admin/ga_dash_settings.php:682
489
+ msgid "Cross Domains:"
490
+ msgstr ""
491
+
492
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
493
+ msgid "Exclude Tracking"
494
+ msgstr "Követés kizárás"
495
+
496
+ #: .././admin/ga_dash_settings.php:695
497
+ msgid "Exclude tracking for:"
498
+ msgstr ""
499
+
500
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
501
+ msgid ""
502
+ "Loading the required libraries. If this results in a blank screen or a fatal "
503
+ "error, try this solution:"
504
+ msgstr ""
505
+
506
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
507
+ msgid "Plugin authorization succeeded."
508
+ msgstr "Bővítmény engedélyezése sikeres."
509
+
510
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
511
+ msgid ""
512
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
513
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
514
+ msgstr ""
515
+
516
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
517
+ msgid "Cleared Cache."
518
+ msgstr "Cache kiűrítve."
519
+
520
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
521
+ msgid "Token Reseted and Revoked."
522
+ msgstr "Token visszaállítva és visszavonva."
523
+
524
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
525
+ msgid "Dumping log data."
526
+ msgstr "Napló adat ürítése."
527
+
528
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
529
+ msgid "All other domains/properties were removed."
530
+ msgstr "Összes többi domain/tulajdon eltávolításra került."
531
+
532
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
533
+ msgid ""
534
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
535
+ msgstr ""
536
+
537
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
538
+ msgid "Google Analytics Settings"
539
+ msgstr "Google Analytics beállítások"
540
+
541
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
542
+ msgid ""
543
+ "Something went wrong. Please check the Debugging Data section for possible "
544
+ "errors"
545
+ msgstr ""
546
+ "Valami rosszul ment. Kérjük, ellenőrizze a hibakeresés adatok részben az "
547
+ "esetleges hibákat"
548
+
549
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
550
+ msgid "Use the red link (see below) to generate and get your access code!"
551
+ msgstr ""
552
+
553
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
554
+ msgid "Plugin Authorization"
555
+ msgstr "Bővítmény engedélyezés"
556
+
557
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
558
+ msgid "You should watch the"
559
+ msgstr "Kérjük, nézze meg ezt a"
560
+
561
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
562
+ msgid "video"
563
+ msgstr "videót"
564
+
565
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
566
+ msgid "and read this"
567
+ msgstr "és olvassa el ezt az"
568
+
569
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
570
+ msgid "tutorial"
571
+ msgstr "oktatói anyagot"
572
+
573
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
574
+ msgid ""
575
+ "before proceeding to authorization. This plugin requires a properly "
576
+ "configured Google Analytics account"
577
+ msgstr ""
578
+ "mielőtt engedélyezné. Ezt a bővítményt csak helyesen beállított Google "
579
+ "Analytics fiókkal lehet használni"
580
+
581
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
582
+ msgid " use your own API Project credentials"
583
+ msgstr "használja a saját API Project hitelesítő adatait"
584
+
585
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
586
+ msgid "API Key:"
587
+ msgstr "API key:"
588
+
589
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
590
+ msgid "Client ID:"
591
+ msgstr "Client ID:"
592
+
593
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
594
+ msgid "Client Secret:"
595
+ msgstr "Client Secret:"
596
+
597
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
598
+ msgid "Clear Authorization"
599
+ msgstr "Engedélyezés törlése"
600
+
601
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
602
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
603
+ msgid "Clear Cache"
604
+ msgstr "Cache ürítése"
605
+
606
+ #: .././admin/ga_dash_settings.php:957
607
+ msgid "Select Domain:"
608
+ msgstr ""
609
+
610
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
611
+ msgid "Property not found"
612
+ msgstr ""
613
+
614
+ #: .././admin/ga_dash_settings.php:975
615
+ msgid "and/or hide all other domains"
616
+ msgstr "és/vagy az összes többi domain eltüntetése"
617
+
618
+ #: .././admin/ga_dash_settings.php:978
619
+ msgid "Hide Now"
620
+ msgstr "Elrejtés most"
621
+
622
+ #: .././admin/ga_dash_settings.php:997
623
+ msgid "Theme Color:"
624
+ msgstr ""
625
+
626
+ #: .././admin/ga_dash_settings.php:1007
627
+ msgid "A new frontend widget is available! To enable it, go to"
628
+ msgstr "Elérhető egy új frontend widget! Engedélyezéshez, menjen a"
629
+
630
+ #: .././admin/ga_dash_settings.php:1007
631
+ msgid "Appearance -> Widgets"
632
+ msgstr "Megjelenés -> Widgetek"
633
+
634
+ #: .././admin/ga_dash_settings.php:1007
635
+ msgid "and look for Google Analytics Dashboard."
636
+ msgstr "menühöz és keresse a Google Analytics vezérlőpultot."
637
+
638
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
639
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
640
+ msgid "Debugging Data"
641
+ msgstr "Hibakeresés adatok"
642
+
643
+ #: .././admin/ga_dash_settings.php:1180
644
+ msgid "Properties refreshed."
645
+ msgstr ""
646
+
647
+ #: .././admin/ga_dash_settings.php:1274
648
+ msgid "Network Setup"
649
+ msgstr ""
650
+
651
+ #: .././admin/ga_dash_settings.php:1289
652
+ msgid " use a single Google Analytics account for the entire network"
653
+ msgstr ""
654
+
655
+ #: .././admin/ga_dash_settings.php:1358
656
+ msgid "Refresh Properties"
657
+ msgstr ""
658
+
659
+ #: .././admin/ga_dash_settings.php:1364
660
+ #, fuzzy
661
+ msgid "Properties/Views Settings"
662
+ msgstr "Weblap beállítások"
663
+
664
+ #: .././admin/ga_dash_settings.php:1409
665
+ msgid " exclude Super Admin tracking for the entire network"
666
+ msgstr ""
667
+
668
+ #: .././admin/ga_dash_settings.php:1537
669
+ msgid "Setup Tutorial & Demo"
670
+ msgstr "Beállítás oktató anyag és demo"
671
+
672
+ #: .././admin/ga_dash_settings.php:1549
673
+ msgid "Support & Reviews"
674
+ msgstr "Támogatás és vélemények"
675
+
676
+ #: .././admin/ga_dash_settings.php:1557
677
+ msgid "Plugin documentation and support on"
678
+ msgstr ""
679
+
680
+ #: .././admin/ga_dash_settings.php:1564
681
+ msgid "Your feedback and review are both important,"
682
+ msgstr "Az Ön visszajelzése és értékelése egyaránt fontos számunkra,"
683
+
684
+ #: .././admin/ga_dash_settings.php:1564
685
+ msgid "rate this plugin"
686
+ msgstr "értékelje ezt a bővítményt"
687
+
688
+ #: .././admin/ga_dash_settings.php:1569
689
+ msgid "Further Reading"
690
+ msgstr "További olvasmány"
691
+
692
+ #: .././admin/ga_dash_settings.php:1576
693
+ msgid "Improve search rankings"
694
+ msgstr ""
695
+
696
+ #: .././admin/ga_dash_settings.php:1576
697
+ msgid "by moving your website to HTTPS/SSL."
698
+ msgstr ""
699
+
700
+ #: .././admin/ga_dash_settings.php:1582
701
+ msgid "Other"
702
+ msgstr "Egyéb"
703
+
704
+ #: .././admin/ga_dash_settings.php:1582
705
+ msgid "WordPress Plugins"
706
+ msgstr "WordPress bővítmények"
707
+
708
+ #: .././admin/ga_dash_settings.php:1582
709
+ msgid "written by the same author"
710
+ msgstr "ettől a szerzőtől"
711
+
712
+ #: .././admin/ga_dash_settings.php:1587
713
+ msgid "Other Services"
714
+ msgstr ""
715
+
716
+ #: .././admin/ga_dash_settings.php:1594
717
+ msgid "Speed up your website and plug into a whole"
718
+ msgstr ""
719
+
720
+ #: .././admin/ga_dash_settings.php:1594
721
+ msgid "new level of site speed"
722
+ msgstr ""
723
+
724
+ #: .././admin/ga_dash_settings.php:1600
725
+ msgid "Web Analytics"
726
+ msgstr "Web Analitika"
727
+
728
+ #: .././admin/ga_dash_settings.php:1600
729
+ msgid "service with users tracking at IP level."
730
+ msgstr ""
731
+
732
+ #: .././front/frontend.php:112
733
+ msgid "Views vs UniqueViews"
734
+ msgstr "Látogatások vs egyedi látogatások"
735
+
736
+ #: .././front/frontend.php:168
737
+ msgid "Google Analytics Reports"
738
+ msgstr ""
739
+
740
+ #: .././front/widgets.php:16
741
+ msgid "Will display your google analytics stats in a widget"
742
+ msgstr "Megjelenik a Google Analytics statisztika egy widgetben"
743
+
744
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
745
+ msgid "trend"
746
+ msgstr ""
747
+
748
+ #: .././front/widgets.php:144
749
+ msgid "Period:"
750
+ msgstr "Időszak:"
751
+
752
+ #: .././front/widgets.php:144
753
+ msgid "Sessions:"
754
+ msgstr ""
755
+
756
+ #: .././front/widgets.php:150
757
+ msgid "generated by"
758
+ msgstr "által generált"
759
+
760
+ #: .././front/widgets.php:164
761
+ msgid "Google Analytics Stats"
762
+ msgstr "Google Analytics statisztika"
763
+
764
+ #: .././front/widgets.php:171
765
+ msgid "Title:"
766
+ msgstr "Cím:"
767
+
768
+ #: .././front/widgets.php:178
769
+ msgid "Display:"
770
+ msgstr "Megjelenés:"
771
+
772
+ #: .././front/widgets.php:182
773
+ msgid "Chart & Totals"
774
+ msgstr "Diagram és összegzés"
775
+
776
+ #: .././front/widgets.php:183
777
+ msgid "Chart"
778
+ msgstr "Diagram"
779
+
780
+ #: .././front/widgets.php:184
781
+ msgid "Totals"
782
+ msgstr "Összes"
783
+
784
+ #: .././front/widgets.php:188
785
+ msgid "Anonimize chart&#39;s stats:"
786
+ msgstr "Grafikon statisztika anonimizálás:"
787
+
788
+ #: .././front/widgets.php:195
789
+ msgid "Stats for:"
790
+ msgstr "Statisztika:"
791
+
792
+ #: .././front/widgets.php:205
793
+ msgid "Give credits:"
794
+ msgstr "Köszönet:"
795
+
796
+ #: .././tools/gapi.php:140
797
+ msgid "Use this link to get your access code:"
798
+ msgstr "Használja ezt a linket, hogy a hozzáférési kódot megkapja:"
799
+
800
+ #: .././tools/gapi.php:140
801
+ msgid "Get Access Code"
802
+ msgstr "Hozzáférési kód beszerzése"
803
+
804
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
805
+ msgid "Use the red link to get your access code!"
806
+ msgstr ""
807
+
808
+ #: .././tools/gapi.php:145
809
+ msgid "Access Code:"
810
+ msgstr "Hozzáférési kód:"
811
+
812
+ #: .././tools/gapi.php:157
813
+ msgid "Save Access Code"
814
+ msgstr "Hozzáférési kód mentése"
815
+
816
+ #: .././tools/gapi.php:380
817
+ msgid "Organic Searches"
818
+ msgstr "Organikus keresés"
819
+
820
+ #: .././tools/gapi.php:391
821
+ msgid "Hour"
822
+ msgstr "Óra"
823
+
824
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
825
+ msgid "Date"
826
+ msgstr "Dátum"
827
+
828
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
829
+ msgid "Views"
830
+ msgstr "Látogatások"
831
+
832
+ #: .././tools/gapi.php:611
833
+ msgid "Countries"
834
+ msgstr ""
835
+
836
+ #: .././tools/gapi.php:629
837
+ msgid "Cities from"
838
+ msgstr ""
839
+
840
+ #: .././tools/gapi.php:691
841
+ msgid "Channels"
842
+ msgstr ""
843
+
844
+ #: .././tools/gapi.php:754
845
+ msgid "Type"
846
+ msgstr "Típus"
847
+
848
+ #: .././tools/gapi.php:852
849
+ msgid "UniqueViews"
850
+ msgstr "Egyedi látogatások"
851
+
852
+ #: .././tools/gapi.php:899
853
+ msgid "Top Searches"
854
+ msgstr "Legfőbb keresések"
855
+
856
+ #~ msgid "Error Log"
857
+ #~ msgstr "Hiba napló"
858
+
859
+ #~ msgid "Visits"
860
+ #~ msgstr "Látogatások"
861
+
862
+ #~ msgid "Visitors"
863
+ #~ msgstr "Látogatók"
864
+
865
+ #~ msgid ""
866
+ #~ "No stats available. Please check the Debugging Data section for possible "
867
+ #~ "errors"
868
+ #~ msgstr ""
869
+ #~ "Nincs elérhető statisztika. Kérjük, ellenőrizze a hibakeresés adatok "
870
+ #~ "részben az esetleges hibákat"
871
+
872
+ #~ msgid "Country/City"
873
+ #~ msgstr "Ország/város"
874
+
875
+ #~ msgid "Source"
876
+ #~ msgstr "Forrás"
877
+
878
+ #~ msgid "Traffic Sources"
879
+ #~ msgstr "Forgalmi források"
880
+
881
+ #~ msgid "New vs. Returning"
882
+ #~ msgstr "Új vagy visszatérő"
883
+
884
+ #~ msgid "Top Pages"
885
+ #~ msgstr "Legnépszerűbb oldalak"
886
+
887
+ #~ msgid "Top Referrers"
888
+ #~ msgstr "Leggyakoribb hivatkozók"
889
+
890
+ #~ msgid "Visits:"
891
+ #~ msgstr "Látogatások:"
892
+
893
+ #~ msgid "Visitors:"
894
+ #~ msgstr "Látogatók:"
895
+
896
+ #~ msgid "Page Views:"
897
+ #~ msgstr "Oldalmeg- tekintések:"
898
+
899
+ #~ msgid "Bounce Rate:"
900
+ #~ msgstr "Visszafordulási arány:"
901
+
902
+ #~ msgid "Organic Search:"
903
+ #~ msgstr "Organikus keresés:"
904
+
905
+ #~ msgid "Pages per Visit:"
906
+ #~ msgstr "Oldal / látogató"
907
+
908
+ #~ msgid ""
909
+ #~ "This is a beta feature and is only available when using my Developer Key! "
910
+ #~ "("
911
+ #~ msgstr ""
912
+ #~ "Ez béta szolgáltatás, és csak akkor elérhető, amikor az én Fejlesztői "
913
+ #~ "Kulcsomat (Developer Key) használja! ("
914
+
915
+ #~ msgid "more about this feature"
916
+ #~ msgstr "többet erről a szolgáltatásról"
917
+
918
+ #~ msgid "RETURN"
919
+ #~ msgstr "VISSZATÉRŐ"
920
+
921
+ #~ msgid "Visits from "
922
+ #~ msgstr "Látogatások innen "
923
+
924
+ #~ msgid "Visits by Country"
925
+ #~ msgstr "Látogatások országonként"
926
+
927
+ #~ msgid "Traffic Overview"
928
+ #~ msgstr "Forgalom áttekintés"
929
+
930
+ #~ msgid " show page visits and visitors in frontend (after each article)"
931
+ #~ msgstr ""
932
+ #~ "oldal látogatások és látogatók mutatása a weblapon (minden cikk után)"
933
+
934
+ #~ msgid " show Geo Map chart for visits"
935
+ #~ msgstr "földrajzi adatok mutatása a látogatásokhoz"
936
+
937
+ #~ msgid "You can find support on"
938
+ #~ msgstr "A segítséget megtalálhatja itt:"
939
+
940
+ #~ msgid "service with visitors tracking at IP level."
941
+ #~ msgstr "szolgáltatás látogatók nyomon követésével IP szinten"
942
+
943
+ #~ msgid "Total Visits:"
944
+ #~ msgstr "Összes látogatás:"
945
+
946
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
947
+ #~ msgstr "CURL szükséges. Kérjük, telepítse/engedélyezze a CURL-t!"
948
+
949
+ #~ msgid "Options saved."
950
+ #~ msgstr "Beállítások mentve."
951
+
952
+ #~ msgid "Show stats to: "
953
+ #~ msgstr "Statisztikák megjelenítése:"
954
+
955
+ #~ msgid "Update Options"
956
+ #~ msgstr "Beállítások frissítése"
957
+
958
+ #~ msgid "Tracking Options: "
959
+ #~ msgstr "Követés beállítások:"
960
+
961
+ #~ msgid "Tracking Type: "
962
+ #~ msgstr "Követési típus:"
963
+
964
+ #, fuzzy
965
+ #~ msgid "User Type: "
966
+ #~ msgstr "Követési típus:"
967
+
968
+ #~ msgid "Exclude tracking for: "
969
+ #~ msgstr "Követés kizárása a következőkre:"
970
+
971
+ #~ msgid "Select Domain: "
972
+ #~ msgstr "Domain kiválasztása:"
973
+
974
+ #~ msgid "Theme Color: "
975
+ #~ msgstr "Téma színe:"
976
+
977
+ #~ msgid "&#39; trend"
978
+ #~ msgstr "&#39; trend"
979
+
980
+ #~ msgid "DeConf Help Center"
981
+ #~ msgstr "DeConf Help Center"
982
+
983
+ #~ msgid "Custom Code"
984
+ #~ msgstr "Egyéni kód"
985
+
986
+ #~ msgid "Your Tracking Code:"
987
+ #~ msgstr "Követési kód:"
988
+
989
+ #~ msgid ""
990
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
991
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
992
+ #~ msgstr ""
993
+ #~ " (tekintse meg a <a href='http://deconf.com/projects/google-analytics-"
994
+ #~ "dashboard-for-wordpress/' target='_blank'>Lépésről lépésre videó "
995
+ #~ "bemutató</a>t)"
languages/ga-dash-it_IT.mo ADDED
Binary file
languages/ga-dash-it_IT.po ADDED
@@ -0,0 +1,1013 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:26+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:26+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: L.E.O.X. <leoxleox73@gmail.com>\n"
8
+ "Language: it\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Impostazioni generali"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Impostazioni backend"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Impostazioni frontend"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Monitoraggio"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Impostazioni"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Bacheca di Google Analytics"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Questo plugin necessita di un&#39;autorizzazione:"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "Autorizza plugin"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Mostra nome:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr ""
67
+ "Qualcosa &egrave; andato male durante il recupero della lista dei profili."
68
+
69
+ #: .././admin/dashboard_widgets.php:212
70
+ msgid "More details"
71
+ msgstr "Altri dettagli"
72
+
73
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
74
+ msgid "An admin should asign a default Google Analytics Profile."
75
+ msgstr ""
76
+ "Un amministratore deve assegnare un profilo predefinito di Google Analytics."
77
+
78
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
79
+ msgid "Select Domain"
80
+ msgstr "Seleziona dominio"
81
+
82
+ #: .././admin/dashboard_widgets.php:245
83
+ msgid ""
84
+ "Something went wrong while retrieving property data. You need to create and "
85
+ "properly configure a Google Analytics account:"
86
+ msgstr ""
87
+ "Qualcosa &egrave; andato male durante il recupero dei dati. &Egrave; "
88
+ "necessario creare e configurare correttamente un account di Google Analytics:"
89
+
90
+ #: .././admin/dashboard_widgets.php:245
91
+ msgid "Find out more!"
92
+ msgstr "Per saperne di pi&ugrave;!"
93
+
94
+ #: .././admin/dashboard_widgets.php:276
95
+ msgid "Real-Time"
96
+ msgstr "In tempo reale"
97
+
98
+ #: .././admin/dashboard_widgets.php:277
99
+ msgid "Today"
100
+ msgstr "Oggi"
101
+
102
+ #: .././admin/dashboard_widgets.php:279
103
+ msgid "Yesterday"
104
+ msgstr "Ieri"
105
+
106
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
107
+ #: .././front/widgets.php:199
108
+ msgid "Last 7 Days"
109
+ msgstr "Ultimi 7 giorni"
110
+
111
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
112
+ #: .././front/widgets.php:200
113
+ msgid "Last 14 Days"
114
+ msgstr "Ultimi 14 giorni"
115
+
116
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
117
+ #: .././front/widgets.php:201
118
+ msgid "Last 30 Days"
119
+ msgstr "Ultimi 30 giorni"
120
+
121
+ #: .././admin/dashboard_widgets.php:287
122
+ msgid "Last 90 Days"
123
+ msgstr "Ultimi 90 giorni"
124
+
125
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
126
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
127
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
128
+ #: .././tools/gapi.php:899
129
+ msgid "Sessions"
130
+ msgstr "Sessioni"
131
+
132
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
133
+ #: .././tools/gapi.php:368
134
+ msgid "Users"
135
+ msgstr "Utenti"
136
+
137
+ #: .././admin/dashboard_widgets.php:296
138
+ msgid "Organic"
139
+ msgstr "Organico"
140
+
141
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
142
+ #: .././tools/gapi.php:372
143
+ msgid "Page Views"
144
+ msgstr "Pagine viste"
145
+
146
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
147
+ #: .././tools/gapi.php:376
148
+ msgid "Bounce Rate"
149
+ msgstr "Frequenza di rimbalzo"
150
+
151
+ #: .././admin/dashboard_widgets.php:302
152
+ msgid "Location"
153
+ msgstr ""
154
+
155
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
156
+ msgid "Pages"
157
+ msgstr ""
158
+
159
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
160
+ msgid "Referrers"
161
+ msgstr ""
162
+
163
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
164
+ msgid "Searches"
165
+ msgstr ""
166
+
167
+ #: .././admin/dashboard_widgets.php:310
168
+ msgid "Traffic Details"
169
+ msgstr ""
170
+
171
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
172
+ msgid "REFERRAL"
173
+ msgstr "TRAFFICO REFERRAL"
174
+
175
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
176
+ msgid "ORGANIC"
177
+ msgstr "TRAFFICO ORGANICO"
178
+
179
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
180
+ #: .././admin/dashboard_widgets.php:659
181
+ msgid "SOCIAL"
182
+ msgstr "TRAFFICO DAI SOCIAL NETWORK"
183
+
184
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
185
+ #: .././admin/dashboard_widgets.php:660
186
+ msgid "CAMPAIGN"
187
+ msgstr ""
188
+
189
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
190
+ #: .././admin/dashboard_widgets.php:663
191
+ msgid "DIRECT"
192
+ msgstr "TRAFFICO DIRETTO"
193
+
194
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
195
+ msgid "NEW"
196
+ msgstr "VISITATORI NUOVI"
197
+
198
+ #: .././admin/dashboard_widgets.php:538
199
+ msgid "REFERRALS"
200
+ msgstr "REFERRALS"
201
+
202
+ #: .././admin/dashboard_widgets.php:541
203
+ msgid "KEYWORDS"
204
+ msgstr "KEYWORDS"
205
+
206
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
207
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
208
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
209
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
210
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
211
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
212
+ #: .././front/frontend.php:100 .././front/widgets.php:122
213
+ msgid "This report is unavailable"
214
+ msgstr "Questo rapporto non &egrave; disponibile"
215
+
216
+ #: .././admin/dashboard_widgets.php:818
217
+ msgid "Traffic Mediums"
218
+ msgstr ""
219
+
220
+ #: .././admin/dashboard_widgets.php:834
221
+ msgid "Visitor Type"
222
+ msgstr ""
223
+
224
+ #: .././admin/dashboard_widgets.php:850
225
+ msgid "Social Networks"
226
+ msgstr ""
227
+
228
+ #: .././admin/dashboard_widgets.php:866
229
+ msgid "Search Engines"
230
+ msgstr ""
231
+
232
+ #: .././admin/dashboard_widgets.php:968
233
+ msgid "Organic Search"
234
+ msgstr "Ricerca organica"
235
+
236
+ #: .././admin/dashboard_widgets.php:972
237
+ msgid "Pages/Session"
238
+ msgstr "Pagine per sessione"
239
+
240
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
241
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
242
+ #: .././admin/ga_dash_settings.php:1228
243
+ msgid "Settings saved."
244
+ msgstr "Impostazioni salvate."
245
+
246
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
247
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
248
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
249
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
250
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
251
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
252
+ msgid "Cheating Huh?"
253
+ msgstr "Frode?"
254
+
255
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
256
+ #: .././admin/ga_dash_settings.php:424
257
+ msgid "Something went wrong, you need to"
258
+ msgstr "Qualcosa &egrave; andato male, devi"
259
+
260
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
261
+ #: .././admin/ga_dash_settings.php:424
262
+ msgid "auhorize the plugin"
263
+ msgstr "autorizza il plugin"
264
+
265
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
266
+ #: .././admin/ga_dash_settings.php:424
267
+ msgid "or properly configure your"
268
+ msgstr "o configura correttamente il tuo"
269
+
270
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
271
+ #: .././admin/ga_dash_settings.php:424
272
+ msgid "Google Analytics account"
273
+ msgstr "Account di Google Analytics"
274
+
275
+ #: .././admin/ga_dash_settings.php:90
276
+ msgid "Google Analytics Frontend Settings"
277
+ msgstr "Impostazioni Frontend di Google Analytics "
278
+
279
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
280
+ msgid "Show stats to:"
281
+ msgstr "Mostra statistiche a:"
282
+
283
+ #: .././admin/ga_dash_settings.php:153
284
+ msgid " show page sessions and users in frontend (after each article)"
285
+ msgstr ""
286
+ "mostra le sessioni della pagina e gli utenti nel frontend (dopo ogni "
287
+ "articolo)"
288
+
289
+ #: .././admin/ga_dash_settings.php:169
290
+ msgid " show page searches (after each article)"
291
+ msgstr " mostra le ricerche della pagina (dopo ogni articolo)"
292
+
293
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
294
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
295
+ #: .././admin/ga_dash_settings.php:1456
296
+ msgid "Save Changes"
297
+ msgstr "Salva le modifiche"
298
+
299
+ #: .././admin/ga_dash_settings.php:212
300
+ msgid "Google Analytics Dashboard Settings"
301
+ msgstr "Impostazioni Backend di Google Analytics"
302
+
303
+ #: .././admin/ga_dash_settings.php:275
304
+ msgid "disable Switch Profile/View functionality"
305
+ msgstr "abilita o disabilita Cambia profilo/Mostra funzionalit&agrave;"
306
+
307
+ #: .././admin/ga_dash_settings.php:279
308
+ msgid "Real-Time Settings"
309
+ msgstr "Impostazioni In tempo reale"
310
+
311
+ #: .././admin/ga_dash_settings.php:282
312
+ msgid "Maximum number of pages to display on real-time tab:"
313
+ msgstr "Numero massimo di pagine da visualizzare nella scheda in tempo reale:"
314
+
315
+ #: .././admin/ga_dash_settings.php:287
316
+ msgid "(find out more"
317
+ msgstr "(per saperne di pi&ugrave;"
318
+
319
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
320
+ msgid "about this feature"
321
+ msgstr "su questa funzionalit&agrave;"
322
+
323
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
324
+ msgid ")"
325
+ msgstr ")"
326
+
327
+ #: .././admin/ga_dash_settings.php:293
328
+ msgid "Additional Stats & Charts"
329
+ msgstr "Ulteriori statistiche e grafici"
330
+
331
+ #: .././admin/ga_dash_settings.php:306
332
+ msgid " show Geo Map chart for sessions"
333
+ msgstr "mostra il grafico per le sessioni"
334
+
335
+ #: .././admin/ga_dash_settings.php:311
336
+ msgid "Target Geo Map to region:"
337
+ msgstr "Cartina delle visite per il paese:"
338
+
339
+ #: .././admin/ga_dash_settings.php:316
340
+ msgid "and render top"
341
+ msgstr "con"
342
+
343
+ #: .././admin/ga_dash_settings.php:321
344
+ msgid "cities (find out more"
345
+ msgstr "citt&agrave; (per saperne di più"
346
+
347
+ #: .././admin/ga_dash_settings.php:339
348
+ msgid " show traffic overview"
349
+ msgstr " mostra la panoramica sul traffico"
350
+
351
+ #: .././admin/ga_dash_settings.php:353
352
+ msgid " show top pages"
353
+ msgstr " mostra le principali pagine attive"
354
+
355
+ #: .././admin/ga_dash_settings.php:367
356
+ msgid " show top referrers"
357
+ msgstr " mostra i referrers principali"
358
+
359
+ #: .././admin/ga_dash_settings.php:381
360
+ msgid " show top searches"
361
+ msgstr " mostra le ricerche principali"
362
+
363
+ #: .././admin/ga_dash_settings.php:430
364
+ msgid "Google Analytics Tracking Code"
365
+ msgstr "Impostazioni Monitoraggio di Google Analytics "
366
+
367
+ #: .././admin/ga_dash_settings.php:440
368
+ msgid "Tracking Settings"
369
+ msgstr "Stato del monitoraggio"
370
+
371
+ #: .././admin/ga_dash_settings.php:443
372
+ msgid "Tracking Options:"
373
+ msgstr "Monitoraggio:"
374
+
375
+ #: .././admin/ga_dash_settings.php:447
376
+ msgid "Disabled"
377
+ msgstr "Disabilitato"
378
+
379
+ #: .././admin/ga_dash_settings.php:449
380
+ msgid "Enabled"
381
+ msgstr "Abilitato"
382
+
383
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
384
+ msgid "Tracking ID:"
385
+ msgstr "ID monitoraggio:"
386
+
387
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
388
+ msgid "Default URL:"
389
+ msgstr "URL di default:"
390
+
391
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
392
+ msgid "Time Zone:"
393
+ msgstr "Fuso orario:"
394
+
395
+ #: .././admin/ga_dash_settings.php:467
396
+ msgid "Basic Tracking"
397
+ msgstr "Impostazioni di base"
398
+
399
+ #: .././admin/ga_dash_settings.php:473
400
+ msgid "Tracking Type:"
401
+ msgstr "Tipo:"
402
+
403
+ #: .././admin/ga_dash_settings.php:477
404
+ msgid "Classic Analytics"
405
+ msgstr "Classic Analytics"
406
+
407
+ #: .././admin/ga_dash_settings.php:479
408
+ msgid "Universal Analytics"
409
+ msgstr "Universal Analytics"
410
+
411
+ #: .././admin/ga_dash_settings.php:493
412
+ msgid " anonymize IPs while tracking"
413
+ msgstr "rendi anonimi gli indirizzi IP durante il monitoraggio"
414
+
415
+ #: .././admin/ga_dash_settings.php:508
416
+ msgid " enable remarketing, demographics and interests reports"
417
+ msgstr " abilita remarketing e rapporti demografici e sugli interessi"
418
+
419
+ #: .././admin/ga_dash_settings.php:512
420
+ msgid "Events Tracking"
421
+ msgstr "Impostazioni eventi"
422
+
423
+ #: .././admin/ga_dash_settings.php:525
424
+ msgid " track downloads, mailto and outbound links"
425
+ msgstr "monitora downloads, mailto e link in uscita"
426
+
427
+ #: .././admin/ga_dash_settings.php:529
428
+ msgid "Downloads Regex:"
429
+ msgstr "Abbreviazioni downloads:"
430
+
431
+ #: .././admin/ga_dash_settings.php:546
432
+ msgid " track affiliate links matching this regex"
433
+ msgstr " monitora collegamenti associati corrispondenti a queste abbreviazioni"
434
+
435
+ #: .././admin/ga_dash_settings.php:550
436
+ msgid "Affiliates Regex:"
437
+ msgstr "Abbreviazioni associate:"
438
+
439
+ #: .././admin/ga_dash_settings.php:567
440
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
441
+ msgstr ""
442
+ " monitora gli identificatori di frammentoe gli hashmarks (#) nei "
443
+ "collegamenti URI"
444
+
445
+ #: .././admin/ga_dash_settings.php:571
446
+ msgid "Custom Definitions"
447
+ msgstr "Impostazioni definizioni personalizzate"
448
+
449
+ #: .././admin/ga_dash_settings.php:574
450
+ msgid "Authors:"
451
+ msgstr "Autori:"
452
+
453
+ #: .././admin/ga_dash_settings.php:584
454
+ msgid "Publication Year:"
455
+ msgstr "Anno di pubblicazione:"
456
+
457
+ #: .././admin/ga_dash_settings.php:594
458
+ msgid "Categories:"
459
+ msgstr "Categorie:"
460
+
461
+ #: .././admin/ga_dash_settings.php:604
462
+ msgid "User Type:"
463
+ msgstr "Tipo di utente:"
464
+
465
+ #: .././admin/ga_dash_settings.php:614
466
+ msgid "Advanced Tracking"
467
+ msgstr "Impostazioni avanzate"
468
+
469
+ #: .././admin/ga_dash_settings.php:617
470
+ msgid "Page Speed SR:"
471
+ msgstr "Page Speed Sample Rate:"
472
+
473
+ #: .././admin/ga_dash_settings.php:635
474
+ msgid " exclude events from bounce-rate calculation"
475
+ msgstr " escludi gli eventi dal calcolo del bounce-rate"
476
+
477
+ #: .././admin/ga_dash_settings.php:649
478
+ msgid " enable enhanced link attribution"
479
+ msgstr "utilizza l&#39;attribuzione avanzata dei link"
480
+
481
+ #: .././admin/ga_dash_settings.php:663
482
+ msgid " enable AdSense account linking"
483
+ msgstr " abilita AdSense account linking"
484
+
485
+ #: .././admin/ga_dash_settings.php:678
486
+ msgid " enable cross domain tracking"
487
+ msgstr " abilita cross domanin tracking"
488
+
489
+ #: .././admin/ga_dash_settings.php:682
490
+ msgid "Cross Domains:"
491
+ msgstr " Cross Domains:"
492
+
493
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
494
+ msgid "Exclude Tracking"
495
+ msgstr "Escludi monitoraggio"
496
+
497
+ #: .././admin/ga_dash_settings.php:695
498
+ msgid "Exclude tracking for:"
499
+ msgstr "Escludi per:"
500
+
501
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
502
+ msgid ""
503
+ "Loading the required libraries. If this results in a blank screen or a fatal "
504
+ "error, try this solution:"
505
+ msgstr ""
506
+ "Caricamento delle librerie richieste. Se viene restituita una schermata "
507
+ "vuota o si verifica un errore fatale, provare questa soluzione:"
508
+
509
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
510
+ msgid "Plugin authorization succeeded."
511
+ msgstr "Autorizzazione plugin riuscita."
512
+
513
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
514
+ msgid ""
515
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
516
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
517
+ msgstr ""
518
+ "Il codice di accesso <strong>NON</strong> &egrave; il <strong>Tracking ID</"
519
+ "strong> (UA-XXXXX-X). Prova di nuovo utilizzando il link rosso per ottenere "
520
+ "il codice di accesso"
521
+
522
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
523
+ msgid "Cleared Cache."
524
+ msgstr "Cache eliminata."
525
+
526
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
527
+ msgid "Token Reseted and Revoked."
528
+ msgstr "Token azzerato e revocato."
529
+
530
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
531
+ msgid "Dumping log data."
532
+ msgstr "Dumping dati di log."
533
+
534
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
535
+ msgid "All other domains/properties were removed."
536
+ msgstr "Tutti gli altri domini/propriet&agrave; sono stati rimossi."
537
+
538
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
539
+ msgid ""
540
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
541
+ msgstr ""
542
+ "PHP CURL &egrave; necessario. Chiedete al vostro fornitore di hosting per "
543
+ "installare/attivare PHP CURL!"
544
+
545
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
546
+ msgid "Google Analytics Settings"
547
+ msgstr "Impostazioni di Google Analytics"
548
+
549
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
550
+ msgid ""
551
+ "Something went wrong. Please check the Debugging Data section for possible "
552
+ "errors"
553
+ msgstr ""
554
+ "Qualcosa &egrave; andato male. Controlla la sezione dati di debug per "
555
+ "possibili errori"
556
+
557
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
558
+ msgid "Use the red link (see below) to generate and get your access code!"
559
+ msgstr ""
560
+ "Utilizza il link rosso (vedi sotto) per generare ed ottenere il tuo codice "
561
+ "di accesso!"
562
+
563
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
564
+ msgid "Plugin Authorization"
565
+ msgstr "Autorizzazione plugin"
566
+
567
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
568
+ msgid "You should watch the"
569
+ msgstr "Dovresti guardare il"
570
+
571
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
572
+ msgid "video"
573
+ msgstr "video"
574
+
575
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
576
+ msgid "and read this"
577
+ msgstr "e leggere questa"
578
+
579
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
580
+ msgid "tutorial"
581
+ msgstr "guida"
582
+
583
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
584
+ msgid ""
585
+ "before proceeding to authorization. This plugin requires a properly "
586
+ "configured Google Analytics account"
587
+ msgstr ""
588
+ "prima di procedere con l&#39;autorizzazione. Questo plugin richiede un "
589
+ "account di Google Analytics correttamente configurato"
590
+
591
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
592
+ msgid " use your own API Project credentials"
593
+ msgstr "utilizza le proprie credenziali API"
594
+
595
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
596
+ msgid "API Key:"
597
+ msgstr "Chiave API:"
598
+
599
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
600
+ msgid "Client ID:"
601
+ msgstr "ID Cliente:"
602
+
603
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
604
+ msgid "Client Secret:"
605
+ msgstr "Client Secret:"
606
+
607
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
608
+ msgid "Clear Authorization"
609
+ msgstr "Revoca autorizzazione"
610
+
611
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
612
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
613
+ msgid "Clear Cache"
614
+ msgstr "Elimina cache"
615
+
616
+ #: .././admin/ga_dash_settings.php:957
617
+ msgid "Select Domain:"
618
+ msgstr "Seleziona dominio:"
619
+
620
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
621
+ msgid "Property not found"
622
+ msgstr "Propriet&agrave; non trovata"
623
+
624
+ #: .././admin/ga_dash_settings.php:975
625
+ msgid "and/or hide all other domains"
626
+ msgstr "e/o nasconde tutti gli altri domini"
627
+
628
+ #: .././admin/ga_dash_settings.php:978
629
+ msgid "Hide Now"
630
+ msgstr "Nascondi ora"
631
+
632
+ #: .././admin/ga_dash_settings.php:997
633
+ msgid "Theme Color:"
634
+ msgstr "Colore tema:"
635
+
636
+ #: .././admin/ga_dash_settings.php:1007
637
+ msgid "A new frontend widget is available! To enable it, go to"
638
+ msgstr ""
639
+ "&Egrave; disponibile un nuovo widget per il frontend. Per attivarlo, vai a"
640
+
641
+ #: .././admin/ga_dash_settings.php:1007
642
+ msgid "Appearance -> Widgets"
643
+ msgstr "Aspetto -> Widgets"
644
+
645
+ #: .././admin/ga_dash_settings.php:1007
646
+ msgid "and look for Google Analytics Dashboard."
647
+ msgstr "e cerca Bacheca di Google Analytics."
648
+
649
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
650
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
651
+ msgid "Debugging Data"
652
+ msgstr "Debug dei dati"
653
+
654
+ #: .././admin/ga_dash_settings.php:1180
655
+ msgid "Properties refreshed."
656
+ msgstr "Propriet&agrave; aggiornate."
657
+
658
+ #: .././admin/ga_dash_settings.php:1274
659
+ msgid "Network Setup"
660
+ msgstr "Configurazione della rete"
661
+
662
+ #: .././admin/ga_dash_settings.php:1289
663
+ msgid " use a single Google Analytics account for the entire network"
664
+ msgstr " utilizza un unico account Google Analytics per l&#39;intera rete"
665
+
666
+ #: .././admin/ga_dash_settings.php:1358
667
+ msgid "Refresh Properties"
668
+ msgstr "Aggiorna propriet&agrave;"
669
+
670
+ #: .././admin/ga_dash_settings.php:1364
671
+ msgid "Properties/Views Settings"
672
+ msgstr "Propriet&agrave;/Mostra impostazioni"
673
+
674
+ #: .././admin/ga_dash_settings.php:1409
675
+ msgid " exclude Super Admin tracking for the entire network"
676
+ msgstr " esclude il monitoraggio del Super Amministratore per tutta la rete"
677
+
678
+ #: .././admin/ga_dash_settings.php:1537
679
+ msgid "Setup Tutorial & Demo"
680
+ msgstr "Guida all'installazione & Demo"
681
+
682
+ #: .././admin/ga_dash_settings.php:1549
683
+ msgid "Support & Reviews"
684
+ msgstr "Supporto & Recensioni"
685
+
686
+ #: .././admin/ga_dash_settings.php:1557
687
+ msgid "Plugin documentation and support on"
688
+ msgstr "Documentazione del plugin e supporto su"
689
+
690
+ #: .././admin/ga_dash_settings.php:1564
691
+ msgid "Your feedback and review are both important,"
692
+ msgstr "Il tuo feedback e la tua recensione sono entrambi importanti,"
693
+
694
+ #: .././admin/ga_dash_settings.php:1564
695
+ msgid "rate this plugin"
696
+ msgstr "vota questo plugin"
697
+
698
+ #: .././admin/ga_dash_settings.php:1569
699
+ msgid "Further Reading"
700
+ msgstr "Approfondimenti"
701
+
702
+ #: .././admin/ga_dash_settings.php:1576
703
+ msgid "Improve search rankings"
704
+ msgstr "Migliorare le classifiche di ricerca"
705
+
706
+ #: .././admin/ga_dash_settings.php:1576
707
+ msgid "by moving your website to HTTPS/SSL."
708
+ msgstr "spostando il sito web a HTTPS/SSL."
709
+
710
+ #: .././admin/ga_dash_settings.php:1582
711
+ msgid "Other"
712
+ msgstr "Altri"
713
+
714
+ #: .././admin/ga_dash_settings.php:1582
715
+ msgid "WordPress Plugins"
716
+ msgstr "plugins per WordPress "
717
+
718
+ #: .././admin/ga_dash_settings.php:1582
719
+ msgid "written by the same author"
720
+ msgstr "scritti dallo stesso autore"
721
+
722
+ #: .././admin/ga_dash_settings.php:1587
723
+ msgid "Other Services"
724
+ msgstr "Altri servizi"
725
+
726
+ #: .././admin/ga_dash_settings.php:1594
727
+ msgid "Speed up your website and plug into a whole"
728
+ msgstr "Accellera il tuo sito web ad un"
729
+
730
+ #: .././admin/ga_dash_settings.php:1594
731
+ msgid "new level of site speed"
732
+ msgstr "nuovo livello di velocit&agrave;"
733
+
734
+ #: .././admin/ga_dash_settings.php:1600
735
+ msgid "Web Analytics"
736
+ msgstr "Web Analytics"
737
+
738
+ #: .././admin/ga_dash_settings.php:1600
739
+ msgid "service with users tracking at IP level."
740
+ msgstr "servizio con tracciamento degli utenti a livello IP."
741
+
742
+ #: .././front/frontend.php:112
743
+ msgid "Views vs UniqueViews"
744
+ msgstr "Visualizzazioni vs Visualizzazioni uniche"
745
+
746
+ #: .././front/frontend.php:168
747
+ msgid "Google Analytics Reports"
748
+ msgstr "Rapporti di Google Analytics"
749
+
750
+ #: .././front/widgets.php:16
751
+ msgid "Will display your google analytics stats in a widget"
752
+ msgstr "Visualizza le statistiche di Google Analytics in un widget"
753
+
754
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
755
+ msgid "trend"
756
+ msgstr "tendenza"
757
+
758
+ #: .././front/widgets.php:144
759
+ msgid "Period:"
760
+ msgstr "Periodo:"
761
+
762
+ #: .././front/widgets.php:144
763
+ msgid "Sessions:"
764
+ msgstr "Sessioni:"
765
+
766
+ #: .././front/widgets.php:150
767
+ msgid "generated by"
768
+ msgstr "generato da"
769
+
770
+ #: .././front/widgets.php:164
771
+ msgid "Google Analytics Stats"
772
+ msgstr "Statistiche di Google Analytics"
773
+
774
+ #: .././front/widgets.php:171
775
+ msgid "Title:"
776
+ msgstr "Titolo:"
777
+
778
+ #: .././front/widgets.php:178
779
+ msgid "Display:"
780
+ msgstr "Mostra:"
781
+
782
+ #: .././front/widgets.php:182
783
+ msgid "Chart & Totals"
784
+ msgstr "Grafico & Totali"
785
+
786
+ #: .././front/widgets.php:183
787
+ msgid "Chart"
788
+ msgstr "Grafico"
789
+
790
+ #: .././front/widgets.php:184
791
+ msgid "Totals"
792
+ msgstr "Totali"
793
+
794
+ #: .././front/widgets.php:188
795
+ msgid "Anonimize chart&#39;s stats:"
796
+ msgstr "Rendi anonimo il grafico delle statistiche:"
797
+
798
+ #: .././front/widgets.php:195
799
+ msgid "Stats for:"
800
+ msgstr "Statistiche per:"
801
+
802
+ #: .././front/widgets.php:205
803
+ msgid "Give credits:"
804
+ msgstr "Crediti:"
805
+
806
+ #: .././tools/gapi.php:140
807
+ msgid "Use this link to get your access code:"
808
+ msgstr "Utilizza questo link per ottenere il codice di accesso:"
809
+
810
+ #: .././tools/gapi.php:140
811
+ msgid "Get Access Code"
812
+ msgstr "Ottieni codice di accesso"
813
+
814
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
815
+ msgid "Use the red link to get your access code!"
816
+ msgstr "Utilizza il link rosso per ottenere il tuo codice di accesso!"
817
+
818
+ #: .././tools/gapi.php:145
819
+ msgid "Access Code:"
820
+ msgstr "Codice di accesso:"
821
+
822
+ #: .././tools/gapi.php:157
823
+ msgid "Save Access Code"
824
+ msgstr "Salva codice di accesso"
825
+
826
+ #: .././tools/gapi.php:380
827
+ msgid "Organic Searches"
828
+ msgstr "Ricerche organiche"
829
+
830
+ #: .././tools/gapi.php:391
831
+ msgid "Hour"
832
+ msgstr "Ora"
833
+
834
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
835
+ msgid "Date"
836
+ msgstr "Data"
837
+
838
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
839
+ msgid "Views"
840
+ msgstr "Visualizzazioni"
841
+
842
+ #: .././tools/gapi.php:611
843
+ msgid "Countries"
844
+ msgstr ""
845
+
846
+ #: .././tools/gapi.php:629
847
+ msgid "Cities from"
848
+ msgstr ""
849
+
850
+ #: .././tools/gapi.php:691
851
+ msgid "Channels"
852
+ msgstr ""
853
+
854
+ #: .././tools/gapi.php:754
855
+ msgid "Type"
856
+ msgstr "Tipo"
857
+
858
+ #: .././tools/gapi.php:852
859
+ msgid "UniqueViews"
860
+ msgstr "Visualizzazioni uniche"
861
+
862
+ #: .././tools/gapi.php:899
863
+ msgid "Top Searches"
864
+ msgstr "Ricerche principali"
865
+
866
+ #~ msgid "Error Log"
867
+ #~ msgstr "Log errori"
868
+
869
+ #~ msgid ""
870
+ #~ "No stats available. Please check the Debugging Data section for possible "
871
+ #~ "errors"
872
+ #~ msgstr ""
873
+ #~ "Nessuna statistica disponibile. Controlla la sezione dati di debug per "
874
+ #~ "possibili errori"
875
+
876
+ #~ msgid "Country/City"
877
+ #~ msgstr "Paese/Citt&agrave;"
878
+
879
+ #~ msgid "Source"
880
+ #~ msgstr "Sorgente"
881
+
882
+ #~ msgid "Traffic Sources"
883
+ #~ msgstr "Sorgenti di traffico"
884
+
885
+ #~ msgid "New vs. Returning"
886
+ #~ msgstr "Visitatori nuovi contro Visitatori di ritorno"
887
+
888
+ #~ msgid "Top Pages"
889
+ #~ msgstr "Principali pagine attive"
890
+
891
+ #~ msgid "Top Referrers"
892
+ #~ msgstr "Referral principali"
893
+
894
+ #~ msgid ""
895
+ #~ "This is a beta feature and is only available when using my Developer Key! "
896
+ #~ "("
897
+ #~ msgstr ""
898
+ #~ "Questa &egrave; una caratteristica beta ed &egrave; disponibile solo "
899
+ #~ "quando si utilizza il Developer Key! ("
900
+
901
+ #~ msgid "more about this feature"
902
+ #~ msgstr "pi&ugrave; informazioni su questa funzione"
903
+
904
+ #~ msgid "RETURN"
905
+ #~ msgstr "VISITATORI DI RITORNO"
906
+
907
+ #~ msgid "Sessions from "
908
+ #~ msgstr "Sessioni da: "
909
+
910
+ #~ msgid "Sessions by Country"
911
+ #~ msgstr "Sessioni per paese"
912
+
913
+ #~ msgid "Traffic Overview"
914
+ #~ msgstr "Panoramica traffico"
915
+
916
+ #~ msgid "Visits"
917
+ #~ msgstr "Visite"
918
+
919
+ #~ msgid "Visitors"
920
+ #~ msgstr "Visitatori"
921
+
922
+ #~ msgid "Visits:"
923
+ #~ msgstr "Visite:"
924
+
925
+ #~ msgid "Visitors:"
926
+ #~ msgstr "Visitatori:"
927
+
928
+ #~ msgid "Page Views:"
929
+ #~ msgstr "Pagine viste:"
930
+
931
+ #~ msgid "Bounce Rate:"
932
+ #~ msgstr "Frequenza di rimbalzo:"
933
+
934
+ #~ msgid "Organic Search:"
935
+ #~ msgstr "Ricerca organica:"
936
+
937
+ #~ msgid "Pages per Visit:"
938
+ #~ msgstr "Pagine per visita:"
939
+
940
+ #~ msgid "Visits from "
941
+ #~ msgstr "Visite da "
942
+
943
+ #~ msgid "Visits by Country"
944
+ #~ msgstr "Visite per paese"
945
+
946
+ #~ msgid " show page visits and visitors in frontend (after each article)"
947
+ #~ msgstr ""
948
+ #~ " mostra le pagine visitate e visitatori nel frontend (dopo ogni articolo)"
949
+
950
+ #~ msgid " show Geo Map chart for visits"
951
+ #~ msgstr " mostra la cartina geografica delle visite"
952
+
953
+ #~ msgid "You can find support on"
954
+ #~ msgstr "Puoi trovare supporto su"
955
+
956
+ #~ msgid "DeConf.com"
957
+ #~ msgstr "DeConf.com"
958
+
959
+ #~ msgid "service with visitors tracking at IP level."
960
+ #~ msgstr "servizio con monitoraggio dei visitatori a livello IP."
961
+
962
+ #~ msgid "Total Visits:"
963
+ #~ msgstr "Totale visite:"
964
+
965
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
966
+ #~ msgstr "CURL è necessaria. Si prega di installare/abilitare CURL!"
967
+
968
+ #~ msgid "Options saved."
969
+ #~ msgstr "Opzioni salvate."
970
+
971
+ #~ msgid "Show stats to: "
972
+ #~ msgstr "Mostra statistiche:"
973
+
974
+ #~ msgid "Update Options"
975
+ #~ msgstr "Aggiorna opzioni"
976
+
977
+ #~ msgid "Tracking Options: "
978
+ #~ msgstr "Opzioni monitoraggio: "
979
+
980
+ #~ msgid "Tracking Type: "
981
+ #~ msgstr "Tipo di monitoraggio:"
982
+
983
+ #, fuzzy
984
+ #~ msgid "User Type: "
985
+ #~ msgstr "Tipo di monitoraggio:"
986
+
987
+ #~ msgid "Exclude tracking for: "
988
+ #~ msgstr "Escludi monitoraggio per:"
989
+
990
+ #~ msgid "Select Domain: "
991
+ #~ msgstr "Seleziona dominio:"
992
+
993
+ #~ msgid "Theme Color: "
994
+ #~ msgstr "Colote tema:"
995
+
996
+ #~ msgid "&#39; trend"
997
+ #~ msgstr "&#39; tendenza"
998
+
999
+ #~ msgid "DeConf Help Center"
1000
+ #~ msgstr "DeConf Help Center"
1001
+
1002
+ #~ msgid "Custom Code"
1003
+ #~ msgstr "Codice personalizzato"
1004
+
1005
+ #~ msgid "Your Tracking Code:"
1006
+ #~ msgstr "Il tuo codice di monitoraggio:"
1007
+
1008
+ #~ msgid ""
1009
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
1010
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
1011
+ #~ msgstr ""
1012
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
1013
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
languages/ga-dash-pl_PL.mo ADDED
Binary file
languages/ga-dash-pl_PL.po ADDED
@@ -0,0 +1,983 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:26+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:26+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Ustawienia główne"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Ustawienia backendu"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Ustawienia Frontendu"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Kod śledzenia"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Ustawienia"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Pulpit Google Analytics"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Ta wtyczka wymaga autoryzacji:"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "Autoryzuj wtyczkę"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Nazwa widoku:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr "Coś poszło nie tak podczas pobierania listy profili."
67
+
68
+ #: .././admin/dashboard_widgets.php:212
69
+ msgid "More details"
70
+ msgstr "Więcej szczegółów"
71
+
72
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
73
+ msgid "An admin should asign a default Google Analytics Profile."
74
+ msgstr "Administrator poiwnien ustawić domyślny profil Google Analytics."
75
+
76
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
77
+ msgid "Select Domain"
78
+ msgstr "Wybierz domenę"
79
+
80
+ #: .././admin/dashboard_widgets.php:245
81
+ msgid ""
82
+ "Something went wrong while retrieving property data. You need to create and "
83
+ "properly configure a Google Analytics account:"
84
+ msgstr ""
85
+ "Coś poszło nie tak podczas pobierania danych. Musisz stworzyc i odpowiednio "
86
+ "skonfigurować konto Google Analytics:"
87
+
88
+ #: .././admin/dashboard_widgets.php:245
89
+ msgid "Find out more!"
90
+ msgstr "Dowiedz sie więcej!"
91
+
92
+ #: .././admin/dashboard_widgets.php:276
93
+ msgid "Real-Time"
94
+ msgstr "Czas rzeczywisty"
95
+
96
+ #: .././admin/dashboard_widgets.php:277
97
+ msgid "Today"
98
+ msgstr "Dzisiaj"
99
+
100
+ #: .././admin/dashboard_widgets.php:279
101
+ msgid "Yesterday"
102
+ msgstr "Wczoraj"
103
+
104
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
105
+ #: .././front/widgets.php:199
106
+ msgid "Last 7 Days"
107
+ msgstr "Ostatnie 7 dni"
108
+
109
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
110
+ #: .././front/widgets.php:200
111
+ msgid "Last 14 Days"
112
+ msgstr "Ostatnie 14 dni"
113
+
114
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
115
+ #: .././front/widgets.php:201
116
+ msgid "Last 30 Days"
117
+ msgstr "Ostatnie 30 dni"
118
+
119
+ #: .././admin/dashboard_widgets.php:287
120
+ msgid "Last 90 Days"
121
+ msgstr "Ostatnie 90 dni"
122
+
123
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
124
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
125
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
126
+ #: .././tools/gapi.php:899
127
+ msgid "Sessions"
128
+ msgstr ""
129
+
130
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
131
+ #: .././tools/gapi.php:368
132
+ msgid "Users"
133
+ msgstr ""
134
+
135
+ #: .././admin/dashboard_widgets.php:296
136
+ msgid "Organic"
137
+ msgstr "Organiczne"
138
+
139
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
140
+ #: .././tools/gapi.php:372
141
+ msgid "Page Views"
142
+ msgstr "Wyświetleń strony"
143
+
144
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
145
+ #: .././tools/gapi.php:376
146
+ msgid "Bounce Rate"
147
+ msgstr "Współczynnik odrzuceń"
148
+
149
+ #: .././admin/dashboard_widgets.php:302
150
+ msgid "Location"
151
+ msgstr ""
152
+
153
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
154
+ msgid "Pages"
155
+ msgstr ""
156
+
157
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
158
+ msgid "Referrers"
159
+ msgstr ""
160
+
161
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
162
+ msgid "Searches"
163
+ msgstr ""
164
+
165
+ #: .././admin/dashboard_widgets.php:310
166
+ msgid "Traffic Details"
167
+ msgstr ""
168
+
169
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
170
+ msgid "REFERRAL"
171
+ msgstr "REFERUJĄCY"
172
+
173
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
174
+ msgid "ORGANIC"
175
+ msgstr "ORGANICZNE"
176
+
177
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
178
+ #: .././admin/dashboard_widgets.php:659
179
+ msgid "SOCIAL"
180
+ msgstr "SPOŁECZNE"
181
+
182
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
183
+ #: .././admin/dashboard_widgets.php:660
184
+ msgid "CAMPAIGN"
185
+ msgstr ""
186
+
187
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
188
+ #: .././admin/dashboard_widgets.php:663
189
+ msgid "DIRECT"
190
+ msgstr "BEZPOŚREDNIE"
191
+
192
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
193
+ msgid "NEW"
194
+ msgstr "NOWE"
195
+
196
+ #: .././admin/dashboard_widgets.php:538
197
+ msgid "REFERRALS"
198
+ msgstr "REFERUJĄCY"
199
+
200
+ #: .././admin/dashboard_widgets.php:541
201
+ msgid "KEYWORDS"
202
+ msgstr "SŁOWA KLUCZOWE"
203
+
204
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
205
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
206
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
207
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
208
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
209
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
210
+ #: .././front/frontend.php:100 .././front/widgets.php:122
211
+ msgid "This report is unavailable"
212
+ msgstr ""
213
+
214
+ #: .././admin/dashboard_widgets.php:818
215
+ msgid "Traffic Mediums"
216
+ msgstr ""
217
+
218
+ #: .././admin/dashboard_widgets.php:834
219
+ msgid "Visitor Type"
220
+ msgstr ""
221
+
222
+ #: .././admin/dashboard_widgets.php:850
223
+ msgid "Social Networks"
224
+ msgstr ""
225
+
226
+ #: .././admin/dashboard_widgets.php:866
227
+ msgid "Search Engines"
228
+ msgstr ""
229
+
230
+ #: .././admin/dashboard_widgets.php:968
231
+ msgid "Organic Search"
232
+ msgstr ""
233
+
234
+ #: .././admin/dashboard_widgets.php:972
235
+ msgid "Pages/Session"
236
+ msgstr ""
237
+
238
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
239
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
240
+ #: .././admin/ga_dash_settings.php:1228
241
+ msgid "Settings saved."
242
+ msgstr ""
243
+
244
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
245
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
246
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
247
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
248
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
249
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
250
+ msgid "Cheating Huh?"
251
+ msgstr "Oszukujemy, co?"
252
+
253
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
254
+ #: .././admin/ga_dash_settings.php:424
255
+ msgid "Something went wrong, you need to"
256
+ msgstr "Coś poszło nie tak, musisz"
257
+
258
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
259
+ #: .././admin/ga_dash_settings.php:424
260
+ msgid "auhorize the plugin"
261
+ msgstr "autoryzować wtyczkę"
262
+
263
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
264
+ #: .././admin/ga_dash_settings.php:424
265
+ msgid "or properly configure your"
266
+ msgstr "lub poprawnie skonfigurować twoje"
267
+
268
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
269
+ #: .././admin/ga_dash_settings.php:424
270
+ msgid "Google Analytics account"
271
+ msgstr "konto Google Analytics"
272
+
273
+ #: .././admin/ga_dash_settings.php:90
274
+ msgid "Google Analytics Frontend Settings"
275
+ msgstr "Ustawienia Frontendu Google Analytics"
276
+
277
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
278
+ msgid "Show stats to:"
279
+ msgstr ""
280
+
281
+ #: .././admin/ga_dash_settings.php:153
282
+ msgid " show page sessions and users in frontend (after each article)"
283
+ msgstr ""
284
+
285
+ #: .././admin/ga_dash_settings.php:169
286
+ msgid " show page searches (after each article)"
287
+ msgstr "pokaż wyszukiwania strony (po każdym artykule)"
288
+
289
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
290
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
291
+ #: .././admin/ga_dash_settings.php:1456
292
+ msgid "Save Changes"
293
+ msgstr ""
294
+
295
+ #: .././admin/ga_dash_settings.php:212
296
+ msgid "Google Analytics Dashboard Settings"
297
+ msgstr "Ustawienia Pulpitu Google Analytics"
298
+
299
+ #: .././admin/ga_dash_settings.php:275
300
+ msgid "disable Switch Profile/View functionality"
301
+ msgstr "wyłącz funkcjonalność Przełączanie Profilu/Widoku"
302
+
303
+ #: .././admin/ga_dash_settings.php:279
304
+ msgid "Real-Time Settings"
305
+ msgstr "Ustawienia Czasu Rzeczywistego"
306
+
307
+ #: .././admin/ga_dash_settings.php:282
308
+ msgid "Maximum number of pages to display on real-time tab:"
309
+ msgstr "Maksymalna liczba stron wyświetlanych na karcie Czas Rzeczywisty:"
310
+
311
+ #: .././admin/ga_dash_settings.php:287
312
+ msgid "(find out more"
313
+ msgstr "(dowiedz się więcej"
314
+
315
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
316
+ msgid "about this feature"
317
+ msgstr "o tej opcji"
318
+
319
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
320
+ msgid ")"
321
+ msgstr ")"
322
+
323
+ #: .././admin/ga_dash_settings.php:293
324
+ msgid "Additional Stats & Charts"
325
+ msgstr "Dodatkowe Statystyki & Wykresy"
326
+
327
+ #: .././admin/ga_dash_settings.php:306
328
+ msgid " show Geo Map chart for sessions"
329
+ msgstr ""
330
+
331
+ #: .././admin/ga_dash_settings.php:311
332
+ msgid "Target Geo Map to region:"
333
+ msgstr "Ustaw Geo Mapę na region:"
334
+
335
+ #: .././admin/ga_dash_settings.php:316
336
+ msgid "and render top"
337
+ msgstr "i wyrenderuj najlepsze"
338
+
339
+ #: .././admin/ga_dash_settings.php:321
340
+ msgid "cities (find out more"
341
+ msgstr "miasta (dowiedz się więcej"
342
+
343
+ #: .././admin/ga_dash_settings.php:339
344
+ msgid " show traffic overview"
345
+ msgstr "pokaż przegląd ruchu"
346
+
347
+ #: .././admin/ga_dash_settings.php:353
348
+ msgid " show top pages"
349
+ msgstr "pokaż najlepsze strony"
350
+
351
+ #: .././admin/ga_dash_settings.php:367
352
+ msgid " show top referrers"
353
+ msgstr "pokaż najlepszych referujących"
354
+
355
+ #: .././admin/ga_dash_settings.php:381
356
+ msgid " show top searches"
357
+ msgstr "pokaż najlepsze wyszukiwania"
358
+
359
+ #: .././admin/ga_dash_settings.php:430
360
+ msgid "Google Analytics Tracking Code"
361
+ msgstr "Kod Śledzenia Google Analytics"
362
+
363
+ #: .././admin/ga_dash_settings.php:440
364
+ msgid "Tracking Settings"
365
+ msgstr "Ustawienia Śledzenia"
366
+
367
+ #: .././admin/ga_dash_settings.php:443
368
+ msgid "Tracking Options:"
369
+ msgstr ""
370
+
371
+ #: .././admin/ga_dash_settings.php:447
372
+ msgid "Disabled"
373
+ msgstr "Wyłączone"
374
+
375
+ #: .././admin/ga_dash_settings.php:449
376
+ msgid "Enabled"
377
+ msgstr "Włączone"
378
+
379
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
380
+ msgid "Tracking ID:"
381
+ msgstr "Tracking ID:"
382
+
383
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
384
+ msgid "Default URL:"
385
+ msgstr "Domyślny URL:"
386
+
387
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
388
+ msgid "Time Zone:"
389
+ msgstr "Strefa Czasowa:"
390
+
391
+ #: .././admin/ga_dash_settings.php:467
392
+ #, fuzzy
393
+ msgid "Basic Tracking"
394
+ msgstr "Śledzenie Zdarzeń"
395
+
396
+ #: .././admin/ga_dash_settings.php:473
397
+ msgid "Tracking Type:"
398
+ msgstr ""
399
+
400
+ #: .././admin/ga_dash_settings.php:477
401
+ msgid "Classic Analytics"
402
+ msgstr "Klasyczne Analytics"
403
+
404
+ #: .././admin/ga_dash_settings.php:479
405
+ msgid "Universal Analytics"
406
+ msgstr "Uniwerslane Analytics"
407
+
408
+ #: .././admin/ga_dash_settings.php:493
409
+ msgid " anonymize IPs while tracking"
410
+ msgstr "ukryj adresy IP podczas śledzenia"
411
+
412
+ #: .././admin/ga_dash_settings.php:508
413
+ msgid " enable remarketing, demographics and interests reports"
414
+ msgstr "włącz raporty zainteresować, remarketingowe i demograficzne"
415
+
416
+ #: .././admin/ga_dash_settings.php:512
417
+ msgid "Events Tracking"
418
+ msgstr "Śledzenie Zdarzeń"
419
+
420
+ #: .././admin/ga_dash_settings.php:525
421
+ msgid " track downloads, mailto and outbound links"
422
+ msgstr "śledź pobrania, wysyłanie maili i linki wychodzące"
423
+
424
+ #: .././admin/ga_dash_settings.php:529
425
+ #, fuzzy
426
+ msgid "Downloads Regex:"
427
+ msgstr "Filtry Pobierania:"
428
+
429
+ #: .././admin/ga_dash_settings.php:546
430
+ msgid " track affiliate links matching this regex"
431
+ msgstr ""
432
+
433
+ #: .././admin/ga_dash_settings.php:550
434
+ msgid "Affiliates Regex:"
435
+ msgstr ""
436
+
437
+ #: .././admin/ga_dash_settings.php:567
438
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
439
+ msgstr ""
440
+
441
+ #: .././admin/ga_dash_settings.php:571
442
+ msgid "Custom Definitions"
443
+ msgstr ""
444
+
445
+ #: .././admin/ga_dash_settings.php:574
446
+ msgid "Authors:"
447
+ msgstr ""
448
+
449
+ #: .././admin/ga_dash_settings.php:584
450
+ msgid "Publication Year:"
451
+ msgstr ""
452
+
453
+ #: .././admin/ga_dash_settings.php:594
454
+ msgid "Categories:"
455
+ msgstr ""
456
+
457
+ #: .././admin/ga_dash_settings.php:604
458
+ msgid "User Type:"
459
+ msgstr ""
460
+
461
+ #: .././admin/ga_dash_settings.php:614
462
+ #, fuzzy
463
+ msgid "Advanced Tracking"
464
+ msgstr "Śledzenie Zdarzeń"
465
+
466
+ #: .././admin/ga_dash_settings.php:617
467
+ msgid "Page Speed SR:"
468
+ msgstr "Page Speed SR:"
469
+
470
+ #: .././admin/ga_dash_settings.php:635
471
+ #, fuzzy
472
+ msgid " exclude events from bounce-rate calculation"
473
+ msgstr "wyklucz zdarzenie kliknięcia z kalkulacji stawki odrzuceń"
474
+
475
+ #: .././admin/ga_dash_settings.php:649
476
+ msgid " enable enhanced link attribution"
477
+ msgstr "włącz rozszerzone przypisywanie linków"
478
+
479
+ #: .././admin/ga_dash_settings.php:663
480
+ msgid " enable AdSense account linking"
481
+ msgstr " włącz linkowanie konta AdSense"
482
+
483
+ #: .././admin/ga_dash_settings.php:678
484
+ msgid " enable cross domain tracking"
485
+ msgstr ""
486
+
487
+ #: .././admin/ga_dash_settings.php:682
488
+ msgid "Cross Domains:"
489
+ msgstr ""
490
+
491
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
492
+ msgid "Exclude Tracking"
493
+ msgstr "Wyklucz Śledzenie"
494
+
495
+ #: .././admin/ga_dash_settings.php:695
496
+ msgid "Exclude tracking for:"
497
+ msgstr ""
498
+
499
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
500
+ msgid ""
501
+ "Loading the required libraries. If this results in a blank screen or a fatal "
502
+ "error, try this solution:"
503
+ msgstr ""
504
+
505
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
506
+ msgid "Plugin authorization succeeded."
507
+ msgstr "Autoryzacja wtyczki pomyślna."
508
+
509
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
510
+ msgid ""
511
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
512
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
513
+ msgstr ""
514
+
515
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
516
+ msgid "Cleared Cache."
517
+ msgstr "Cache wyczyszczony."
518
+
519
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
520
+ msgid "Token Reseted and Revoked."
521
+ msgstr "Token wyczyszczony i wycofany."
522
+
523
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
524
+ msgid "Dumping log data."
525
+ msgstr "Zrzucanie danych lgowania."
526
+
527
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
528
+ msgid "All other domains/properties were removed."
529
+ msgstr "Wszystkie inne domeny/właściwości zostały usunięte."
530
+
531
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
532
+ msgid ""
533
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
534
+ msgstr ""
535
+
536
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
537
+ msgid "Google Analytics Settings"
538
+ msgstr "Ustawienia Google Analytics"
539
+
540
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
541
+ msgid ""
542
+ "Something went wrong. Please check the Debugging Data section for possible "
543
+ "errors"
544
+ msgstr ""
545
+ "Coś poszło nie tak. Sprawdź sekcję Dane debugowania, aby zobaczyć błędy"
546
+
547
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
548
+ msgid "Use the red link (see below) to generate and get your access code!"
549
+ msgstr ""
550
+
551
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
552
+ msgid "Plugin Authorization"
553
+ msgstr "Autoryzacja Wtyczki"
554
+
555
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
556
+ msgid "You should watch the"
557
+ msgstr "Powinienieś obejrzeć"
558
+
559
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
560
+ msgid "video"
561
+ msgstr "film"
562
+
563
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
564
+ msgid "and read this"
565
+ msgstr "i przeczytać"
566
+
567
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
568
+ msgid "tutorial"
569
+ msgstr "tutorial"
570
+
571
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
572
+ msgid ""
573
+ "before proceeding to authorization. This plugin requires a properly "
574
+ "configured Google Analytics account"
575
+ msgstr ""
576
+ "przed ukończeniem autoryzacji. Ta wtyczka wymaga poprawnie skonfigurowanego "
577
+ "konta Google Analytics"
578
+
579
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
580
+ msgid " use your own API Project credentials"
581
+ msgstr "użyj własnych danych logowania do API Projektu"
582
+
583
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
584
+ msgid "API Key:"
585
+ msgstr "Klucz API:"
586
+
587
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
588
+ msgid "Client ID:"
589
+ msgstr "ID Klienta:"
590
+
591
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
592
+ msgid "Client Secret:"
593
+ msgstr "Hasło Klienta:"
594
+
595
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
596
+ msgid "Clear Authorization"
597
+ msgstr "Czyść Autoryzację"
598
+
599
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
600
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
601
+ msgid "Clear Cache"
602
+ msgstr "Czyść Cache"
603
+
604
+ #: .././admin/ga_dash_settings.php:957
605
+ msgid "Select Domain:"
606
+ msgstr ""
607
+
608
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
609
+ msgid "Property not found"
610
+ msgstr ""
611
+
612
+ #: .././admin/ga_dash_settings.php:975
613
+ msgid "and/or hide all other domains"
614
+ msgstr "i/lub ukryj wszystkie inne domeny"
615
+
616
+ #: .././admin/ga_dash_settings.php:978
617
+ msgid "Hide Now"
618
+ msgstr "Ukryj Teraz"
619
+
620
+ #: .././admin/ga_dash_settings.php:997
621
+ msgid "Theme Color:"
622
+ msgstr ""
623
+
624
+ #: .././admin/ga_dash_settings.php:1007
625
+ msgid "A new frontend widget is available! To enable it, go to"
626
+ msgstr "Nowy widget frontendu jest dostępny! Aby go włączyć, przejðź do"
627
+
628
+ #: .././admin/ga_dash_settings.php:1007
629
+ msgid "Appearance -> Widgets"
630
+ msgstr "Wygląd -> Widgety"
631
+
632
+ #: .././admin/ga_dash_settings.php:1007
633
+ msgid "and look for Google Analytics Dashboard."
634
+ msgstr "i poszukać Pulpit Google Analytics."
635
+
636
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
637
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
638
+ msgid "Debugging Data"
639
+ msgstr "Dane Debugowania"
640
+
641
+ #: .././admin/ga_dash_settings.php:1180
642
+ msgid "Properties refreshed."
643
+ msgstr "Właściwości Odświeżone"
644
+
645
+ #: .././admin/ga_dash_settings.php:1274
646
+ msgid "Network Setup"
647
+ msgstr "Ustawienia Sieci"
648
+
649
+ #: .././admin/ga_dash_settings.php:1289
650
+ msgid " use a single Google Analytics account for the entire network"
651
+ msgstr "Użyj jednego konta Google Analytics dla całej sieci"
652
+
653
+ #: .././admin/ga_dash_settings.php:1358
654
+ msgid "Refresh Properties"
655
+ msgstr "Odśwież Właściwości"
656
+
657
+ #: .././admin/ga_dash_settings.php:1364
658
+ msgid "Properties/Views Settings"
659
+ msgstr "Ustawienia Właściwości /Widoków"
660
+
661
+ #: .././admin/ga_dash_settings.php:1409
662
+ msgid " exclude Super Admin tracking for the entire network"
663
+ msgstr ""
664
+
665
+ #: .././admin/ga_dash_settings.php:1537
666
+ msgid "Setup Tutorial & Demo"
667
+ msgstr "Ustaw Tutorial & Demo"
668
+
669
+ #: .././admin/ga_dash_settings.php:1549
670
+ msgid "Support & Reviews"
671
+ msgstr "Wsparcie techniczne & Recenzje"
672
+
673
+ #: .././admin/ga_dash_settings.php:1557
674
+ msgid "Plugin documentation and support on"
675
+ msgstr ""
676
+
677
+ #: .././admin/ga_dash_settings.php:1564
678
+ msgid "Your feedback and review are both important,"
679
+ msgstr "Twój komentarz i ocena są ważne,"
680
+
681
+ #: .././admin/ga_dash_settings.php:1564
682
+ msgid "rate this plugin"
683
+ msgstr "oceń tą wtyczkę"
684
+
685
+ #: .././admin/ga_dash_settings.php:1569
686
+ msgid "Further Reading"
687
+ msgstr "Inne Dokumenty"
688
+
689
+ #: .././admin/ga_dash_settings.php:1576
690
+ msgid "Improve search rankings"
691
+ msgstr ""
692
+
693
+ #: .././admin/ga_dash_settings.php:1576
694
+ msgid "by moving your website to HTTPS/SSL."
695
+ msgstr ""
696
+
697
+ #: .././admin/ga_dash_settings.php:1582
698
+ msgid "Other"
699
+ msgstr "Inne"
700
+
701
+ #: .././admin/ga_dash_settings.php:1582
702
+ msgid "WordPress Plugins"
703
+ msgstr "Wtyczki WordPressa"
704
+
705
+ #: .././admin/ga_dash_settings.php:1582
706
+ msgid "written by the same author"
707
+ msgstr "napisane przez tego samego autora"
708
+
709
+ #: .././admin/ga_dash_settings.php:1587
710
+ msgid "Other Services"
711
+ msgstr ""
712
+
713
+ #: .././admin/ga_dash_settings.php:1594
714
+ msgid "Speed up your website and plug into a whole"
715
+ msgstr ""
716
+
717
+ #: .././admin/ga_dash_settings.php:1594
718
+ msgid "new level of site speed"
719
+ msgstr ""
720
+
721
+ #: .././admin/ga_dash_settings.php:1600
722
+ msgid "Web Analytics"
723
+ msgstr "Web Analytics"
724
+
725
+ #: .././admin/ga_dash_settings.php:1600
726
+ msgid "service with users tracking at IP level."
727
+ msgstr ""
728
+
729
+ #: .././front/frontend.php:112
730
+ msgid "Views vs UniqueViews"
731
+ msgstr "Odsłon vs Odsłon Unikalnych"
732
+
733
+ #: .././front/frontend.php:168
734
+ msgid "Google Analytics Reports"
735
+ msgstr ""
736
+
737
+ #: .././front/widgets.php:16
738
+ msgid "Will display your google analytics stats in a widget"
739
+ msgstr "Wyświetli twoje statystyki Google Analytics na widgecie"
740
+
741
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
742
+ msgid "trend"
743
+ msgstr ""
744
+
745
+ #: .././front/widgets.php:144
746
+ msgid "Period:"
747
+ msgstr "Okres:"
748
+
749
+ #: .././front/widgets.php:144
750
+ msgid "Sessions:"
751
+ msgstr ""
752
+
753
+ #: .././front/widgets.php:150
754
+ msgid "generated by"
755
+ msgstr "wygenerowane przez"
756
+
757
+ #: .././front/widgets.php:164
758
+ msgid "Google Analytics Stats"
759
+ msgstr "Statystyki Google Analytics"
760
+
761
+ #: .././front/widgets.php:171
762
+ msgid "Title:"
763
+ msgstr "Tytuł:"
764
+
765
+ #: .././front/widgets.php:178
766
+ msgid "Display:"
767
+ msgstr "Wyświetlenie:"
768
+
769
+ #: .././front/widgets.php:182
770
+ msgid "Chart & Totals"
771
+ msgstr "Wykres & Podsumowania"
772
+
773
+ #: .././front/widgets.php:183
774
+ msgid "Chart"
775
+ msgstr "Wykres"
776
+
777
+ #: .././front/widgets.php:184
778
+ msgid "Totals"
779
+ msgstr "Podsumowania"
780
+
781
+ #: .././front/widgets.php:188
782
+ msgid "Anonimize chart&#39;s stats:"
783
+ msgstr "Statystyki wykresu"
784
+
785
+ #: .././front/widgets.php:195
786
+ msgid "Stats for:"
787
+ msgstr "Statystyki dla:"
788
+
789
+ #: .././front/widgets.php:205
790
+ msgid "Give credits:"
791
+ msgstr "Podziękuj:"
792
+
793
+ #: .././tools/gapi.php:140
794
+ msgid "Use this link to get your access code:"
795
+ msgstr "Użyj tego linku, aby uzyskać kod dostępu:"
796
+
797
+ #: .././tools/gapi.php:140
798
+ msgid "Get Access Code"
799
+ msgstr "Zdobądź Kod Dostępu"
800
+
801
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
802
+ msgid "Use the red link to get your access code!"
803
+ msgstr ""
804
+
805
+ #: .././tools/gapi.php:145
806
+ msgid "Access Code:"
807
+ msgstr "Kod Dostępu:"
808
+
809
+ #: .././tools/gapi.php:157
810
+ msgid "Save Access Code"
811
+ msgstr "Zapisz Kod Dostępu"
812
+
813
+ #: .././tools/gapi.php:380
814
+ msgid "Organic Searches"
815
+ msgstr "Wyszukiwania organiczne"
816
+
817
+ #: .././tools/gapi.php:391
818
+ msgid "Hour"
819
+ msgstr "Godzina"
820
+
821
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
822
+ msgid "Date"
823
+ msgstr "Data"
824
+
825
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
826
+ msgid "Views"
827
+ msgstr "Odsłon"
828
+
829
+ #: .././tools/gapi.php:611
830
+ msgid "Countries"
831
+ msgstr ""
832
+
833
+ #: .././tools/gapi.php:629
834
+ msgid "Cities from"
835
+ msgstr ""
836
+
837
+ #: .././tools/gapi.php:691
838
+ msgid "Channels"
839
+ msgstr ""
840
+
841
+ #: .././tools/gapi.php:754
842
+ msgid "Type"
843
+ msgstr "Typ"
844
+
845
+ #: .././tools/gapi.php:852
846
+ msgid "UniqueViews"
847
+ msgstr "Odsłon Unikalnych"
848
+
849
+ #: .././tools/gapi.php:899
850
+ msgid "Top Searches"
851
+ msgstr "Najlepsze wyszukiwania"
852
+
853
+ #~ msgid "Error Log"
854
+ #~ msgstr "Dziennik błędów"
855
+
856
+ #~ msgid "Visits"
857
+ #~ msgstr "Wizyty"
858
+
859
+ #~ msgid "Visitors"
860
+ #~ msgstr "Odwiedzający"
861
+
862
+ #~ msgid ""
863
+ #~ "No stats available. Please check the Debugging Data section for possible "
864
+ #~ "errors"
865
+ #~ msgstr ""
866
+ #~ "Brak statystyk. Sprawdź sekcję Dane debugowania, aby zobaczyć błędy."
867
+
868
+ #~ msgid "Country/City"
869
+ #~ msgstr "Państwo/Miasto"
870
+
871
+ #~ msgid "Source"
872
+ #~ msgstr "Źródło"
873
+
874
+ #~ msgid "Traffic Sources"
875
+ #~ msgstr "Źródła ruchu"
876
+
877
+ #~ msgid "New vs. Returning"
878
+ #~ msgstr "Nowi vs powracający"
879
+
880
+ #~ msgid "Top Pages"
881
+ #~ msgstr "Najlepsze strony"
882
+
883
+ #~ msgid "Top Referrers"
884
+ #~ msgstr "Najlepsi referujący"
885
+
886
+ #~ msgid "Visits:"
887
+ #~ msgstr "Wizyt:"
888
+
889
+ #~ msgid "Visitors:"
890
+ #~ msgstr "Odwiedzających:"
891
+
892
+ #~ msgid "Page Views:"
893
+ #~ msgstr "Wyświetleń strony:"
894
+
895
+ #~ msgid "Bounce Rate:"
896
+ #~ msgstr "Współczynnik odrzuceń:"
897
+
898
+ #~ msgid "Organic Search:"
899
+ #~ msgstr "Wyszukiwań organicznych:"
900
+
901
+ #~ msgid "Pages per Visit:"
902
+ #~ msgstr "Stron na wizytę:"
903
+
904
+ #~ msgid ""
905
+ #~ "This is a beta feature and is only available when using my Developer Key! "
906
+ #~ "("
907
+ #~ msgstr ""
908
+ #~ "To jest opcja beta, która jest dostępna tylko przy użyciu Klucza "
909
+ #~ "Programisty! ("
910
+
911
+ #~ msgid "more about this feature"
912
+ #~ msgstr "więcej o tej opcji"
913
+
914
+ #~ msgid "RETURN"
915
+ #~ msgstr "POWRACAJĄCE"
916
+
917
+ #~ msgid "Visits from "
918
+ #~ msgstr "Wizyty z"
919
+
920
+ #~ msgid "Visits by Country"
921
+ #~ msgstr "Wizyty wg Państwa"
922
+
923
+ #~ msgid "Traffic Overview"
924
+ #~ msgstr "Przegląd ruchu"
925
+
926
+ #~ msgid " show page visits and visitors in frontend (after each article)"
927
+ #~ msgstr "pokaż wizyty i odwiedzających na stronie (po każdym artykule)"
928
+
929
+ #~ msgid " show Geo Map chart for visits"
930
+ #~ msgstr "pokaż wykres Geo Mapy dla wizyt"
931
+
932
+ #~ msgid "You can find support on"
933
+ #~ msgstr "Możesz znaleźć wsparcie na"
934
+
935
+ #~ msgid "service with visitors tracking at IP level."
936
+ #~ msgstr "usługa śledzenia odwiedzających na poziomie IP."
937
+
938
+ #~ msgid "Total Visits:"
939
+ #~ msgstr "Całkowita Ilość Wizyt:"
940
+
941
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
942
+ #~ msgstr "PHP CURL jest wymagany. Proszę zainstalować/włączyć PHP CURL!"
943
+
944
+ #~ msgid "Options saved."
945
+ #~ msgstr "Opcja zapisana."
946
+
947
+ #~ msgid "Show stats to: "
948
+ #~ msgstr "Pokazuj statystyki do: "
949
+
950
+ #~ msgid "Update Options"
951
+ #~ msgstr "Opcje Aktualizacji"
952
+
953
+ #~ msgid "Tracking Options: "
954
+ #~ msgstr "Opcje Śledzenia:"
955
+
956
+ #~ msgid "Tracking Type: "
957
+ #~ msgstr "Typ Śledzenia: "
958
+
959
+ #, fuzzy
960
+ #~ msgid "User Type: "
961
+ #~ msgstr "Typ Śledzenia: "
962
+
963
+ #~ msgid "Exclude tracking for: "
964
+ #~ msgstr "Wyklucz śledzenie dla: "
965
+
966
+ #~ msgid "Select Domain: "
967
+ #~ msgstr "Wybierz Domenę: "
968
+
969
+ #~ msgid "Theme Color: "
970
+ #~ msgstr "Kolor tematu: "
971
+
972
+ #~ msgid "&#39; trend"
973
+ #~ msgstr "&#39; trend"
974
+
975
+ #~ msgid "DeConf Help Center"
976
+ #~ msgstr "DeConf Help Center"
977
+
978
+ #~ msgid ""
979
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
980
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
981
+ #~ msgstr ""
982
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
983
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
languages/ga-dash-pt_BR.mo ADDED
Binary file
languages/ga-dash-pt_BR.po ADDED
@@ -0,0 +1,993 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:26+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:26+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: pt_BR\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr "Google Analytics"
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr "Configurações Gerais"
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr "Configurações Internas"
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr "Configurações Externas"
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr "Tracking Code"
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr "Configurações"
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr "Painel do Google Analytics"
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr "Este plugin precisa de autorização"
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr "Autorize o Plugin"
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr "Nome:"
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr "Algo deu errado durante a recuperação da lista de perfil."
67
+
68
+ #: .././admin/dashboard_widgets.php:212
69
+ msgid "More details"
70
+ msgstr "Mais detalhes"
71
+
72
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
73
+ msgid "An admin should asign a default Google Analytics Profile."
74
+ msgstr "Um administrador deve atribuir um Google Analytics perfil padrão."
75
+
76
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
77
+ msgid "Select Domain"
78
+ msgstr "Selecionar Domínio"
79
+
80
+ #: .././admin/dashboard_widgets.php:245
81
+ msgid ""
82
+ "Something went wrong while retrieving property data. You need to create and "
83
+ "properly configure a Google Analytics account:"
84
+ msgstr ""
85
+ "Algo deu errado ao recuperar os dados da propriedade. Você precisa criar e "
86
+ "configurar corretamente uma conta do Google Analytics:"
87
+
88
+ #: .././admin/dashboard_widgets.php:245
89
+ msgid "Find out more!"
90
+ msgstr "Saber mais!"
91
+
92
+ #: .././admin/dashboard_widgets.php:276
93
+ msgid "Real-Time"
94
+ msgstr "Tempo Real"
95
+
96
+ #: .././admin/dashboard_widgets.php:277
97
+ msgid "Today"
98
+ msgstr "Hoje"
99
+
100
+ #: .././admin/dashboard_widgets.php:279
101
+ msgid "Yesterday"
102
+ msgstr "Ontem"
103
+
104
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
105
+ #: .././front/widgets.php:199
106
+ msgid "Last 7 Days"
107
+ msgstr "Últimos 7 dias"
108
+
109
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
110
+ #: .././front/widgets.php:200
111
+ msgid "Last 14 Days"
112
+ msgstr "Últimos 14 dias"
113
+
114
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
115
+ #: .././front/widgets.php:201
116
+ msgid "Last 30 Days"
117
+ msgstr "Últimos 30 dias"
118
+
119
+ #: .././admin/dashboard_widgets.php:287
120
+ msgid "Last 90 Days"
121
+ msgstr "Últimos 90 dias"
122
+
123
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
124
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
125
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
126
+ #: .././tools/gapi.php:899
127
+ msgid "Sessions"
128
+ msgstr ""
129
+
130
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
131
+ #: .././tools/gapi.php:368
132
+ msgid "Users"
133
+ msgstr ""
134
+
135
+ #: .././admin/dashboard_widgets.php:296
136
+ msgid "Organic"
137
+ msgstr "Buscas"
138
+
139
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
140
+ #: .././tools/gapi.php:372
141
+ msgid "Page Views"
142
+ msgstr "Visualizações de Páginas"
143
+
144
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
145
+ #: .././tools/gapi.php:376
146
+ msgid "Bounce Rate"
147
+ msgstr "Taxa de Rejeição"
148
+
149
+ #: .././admin/dashboard_widgets.php:302
150
+ msgid "Location"
151
+ msgstr ""
152
+
153
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
154
+ msgid "Pages"
155
+ msgstr ""
156
+
157
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
158
+ msgid "Referrers"
159
+ msgstr ""
160
+
161
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
162
+ msgid "Searches"
163
+ msgstr ""
164
+
165
+ #: .././admin/dashboard_widgets.php:310
166
+ msgid "Traffic Details"
167
+ msgstr ""
168
+
169
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
170
+ msgid "REFERRAL"
171
+ msgstr "ENCAMINHAMENTO"
172
+
173
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
174
+ msgid "ORGANIC"
175
+ msgstr "ÔRGANICO"
176
+
177
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
178
+ #: .././admin/dashboard_widgets.php:659
179
+ msgid "SOCIAL"
180
+ msgstr "SOCIAL"
181
+
182
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
183
+ #: .././admin/dashboard_widgets.php:660
184
+ msgid "CAMPAIGN"
185
+ msgstr ""
186
+
187
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
188
+ #: .././admin/dashboard_widgets.php:663
189
+ msgid "DIRECT"
190
+ msgstr "DIRETO"
191
+
192
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
193
+ msgid "NEW"
194
+ msgstr "NOVO"
195
+
196
+ #: .././admin/dashboard_widgets.php:538
197
+ msgid "REFERRALS"
198
+ msgstr "REFERÊNCIAS"
199
+
200
+ #: .././admin/dashboard_widgets.php:541
201
+ msgid "KEYWORDS"
202
+ msgstr "PALAVRAS-CHAVE"
203
+
204
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
205
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
206
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
207
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
208
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
209
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
210
+ #: .././front/frontend.php:100 .././front/widgets.php:122
211
+ msgid "This report is unavailable"
212
+ msgstr ""
213
+
214
+ #: .././admin/dashboard_widgets.php:818
215
+ msgid "Traffic Mediums"
216
+ msgstr ""
217
+
218
+ #: .././admin/dashboard_widgets.php:834
219
+ msgid "Visitor Type"
220
+ msgstr ""
221
+
222
+ #: .././admin/dashboard_widgets.php:850
223
+ msgid "Social Networks"
224
+ msgstr ""
225
+
226
+ #: .././admin/dashboard_widgets.php:866
227
+ msgid "Search Engines"
228
+ msgstr ""
229
+
230
+ #: .././admin/dashboard_widgets.php:968
231
+ msgid "Organic Search"
232
+ msgstr ""
233
+
234
+ #: .././admin/dashboard_widgets.php:972
235
+ msgid "Pages/Session"
236
+ msgstr ""
237
+
238
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
239
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
240
+ #: .././admin/ga_dash_settings.php:1228
241
+ msgid "Settings saved."
242
+ msgstr ""
243
+
244
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
245
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
246
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
247
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
248
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
249
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
250
+ msgid "Cheating Huh?"
251
+ msgstr ""
252
+
253
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
254
+ #: .././admin/ga_dash_settings.php:424
255
+ msgid "Something went wrong, you need to"
256
+ msgstr "Algo deu errado, você precisa"
257
+
258
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
259
+ #: .././admin/ga_dash_settings.php:424
260
+ msgid "auhorize the plugin"
261
+ msgstr "autorize o plugin"
262
+
263
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
264
+ #: .././admin/ga_dash_settings.php:424
265
+ msgid "or properly configure your"
266
+ msgstr "ou configurar corretamente o seu"
267
+
268
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
269
+ #: .././admin/ga_dash_settings.php:424
270
+ msgid "Google Analytics account"
271
+ msgstr "Conta do Google Analytics"
272
+
273
+ #: .././admin/ga_dash_settings.php:90
274
+ msgid "Google Analytics Frontend Settings"
275
+ msgstr "Configurações Externas do Google Analytics"
276
+
277
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
278
+ msgid "Show stats to:"
279
+ msgstr ""
280
+
281
+ #: .././admin/ga_dash_settings.php:153
282
+ msgid " show page sessions and users in frontend (after each article)"
283
+ msgstr ""
284
+
285
+ #: .././admin/ga_dash_settings.php:169
286
+ msgid " show page searches (after each article)"
287
+ msgstr "pesquisas mostram página (depois de cada artigo)"
288
+
289
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
290
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
291
+ #: .././admin/ga_dash_settings.php:1456
292
+ msgid "Save Changes"
293
+ msgstr ""
294
+
295
+ #: .././admin/ga_dash_settings.php:212
296
+ msgid "Google Analytics Dashboard Settings"
297
+ msgstr "Configurações de Painel do Google Analytics"
298
+
299
+ #: .././admin/ga_dash_settings.php:275
300
+ msgid "disable Switch Profile/View functionality"
301
+ msgstr "desativar mudar perfil/Ver funcionalidade"
302
+
303
+ #: .././admin/ga_dash_settings.php:279
304
+ msgid "Real-Time Settings"
305
+ msgstr "Configurações de Tempo Real"
306
+
307
+ #: .././admin/ga_dash_settings.php:282
308
+ msgid "Maximum number of pages to display on real-time tab:"
309
+ msgstr "O número máximo de páginas para mostrar na guia Tempo Real:"
310
+
311
+ #: .././admin/ga_dash_settings.php:287
312
+ msgid "(find out more"
313
+ msgstr "(Saiba mais"
314
+
315
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
316
+ msgid "about this feature"
317
+ msgstr "sobre este recurso"
318
+
319
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
320
+ msgid ")"
321
+ msgstr ")"
322
+
323
+ #: .././admin/ga_dash_settings.php:293
324
+ msgid "Additional Stats & Charts"
325
+ msgstr "Estatísticas e gráficos adicionais"
326
+
327
+ #: .././admin/ga_dash_settings.php:306
328
+ msgid " show Geo Map chart for sessions"
329
+ msgstr ""
330
+
331
+ #: .././admin/ga_dash_settings.php:311
332
+ msgid "Target Geo Map to region:"
333
+ msgstr "Alvo Geo Map para a região:"
334
+
335
+ #: .././admin/ga_dash_settings.php:316
336
+ msgid "and render top"
337
+ msgstr "e tornar pricipal"
338
+
339
+ #: .././admin/ga_dash_settings.php:321
340
+ msgid "cities (find out more"
341
+ msgstr "cidades (mais"
342
+
343
+ #: .././admin/ga_dash_settings.php:339
344
+ msgid " show traffic overview"
345
+ msgstr "mostrar visão geral do tráfego"
346
+
347
+ #: .././admin/ga_dash_settings.php:353
348
+ msgid " show top pages"
349
+ msgstr "mostrar principais páginas"
350
+
351
+ #: .././admin/ga_dash_settings.php:367
352
+ msgid " show top referrers"
353
+ msgstr "mostrar principais referências"
354
+
355
+ #: .././admin/ga_dash_settings.php:381
356
+ msgid " show top searches"
357
+ msgstr "mostrar principais pesquisas"
358
+
359
+ #: .././admin/ga_dash_settings.php:430
360
+ msgid "Google Analytics Tracking Code"
361
+ msgstr "Código de rastreamento do Google Analytics"
362
+
363
+ #: .././admin/ga_dash_settings.php:440
364
+ msgid "Tracking Settings"
365
+ msgstr "Configurações de rastreamento"
366
+
367
+ #: .././admin/ga_dash_settings.php:443
368
+ msgid "Tracking Options:"
369
+ msgstr ""
370
+
371
+ #: .././admin/ga_dash_settings.php:447
372
+ msgid "Disabled"
373
+ msgstr "Desabilitar"
374
+
375
+ #: .././admin/ga_dash_settings.php:449
376
+ msgid "Enabled"
377
+ msgstr "Habilitar"
378
+
379
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
380
+ msgid "Tracking ID:"
381
+ msgstr "ID de rastreamento:"
382
+
383
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
384
+ msgid "Default URL:"
385
+ msgstr "URL Padrão:"
386
+
387
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
388
+ msgid "Time Zone:"
389
+ msgstr "Fuso horário:"
390
+
391
+ #: .././admin/ga_dash_settings.php:467
392
+ #, fuzzy
393
+ msgid "Basic Tracking"
394
+ msgstr "Eventos de rastreamento"
395
+
396
+ #: .././admin/ga_dash_settings.php:473
397
+ msgid "Tracking Type:"
398
+ msgstr ""
399
+
400
+ #: .././admin/ga_dash_settings.php:477
401
+ msgid "Classic Analytics"
402
+ msgstr "Analytics clássico"
403
+
404
+ #: .././admin/ga_dash_settings.php:479
405
+ msgid "Universal Analytics"
406
+ msgstr "Universal Analytics"
407
+
408
+ #: .././admin/ga_dash_settings.php:493
409
+ msgid " anonymize IPs while tracking"
410
+ msgstr "IPs anônimo ao rastreamento"
411
+
412
+ #: .././admin/ga_dash_settings.php:508
413
+ msgid " enable remarketing, demographics and interests reports"
414
+ msgstr "permitir Informações demográficas e interesses relatórios"
415
+
416
+ #: .././admin/ga_dash_settings.php:512
417
+ msgid "Events Tracking"
418
+ msgstr "Eventos de rastreamento"
419
+
420
+ #: .././admin/ga_dash_settings.php:525
421
+ msgid " track downloads, mailto and outbound links"
422
+ msgstr "baixe faixas, e-mail e links de saída"
423
+
424
+ #: .././admin/ga_dash_settings.php:529
425
+ #, fuzzy
426
+ msgid "Downloads Regex:"
427
+ msgstr "Baixe Filtros:"
428
+
429
+ #: .././admin/ga_dash_settings.php:546
430
+ msgid " track affiliate links matching this regex"
431
+ msgstr ""
432
+
433
+ #: .././admin/ga_dash_settings.php:550
434
+ msgid "Affiliates Regex:"
435
+ msgstr ""
436
+
437
+ #: .././admin/ga_dash_settings.php:567
438
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
439
+ msgstr ""
440
+
441
+ #: .././admin/ga_dash_settings.php:571
442
+ msgid "Custom Definitions"
443
+ msgstr ""
444
+
445
+ #: .././admin/ga_dash_settings.php:574
446
+ msgid "Authors:"
447
+ msgstr ""
448
+
449
+ #: .././admin/ga_dash_settings.php:584
450
+ msgid "Publication Year:"
451
+ msgstr ""
452
+
453
+ #: .././admin/ga_dash_settings.php:594
454
+ msgid "Categories:"
455
+ msgstr ""
456
+
457
+ #: .././admin/ga_dash_settings.php:604
458
+ msgid "User Type:"
459
+ msgstr ""
460
+
461
+ #: .././admin/ga_dash_settings.php:614
462
+ #, fuzzy
463
+ msgid "Advanced Tracking"
464
+ msgstr "Eventos de rastreamento"
465
+
466
+ #: .././admin/ga_dash_settings.php:617
467
+ #, fuzzy
468
+ msgid "Page Speed SR:"
469
+ msgstr "Páginas por Visita:"
470
+
471
+ #: .././admin/ga_dash_settings.php:635
472
+ msgid " exclude events from bounce-rate calculation"
473
+ msgstr ""
474
+
475
+ #: .././admin/ga_dash_settings.php:649
476
+ msgid " enable enhanced link attribution"
477
+ msgstr "permitir reforço a atribuição de link"
478
+
479
+ #: .././admin/ga_dash_settings.php:663
480
+ msgid " enable AdSense account linking"
481
+ msgstr ""
482
+
483
+ #: .././admin/ga_dash_settings.php:678
484
+ msgid " enable cross domain tracking"
485
+ msgstr ""
486
+
487
+ #: .././admin/ga_dash_settings.php:682
488
+ msgid "Cross Domains:"
489
+ msgstr ""
490
+
491
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
492
+ msgid "Exclude Tracking"
493
+ msgstr "Excluir Rastreamento"
494
+
495
+ #: .././admin/ga_dash_settings.php:695
496
+ msgid "Exclude tracking for:"
497
+ msgstr ""
498
+
499
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
500
+ msgid ""
501
+ "Loading the required libraries. If this results in a blank screen or a fatal "
502
+ "error, try this solution:"
503
+ msgstr ""
504
+
505
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
506
+ msgid "Plugin authorization succeeded."
507
+ msgstr "Plugin autorizado com sucesso."
508
+
509
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
510
+ msgid ""
511
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
512
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
513
+ msgstr ""
514
+
515
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
516
+ msgid "Cleared Cache."
517
+ msgstr "Cache limpa."
518
+
519
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
520
+ msgid "Token Reseted and Revoked."
521
+ msgstr "Símbolo redefinido e revogado"
522
+
523
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
524
+ msgid "Dumping log data."
525
+ msgstr "Lixeira de dados"
526
+
527
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
528
+ msgid "All other domains/properties were removed."
529
+ msgstr "Todos os outros domínios / propriedades foram removidas."
530
+
531
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
532
+ msgid ""
533
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
534
+ msgstr ""
535
+
536
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
537
+ msgid "Google Analytics Settings"
538
+ msgstr "Configurações do Google Analytics"
539
+
540
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
541
+ msgid ""
542
+ "Something went wrong. Please check the Debugging Data section for possible "
543
+ "errors"
544
+ msgstr ""
545
+ "Algo deu errado. Por favor verifique a seção de dados de depuração por "
546
+ "possíveis erros"
547
+
548
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
549
+ msgid "Use the red link (see below) to generate and get your access code!"
550
+ msgstr ""
551
+
552
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
553
+ msgid "Plugin Authorization"
554
+ msgstr "Autorização de Plugin"
555
+
556
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
557
+ msgid "You should watch the"
558
+ msgstr "Você deve assistir ao"
559
+
560
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
561
+ msgid "video"
562
+ msgstr "vídeo"
563
+
564
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
565
+ msgid "and read this"
566
+ msgstr "e ler este"
567
+
568
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
569
+ msgid "tutorial"
570
+ msgstr "tutorial"
571
+
572
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
573
+ msgid ""
574
+ "before proceeding to authorization. This plugin requires a properly "
575
+ "configured Google Analytics account"
576
+ msgstr ""
577
+ "antes de prosseguir para a autorização. Este plugin requer uma conta do "
578
+ "Google Analytics configurado corretamente"
579
+
580
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
581
+ msgid " use your own API Project credentials"
582
+ msgstr "usar suas próprias credenciais de projeto API"
583
+
584
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
585
+ msgid "API Key:"
586
+ msgstr "Chave API:"
587
+
588
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
589
+ msgid "Client ID:"
590
+ msgstr "ID do cliente:"
591
+
592
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
593
+ msgid "Client Secret:"
594
+ msgstr "Cliente Secreto:"
595
+
596
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
597
+ msgid "Clear Authorization"
598
+ msgstr "Limpar Autorização"
599
+
600
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
601
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
602
+ msgid "Clear Cache"
603
+ msgstr "Limpar Cache"
604
+
605
+ #: .././admin/ga_dash_settings.php:957
606
+ msgid "Select Domain:"
607
+ msgstr ""
608
+
609
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
610
+ msgid "Property not found"
611
+ msgstr ""
612
+
613
+ #: .././admin/ga_dash_settings.php:975
614
+ msgid "and/or hide all other domains"
615
+ msgstr "e / ou esconder todos os outros domínios"
616
+
617
+ #: .././admin/ga_dash_settings.php:978
618
+ msgid "Hide Now"
619
+ msgstr "Ocultar Agora"
620
+
621
+ #: .././admin/ga_dash_settings.php:997
622
+ msgid "Theme Color:"
623
+ msgstr ""
624
+
625
+ #: .././admin/ga_dash_settings.php:1007
626
+ msgid "A new frontend widget is available! To enable it, go to"
627
+ msgstr "Um novo widget frontend está disponível! Para ativá-lo, vá para o"
628
+
629
+ #: .././admin/ga_dash_settings.php:1007
630
+ msgid "Appearance -> Widgets"
631
+ msgstr "Aparência -> Widgets"
632
+
633
+ #: .././admin/ga_dash_settings.php:1007
634
+ msgid "and look for Google Analytics Dashboard."
635
+ msgstr "e procura por Painel do Google Analytics."
636
+
637
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
638
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
639
+ msgid "Debugging Data"
640
+ msgstr "Depuração de Dados"
641
+
642
+ #: .././admin/ga_dash_settings.php:1180
643
+ msgid "Properties refreshed."
644
+ msgstr ""
645
+
646
+ #: .././admin/ga_dash_settings.php:1274
647
+ msgid "Network Setup"
648
+ msgstr ""
649
+
650
+ #: .././admin/ga_dash_settings.php:1289
651
+ msgid " use a single Google Analytics account for the entire network"
652
+ msgstr ""
653
+
654
+ #: .././admin/ga_dash_settings.php:1358
655
+ msgid "Refresh Properties"
656
+ msgstr ""
657
+
658
+ #: .././admin/ga_dash_settings.php:1364
659
+ #, fuzzy
660
+ msgid "Properties/Views Settings"
661
+ msgstr "Configurações Externas"
662
+
663
+ #: .././admin/ga_dash_settings.php:1409
664
+ msgid " exclude Super Admin tracking for the entire network"
665
+ msgstr ""
666
+
667
+ #: .././admin/ga_dash_settings.php:1537
668
+ msgid "Setup Tutorial & Demo"
669
+ msgstr "Tutorial de Instalação e demonstrações"
670
+
671
+ #: .././admin/ga_dash_settings.php:1549
672
+ msgid "Support & Reviews"
673
+ msgstr "Suporte e Comentários"
674
+
675
+ #: .././admin/ga_dash_settings.php:1557
676
+ msgid "Plugin documentation and support on"
677
+ msgstr ""
678
+
679
+ #: .././admin/ga_dash_settings.php:1564
680
+ msgid "Your feedback and review are both important,"
681
+ msgstr "O seu feedback e revisão são importantes,"
682
+
683
+ #: .././admin/ga_dash_settings.php:1564
684
+ msgid "rate this plugin"
685
+ msgstr "avaliar este plugin"
686
+
687
+ #: .././admin/ga_dash_settings.php:1569
688
+ msgid "Further Reading"
689
+ msgstr "Leitura adicional"
690
+
691
+ #: .././admin/ga_dash_settings.php:1576
692
+ msgid "Improve search rankings"
693
+ msgstr ""
694
+
695
+ #: .././admin/ga_dash_settings.php:1576
696
+ msgid "by moving your website to HTTPS/SSL."
697
+ msgstr ""
698
+
699
+ #: .././admin/ga_dash_settings.php:1582
700
+ msgid "Other"
701
+ msgstr "Outro"
702
+
703
+ #: .././admin/ga_dash_settings.php:1582
704
+ msgid "WordPress Plugins"
705
+ msgstr "Plugins do WordPress"
706
+
707
+ #: .././admin/ga_dash_settings.php:1582
708
+ msgid "written by the same author"
709
+ msgstr "escrito pelo mesmo autor"
710
+
711
+ #: .././admin/ga_dash_settings.php:1587
712
+ msgid "Other Services"
713
+ msgstr ""
714
+
715
+ #: .././admin/ga_dash_settings.php:1594
716
+ msgid "Speed up your website and plug into a whole"
717
+ msgstr ""
718
+
719
+ #: .././admin/ga_dash_settings.php:1594
720
+ msgid "new level of site speed"
721
+ msgstr ""
722
+
723
+ #: .././admin/ga_dash_settings.php:1600
724
+ msgid "Web Analytics"
725
+ msgstr "Web Analytics"
726
+
727
+ #: .././admin/ga_dash_settings.php:1600
728
+ msgid "service with users tracking at IP level."
729
+ msgstr ""
730
+
731
+ #: .././front/frontend.php:112
732
+ msgid "Views vs UniqueViews"
733
+ msgstr "Visualizações x Visualização única"
734
+
735
+ #: .././front/frontend.php:168
736
+ msgid "Google Analytics Reports"
737
+ msgstr ""
738
+
739
+ #: .././front/widgets.php:16
740
+ msgid "Will display your google analytics stats in a widget"
741
+ msgstr "Irá exibir suas estatísticas google analytics em um widget"
742
+
743
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
744
+ msgid "trend"
745
+ msgstr ""
746
+
747
+ #: .././front/widgets.php:144
748
+ msgid "Period:"
749
+ msgstr "período:"
750
+
751
+ #: .././front/widgets.php:144
752
+ msgid "Sessions:"
753
+ msgstr ""
754
+
755
+ #: .././front/widgets.php:150
756
+ msgid "generated by"
757
+ msgstr "gerado pela"
758
+
759
+ #: .././front/widgets.php:164
760
+ msgid "Google Analytics Stats"
761
+ msgstr "Estatísticas do Google Analytics"
762
+
763
+ #: .././front/widgets.php:171
764
+ msgid "Title:"
765
+ msgstr "Título:"
766
+
767
+ #: .././front/widgets.php:178
768
+ msgid "Display:"
769
+ msgstr "Exibir:"
770
+
771
+ #: .././front/widgets.php:182
772
+ msgid "Chart & Totals"
773
+ msgstr "Gráfico e Totais"
774
+
775
+ #: .././front/widgets.php:183
776
+ msgid "Chart"
777
+ msgstr "Gráfico"
778
+
779
+ #: .././front/widgets.php:184
780
+ msgid "Totals"
781
+ msgstr "Totais"
782
+
783
+ #: .././front/widgets.php:188
784
+ msgid "Anonimize chart&#39;s stats:"
785
+ msgstr "Esconder estatística de gráfico"
786
+
787
+ #: .././front/widgets.php:195
788
+ msgid "Stats for:"
789
+ msgstr "Estatísticas para:"
790
+
791
+ #: .././front/widgets.php:205
792
+ msgid "Give credits:"
793
+ msgstr "Dê créditos:"
794
+
795
+ #: .././tools/gapi.php:140
796
+ msgid "Use this link to get your access code:"
797
+ msgstr "Use este link para obter o seu código de acesso:"
798
+
799
+ #: .././tools/gapi.php:140
800
+ msgid "Get Access Code"
801
+ msgstr "Obter Código de Acesso"
802
+
803
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
804
+ msgid "Use the red link to get your access code!"
805
+ msgstr ""
806
+
807
+ #: .././tools/gapi.php:145
808
+ msgid "Access Code:"
809
+ msgstr "Código de acesso:"
810
+
811
+ #: .././tools/gapi.php:157
812
+ msgid "Save Access Code"
813
+ msgstr "Salvar Código de Acesso"
814
+
815
+ #: .././tools/gapi.php:380
816
+ msgid "Organic Searches"
817
+ msgstr "Pesquisas Ôrganicas"
818
+
819
+ #: .././tools/gapi.php:391
820
+ msgid "Hour"
821
+ msgstr "Hora"
822
+
823
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
824
+ msgid "Date"
825
+ msgstr "Dia"
826
+
827
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
828
+ msgid "Views"
829
+ msgstr "Visualizações"
830
+
831
+ #: .././tools/gapi.php:611
832
+ msgid "Countries"
833
+ msgstr ""
834
+
835
+ #: .././tools/gapi.php:629
836
+ msgid "Cities from"
837
+ msgstr ""
838
+
839
+ #: .././tools/gapi.php:691
840
+ msgid "Channels"
841
+ msgstr ""
842
+
843
+ #: .././tools/gapi.php:754
844
+ msgid "Type"
845
+ msgstr "Tipo"
846
+
847
+ #: .././tools/gapi.php:852
848
+ msgid "UniqueViews"
849
+ msgstr "Visualização Única "
850
+
851
+ #: .././tools/gapi.php:899
852
+ msgid "Top Searches"
853
+ msgstr "Principais Buscas"
854
+
855
+ #~ msgid "Error Log"
856
+ #~ msgstr "Registro Errado"
857
+
858
+ #~ msgid "Visits"
859
+ #~ msgstr "Visitas"
860
+
861
+ #~ msgid "Visitors"
862
+ #~ msgstr "Visitantes"
863
+
864
+ #~ msgid ""
865
+ #~ "No stats available. Please check the Debugging Data section for possible "
866
+ #~ "errors"
867
+ #~ msgstr ""
868
+ #~ "Não há estatísticas disponíveis. Por favor verifique a seção de dados de "
869
+ #~ "depuração por possíveis erros"
870
+
871
+ #~ msgid "Country/City"
872
+ #~ msgstr "País/Cidade"
873
+
874
+ #~ msgid "Source"
875
+ #~ msgstr "Fonte"
876
+
877
+ #~ msgid "Traffic Sources"
878
+ #~ msgstr "Fontes de tráfego"
879
+
880
+ #~ msgid "New vs. Returning"
881
+ #~ msgstr "Novos x antigos"
882
+
883
+ #~ msgid "Top Pages"
884
+ #~ msgstr "Principais Páginas"
885
+
886
+ #~ msgid "Top Referrers"
887
+ #~ msgstr "Principais Referências"
888
+
889
+ #~ msgid "Visits:"
890
+ #~ msgstr "Visitas:"
891
+
892
+ #~ msgid "Visitors:"
893
+ #~ msgstr "Visitantes:"
894
+
895
+ #~ msgid "Page Views:"
896
+ #~ msgstr "Visualizações de Páginas:"
897
+
898
+ #~ msgid "Bounce Rate:"
899
+ #~ msgstr "Taxa de Rejeição:"
900
+
901
+ #~ msgid "Organic Search:"
902
+ #~ msgstr "Pesquisa ôrganica:"
903
+
904
+ #~ msgid "Pages per Visit:"
905
+ #~ msgstr "Páginas por Visita:"
906
+
907
+ #~ msgid ""
908
+ #~ "This is a beta feature and is only available when using my Developer Key! "
909
+ #~ "("
910
+ #~ msgstr ""
911
+ #~ "Este é um recurso beta e está disponível apenas ao usar a minha chave de "
912
+ #~ "Developer! ("
913
+
914
+ #~ msgid "more about this feature"
915
+ #~ msgstr "mais sobre este recurso"
916
+
917
+ #~ msgid "RETURN"
918
+ #~ msgstr "RETORNO"
919
+
920
+ #~ msgid "Visits from "
921
+ #~ msgstr "Visitas de"
922
+
923
+ #~ msgid "Visits by Country"
924
+ #~ msgstr "Visitas por País"
925
+
926
+ #~ msgid "Traffic Overview"
927
+ #~ msgstr "Visão Geral"
928
+
929
+ #~ msgid " show page visits and visitors in frontend (after each article)"
930
+ #~ msgstr ""
931
+ #~ "mostrar páginas visitadas e visitantes em frontend (depois de cada artigo)"
932
+
933
+ #~ msgid " show Geo Map chart for visits"
934
+ #~ msgstr "mostram o gráfico Geo Map para visitas"
935
+
936
+ #~ msgid "You can find support on"
937
+ #~ msgstr "Você pode encontrar suporte em"
938
+
939
+ #~ msgid "service with visitors tracking at IP level."
940
+ #~ msgstr "serviço com rastreamento de visitantes a nível IP."
941
+
942
+ #~ msgid "Total Visits:"
943
+ #~ msgstr "Total de Visitas:"
944
+
945
+ #~ msgid "PHP CURL is required. Please install/enable PHP CURL!"
946
+ #~ msgstr "CURL é necessária. Por favor, instale / ativar CURL!"
947
+
948
+ #~ msgid "Options saved."
949
+ #~ msgstr "Opção salva"
950
+
951
+ #~ msgid "Show stats to: "
952
+ #~ msgstr "Mostrar estatísticas para:"
953
+
954
+ #~ msgid "Update Options"
955
+ #~ msgstr "Opções de Atualização"
956
+
957
+ #~ msgid "Tracking Options: "
958
+ #~ msgstr "Opções de rastreamento"
959
+
960
+ #~ msgid "Tracking Type: "
961
+ #~ msgstr "Tipo de rastreamento:"
962
+
963
+ #, fuzzy
964
+ #~ msgid "User Type: "
965
+ #~ msgstr "Tipo de rastreamento:"
966
+
967
+ #~ msgid "Exclude tracking for: "
968
+ #~ msgstr "Excluir rastreamento para:"
969
+
970
+ #~ msgid "Select Domain: "
971
+ #~ msgstr "Selecione o Domínio:"
972
+
973
+ #~ msgid "Theme Color: "
974
+ #~ msgstr "Tema Cor:"
975
+
976
+ #~ msgid "&#39; trend"
977
+ #~ msgstr "&#39; tendência "
978
+
979
+ #~ msgid "DeConf Help Center"
980
+ #~ msgstr "DeConf Central de Ajuda"
981
+
982
+ #~ msgid "Custom Code"
983
+ #~ msgstr "Código personalizado"
984
+
985
+ #~ msgid "Your Tracking Code:"
986
+ #~ msgstr "Seu código de rastreamento:"
987
+
988
+ #~ msgid ""
989
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
990
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
991
+ #~ msgstr ""
992
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
993
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
languages/ga-dash.pot ADDED
@@ -0,0 +1,849 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Google Analytics Dashboard for WP\n"
4
+ "POT-Creation-Date: 2015-01-07 20:24+0200\n"
5
+ "PO-Revision-Date: 2015-01-07 20:24+0200\n"
6
+ "Last-Translator: Alin Marcu <admin@deconf.com>\n"
7
+ "Language-Team: Deconf <admin@deconf.com>\n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 1.7.1\n"
13
+ "X-Poedit-KeywordsList: _e;__\n"
14
+ "X-Poedit-Basepath: .\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Poedit-SearchPath-0: ../.\n"
18
+
19
+ #: .././admin/dashboard_widgets.php:50 .././admin/dashboard_widgets.php:81
20
+ msgid "Google Analytics"
21
+ msgstr ""
22
+
23
+ #: .././admin/dashboard_widgets.php:54 .././admin/dashboard_widgets.php:85
24
+ #: .././admin/ga_dash_settings.php:100 .././admin/ga_dash_settings.php:222
25
+ #: .././admin/ga_dash_settings.php:954
26
+ msgid "General Settings"
27
+ msgstr ""
28
+
29
+ #: .././admin/dashboard_widgets.php:58
30
+ msgid "Backend Settings"
31
+ msgstr ""
32
+
33
+ #: .././admin/dashboard_widgets.php:62
34
+ msgid "Frontend Settings"
35
+ msgstr ""
36
+
37
+ #: .././admin/dashboard_widgets.php:66
38
+ msgid "Tracking Code"
39
+ msgstr ""
40
+
41
+ #: .././admin/dashboard_widgets.php:132
42
+ msgid "Settings"
43
+ msgstr ""
44
+
45
+ #: .././admin/dashboard_widgets.php:148 .././front/widgets.php:15
46
+ msgid "Google Analytics Dashboard"
47
+ msgstr ""
48
+
49
+ #: .././admin/dashboard_widgets.php:166
50
+ msgid "This plugin needs an authorization:"
51
+ msgstr ""
52
+
53
+ #: .././admin/dashboard_widgets.php:166 .././admin/ga_dash_settings.php:1063
54
+ #: .././admin/ga_dash_settings.php:1465
55
+ msgid "Authorize Plugin"
56
+ msgstr ""
57
+
58
+ #: .././admin/dashboard_widgets.php:207 .././admin/ga_dash_settings.php:459
59
+ #: .././admin/ga_dash_settings.php:966 .././admin/ga_dash_settings.php:991
60
+ #: .././admin/ga_dash_settings.php:1383
61
+ msgid "View Name:"
62
+ msgstr ""
63
+
64
+ #: .././admin/dashboard_widgets.php:212
65
+ msgid "Something went wrong while retrieving profiles list."
66
+ msgstr ""
67
+
68
+ #: .././admin/dashboard_widgets.php:212
69
+ msgid "More details"
70
+ msgstr ""
71
+
72
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
73
+ msgid "An admin should asign a default Google Analytics Profile."
74
+ msgstr ""
75
+
76
+ #: .././admin/dashboard_widgets.php:228 .././admin/dashboard_widgets.php:239
77
+ msgid "Select Domain"
78
+ msgstr ""
79
+
80
+ #: .././admin/dashboard_widgets.php:245
81
+ msgid ""
82
+ "Something went wrong while retrieving property data. You need to create and "
83
+ "properly configure a Google Analytics account:"
84
+ msgstr ""
85
+
86
+ #: .././admin/dashboard_widgets.php:245
87
+ msgid "Find out more!"
88
+ msgstr ""
89
+
90
+ #: .././admin/dashboard_widgets.php:276
91
+ msgid "Real-Time"
92
+ msgstr ""
93
+
94
+ #: .././admin/dashboard_widgets.php:277
95
+ msgid "Today"
96
+ msgstr ""
97
+
98
+ #: .././admin/dashboard_widgets.php:279
99
+ msgid "Yesterday"
100
+ msgstr ""
101
+
102
+ #: .././admin/dashboard_widgets.php:281 .././front/widgets.php:83
103
+ #: .././front/widgets.php:199
104
+ msgid "Last 7 Days"
105
+ msgstr ""
106
+
107
+ #: .././admin/dashboard_widgets.php:283 .././front/widgets.php:86
108
+ #: .././front/widgets.php:200
109
+ msgid "Last 14 Days"
110
+ msgstr ""
111
+
112
+ #: .././admin/dashboard_widgets.php:285 .././front/widgets.php:89
113
+ #: .././front/widgets.php:201
114
+ msgid "Last 30 Days"
115
+ msgstr ""
116
+
117
+ #: .././admin/dashboard_widgets.php:287
118
+ msgid "Last 90 Days"
119
+ msgstr ""
120
+
121
+ #: .././admin/dashboard_widgets.php:293 .././admin/dashboard_widgets.php:952
122
+ #: .././front/widgets.php:44 .././tools/gapi.php:384 .././tools/gapi.php:543
123
+ #: .././tools/gapi.php:587 .././tools/gapi.php:658 .././tools/gapi.php:808
124
+ #: .././tools/gapi.php:899
125
+ msgid "Sessions"
126
+ msgstr ""
127
+
128
+ #: .././admin/dashboard_widgets.php:294 .././admin/dashboard_widgets.php:956
129
+ #: .././tools/gapi.php:368
130
+ msgid "Users"
131
+ msgstr ""
132
+
133
+ #: .././admin/dashboard_widgets.php:296
134
+ msgid "Organic"
135
+ msgstr ""
136
+
137
+ #: .././admin/dashboard_widgets.php:298 .././admin/dashboard_widgets.php:960
138
+ #: .././tools/gapi.php:372
139
+ msgid "Page Views"
140
+ msgstr ""
141
+
142
+ #: .././admin/dashboard_widgets.php:300 .././admin/dashboard_widgets.php:964
143
+ #: .././tools/gapi.php:376
144
+ msgid "Bounce Rate"
145
+ msgstr ""
146
+
147
+ #: .././admin/dashboard_widgets.php:302
148
+ msgid "Location"
149
+ msgstr ""
150
+
151
+ #: .././admin/dashboard_widgets.php:304 .././tools/gapi.php:500
152
+ msgid "Pages"
153
+ msgstr ""
154
+
155
+ #: .././admin/dashboard_widgets.php:306 .././tools/gapi.php:543
156
+ msgid "Referrers"
157
+ msgstr ""
158
+
159
+ #: .././admin/dashboard_widgets.php:308 .././tools/gapi.php:587
160
+ msgid "Searches"
161
+ msgstr ""
162
+
163
+ #: .././admin/dashboard_widgets.php:310
164
+ msgid "Traffic Details"
165
+ msgstr ""
166
+
167
+ #: .././admin/dashboard_widgets.php:416 .././admin/dashboard_widgets.php:657
168
+ msgid "REFERRAL"
169
+ msgstr ""
170
+
171
+ #: .././admin/dashboard_widgets.php:420 .././admin/dashboard_widgets.php:658
172
+ msgid "ORGANIC"
173
+ msgstr ""
174
+
175
+ #: .././admin/dashboard_widgets.php:424 .././admin/dashboard_widgets.php:544
176
+ #: .././admin/dashboard_widgets.php:659
177
+ msgid "SOCIAL"
178
+ msgstr ""
179
+
180
+ #: .././admin/dashboard_widgets.php:428 .././admin/dashboard_widgets.php:547
181
+ #: .././admin/dashboard_widgets.php:660
182
+ msgid "CAMPAIGN"
183
+ msgstr ""
184
+
185
+ #: .././admin/dashboard_widgets.php:432 .././admin/dashboard_widgets.php:550
186
+ #: .././admin/dashboard_widgets.php:663
187
+ msgid "DIRECT"
188
+ msgstr ""
189
+
190
+ #: .././admin/dashboard_widgets.php:436 .././admin/dashboard_widgets.php:664
191
+ msgid "NEW"
192
+ msgstr ""
193
+
194
+ #: .././admin/dashboard_widgets.php:538
195
+ msgid "REFERRALS"
196
+ msgstr ""
197
+
198
+ #: .././admin/dashboard_widgets.php:541
199
+ msgid "KEYWORDS"
200
+ msgstr ""
201
+
202
+ #: .././admin/dashboard_widgets.php:690 .././admin/dashboard_widgets.php:702
203
+ #: .././admin/dashboard_widgets.php:757 .././admin/dashboard_widgets.php:769
204
+ #: .././admin/dashboard_widgets.php:781 .././admin/dashboard_widgets.php:793
205
+ #: .././admin/dashboard_widgets.php:806 .././admin/dashboard_widgets.php:905
206
+ #: .././admin/dashboard_widgets.php:908 .././admin/dashboard_widgets.php:992
207
+ #: .././admin/dashboard_widgets.php:1004 .././front/frontend.php:88
208
+ #: .././front/frontend.php:100 .././front/widgets.php:122
209
+ msgid "This report is unavailable"
210
+ msgstr ""
211
+
212
+ #: .././admin/dashboard_widgets.php:818
213
+ msgid "Traffic Mediums"
214
+ msgstr ""
215
+
216
+ #: .././admin/dashboard_widgets.php:834
217
+ msgid "Visitor Type"
218
+ msgstr ""
219
+
220
+ #: .././admin/dashboard_widgets.php:850
221
+ msgid "Social Networks"
222
+ msgstr ""
223
+
224
+ #: .././admin/dashboard_widgets.php:866
225
+ msgid "Search Engines"
226
+ msgstr ""
227
+
228
+ #: .././admin/dashboard_widgets.php:968
229
+ msgid "Organic Search"
230
+ msgstr ""
231
+
232
+ #: .././admin/dashboard_widgets.php:972
233
+ msgid "Pages/Session"
234
+ msgstr ""
235
+
236
+ #: .././admin/ga_dash_settings.php:78 .././admin/ga_dash_settings.php:200
237
+ #: .././admin/ga_dash_settings.php:418 .././admin/ga_dash_settings.php:841
238
+ #: .././admin/ga_dash_settings.php:1228
239
+ msgid "Settings saved."
240
+ msgstr ""
241
+
242
+ #: .././admin/ga_dash_settings.php:80 .././admin/ga_dash_settings.php:202
243
+ #: .././admin/ga_dash_settings.php:420 .././admin/ga_dash_settings.php:824
244
+ #: .././admin/ga_dash_settings.php:834 .././admin/ga_dash_settings.php:843
245
+ #: .././admin/ga_dash_settings.php:855 .././admin/ga_dash_settings.php:1183
246
+ #: .././admin/ga_dash_settings.php:1211 .././admin/ga_dash_settings.php:1221
247
+ #: .././admin/ga_dash_settings.php:1230 .././admin/ga_dash_settings.php:1242
248
+ msgid "Cheating Huh?"
249
+ msgstr ""
250
+
251
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
252
+ #: .././admin/ga_dash_settings.php:424
253
+ msgid "Something went wrong, you need to"
254
+ msgstr ""
255
+
256
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
257
+ #: .././admin/ga_dash_settings.php:424
258
+ msgid "auhorize the plugin"
259
+ msgstr ""
260
+
261
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
262
+ #: .././admin/ga_dash_settings.php:424
263
+ msgid "or properly configure your"
264
+ msgstr ""
265
+
266
+ #: .././admin/ga_dash_settings.php:84 .././admin/ga_dash_settings.php:206
267
+ #: .././admin/ga_dash_settings.php:424
268
+ msgid "Google Analytics account"
269
+ msgstr ""
270
+
271
+ #: .././admin/ga_dash_settings.php:90
272
+ msgid "Google Analytics Frontend Settings"
273
+ msgstr ""
274
+
275
+ #: .././admin/ga_dash_settings.php:103 .././admin/ga_dash_settings.php:225
276
+ msgid "Show stats to:"
277
+ msgstr ""
278
+
279
+ #: .././admin/ga_dash_settings.php:153
280
+ msgid " show page sessions and users in frontend (after each article)"
281
+ msgstr ""
282
+
283
+ #: .././admin/ga_dash_settings.php:169
284
+ msgid " show page searches (after each article)"
285
+ msgstr ""
286
+
287
+ #: .././admin/ga_dash_settings.php:178 .././admin/ga_dash_settings.php:391
288
+ #: .././admin/ga_dash_settings.php:739 .././admin/ga_dash_settings.php:1053
289
+ #: .././admin/ga_dash_settings.php:1456
290
+ msgid "Save Changes"
291
+ msgstr ""
292
+
293
+ #: .././admin/ga_dash_settings.php:212
294
+ msgid "Google Analytics Dashboard Settings"
295
+ msgstr ""
296
+
297
+ #: .././admin/ga_dash_settings.php:275
298
+ msgid "disable Switch Profile/View functionality"
299
+ msgstr ""
300
+
301
+ #: .././admin/ga_dash_settings.php:279
302
+ msgid "Real-Time Settings"
303
+ msgstr ""
304
+
305
+ #: .././admin/ga_dash_settings.php:282
306
+ msgid "Maximum number of pages to display on real-time tab:"
307
+ msgstr ""
308
+
309
+ #: .././admin/ga_dash_settings.php:287
310
+ msgid "(find out more"
311
+ msgstr ""
312
+
313
+ #: .././admin/ga_dash_settings.php:289 .././admin/ga_dash_settings.php:324
314
+ msgid "about this feature"
315
+ msgstr ""
316
+
317
+ #: .././admin/ga_dash_settings.php:290 .././admin/ga_dash_settings.php:325
318
+ msgid ")"
319
+ msgstr ""
320
+
321
+ #: .././admin/ga_dash_settings.php:293
322
+ msgid "Additional Stats & Charts"
323
+ msgstr ""
324
+
325
+ #: .././admin/ga_dash_settings.php:306
326
+ msgid " show Geo Map chart for sessions"
327
+ msgstr ""
328
+
329
+ #: .././admin/ga_dash_settings.php:311
330
+ msgid "Target Geo Map to region:"
331
+ msgstr ""
332
+
333
+ #: .././admin/ga_dash_settings.php:316
334
+ msgid "and render top"
335
+ msgstr ""
336
+
337
+ #: .././admin/ga_dash_settings.php:321
338
+ msgid "cities (find out more"
339
+ msgstr ""
340
+
341
+ #: .././admin/ga_dash_settings.php:339
342
+ msgid " show traffic overview"
343
+ msgstr ""
344
+
345
+ #: .././admin/ga_dash_settings.php:353
346
+ msgid " show top pages"
347
+ msgstr ""
348
+
349
+ #: .././admin/ga_dash_settings.php:367
350
+ msgid " show top referrers"
351
+ msgstr ""
352
+
353
+ #: .././admin/ga_dash_settings.php:381
354
+ msgid " show top searches"
355
+ msgstr ""
356
+
357
+ #: .././admin/ga_dash_settings.php:430
358
+ msgid "Google Analytics Tracking Code"
359
+ msgstr ""
360
+
361
+ #: .././admin/ga_dash_settings.php:440
362
+ msgid "Tracking Settings"
363
+ msgstr ""
364
+
365
+ #: .././admin/ga_dash_settings.php:443
366
+ msgid "Tracking Options:"
367
+ msgstr ""
368
+
369
+ #: .././admin/ga_dash_settings.php:447
370
+ msgid "Disabled"
371
+ msgstr ""
372
+
373
+ #: .././admin/ga_dash_settings.php:449
374
+ msgid "Enabled"
375
+ msgstr ""
376
+
377
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
378
+ msgid "Tracking ID:"
379
+ msgstr ""
380
+
381
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
382
+ msgid "Default URL:"
383
+ msgstr ""
384
+
385
+ #: .././admin/ga_dash_settings.php:459 .././admin/ga_dash_settings.php:991
386
+ msgid "Time Zone:"
387
+ msgstr ""
388
+
389
+ #: .././admin/ga_dash_settings.php:467
390
+ msgid "Basic Tracking"
391
+ msgstr ""
392
+
393
+ #: .././admin/ga_dash_settings.php:473
394
+ msgid "Tracking Type:"
395
+ msgstr ""
396
+
397
+ #: .././admin/ga_dash_settings.php:477
398
+ msgid "Classic Analytics"
399
+ msgstr ""
400
+
401
+ #: .././admin/ga_dash_settings.php:479
402
+ msgid "Universal Analytics"
403
+ msgstr ""
404
+
405
+ #: .././admin/ga_dash_settings.php:493
406
+ msgid " anonymize IPs while tracking"
407
+ msgstr ""
408
+
409
+ #: .././admin/ga_dash_settings.php:508
410
+ msgid " enable remarketing, demographics and interests reports"
411
+ msgstr ""
412
+
413
+ #: .././admin/ga_dash_settings.php:512
414
+ msgid "Events Tracking"
415
+ msgstr ""
416
+
417
+ #: .././admin/ga_dash_settings.php:525
418
+ msgid " track downloads, mailto and outbound links"
419
+ msgstr ""
420
+
421
+ #: .././admin/ga_dash_settings.php:529
422
+ msgid "Downloads Regex:"
423
+ msgstr ""
424
+
425
+ #: .././admin/ga_dash_settings.php:546
426
+ msgid " track affiliate links matching this regex"
427
+ msgstr ""
428
+
429
+ #: .././admin/ga_dash_settings.php:550
430
+ msgid "Affiliates Regex:"
431
+ msgstr ""
432
+
433
+ #: .././admin/ga_dash_settings.php:567
434
+ msgid " track fragment identifiers, hashmarks (#) in URI links"
435
+ msgstr ""
436
+
437
+ #: .././admin/ga_dash_settings.php:571
438
+ msgid "Custom Definitions"
439
+ msgstr ""
440
+
441
+ #: .././admin/ga_dash_settings.php:574
442
+ msgid "Authors:"
443
+ msgstr ""
444
+
445
+ #: .././admin/ga_dash_settings.php:584
446
+ msgid "Publication Year:"
447
+ msgstr ""
448
+
449
+ #: .././admin/ga_dash_settings.php:594
450
+ msgid "Categories:"
451
+ msgstr ""
452
+
453
+ #: .././admin/ga_dash_settings.php:604
454
+ msgid "User Type:"
455
+ msgstr ""
456
+
457
+ #: .././admin/ga_dash_settings.php:614
458
+ msgid "Advanced Tracking"
459
+ msgstr ""
460
+
461
+ #: .././admin/ga_dash_settings.php:617
462
+ msgid "Page Speed SR:"
463
+ msgstr ""
464
+
465
+ #: .././admin/ga_dash_settings.php:635
466
+ msgid " exclude events from bounce-rate calculation"
467
+ msgstr ""
468
+
469
+ #: .././admin/ga_dash_settings.php:649
470
+ msgid " enable enhanced link attribution"
471
+ msgstr ""
472
+
473
+ #: .././admin/ga_dash_settings.php:663
474
+ msgid " enable AdSense account linking"
475
+ msgstr ""
476
+
477
+ #: .././admin/ga_dash_settings.php:678
478
+ msgid " enable cross domain tracking"
479
+ msgstr ""
480
+
481
+ #: .././admin/ga_dash_settings.php:682
482
+ msgid "Cross Domains:"
483
+ msgstr ""
484
+
485
+ #: .././admin/ga_dash_settings.php:692 .././admin/ga_dash_settings.php:1396
486
+ msgid "Exclude Tracking"
487
+ msgstr ""
488
+
489
+ #: .././admin/ga_dash_settings.php:695
490
+ msgid "Exclude tracking for:"
491
+ msgstr ""
492
+
493
+ #: .././admin/ga_dash_settings.php:769 .././admin/ga_dash_settings.php:1138
494
+ msgid ""
495
+ "Loading the required libraries. If this results in a blank screen or a fatal "
496
+ "error, try this solution:"
497
+ msgstr ""
498
+
499
+ #: .././admin/ga_dash_settings.php:781 .././admin/ga_dash_settings.php:1150
500
+ msgid "Plugin authorization succeeded."
501
+ msgstr ""
502
+
503
+ #: .././admin/ga_dash_settings.php:796 .././admin/ga_dash_settings.php:1173
504
+ msgid ""
505
+ "The access code is <strong>NOT</strong> your <strong>Tracking ID</strong> "
506
+ "(UA-XXXXX-X). Try again, and use the red link to get your access code"
507
+ msgstr ""
508
+
509
+ #: .././admin/ga_dash_settings.php:822 .././admin/ga_dash_settings.php:1209
510
+ msgid "Cleared Cache."
511
+ msgstr ""
512
+
513
+ #: .././admin/ga_dash_settings.php:831 .././admin/ga_dash_settings.php:1218
514
+ msgid "Token Reseted and Revoked."
515
+ msgstr ""
516
+
517
+ #: .././admin/ga_dash_settings.php:838 .././admin/ga_dash_settings.php:1225
518
+ msgid "Dumping log data."
519
+ msgstr ""
520
+
521
+ #: .././admin/ga_dash_settings.php:848 .././admin/ga_dash_settings.php:1235
522
+ msgid "All other domains/properties were removed."
523
+ msgstr ""
524
+
525
+ #: .././admin/ga_dash_settings.php:859 .././admin/ga_dash_settings.php:1246
526
+ msgid ""
527
+ "PHP CURL is required. Ask your hosting provider to install/enable PHP CURL!"
528
+ msgstr ""
529
+
530
+ #: .././admin/ga_dash_settings.php:863 .././admin/ga_dash_settings.php:1250
531
+ msgid "Google Analytics Settings"
532
+ msgstr ""
533
+
534
+ #: .././admin/ga_dash_settings.php:872 .././admin/ga_dash_settings.php:1258
535
+ msgid ""
536
+ "Something went wrong. Please check the Debugging Data section for possible "
537
+ "errors"
538
+ msgstr ""
539
+
540
+ #: .././admin/ga_dash_settings.php:878 .././admin/ga_dash_settings.php:1263
541
+ msgid "Use the red link (see below) to generate and get your access code!"
542
+ msgstr ""
543
+
544
+ #: .././admin/ga_dash_settings.php:889 .././admin/ga_dash_settings.php:1297
545
+ msgid "Plugin Authorization"
546
+ msgstr ""
547
+
548
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
549
+ msgid "You should watch the"
550
+ msgstr ""
551
+
552
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
553
+ msgid "video"
554
+ msgstr ""
555
+
556
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
557
+ msgid "and read this"
558
+ msgstr ""
559
+
560
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
561
+ msgid "tutorial"
562
+ msgstr ""
563
+
564
+ #: .././admin/ga_dash_settings.php:893 .././admin/ga_dash_settings.php:1301
565
+ msgid ""
566
+ "before proceeding to authorization. This plugin requires a properly "
567
+ "configured Google Analytics account"
568
+ msgstr ""
569
+
570
+ #: .././admin/ga_dash_settings.php:905 .././admin/ga_dash_settings.php:1312
571
+ msgid " use your own API Project credentials"
572
+ msgstr ""
573
+
574
+ #: .././admin/ga_dash_settings.php:912 .././admin/ga_dash_settings.php:1319
575
+ msgid "API Key:"
576
+ msgstr ""
577
+
578
+ #: .././admin/ga_dash_settings.php:919 .././admin/ga_dash_settings.php:1326
579
+ msgid "Client ID:"
580
+ msgstr ""
581
+
582
+ #: .././admin/ga_dash_settings.php:926 .././admin/ga_dash_settings.php:1334
583
+ msgid "Client Secret:"
584
+ msgstr ""
585
+
586
+ #: .././admin/ga_dash_settings.php:944 .././admin/ga_dash_settings.php:1352
587
+ msgid "Clear Authorization"
588
+ msgstr ""
589
+
590
+ #: .././admin/ga_dash_settings.php:948 .././admin/ga_dash_settings.php:1067
591
+ #: .././admin/ga_dash_settings.php:1355 .././admin/ga_dash_settings.php:1469
592
+ msgid "Clear Cache"
593
+ msgstr ""
594
+
595
+ #: .././admin/ga_dash_settings.php:957
596
+ msgid "Select Domain:"
597
+ msgstr ""
598
+
599
+ #: .././admin/ga_dash_settings.php:970 .././admin/ga_dash_settings.php:1387
600
+ msgid "Property not found"
601
+ msgstr ""
602
+
603
+ #: .././admin/ga_dash_settings.php:975
604
+ msgid "and/or hide all other domains"
605
+ msgstr ""
606
+
607
+ #: .././admin/ga_dash_settings.php:978
608
+ msgid "Hide Now"
609
+ msgstr ""
610
+
611
+ #: .././admin/ga_dash_settings.php:997
612
+ msgid "Theme Color:"
613
+ msgstr ""
614
+
615
+ #: .././admin/ga_dash_settings.php:1007
616
+ msgid "A new frontend widget is available! To enable it, go to"
617
+ msgstr ""
618
+
619
+ #: .././admin/ga_dash_settings.php:1007
620
+ msgid "Appearance -> Widgets"
621
+ msgstr ""
622
+
623
+ #: .././admin/ga_dash_settings.php:1007
624
+ msgid "and look for Google Analytics Dashboard."
625
+ msgstr ""
626
+
627
+ #: .././admin/ga_dash_settings.php:1013 .././admin/ga_dash_settings.php:1073
628
+ #: .././admin/ga_dash_settings.php:1416 .././admin/ga_dash_settings.php:1475
629
+ msgid "Debugging Data"
630
+ msgstr ""
631
+
632
+ #: .././admin/ga_dash_settings.php:1180
633
+ msgid "Properties refreshed."
634
+ msgstr ""
635
+
636
+ #: .././admin/ga_dash_settings.php:1274
637
+ msgid "Network Setup"
638
+ msgstr ""
639
+
640
+ #: .././admin/ga_dash_settings.php:1289
641
+ msgid " use a single Google Analytics account for the entire network"
642
+ msgstr ""
643
+
644
+ #: .././admin/ga_dash_settings.php:1358
645
+ msgid "Refresh Properties"
646
+ msgstr ""
647
+
648
+ #: .././admin/ga_dash_settings.php:1364
649
+ msgid "Properties/Views Settings"
650
+ msgstr ""
651
+
652
+ #: .././admin/ga_dash_settings.php:1409
653
+ msgid " exclude Super Admin tracking for the entire network"
654
+ msgstr ""
655
+
656
+ #: .././admin/ga_dash_settings.php:1537
657
+ msgid "Setup Tutorial & Demo"
658
+ msgstr ""
659
+
660
+ #: .././admin/ga_dash_settings.php:1549
661
+ msgid "Support & Reviews"
662
+ msgstr ""
663
+
664
+ #: .././admin/ga_dash_settings.php:1557
665
+ msgid "Plugin documentation and support on"
666
+ msgstr ""
667
+
668
+ #: .././admin/ga_dash_settings.php:1564
669
+ msgid "Your feedback and review are both important,"
670
+ msgstr ""
671
+
672
+ #: .././admin/ga_dash_settings.php:1564
673
+ msgid "rate this plugin"
674
+ msgstr ""
675
+
676
+ #: .././admin/ga_dash_settings.php:1569
677
+ msgid "Further Reading"
678
+ msgstr ""
679
+
680
+ #: .././admin/ga_dash_settings.php:1576
681
+ msgid "Improve search rankings"
682
+ msgstr ""
683
+
684
+ #: .././admin/ga_dash_settings.php:1576
685
+ msgid "by moving your website to HTTPS/SSL."
686
+ msgstr ""
687
+
688
+ #: .././admin/ga_dash_settings.php:1582
689
+ msgid "Other"
690
+ msgstr ""
691
+
692
+ #: .././admin/ga_dash_settings.php:1582
693
+ msgid "WordPress Plugins"
694
+ msgstr ""
695
+
696
+ #: .././admin/ga_dash_settings.php:1582
697
+ msgid "written by the same author"
698
+ msgstr ""
699
+
700
+ #: .././admin/ga_dash_settings.php:1587
701
+ msgid "Other Services"
702
+ msgstr ""
703
+
704
+ #: .././admin/ga_dash_settings.php:1594
705
+ msgid "Speed up your website and plug into a whole"
706
+ msgstr ""
707
+
708
+ #: .././admin/ga_dash_settings.php:1594
709
+ msgid "new level of site speed"
710
+ msgstr ""
711
+
712
+ #: .././admin/ga_dash_settings.php:1600
713
+ msgid "Web Analytics"
714
+ msgstr ""
715
+
716
+ #: .././admin/ga_dash_settings.php:1600
717
+ msgid "service with users tracking at IP level."
718
+ msgstr ""
719
+
720
+ #: .././front/frontend.php:112
721
+ msgid "Views vs UniqueViews"
722
+ msgstr ""
723
+
724
+ #: .././front/frontend.php:168
725
+ msgid "Google Analytics Reports"
726
+ msgstr ""
727
+
728
+ #: .././front/widgets.php:16
729
+ msgid "Will display your google analytics stats in a widget"
730
+ msgstr ""
731
+
732
+ #: .././front/widgets.php:44 .././tools/gapi.php:808
733
+ msgid "trend"
734
+ msgstr ""
735
+
736
+ #: .././front/widgets.php:144
737
+ msgid "Period:"
738
+ msgstr ""
739
+
740
+ #: .././front/widgets.php:144
741
+ msgid "Sessions:"
742
+ msgstr ""
743
+
744
+ #: .././front/widgets.php:150
745
+ msgid "generated by"
746
+ msgstr ""
747
+
748
+ #: .././front/widgets.php:164
749
+ msgid "Google Analytics Stats"
750
+ msgstr ""
751
+
752
+ #: .././front/widgets.php:171
753
+ msgid "Title:"
754
+ msgstr ""
755
+
756
+ #: .././front/widgets.php:178
757
+ msgid "Display:"
758
+ msgstr ""
759
+
760
+ #: .././front/widgets.php:182
761
+ msgid "Chart & Totals"
762
+ msgstr ""
763
+
764
+ #: .././front/widgets.php:183
765
+ msgid "Chart"
766
+ msgstr ""
767
+
768
+ #: .././front/widgets.php:184
769
+ msgid "Totals"
770
+ msgstr ""
771
+
772
+ #: .././front/widgets.php:188
773
+ msgid "Anonimize chart&#39;s stats:"
774
+ msgstr ""
775
+
776
+ #: .././front/widgets.php:195
777
+ msgid "Stats for:"
778
+ msgstr ""
779
+
780
+ #: .././front/widgets.php:205
781
+ msgid "Give credits:"
782
+ msgstr ""
783
+
784
+ #: .././tools/gapi.php:140
785
+ msgid "Use this link to get your access code:"
786
+ msgstr ""
787
+
788
+ #: .././tools/gapi.php:140
789
+ msgid "Get Access Code"
790
+ msgstr ""
791
+
792
+ #: .././tools/gapi.php:145 .././tools/gapi.php:149
793
+ msgid "Use the red link to get your access code!"
794
+ msgstr ""
795
+
796
+ #: .././tools/gapi.php:145
797
+ msgid "Access Code:"
798
+ msgstr ""
799
+
800
+ #: .././tools/gapi.php:157
801
+ msgid "Save Access Code"
802
+ msgstr ""
803
+
804
+ #: .././tools/gapi.php:380
805
+ msgid "Organic Searches"
806
+ msgstr ""
807
+
808
+ #: .././tools/gapi.php:391
809
+ msgid "Hour"
810
+ msgstr ""
811
+
812
+ #: .././tools/gapi.php:394 .././tools/gapi.php:808 .././tools/gapi.php:852
813
+ msgid "Date"
814
+ msgstr ""
815
+
816
+ #: .././tools/gapi.php:500 .././tools/gapi.php:852
817
+ msgid "Views"
818
+ msgstr ""
819
+
820
+ #: .././tools/gapi.php:611
821
+ msgid "Countries"
822
+ msgstr ""
823
+
824
+ #: .././tools/gapi.php:629
825
+ msgid "Cities from"
826
+ msgstr ""
827
+
828
+ #: .././tools/gapi.php:691
829
+ msgid "Channels"
830
+ msgstr ""
831
+
832
+ #: .././tools/gapi.php:754
833
+ msgid "Type"
834
+ msgstr ""
835
+
836
+ #: .././tools/gapi.php:852
837
+ msgid "UniqueViews"
838
+ msgstr ""
839
+
840
+ #: .././tools/gapi.php:899
841
+ msgid "Top Searches"
842
+ msgstr ""
843
+
844
+ #~ msgid ""
845
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
846
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
847
+ #~ msgstr ""
848
+ #~ " (watch this <a href='http://deconf.com/projects/google-analytics-"
849
+ #~ "dashboard-for-wordpress/' target='_blank'>Step by step video tutorial</a>)"
readme.txt ADDED
@@ -0,0 +1,533 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Google Analytics Dashboard for WP ===
2
+ Contributors: deconf
3
+ Donate link: https://deconf.com/donate/
4
+ Tags: google,analytics,google analytics,dashboard,analytics dashboard,google analytics dashboard,google analytics widget,tracking,realtime,wpmu,multisite
5
+ Requires at least: 2.8
6
+ Tested up to: 4.1
7
+ Stable tag: 4.4
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Displays Google Analytics reports and real-time statistics in your WordPress Dashboard. Inserts the latest tracking code in every page of your site.
12
+
13
+ == Description ==
14
+ Using a widget, [Google Analytics Dashboard](https://deconf.com/google-analytics-dashboard-wordpress/) displays detailed analytics info and statistics about: number of visits (sessions), number of visitors (users), bounce rates, organic searches, pages per visit directly on your WordPress Dashboard.
15
+
16
+ Authorized users can also view statistics like views, unique views and searches, on frontend, at the end of each article.
17
+
18
+ > <strong>Google Analytics Dashboard on GitHub</strong><br>
19
+ > You can submit pull requests, feature requests or bugs on [Google Analytics Dashboard](https://github.com/deconf/Google-Analytics-Dashboard-for-WP) repository.
20
+
21
+ = Google Analytics Real-Time =
22
+
23
+ Google Analytics reports, in real-time, on your dashboard screen:
24
+
25
+ - displays the total number of visitors in real-time
26
+ - real-time statistics about your acquisition channels
27
+ - per page real-time reports with traffic sources details
28
+
29
+ = Google Analytics Reports =
30
+
31
+ The reports you need, in your dashboard and on site's frontend:
32
+
33
+ - you can access all websites statistics in a single widget (websites within same Google Account)
34
+ - option to choose a default color for your charts, graphs and maps
35
+ - visitors by pages, referrers and searches reports
36
+ - location reports, displaying visitors by country on a Geo Map and in a table chart
37
+ - local websites and business have an option to display cities, instead of countries, on a regional map and in a table chart
38
+ - traffic overview reports with details about acquisition channels, social networks, search engines, traffic mediums and visitor type
39
+ - user access level settings for Backend statistics and analytics reports
40
+ - user access level settings for Frontend analytics data and reports
41
+ - option to display Google Analytics statistics on frontend, at the end of each article
42
+ - frontend widget with website's analytics stats and analytics data anonymization feature
43
+ - localization support, a POT file is available for translations.
44
+
45
+ = Google Analytics Tracking =
46
+
47
+ Install the Google Analytics tracking code in less than a minute and customize it as you wish:
48
+
49
+ - enable/disable google analytics tracking code
50
+ - switch between universal analytics and classic analytics tracking methods
51
+ - supports analytics.js tracking for compatibility with Universal Analytics web property
52
+ - supports ga.js tracking for compatibility with Classic Analytics web property
53
+ - automatically generates and inserts the Google Analytics tracking code
54
+ - IP address anonymization feature
55
+ - enhanced link attribution feature
56
+ - remarketing, demographics and interests tracking
57
+ - Google AdSense account linking
58
+ - page speed sampling rate customization
59
+ - track events feature: track downloads, emails and outbound links
60
+ - exclude traffic based on user roles
61
+ - option to exclude event tracking from bounce-rate calculation
62
+ - multiple domains / cross domain tracking
63
+ - action hook for tracking code customization
64
+ - track authors, publication year, categories and user engagement using Google Analytics custom dimensions
65
+ - affiliate links tracking using Google Analytics events
66
+ - track fragment identifiers, hash marks (#) in URI links
67
+
68
+ = WodrPress Multisite features =
69
+
70
+ * option to choose between three working modes:
71
+ * <em>Mode 1:</em> network activated while allowing each site administrator to authorize the plugin using a different Google Analytics account
72
+ * <em>Mode 2:</em> network activated while authorizing an entire WordPress Network using a single Google Analytics account. You'll be able to assign a property/view to each site, from your Network Admin screen
73
+ * <em>Mode 3:</em> network deactivated allowing each site owner to activate and authorize the plugin
74
+ * option to exclude Super Admins from tracking
75
+
76
+ = Translations =
77
+
78
+ Google Analytics Dashboard has been translated into the following languages: Arabic, English, French, German, Hungarian, Italian, Polish, Portuguese, Spanish
79
+
80
+ = Further reading and info =
81
+
82
+ * Homepage of [Google Analytics Dashboard](https://deconf.com/google-analytics-dashboard-wordpress/) for WordPress
83
+ * Other [WordPress Plugins](https://deconf.com/wordpress/) by same author
84
+ * You can also find this plugin on [Google Analytics | Partners](https://www.google.com/analytics/partners/company/5127525902581760/gadp/5629499534213120/app/5707702298738688/listing/5639274879778816) Gallery
85
+
86
+ == Installation ==
87
+
88
+ 1. Upload the full directory into your wp-content/plugins directory
89
+ 2. Activate the plugin at the plugin administration page
90
+ 3. Open the plugin configuration page, which is located under "Google Analytics" menu (optionally enter your API Key, Client Secret and Client ID).
91
+ 4. Authorize the plugin using the 'Authorize Plugin' button
92
+ 5. Go back to the plugin configuration page, which is located under "Google Analytics" menu to update/set your settings.
93
+ 6. Use Google Analytics Tracking options to configure/enable/disable tracking
94
+
95
+ The documentation, tutorials and a short demo is available here: [Google Analytics Dashboard video tutorial](https://deconf.com/google-analytics-dashboard-wordpress/)
96
+
97
+ == Frequently Asked Questions ==
98
+
99
+ = I have several WordPress websites, do I need an API Project for each one? =
100
+
101
+ No, you don't. You can use the same API Project (same API Key, Client Secret and Client ID) for all your websites.
102
+
103
+ = Some settings are missing in your video tutorial ... =
104
+
105
+ We are constantly improving our plugin, sometimes the video tutorial may be a little outdated.
106
+
107
+ = More Questions? =
108
+
109
+ A dedicated section for WordPress Plugins is available here: [Wordpress Plugins Support](https://deconf.com/ask/)
110
+
111
+ == Screenshots ==
112
+
113
+ 1. Google Analytics Dashboard Blue Color
114
+ 2. Google Analytics Dashboard Real-Time
115
+ 3. Google Analytics Dashboard Settings
116
+ 4. Google Analytics Dashboard Geo Map
117
+ 5. Google Analytics Dashboard Top Pages, Top Referrers and Top Searches
118
+ 6. Google Analytics Dashboard Traffic Overview
119
+ 7. Google Analytics Dashboard statistics per page on Frontend
120
+ 8. Google Analytics Dashboard cities on region map
121
+ 9. Google Analytics Dashboard Widget
122
+
123
+ == License ==
124
+
125
+ This plugin it's released under the GPLv2, you can use it free of charge on your personal or commercial website.
126
+
127
+ == Changelog ==
128
+
129
+ = 4.4 =
130
+ - Bug Fix: frontend reports and widget are not responsive
131
+ - Bug Fix: random notices for today and yesterday reports
132
+ - Enhancement: Italian translation, updated by [Leo](https://www.facebook.com/leo.thestrategist)
133
+ - Enhancement: admin widget responsive design and optimizations
134
+ - Enhancement: added acquisition channel reports
135
+ - Enhancement: added acquisition social networks reports
136
+ - Enhancement: added acquisition search engines reports
137
+ - Enhancement: new location report and countries/cities list table
138
+ - Enhancement: new pages report (removed top 24 limit)
139
+ - Enhancement: new searches report (removed top 24 limit)
140
+ - Enhancement: new referrers report (removed top 24 limit)
141
+ - Enhancement: frontend, per page reports (removed top 24 limit)
142
+ - Enhancement: added campaigns in real-time report/screen
143
+ - Enhancement: asynchronous reports loading and speed improvements
144
+ - Enhancement: code optimization for all frontend and backend features
145
+ - Enhancement: finished the error standardization process; easier debugging
146
+ - Enhancement: GAPI library update
147
+
148
+ = 4.3.11 =
149
+ - Bug Fix: improvements on QPS management
150
+ - Bug Fix: fall-back to world map when a wrong country code is entered
151
+ - Bug Fix: removed double transient call on successful authorization
152
+ - Bug Fix: PHP warning when authorizing without a Google Analytics account
153
+ - Bug Fix: switch back to initial blog after completing an error clean up in multisite mode
154
+ - Enhancement: clear all errors on version change
155
+ - Enhancement: grid lines are now transparent
156
+ - Enhancement: responsive design improvements for admin widget
157
+ - Enhancement: add css and js version number
158
+
159
+ = 4.3.10 =
160
+ - Bug Fix: removed the PHP debugging log for frontend queries
161
+ - Enhancement: adding library conflict notice in General Settings
162
+ - Enhancement: better handling of API errors
163
+ - Enhancement: added an error when user enters the Tracking ID instead of an access code
164
+ - Enhancement: improved error reporting for frontend stats and widgets
165
+
166
+ = 4.3.9 =
167
+ - Enhancement: marking classes as final
168
+ - Enhancement: re-design the frontend widget
169
+ - Enhancement: responsive design for frontend widget
170
+ - Enhancement: responsive design for page reports
171
+ - Enhancement: error codes standardization
172
+ - Enhancement: frontend stats are now able to display the error number
173
+ - Bug Fix: load jsapi only when the frontend widget is active
174
+ - Bug Fix: javascript errors while resizing window
175
+ - Bug Fix: real-time component not loading properly in certain conditions
176
+ - Bug Fix: stop retrying when a daily limit has exceeded
177
+
178
+ = 4.3.8 =
179
+ - Enhancement: frontend component re-design
180
+ - Enhancement: optimizing frontend component to improve page loading speed
181
+ - Enhancement: optimizing frontend component to minimize GAPI requests
182
+ - Enhancement: loading jsapi using wp-enqueue-script
183
+ - Enhancement: better escaping to avoid javascript errors
184
+
185
+ = 4.3.7 =
186
+ - Enhancement: option to exclude Super Administrator tracking for the entire network, suggested by [Marie](https://wordpress.org/support/profile/yamaryam)
187
+ - Bug Fix: warning during Network Activate, reported by [JoelStickney](https://wordpress.org/support/profile/joelstickney)
188
+ - Bug Fix: track affiliates while downloads, mailto and outbound links tracking is disabled
189
+ - Bug Fix: avoid reload loops for realtime component
190
+ - Enhancement: track fragment identifiers, hashmarks (#) in URI links
191
+ - Enhancement: improving i18n
192
+ - Enhancement: moving bounce-rate option to Advanced Tracking
193
+
194
+ = 4.3.6 =
195
+ - Bug Fix: clear cache not working properly
196
+ - Bug Fix: error correction in Spanish localization file
197
+
198
+ = 4.3.5 =
199
+ - Bug Fix: authors custom dimension not working for pages, reported by [tylerarnold23](https://wordpress.org/support/profile/tylerarnold23)
200
+ - Bug Fix: outbound detection
201
+ - Bug Fix: fixed unicode issue, reported by [Haruka_Suzuki](https://wordpress.org/support/profile/haruka_suzuki)
202
+ - Bug Fix: properly display cities with same name from different regions, reported by [matt6303](https://wordpress.org/support/profile/matt6303)
203
+ - Enhancement: removed image extensions from default download filter
204
+ - Enhancement: add day of week to dashboard dates, suggested by [nethrs](https://deconf.com/ask/author/timnethers/)
205
+ - Enhancement: Arabic translation, translated by [Ahmed Majed](https://deconf.com/ask/author/almobdaa/)
206
+ - Bug Fix: multiple fixes for real time reports
207
+
208
+ = 4.3.4 =
209
+ - Enhancement: ga_dash_addtrackingcode action hook
210
+ - Enhancement: French translation
211
+ - Enhancement: cross domain tracking support
212
+ - Enhancement: Google Analytics custom definitions, using custom dimensions to track authors, years, categories and engagement
213
+ - Enhancement: support for affiliate links tracking
214
+ - Enhancement: never treat downloads as outbound links
215
+
216
+ = 4.3.3 =
217
+ - Enhancement: added Polish translation
218
+ - Bug Fix: missing icon and wrong link in GADWP settings
219
+ - Enhancement: moving Page Speed SR to top, to avoid some confusions
220
+ - Enhancement: added plugin version to debugging data
221
+
222
+ = v4.3.2 =
223
+ - Bug Fix: fixes for multisite with a single Google Account
224
+ - Bug Fix: notice while displaying searches report
225
+ - Bug Fix: downloads regex update
226
+ - Bug Fix: always exclude outbound links from bounce-rate calculation
227
+ - Enhancement: Adsense account linking
228
+ - Enhancement: adjust page speed sample rate
229
+ - Enhancement: exclude event tracking from bounce-rate calculation for downloads and mailto
230
+ - Enhancement: reset downloads filters to default when empty
231
+ - deprecate: classic analytics
232
+
233
+ = v4.3.1 =
234
+ - Bug Fix: link on top referrers list not working
235
+ - allowing today as default stats
236
+ - Bug Fix: profiles refresh issue
237
+ - Enhancement: remove table borders on frontend widget
238
+ - Bug Fix: multiple fixes for network mode
239
+ - updated GAPI libarry
240
+ - using autloader for PHP 5.3.0 and greater
241
+ - security improvements
242
+ - tracking code update
243
+
244
+ = v4.3 =
245
+ - responsive Google Charts
246
+ - single authorization for multisite
247
+ - Bug Fix: SERVER_ADDR PHP notice
248
+ - Bug Fix: notices on admin dashboard
249
+ - additional data validation and sanitizing
250
+ - Bug Fix: realtime switching profile functionality
251
+ - multisite: blog's cleanup on uninstall
252
+ - deprecating custom tracking code
253
+
254
+ = v4.2.21 =
255
+ - added hungarian translation
256
+ - added italian translation
257
+ - Bug Fix: escaping characters in google charts
258
+ - new filter on frontend widget
259
+ - cache timeout adjustments
260
+ - description update
261
+ - Bug Fix: fatal error on invalid_grant
262
+ - added timestamp on last error
263
+
264
+ = v4.2.20 =
265
+ - Bug Fix: russian country map is not working
266
+ - Bug Fix: only administrator can see stats while using a cache plugin
267
+ - Bug Fix: division by zero on frontend widget
268
+ - added german translation
269
+ - added spanish translation
270
+
271
+ = v4.2.19 =
272
+ - added portuguese translation
273
+ - frontend widget CSS fix
274
+ - added remarketing, demographics and interests tracking support
275
+ - universal analytics is now the default tracking method
276
+ - CSS fix for dashboard widgets
277
+
278
+ = v4.2.18 =
279
+ - translations bugfix
280
+ - menu display tweaks
281
+ - removed debugging log file
282
+ - permissions fix for WPMU
283
+ - URI fix for frontend filters (top pages and top searches)
284
+ - exclude frontend stats in preview mode
285
+ - updated download filters
286
+ - by default administrators are not excluded from tracking
287
+ - bugfix for refresh_profiles() method
288
+
289
+ = v4.2.17 =
290
+ - fixed on/off toggle bug for frontend settings
291
+
292
+ = v4.2.16 =
293
+ - properly nonce verification
294
+
295
+ = v4.2.15 =
296
+ - force token reset procedure when failing to authenticate
297
+ - deleting refresh token transient on uninstall
298
+ - trying to catch all possible exceptions in gapi
299
+ - no token reset on network connection errors
300
+ - fixed screen options bug
301
+ - added capability to select each role for access levels and exclude tracking
302
+ - added links to top pages table
303
+ - added links to top referrers table
304
+ - added option to display Chart&Totals/Chart/Totals to frontend widget
305
+ - retrieving realtime analytics with wp ajax
306
+ - switching to default jquery-ui-tooltip wordpress library
307
+ - fixed settings link not displayed in plugins page
308
+
309
+ = v4.2.14 =
310
+ - bugfix for error reporting
311
+ - custom API credential are now saved before starting the authorization procedure
312
+ - hiding additional info in log data
313
+
314
+ = v4.2.13 =
315
+ - bugfix for I18n
316
+ - implemented a basic debugging log
317
+ - CURL required error messages
318
+ - option to hide all other properties/views from Select Domain list
319
+ - added periodical _transient_timeout cleanup
320
+ - fixed bug in property refresh method
321
+ - disable hide option when none or a single property is available
322
+ - better handling errors when a user authorizes without actually having a Google Analytics account
323
+ - fixed bug in token revoke method
324
+ - fixed bug in token refresh method
325
+ - additional validations on frontend features
326
+
327
+
328
+ = v4.2.12 =
329
+ - refreshing charts when the time interval changes
330
+ - saving last selection
331
+ - minimizing requests by using same query serial for frontend and backend queries
332
+ - fixed bug in dashboard's switch options for non-admins
333
+ - fixed Notice: Undefined index: ga_dash_frontend_stats for new installs
334
+ - no more queries if there is no token
335
+
336
+ = v4.2.11 =
337
+ - added support for enhanced link attribution
338
+ - bugfix on classic tracking code
339
+
340
+ = v4.2.10 =
341
+ - using predefined color for pie charts
342
+
343
+ = v4.2.9b =
344
+ - refresh token handles additional uncaught exceptions
345
+ - partially resolved conflicts with other analytics plugins
346
+
347
+ = v4.2.8b =
348
+ - checkboxes replaced with switch on/off buttons
349
+ - multiple bug fixes
350
+
351
+ = v4.2.7b =
352
+ - plugin code rewritten from scratch
353
+ - new enhanced, user friendly interface
354
+ - added custom tracking code
355
+ - added a new frontend widget
356
+ - cache improvements, loading speeds optimization, less GAPI queries
357
+ - responsive design
358
+
359
+ = v4.2.6 =
360
+ - google analytics api token refresh bugfix
361
+
362
+ = v4.2.5 =
363
+ - corrected wrong analytics stats reporting
364
+
365
+ = v4.2.4 =
366
+ - css fixes
367
+ - clear cache fixes
368
+
369
+ = v4.2.3 =
370
+ - time zone fixes
371
+ - hourly reports for yesterday and today
372
+ - small css fix on frontend
373
+
374
+ = v4.2.2 =
375
+ - small fixes and update
376
+
377
+ = v4.2.1 =
378
+ - fixed Domain and Subdomains tracking code for Universal Analytics
379
+
380
+ = v4.2 =
381
+ - added google analytics real-time support
382
+ - new date ranges: Today, Yesterday, Last 30 Days and Last 90 Days
383
+
384
+ = v4.1.5 =
385
+ - fixed "lightblack" color issue, on geomap, on light theme
386
+ - added cursor:pointer property to class .gabutton
387
+
388
+ = v4.1.4 =
389
+ - added access level option to Additional Backend Settings section
390
+ - added access level option to Additional Frontend Settings section
391
+ - new feature for Geo Map allowing local websites to display cities, instead of countries, on a regional map
392
+ - fixed colors for Geo Chart containing world visits by country
393
+
394
+ = v4.1.3 =
395
+ - solved WooCommerce conflict using .note class
396
+ - added traffic exclusion based on user level access
397
+
398
+ = v4.1.1 =
399
+ - added missing files
400
+ - other minor fixes
401
+
402
+ = v4.1 =
403
+ - added event tracking feature: track downloads, track emails, track outbound links
404
+ - remove trailing comma for IE8 compatibility
405
+
406
+ = v4.0.4 =
407
+ - a better way to retrieve domains and subdomains from profiles
408
+ - remove escaping slashes generating errors on table display
409
+
410
+ = v4.0.3 =
411
+ - improvements on tracking code
412
+ - redundant variable for default domain name
413
+ - fix for "cannot redeclare class URI_Template_Parser" error
414
+ - added Settings to plugins page
415
+ - modified Google Profiles timeouts
416
+
417
+ = v4.0.2 =
418
+ - minimize Google Analytics API requests
419
+ - new warnings available on Admin Option Page
420
+ - avoid any unnecessary profile list update
421
+ - avoid errors output for regular users while adding the tracking code
422
+
423
+ = v4.0.1 =
424
+ - fixed some 'Undefined index' notices
425
+ - cache fix to decrease number of API requests
426
+
427
+ = v4.0 =
428
+
429
+ * simplified authorization process for beginners
430
+ * advanced users can use their own API Project
431
+
432
+ = v3.5.3 =
433
+
434
+ * translation fix, textdomain ga-dash everywhere
435
+
436
+ = v3.5.2 =
437
+
438
+ * some small javascript fixes for google tracking code
439
+
440
+ = v3.5.1 =
441
+
442
+ * renamed function get_main_domain() to ga_dash_get_main_domain
443
+
444
+ = v3.5 =
445
+
446
+ * small bug fix for multiple TLD domains tracking and domain with subdomains tracking
447
+ * added universal analytics support (you can track visits using analytics.js or using ga.js)
448
+
449
+ = v3.4.1 =
450
+
451
+ * switch to domain names instead of profile names on select lists
452
+ * added is_front_page() check to avoid problems in Woocommerce
453
+
454
+ = v3.4 =
455
+
456
+ * i8n improvements
457
+ * RTL improvements
458
+ * usability and accessibility improvements
459
+ * added google analytics tracking features
460
+
461
+ = v3.3.3 =
462
+
463
+ * a better way to determine temp dir for google api cache
464
+
465
+ = v3.3.3 =
466
+
467
+ * added error handles
468
+ * added quick support buttons
469
+ * added Sticky Notes
470
+ * switched from Visits to Views vs UniqueViews on frontpage
471
+ * fixed select lists issues after implementing translation, fixed frontend default google analytics profile
472
+ * added frontpage per article statistics
473
+
474
+ = v3.2 =
475
+
476
+ * added multilingual support
477
+ * small bug fix when locking admins to a single google analytics profile
478
+
479
+ = v3.1 =
480
+
481
+ * added Traffic Overview in Pie Charts
482
+ * added lock google analytics profile feature for Admins
483
+ * code optimization
484
+
485
+ = v3.0 =
486
+
487
+ * added Geo Map, sortable tables
488
+ * minor fixes
489
+
490
+ = v2.5 =
491
+
492
+ * added cache feature
493
+ * simplifying google analytics api authorizing process
494
+
495
+ = v2.0 =
496
+
497
+ * added light theme
498
+ * added top pages tab
499
+ * added top searches tab
500
+ * added top referrers tab
501
+ * added display settings
502
+
503
+ = v1.6 =
504
+
505
+ * admins can jail access level to a single google analytics profile
506
+
507
+ = v1.5 =
508
+
509
+ * added multi-website support
510
+ * table ids and profile names are now automatically retrived from google analytics
511
+
512
+ = v1.4 =
513
+
514
+ * added View access levels (be caution, ex: if level is set to "Authors" than all editors and authors will have view access)
515
+ * fixed menu display issue
516
+
517
+ = v1.3 =
518
+
519
+ * switch to Google API PHP Client 0.6.1
520
+ * resolved some Google Analytics Dashboard conflicts
521
+
522
+ = v1.2.1 =
523
+
524
+ * minor fixes on google analytics api
525
+ * added video tutorials
526
+
527
+ = v1.2 =
528
+
529
+ * minor fixes
530
+
531
+ = v1.0 =
532
+
533
+ * first release
realtime/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png ADDED
Binary file
realtime/jquery/images/ui-bg_flat_75_ffffff_40x100.png ADDED
Binary file
realtime/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png ADDED
Binary file
realtime/jquery/images/ui-bg_glass_65_ffffff_1x400.png ADDED
Binary file
realtime/jquery/images/ui-bg_glass_75_dadada_1x400.png ADDED
Binary file
realtime/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png ADDED
Binary file
realtime/jquery/images/ui-bg_glass_95_fef1ec_1x400.png ADDED
Binary file
realtime/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png ADDED
Binary file
realtime/jquery/images/ui-icons_222222_256x240.png ADDED
Binary file
realtime/jquery/images/ui-icons_2e83ff_256x240.png ADDED
Binary file
realtime/jquery/images/ui-icons_454545_256x240.png ADDED
Binary file
realtime/jquery/images/ui-icons_888888_256x240.png ADDED
Binary file
realtime/jquery/images/ui-icons_cd0a0a_256x240.png ADDED
Binary file
realtime/jquery/jquery.ui.tooltip.html.css ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.9.2 - 2013-09-22
2
+ * http://jqueryui.com
3
+ * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
4
+ .ui-tooltip {
5
+ padding: 8px;
6
+ position: absolute;
7
+ z-index: 9999;
8
+ max-width: 300px;
9
+ -webkit-box-shadow: 0 0 5px #aaa;
10
+ box-shadow: 0 0 5px #aaa
11
+ }
12
+
13
+ * html .ui-tooltip {
14
+ background-image: none
15
+ }
16
+
17
+ body .ui-tooltip {
18
+ border-width: 2px
19
+ }
20
+
21
+ .ui-widget {
22
+ font-family: Verdana, Arial, sans-serif;
23
+ font-size: 1.1em;
24
+ }
25
+
26
+ .ui-widget .ui-widget {
27
+ font-size: 1em;
28
+ }
29
+
30
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button
31
+ {
32
+ font-family: Verdana, Arial, sans-serif;
33
+ font-size: 1em;
34
+ }
35
+
36
+ .ui-widget-content {
37
+ border: 1px solid #aaaaaa;
38
+ background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50%
39
+ repeat-x;
40
+ color: #222222;
41
+ }
42
+
43
+ .ui-widget-content a {
44
+ color: #222222;
45
+ }
46
+
47
+ .ui-widget-header {
48
+ border: 1px solid #aaaaaa;
49
+ background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)
50
+ 50% 50% repeat-x;
51
+ color: #222222;
52
+ font-weight: bold;
53
+ }
54
+
55
+ .ui-widget-header a {
56
+ color: #222222;
57
+ }
realtime/jquery/jquery.ui.tooltip.html.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ jQuery(function () {
2
+ jQuery(document).tooltip({
3
+ content: function () {
4
+ return jQuery(this).prop('title');
5
+ }
6
+ });
7
+ });
tools/autoload.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ function google_api_php_client_autoload_gadwp($className) {
19
+ $classPath = explode('_', $className);
20
+ if ($classPath[0] != 'Google') {
21
+ return;
22
+ }
23
+ if (count($classPath) > 3) {
24
+ // Maximum class file path depth in this project is 3.
25
+ $classPath = array_slice($classPath, 0, 3);
26
+ }
27
+ $filePath = dirname(__FILE__) . '/src/' . implode('/', $classPath) . '.php';
28
+ if (file_exists($filePath)) {
29
+ require_once($filePath);
30
+ }
31
+ }
32
+
33
+ spl_autoload_register('google_api_php_client_autoload_gadwp');
tools/gapi.php ADDED
@@ -0,0 +1,971 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ if (! class_exists('GADASH_GAPI')) {
9
+
10
+ final class GADASH_GAPI
11
+ {
12
+
13
+ public $client, $service;
14
+
15
+ public $country_codes;
16
+
17
+ public $timeshift;
18
+
19
+ private $error_timeout;
20
+
21
+ private $managequota;
22
+
23
+ function __construct()
24
+ {
25
+ global $GADASH_Config;
26
+ if (! function_exists('curl_version')) {
27
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': CURL disabled. Please enable CURL!');
28
+ return;
29
+ }
30
+
31
+ require 'autoload.php';
32
+
33
+ $this->client = new Google_Client();
34
+ $this->client->setScopes('https://www.googleapis.com/auth/analytics.readonly');
35
+ $this->client->setAccessType('offline');
36
+ $this->client->setApplicationName('Google Analytics Dashboard');
37
+ $this->client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
38
+
39
+ $this->set_error_timeout();
40
+ $this->managequota = 'u' . get_current_user_id() . 's' . get_current_blog_id();
41
+
42
+ if ($GADASH_Config->options['ga_dash_userapi']) {
43
+ $this->client->setClientId($GADASH_Config->options['ga_dash_clientid']);
44
+ $this->client->setClientSecret($GADASH_Config->options['ga_dash_clientsecret']);
45
+ $this->client->setDeveloperKey($GADASH_Config->options['ga_dash_apikey']);
46
+ } else {
47
+ $this->client->setClientId('65556128781.apps.googleusercontent.com');
48
+ $this->client->setClientSecret('Kc7888wgbc_JbeCpbFjnYpwE');
49
+ $this->client->setDeveloperKey('AIzaSyBG7LlUoHc29ZeC_dsShVaBEX15SfRl_WY');
50
+ }
51
+
52
+ $this->service = new Google_Service_Analytics($this->client);
53
+
54
+ if ($GADASH_Config->options['ga_dash_token']) {
55
+ $token = $GADASH_Config->options['ga_dash_token'];
56
+ $token = $this->ga_dash_refresh_token();
57
+ if ($token) {
58
+ $this->client->setAccessToken($token);
59
+ }
60
+ }
61
+ }
62
+
63
+ private function set_error_timeout()
64
+ {
65
+ $midnight = strtotime("tomorrow 00:00:00"); // UTC midnight
66
+ $midnight = $midnight + 8 * 3600; // UTC 8 AM
67
+ $this->error_timeout = $midnight - time();
68
+ return;
69
+ }
70
+
71
+ private function prepare_json($value)
72
+ {
73
+ return esc_html(str_replace('\\', '&#92;', stripslashes($value)));
74
+ }
75
+
76
+ /**
77
+ * Handles errors returned by GAPI
78
+ *
79
+ * @return boolean
80
+ */
81
+ function gapi_errors_handler()
82
+ {
83
+ $errors = (array) get_transient('ga_dash_gapi_errors');
84
+
85
+ if (isset($errors[0]['reason'])) {
86
+
87
+ if ($errors[0]['reason'] == 'dailyLimitExceeded') {
88
+ return TRUE;
89
+ }
90
+
91
+ if ($errors[0]['reason'] == 'insufficientPermissions') {
92
+ $this->ga_dash_reset_token(false);
93
+ return TRUE;
94
+ }
95
+
96
+ if ($errors[0]['reason'] == 'invalidCredentials' || $errors[0]['reason'] == 'authError') {
97
+ $this->ga_dash_reset_token(false);
98
+ return TRUE;
99
+ }
100
+
101
+ if ($errors[0]['reason'] == 'invalidParameter' or $errors[0]['reason'] == 'badRequest') {
102
+ return TRUE;
103
+ }
104
+ }
105
+
106
+ return FALSE;
107
+ }
108
+
109
+ /**
110
+ * Calculates proper timeouts for each GAPI query
111
+ *
112
+ * @param
113
+ * $daily
114
+ * @return number
115
+ */
116
+ function get_timeouts($daily)
117
+ {
118
+ $local_time = time() + $this->timeshift;
119
+ if ($daily) {
120
+ $nextday = explode('-', date('n-j-Y', strtotime(' +1 day', $local_time)));
121
+ $midnight = mktime(0, 0, 0, $nextday[0], $nextday[1], $nextday[2]);
122
+ return $midnight - $local_time;
123
+ } else {
124
+ $nexthour = explode('-', date('H-n-j-Y', strtotime(' +1 hour', $local_time)));
125
+ $newhour = mktime($nexthour[0], 0, 0, $nexthour[1], $nexthour[2], $nexthour[3]);
126
+ return $newhour - $local_time;
127
+ }
128
+ }
129
+
130
+ function token_request()
131
+ {
132
+ $authUrl = $this->client->createAuthUrl();
133
+
134
+ ?>
135
+ <form name="input"
136
+ action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post">
137
+
138
+ <table class="options">
139
+ <tr>
140
+ <td colspan="2" class="info">
141
+ <?php echo __( "Use this link to get your access code:", 'ga-dash' ) . ' <a href="' . $authUrl . '" id="gapi-access-code" target="_blank">' . __ ( "Get Access Code", 'ga-dash' ) . '</a>.'; ?>
142
+ </td>
143
+ </tr>
144
+ <tr>
145
+ <td class="title"><label for="ga_dash_code"
146
+ title="<?php _e("Use the red link to get your access code!",'ga-dash')?>"><?php echo _e( "Access Code:", 'ga-dash' ); ?></label>
147
+ </td>
148
+ <td><input type="text" id="ga_dash_code" name="ga_dash_code" value=""
149
+ size="61" required="required"
150
+ title="<?php _e("Use the red link to get your access code!",'ga-dash')?>"></td>
151
+ </tr>
152
+ <tr>
153
+ <td colspan="2"><hr></td>
154
+ </tr>
155
+ <tr>
156
+ <td colspan="2"><input type="submit" class="button button-secondary"
157
+ name="ga_dash_authorize"
158
+ value="<?php _e( "Save Access Code", 'ga-dash' ); ?>" /></td>
159
+ </tr>
160
+ </table>
161
+ </form>
162
+ <?php
163
+ }
164
+
165
+ /**
166
+ * Retrives all Google Analytics Views with details
167
+ *
168
+ * @return array|string
169
+ */
170
+ function refresh_profiles()
171
+ {
172
+ try {
173
+ $profiles = $this->service->management_profiles->listManagementProfiles('~all', '~all');
174
+ $items = $profiles->getItems();
175
+ if (count($items) != 0) {
176
+ $ga_dash_profile_list = array();
177
+ foreach ($items as $profile) {
178
+ $timetz = new DateTimeZone($profile->getTimezone());
179
+ $localtime = new DateTime('now', $timetz);
180
+ $timeshift = strtotime($localtime->format('Y-m-d H:i:s')) - time();
181
+ $ga_dash_profile_list[] = array(
182
+ $profile->getName(),
183
+ $profile->getId(),
184
+ $profile->getwebPropertyId(),
185
+ $profile->getwebsiteUrl(),
186
+ $timeshift,
187
+ $profile->getTimezone()
188
+ );
189
+ }
190
+ update_option('gadash_lasterror', 'N/A');
191
+ return $ga_dash_profile_list;
192
+ } else {
193
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': No properties were found in this account!');
194
+ return '';
195
+ }
196
+ } catch (Google_IO_Exception $e) {
197
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
198
+ return '';
199
+ } catch (Google_Service_Exception $e) {
200
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
201
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
202
+ } catch (Exception $e) {
203
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
204
+ return '';
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Handles the token refresh process
210
+ *
211
+ * @return token|boolean
212
+ */
213
+ function ga_dash_refresh_token()
214
+ {
215
+ global $GADASH_Config;
216
+ try {
217
+ if (is_multisite() && $GADASH_Config->options['ga_dash_network']) {
218
+ $transient = get_site_transient("ga_dash_refresh_token");
219
+ } else {
220
+ $transient = get_transient("ga_dash_refresh_token");
221
+ }
222
+ if (empty($transient)) {
223
+
224
+ if (! $GADASH_Config->options['ga_dash_refresh_token']) {
225
+ $google_token = json_decode($GADASH_Config->options['ga_dash_token']);
226
+ $GADASH_Config->options['ga_dash_refresh_token'] = $google_token->refresh_token;
227
+ $this->client->refreshToken($google_token->refresh_token);
228
+ } else {
229
+ $this->client->refreshToken($GADASH_Config->options['ga_dash_refresh_token']);
230
+ }
231
+
232
+ $token = $this->client->getAccessToken();
233
+ $google_token = json_decode($token);
234
+ $GADASH_Config->options['ga_dash_token'] = $token;
235
+ if (is_multisite() && $GADASH_Config->options['ga_dash_network']) {
236
+ set_site_transient("ga_dash_refresh_token", $token, $google_token->expires_in);
237
+ $GADASH_Config->set_plugin_options(true);
238
+ } else {
239
+ set_transient("ga_dash_refresh_token", $token, $google_token->expires_in);
240
+ $GADASH_Config->set_plugin_options();
241
+ }
242
+ return $token;
243
+ } else {
244
+ return $transient;
245
+ }
246
+ } catch (Google_IO_Exception $e) {
247
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
248
+ return false;
249
+ } catch (Google_Service_Exception $e) {
250
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
251
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
252
+ return $e->getCode();
253
+ } catch (Exception $e) {
254
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
255
+ return false;
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Handles the token reset process
261
+ *
262
+ * @param
263
+ * $all
264
+ */
265
+ function ga_dash_reset_token($all = true)
266
+ {
267
+ global $GADASH_Config;
268
+ if (is_multisite() && $GADASH_Config->options['ga_dash_network']) {
269
+ delete_site_transient('ga_dash_refresh_token');
270
+ } else {
271
+ delete_transient('ga_dash_refresh_token');
272
+ }
273
+ $GADASH_Config->options['ga_dash_token'] = "";
274
+ $GADASH_Config->options['ga_dash_refresh_token'] = "";
275
+
276
+ if ($all) {
277
+ $GADASH_Config->options['ga_dash_tableid'] = "";
278
+ $GADASH_Config->options['ga_dash_tableid_jail'] = "";
279
+ $GADASH_Config->options['ga_dash_profile_list'] = "";
280
+ try {
281
+ $this->client->revokeToken();
282
+ } catch (Exception $e) {
283
+ if (is_multisite() && $GADASH_Config->options['ga_dash_network']) {
284
+ $GADASH_Config->set_plugin_options(true);
285
+ } else {
286
+ $GADASH_Config->set_plugin_options();
287
+ }
288
+ }
289
+ }
290
+
291
+ if (is_multisite() && $GADASH_Config->options['ga_dash_network']) {
292
+ $GADASH_Config->set_plugin_options(true);
293
+ } else {
294
+ $GADASH_Config->set_plugin_options();
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Get and cache Core Reports
300
+ *
301
+ * @param unknown $projecId
302
+ * @param unknown $from
303
+ * @param unknown $to
304
+ * @param unknown $metrics
305
+ * @param unknown $options
306
+ * @param unknown $serial
307
+ * @return number|Google_Service_Analytics_GaData
308
+ */
309
+ function handle_corereports($projectId, $from, $to, $metrics, $options, $serial)
310
+ {
311
+ try {
312
+
313
+ if ($from == "today") {
314
+ $timeouts = 0;
315
+ } else {
316
+ $timeouts = 1;
317
+ }
318
+
319
+ if (strlen($serial) > 44) {
320
+ $serial = substr($serial, 0, 43); // keep a safe length
321
+ }
322
+
323
+ $transient = get_transient($serial);
324
+ if (empty($transient)) {
325
+
326
+ if ($this->gapi_errors_handler()) {
327
+ return - 23;
328
+ }
329
+
330
+ $data = $this->service->data_ga->get('ga:' . $projectId, $from, $to, $metrics, $options);
331
+ set_transient($serial, $data, $this->get_timeouts($timeouts));
332
+ } else {
333
+ $data = $transient;
334
+ }
335
+ } catch (Google_Service_Exception $e) {
336
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
337
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
338
+ return $e->getCode();
339
+ } catch (Exception $e) {
340
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
341
+ return $e->getCode();
342
+ }
343
+
344
+ if (isset($data['rows'])) {
345
+ return $data;
346
+ } else {
347
+ return - 21;
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Analytics data for backend reports (Admin Widget main report)
353
+ *
354
+ * @param
355
+ * $projectId
356
+ * @param
357
+ * $from
358
+ * @param
359
+ * $to
360
+ * @param
361
+ * $query
362
+ * @return string|int
363
+ */
364
+ function get_mainreport($projectId, $from, $to, $query)
365
+ {
366
+ switch ($query) {
367
+
368
+ case 'users':
369
+ $title = __("Users", 'ga-dash');
370
+ break;
371
+
372
+ case 'pageviews':
373
+ $title = __("Page Views", 'ga-dash');
374
+ break;
375
+
376
+ case 'visitBounceRate':
377
+ $title = __("Bounce Rate", 'ga-dash');
378
+ break;
379
+
380
+ case 'organicSearches':
381
+ $title = __("Organic Searches", 'ga-dash');
382
+ break;
383
+
384
+ default:
385
+ $title = __("Sessions", 'ga-dash');
386
+ }
387
+
388
+ $metrics = 'ga:' . $query;
389
+
390
+ if ($from == "today" or $from == "yesterday") {
391
+ $dimensions = 'ga:hour';
392
+ $dayorhour = __("Hour", 'ga-dash');
393
+ } else {
394
+ $dimensions = 'ga:date,ga:dayOfWeekName';
395
+ $dayorhour = __("Date", 'ga-dash');
396
+ }
397
+
398
+ $serial = 'gadash_qr2' . str_replace(array(
399
+ 'ga:',
400
+ ',',
401
+ '-'
402
+ ), "", $projectId . $from . $metrics);
403
+
404
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
405
+ 'dimensions' => $dimensions,
406
+ 'quotaUser' => $this->managequota . 'p' . $projectId
407
+ ), $serial);
408
+
409
+ if (is_numeric($data)) {
410
+ return $data;
411
+ }
412
+
413
+ $ga_dash_data = "";
414
+
415
+ if ($from == "today" or $from == "yesterday") {
416
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
417
+ $ga_dash_data .= '["' . (int) $data["rows"][$i][0] . ':00",' . round($data["rows"][$i][1], 2) . '],';
418
+ }
419
+ } else {
420
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
421
+ $ga_dash_data .= '["' . esc_html(ucfirst(__($data["rows"][$i][1]))) . ", " . esc_html(substr_replace(substr_replace($data["rows"][$i][0], "-", 4, 0), "-", 7, 0)) . '",' . round($data["rows"][$i][2], 2) . '],';
422
+ }
423
+ }
424
+
425
+ if ($ga_dash_data) {
426
+ return '[["' . $dayorhour . '","' . $title . '"],' . rtrim($ga_dash_data, ',') . ']';
427
+ } else {
428
+ return - 22;
429
+ }
430
+ }
431
+
432
+ /**
433
+ * Analytics data for backend reports (bottom stats main report)
434
+ *
435
+ * @param
436
+ * $projectId
437
+ * @param
438
+ * $from
439
+ * @param
440
+ * $to
441
+ * @return array|int
442
+ */
443
+ function get_bottomstats($projectId, $from, $to)
444
+ {
445
+ $metrics = 'ga:sessions,ga:users,ga:pageviews,ga:BounceRate,ga:organicSearches,ga:pageviewsPerSession';
446
+
447
+ $serial = 'gadash_qr3' . $projectId . $from;
448
+
449
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
450
+ 'dimensions' => NULL,
451
+ 'quotaUser' => $this->managequota . 'p' . $projectId
452
+ ), $serial);
453
+
454
+ if (is_numeric($data)) {
455
+ if ($data == - 21) {
456
+ return array_fill(0, 6, 0);
457
+ } else {
458
+ return $data;
459
+ }
460
+ }
461
+
462
+ $ga_dash_data = $data['rows'][0];
463
+ array_map('floatval', $ga_dash_data);
464
+
465
+ return $ga_dash_data;
466
+ }
467
+
468
+ /**
469
+ * Analytics data for backend reports (contentpages)
470
+ *
471
+ * @param
472
+ * $projectId
473
+ * @param
474
+ * $from
475
+ * @param
476
+ * $to
477
+ * @return string|int
478
+ */
479
+ function get_contentpages($projectId, $from, $to)
480
+ {
481
+ $metrics = 'ga:pageviews';
482
+ $dimensions = 'ga:pageTitle,ga:hostname,ga:pagePath';
483
+
484
+ $serial = 'gadash_qr4' . $projectId . $from;
485
+
486
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
487
+ 'dimensions' => $dimensions,
488
+ 'sort' => '-ga:pageviews',
489
+ 'quotaUser' => $this->managequota . 'p' . $projectId
490
+ ), $serial);
491
+
492
+ if (is_numeric($data)) {
493
+ return $data;
494
+ }
495
+
496
+ $ga_dash_data = "";
497
+ $i = 0;
498
+
499
+ while (isset($data['rows'][$i][0])) {
500
+ $ga_dash_data .= '["' . $this->prepare_json($data['rows'][$i][0]) . '",' . (int) $data['rows'][$i][3] . '],';
501
+ $i ++;
502
+ }
503
+
504
+ if ($ga_dash_data) {
505
+ return '[["' . __("Pages", 'ga-dash') . '","' . __("Views", 'ga-dash') . '"],' . rtrim($ga_dash_data, ',') . ']';
506
+ } else {
507
+ return - 22;
508
+ }
509
+ }
510
+
511
+ /**
512
+ * Analytics data for backend reports (referrers)
513
+ *
514
+ * @param
515
+ * $projectId
516
+ * @param
517
+ * $from
518
+ * @param
519
+ * $to
520
+ * @return string|int
521
+ */
522
+ function get_referrers($projectId, $from, $to)
523
+ {
524
+ $metrics = 'ga:sessions';
525
+ $dimensions = 'ga:source,ga:fullReferrer,ga:medium';
526
+
527
+ $serial = 'gadash_qr5' . $projectId . $from;
528
+
529
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
530
+ 'dimensions' => $dimensions,
531
+ 'sort' => '-ga:sessions',
532
+ 'filters' => 'ga:medium==referral',
533
+ 'quotaUser' => $this->managequota . 'p' . $projectId
534
+ ), $serial);
535
+
536
+ if (is_numeric($data)) {
537
+ return $data;
538
+ }
539
+
540
+ $ga_dash_data = "";
541
+ $i = 0;
542
+ while (isset($data['rows'][$i][0])) {
543
+ $ga_dash_data .= '["' . $this->prepare_json($data["rows"][$i][0]) . '",' . (int) $data["rows"][$i][3] . '],';
544
+ $i ++;
545
+ }
546
+
547
+ if ($ga_dash_data) {
548
+ return '[["' . __("Referrers", 'ga-dash') . '","' . __("Sessions", 'ga-dash') . '"],' . rtrim($ga_dash_data, ',') . ']';
549
+ } else {
550
+ return - 22;
551
+ }
552
+ }
553
+
554
+ /**
555
+ * Analytics data for backend reports (searches)
556
+ *
557
+ * @param
558
+ * $projectId
559
+ * @param
560
+ * $from
561
+ * @param
562
+ * $to
563
+ * @return string|int
564
+ */
565
+ function get_searches($projectId, $from, $to)
566
+ {
567
+ $metrics = 'ga:sessions';
568
+ $dimensions = 'ga:keyword';
569
+
570
+ $serial = 'gadash_qr6' . $projectId . $from;
571
+
572
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
573
+ 'dimensions' => $dimensions,
574
+ 'sort' => '-ga:sessions',
575
+ 'quotaUser' => $this->managequota . 'p' . $projectId
576
+ ), $serial);
577
+
578
+ if (is_numeric($data)) {
579
+ return $data;
580
+ }
581
+
582
+ $ga_dash_data = "";
583
+ $i = 0;
584
+ while (isset($data['rows'][$i][0])) {
585
+ if ($data['rows'][$i][0] != "(not set)") {
586
+ $ga_dash_data .= '["' . $this->prepare_json($data["rows"][$i][0]) . '",' . (int) $data["rows"][$i][1] . '],';
587
+ }
588
+ $i ++;
589
+ }
590
+
591
+ if ($ga_dash_data) {
592
+ return '[["' . __("Searches", 'ga-dash') . '","' . __("Sessions", 'ga-dash') . '"],' . rtrim($ga_dash_data, ',') . ']';
593
+ } else {
594
+ return - 22;
595
+ }
596
+ }
597
+
598
+ /**
599
+ * Analytics data for backend reports (location reports)
600
+ *
601
+ * @param
602
+ * $projectId
603
+ * @param
604
+ * $from
605
+ * @param
606
+ * $to
607
+ * @return string|int
608
+ */
609
+ function get_locations($projectId, $from, $to)
610
+ {
611
+ global $GADASH_Config;
612
+
613
+ $metrics = 'ga:sessions';
614
+ $options = "";
615
+
616
+ $title = __("Countries", 'ga-dash');
617
+
618
+ $serial = 'gadash_qr7' . $projectId . $from;
619
+
620
+ $dimensions = 'ga:country';
621
+ $filters = "";
622
+
623
+ $options = array(
624
+ 'dimensions' => $dimensions,
625
+ 'sort' => '-ga:sessions',
626
+ 'quotaUser' => $this->managequota . 'p' . $projectId
627
+ );
628
+
629
+ if ($GADASH_Config->options['ga_target_geomap']) {
630
+ $dimensions = 'ga:city, ga:region';
631
+ $this->getcountrycodes();
632
+ if (isset($this->country_codes[$GADASH_Config->options['ga_target_geomap']])) {
633
+ $filters = 'ga:country==' . ($this->country_codes[$GADASH_Config->options['ga_target_geomap']]);
634
+ $title = __("Cities from", 'ga-dash') . ' ' . __($this->country_codes[$GADASH_Config->options['ga_target_geomap']]);
635
+ $serial = 'gadash_qr7' . $projectId . $from . $GADASH_Config->options['ga_target_geomap'];
636
+ $options = array(
637
+ 'dimensions' => $dimensions,
638
+ 'filters' => $filters,
639
+ 'sort' => '-ga:sessions',
640
+ 'quotaUser' => $this->managequota . 'p' . $projectId
641
+ );
642
+ }
643
+ }
644
+
645
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, $options, $serial);
646
+
647
+ if (is_numeric($data)) {
648
+ return $data;
649
+ }
650
+
651
+ $ga_dash_data = "";
652
+ $i = 0;
653
+ while (isset($data['rows'][$i][1])) {
654
+ if (isset($data['rows'][$i][2])) {
655
+ $ga_dash_data .= '["' . $this->prepare_json($data["rows"][$i][0]) . ', ' . $this->prepare_json($data["rows"][$i][1]) . '",' . (int) $data["rows"][$i][2] . '],';
656
+ } else {
657
+ $ga_dash_data .= '["' . $this->prepare_json($data["rows"][$i][0]) . '",' . (int) $data["rows"][$i][1] . '],';
658
+ }
659
+ $i ++;
660
+ }
661
+
662
+ if ($ga_dash_data) {
663
+ return '[["' . $title . '", "' . __("Sessions", 'ga-dash') . '"],' . rtrim($ga_dash_data, ',') . ']';
664
+ } else {
665
+ return - 22;
666
+ }
667
+ }
668
+
669
+ /**
670
+ * Analytics data for backend reports (traffic channels)
671
+ *
672
+ * @param
673
+ * $projectId
674
+ * @param
675
+ * $from
676
+ * @param
677
+ * $to
678
+ * @return string|int
679
+ */
680
+ function get_trafficchannels($projectId, $from, $to)
681
+ {
682
+ $metrics = 'ga:sessions';
683
+ $dimensions = 'ga:channelGrouping';
684
+
685
+ $serial = 'gadash_qr8' . $projectId . $from;
686
+
687
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
688
+ 'dimensions' => $dimensions,
689
+ 'quotaUser' => $this->managequota . 'p' . $projectId
690
+ ), $serial);
691
+
692
+ if (is_numeric($data)) {
693
+ return $data;
694
+ }
695
+
696
+ $title = __("Channels", 'ga-dash');
697
+ $ga_dash_data = "";
698
+
699
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
700
+ $shrink = explode(" ", $data["rows"][$i][0]);
701
+ $ga_dash_data .= '["' . '<div style=\\"color:black; font-size:1.1em\\">' . esc_html($shrink[0]) . '</div><div style=\\"color:darkblue; font-size:1.2em\\">' . (int) $data["rows"][$i][1] . '</div>","' . '<div style=\\"color:black; font-size:1.1em\\">' . $title . '</div><div style=\\"color:darkblue; font-size:1.2em\\">' . (int) $data['totalsForAllResults']["ga:sessions"] . '</div>"],';
702
+ }
703
+
704
+ if ($ga_dash_data) {
705
+ return '[["' . '<div style=\\"color:black; font-size:1.1em\\">' . $title . '</div><div style=\\"color:darkblue; font-size:1.2em\\">' . (int) $data['totalsForAllResults']["ga:sessions"] . '</div>", ""],' . rtrim($ga_dash_data, ',') . ']';
706
+ } else {
707
+ return - 22;
708
+ }
709
+ }
710
+
711
+ /**
712
+ * Analytics data for backend reports (traffic mediums, type, serach engines, social networks)
713
+ *
714
+ * @param
715
+ * $projectId
716
+ * @param
717
+ * $from
718
+ * @param
719
+ * $to
720
+ * @param
721
+ * $query
722
+ * @return string|int
723
+ */
724
+ function get_trafficdetails($projectId, $from, $to, $query)
725
+ {
726
+ $metrics = 'ga:sessions';
727
+ $dimensions = 'ga:' . $query;
728
+
729
+ if ($query == 'source') {
730
+ $options = array(
731
+ 'dimensions' => $dimensions,
732
+ 'filters' => 'ga:medium==organic',
733
+ 'quotaUser' => $this->managequota . 'p' . $projectId
734
+ );
735
+ } else {
736
+ $options = array(
737
+ 'dimensions' => $dimensions,
738
+ 'quotaUser' => $this->managequota . 'p' . $projectId
739
+ );
740
+ }
741
+
742
+ $serial = 'gadash_qr10' . $projectId . $from . $query;
743
+
744
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, $options, $serial);
745
+
746
+ if (is_numeric($data)) {
747
+ return $data;
748
+ }
749
+
750
+ $ga_dash_data = "";
751
+
752
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
753
+ if ($data['rows'][$i][0] != '(not set)') {
754
+ $ga_dash_data .= '["' . str_replace("(none)", "direct", esc_html($data['rows'][$i][0])) . '",' . (int) $data["rows"][$i][1] . '],';
755
+ }
756
+ }
757
+
758
+ if ($ga_dash_data) {
759
+ return '[["' . __("Type", 'ga-dash') . '", "Sessions"],' . rtrim($ga_dash_data, ',') . ']';
760
+ } else {
761
+ return - 22;
762
+ }
763
+ }
764
+
765
+ /**
766
+ * Analytics data for frontend Widget (chart data and totals)
767
+ *
768
+ * @param
769
+ * $projectId
770
+ * @param
771
+ * $period
772
+ * @param
773
+ * $anonim
774
+ * @return array|int
775
+ */
776
+ function frontend_widget_stats($projectId, $from, $anonim)
777
+ {
778
+ $content = '';
779
+ $to = 'yesterday';
780
+ $metrics = 'ga:sessions';
781
+ $dimensions = 'ga:date,ga:dayOfWeekName';
782
+
783
+ $serial = 'gadash_qr2' . str_replace(array(
784
+ 'ga:',
785
+ ',',
786
+ '-'
787
+ ), "", $projectId . $from . $metrics);
788
+
789
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
790
+ 'dimensions' => $dimensions,
791
+ 'quotaUser' => $this->managequota . 'p' . $projectId
792
+ ), $serial);
793
+
794
+ if (is_numeric($data)) {
795
+ return $data;
796
+ }
797
+
798
+ $ga_dash_data = "";
799
+
800
+ $max_array = array();
801
+ foreach ($data['rows'] as $item) {
802
+ $max_array[] = $item[2];
803
+ }
804
+
805
+ $max = max($max_array) ? max($max_array) : 1;
806
+
807
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
808
+ $ga_dash_data .= '["' . ucfirst(esc_html((__($data["rows"][$i][1])))) . ", " . esc_html(substr_replace(substr_replace($data["rows"][$i][0], "-", 4, 0), "-", 7, 0)) . '",' . ($anonim ? str_replace(",", ".", round($data["rows"][$i][2] * 100 / $max, 2)) : (int) $data["rows"][$i][2]) . '],';
809
+ }
810
+
811
+ if ($ga_dash_data) {
812
+ return array(
813
+ '[["' . __("Date", 'ga-dash') . '", "' . __("Sessions", 'ga-dash') . ($anonim ? "' " . __("trend", 'ga-dash') : '') . '"],' . rtrim($ga_dash_data, ",") . "]",
814
+ (int) $data['totalsForAllResults']['ga:sessions']
815
+ );
816
+ } else {
817
+ return - 22;
818
+ }
819
+ }
820
+
821
+ /**
822
+ * Analytics data for frontend reports (pagviews and unique pageviews per page)
823
+ *
824
+ * @param
825
+ * $projectId
826
+ * @param
827
+ * $page_url
828
+ * @param
829
+ * $post_id
830
+ * @return string|int
831
+ */
832
+ function frontend_afterpost_pageviews($projectId, $page_url, $post_id)
833
+ {
834
+ $from = '30daysAgo';
835
+ $to = 'yesterday';
836
+ $metrics = 'ga:pageviews,ga:uniquePageviews';
837
+ $dimensions = 'ga:date,ga:dayOfWeekName';
838
+
839
+ $serial = 'gadash_qr21' . $post_id . 'stats';
840
+
841
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
842
+ 'dimensions' => $dimensions,
843
+ 'filters' => 'ga:pagePath==' . $page_url,
844
+ 'quotaUser' => $this->managequota . 'p' . $projectId
845
+ ), $serial);
846
+
847
+ if (is_numeric($data)) {
848
+ return $data;
849
+ }
850
+
851
+ $ga_dash_data = "";
852
+ for ($i = 0; $i < $data['totalResults']; $i ++) {
853
+ $ga_dash_data .= '["' . ucfirst(esc_html(__($data['rows'][$i][1]))) . ", " . esc_html(substr_replace(substr_replace($data['rows'][$i][0], "-", 4, 0), "-", 7, 0)) . '",' . round($data['rows'][$i][2], 2) . ',' . round($data['rows'][$i][3], 2) . '],';
854
+ }
855
+
856
+ if ($ga_dash_data) {
857
+ return '[["' . __('Date', "ga-dash") . '", "' . __('Views', "ga-dash") . '", "' . __('UniqueViews', "ga-dash") . '"],' . rtrim($ga_dash_data, ',') . ']';
858
+ } else {
859
+ return - 22;
860
+ }
861
+ }
862
+
863
+ /**
864
+ * Analytics data for frontend reports (searches per page)
865
+ *
866
+ * @param
867
+ * $projectId
868
+ * @param
869
+ * $page_url
870
+ * @param
871
+ * $post_id
872
+ * @return string|int
873
+ */
874
+ function frontend_afterpost_searches($projectId, $page_url, $post_id)
875
+ {
876
+ $from = '30daysAgo';
877
+ $to = 'yesterday';
878
+ $metrics = 'ga:sessions';
879
+ $dimensions = 'ga:keyword';
880
+
881
+ $serial = 'gadash_qr22' . $post_id . 'search';
882
+
883
+ $data = $this->handle_corereports($projectId, $from, $to, $metrics, array(
884
+ 'dimensions' => $dimensions,
885
+ 'sort' => '-ga:sessions',
886
+ 'filters' => 'ga:pagePath==' . $page_url,
887
+ 'quotaUser' => $this->managequota . 'p' . $projectId
888
+ ), $serial);
889
+
890
+ if (is_numeric($data)) {
891
+ return $data;
892
+ }
893
+
894
+ $ga_dash_data = "";
895
+ $i = 0;
896
+ while (isset($data['rows'][$i][0])) {
897
+ if ($data['rows'][$i][0] != "(not set)") {
898
+ $ga_dash_data .= '["' . $this->prepare_json($data['rows'][$i][0]) . '",' . (int) $data['rows'][$i][1] . '],';
899
+ }
900
+ $i ++;
901
+ }
902
+
903
+ if ($ga_dash_data) {
904
+ return '[["' . __('Top Searches', "ga-dash") . '", "' . __('Sessions', "ga-dash") . '"],' . rtrim($ga_dash_data, ',') . ' ]';
905
+ } else {
906
+ return - 22;
907
+ }
908
+ }
909
+
910
+ /**
911
+ * Analytics data for backend reports (Real-Time)
912
+ *
913
+ * @param
914
+ * $projectId
915
+ * @return string|int
916
+ */
917
+ function gadash_realtime_data($projectId)
918
+ {
919
+ $metrics = 'rt:activeUsers';
920
+ $dimensions = 'rt:pagePath,rt:source,rt:keyword,rt:trafficType,rt:visitorType,rt:pageTitle';
921
+ try {
922
+ $serial = "gadash_realtimecache_" . $projectId;
923
+ $transient = get_transient($serial);
924
+ if (empty($transient)) {
925
+
926
+ if ($this->gapi_errors_handler()) {
927
+ return - 23;
928
+ }
929
+
930
+ $data = $this->service->data_realtime->get('ga:' . $projectId, $metrics, array(
931
+ 'dimensions' => $dimensions,
932
+ 'quotaUser' => $this->managequota . 'p' . $projectId
933
+ ));
934
+ set_transient($serial, $data, 55);
935
+ } else {
936
+ $data = $transient;
937
+ }
938
+ } catch (Google_Service_Exception $e) {
939
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html("(" . $e->getCode() . ") " . $e->getMessage()));
940
+ set_transient('ga_dash_gapi_errors', $e->getErrors(), $this->error_timeout);
941
+ return $e->getCode();
942
+ } catch (Exception $e) {
943
+ update_option('gadash_lasterror', date('Y-m-d H:i:s') . ': ' . esc_html($e));
944
+ return $e->getCode();
945
+ }
946
+
947
+ if (! isset($data['rows'])) {
948
+ return - 21;
949
+ }
950
+
951
+ $i = 0;
952
+
953
+ $ga_dash_data = $data;
954
+
955
+ while (isset($data->rows[$i])) {
956
+ $ga_dash_data->rows[$i] = array_map('esc_html', $data->rows[$i]);
957
+ $i ++;
958
+ }
959
+
960
+ return print_r(json_encode($ga_dash_data), true);
961
+ }
962
+
963
+ public function getcountrycodes()
964
+ {
965
+ include_once 'iso3166.php';
966
+ }
967
+ }
968
+ }
969
+ if (! isset($GLOBALS['GADASH_GAPI'])) {
970
+ $GLOBALS['GADASH_GAPI'] = new GADASH_GAPI();
971
+ }
tools/iso3166.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Alin Marcu
4
+ * Author URI: https://deconf.com
5
+ * License: GPLv2 or later
6
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ */
8
+ $this->country_codes = array();
9
+ $this->country_codes['AD'] = 'Andorra';
10
+ $this->country_codes['AE'] = 'United Arab Emirates';
11
+ $this->country_codes['AF'] = 'Afghanistan';
12
+ $this->country_codes['AG'] = 'Antigua and Barbuda';
13
+ $this->country_codes['AI'] = 'Anguilla';
14
+ $this->country_codes['AL'] = 'Albania';
15
+ $this->country_codes['AM'] = 'Armenia';
16
+ $this->country_codes['AN'] = 'Netherlands Antilles';
17
+ $this->country_codes['AO'] = 'Angola';
18
+ $this->country_codes['AQ'] = 'Antarctica';
19
+ $this->country_codes['AR'] = 'Argentina';
20
+ $this->country_codes['AS'] = 'American Samoa';
21
+ $this->country_codes['AT'] = 'Austria';
22
+ $this->country_codes['AU'] = 'Australia';
23
+ $this->country_codes['AW'] = 'Aruba';
24
+ $this->country_codes['AZ'] = 'Azerbaijan';
25
+ $this->country_codes['BA'] = 'Bosnia and Herzegovina';
26
+ $this->country_codes['BB'] = 'Barbados';
27
+ $this->country_codes['BD'] = 'Bangladesh';
28
+ $this->country_codes['BE'] = 'Belgium';
29
+ $this->country_codes['BF'] = 'Burkina Faso';
30
+ $this->country_codes['BG'] = 'Bulgaria';
31
+ $this->country_codes['BH'] = 'Bahrain';
32
+ $this->country_codes['BI'] = 'Burundi';
33
+ $this->country_codes['BJ'] = 'Benin';
34
+ $this->country_codes['BM'] = 'Bermuda';
35
+ $this->country_codes['BN'] = 'Brunei';
36
+ $this->country_codes['BO'] = 'Bolivia';
37
+ $this->country_codes['BR'] = 'Brazil';
38
+ $this->country_codes['BS'] = 'Bahamas';
39
+ $this->country_codes['BT'] = 'Bhutan';
40
+ $this->country_codes['BV'] = 'Bouvet Island';
41
+ $this->country_codes['BW'] = 'Botswana';
42
+ $this->country_codes['BY'] = 'Belarus';
43
+ $this->country_codes['BZ'] = 'Belize';
44
+ $this->country_codes['CA'] = 'Canada';
45
+ $this->country_codes['CC'] = 'Cocos (Keeling) Islands';
46
+ $this->country_codes['CD'] = 'Congo, The Democratic Republic of the';
47
+ $this->country_codes['CF'] = 'Central African Republic';
48
+ $this->country_codes['CG'] = 'Congo';
49
+ $this->country_codes['CH'] = 'Switzerland';
50
+ $this->country_codes['CI'] = 'Côte d?Ivoire';
51
+ $this->country_codes['CK'] = 'Cook Islands';
52
+ $this->country_codes['CL'] = 'Chile';
53
+ $this->country_codes['CM'] = 'Cameroon';
54
+ $this->country_codes['CN'] = 'China';
55
+ $this->country_codes['CO'] = 'Colombia';
56
+ $this->country_codes['CR'] = 'Costa Rica';
57
+ $this->country_codes['CU'] = 'Cuba';
58
+ $this->country_codes['CV'] = 'Cape Verde';
59
+ $this->country_codes['CX'] = 'Christmas Island';
60
+ $this->country_codes['CY'] = 'Cyprus';
61
+ $this->country_codes['CZ'] = 'Czech Republic';
62
+ $this->country_codes['DE'] = 'Germany';
63
+ $this->country_codes['DJ'] = 'Djibouti';
64
+ $this->country_codes['DK'] = 'Denmark';
65
+ $this->country_codes['DM'] = 'Dominica';
66
+ $this->country_codes['DO'] = 'Dominican Republic';
67
+ $this->country_codes['DZ'] = 'Algeria';
68
+ $this->country_codes['EC'] = 'Ecuador';
69
+ $this->country_codes['EE'] = 'Estonia';
70
+ $this->country_codes['EG'] = 'Egypt';
71
+ $this->country_codes['EH'] = 'Western Sahara';
72
+ $this->country_codes['ER'] = 'Eritrea';
73
+ $this->country_codes['ES'] = 'Spain';
74
+ $this->country_codes['ET'] = 'Ethiopia';
75
+ $this->country_codes['FI'] = 'Finland';
76
+ $this->country_codes['FJ'] = 'Fiji Islands';
77
+ $this->country_codes['FK'] = 'Falkland Islands';
78
+ $this->country_codes['FM'] = 'Micronesia, Federated States of';
79
+ $this->country_codes['FO'] = 'Faroe Islands';
80
+ $this->country_codes['FR'] = 'France';
81
+ $this->country_codes['GA'] = 'Gabon';
82
+ $this->country_codes['GB'] = 'United Kingdom';
83
+ $this->country_codes['GD'] = 'Grenada';
84
+ $this->country_codes['GE'] = 'Georgia';
85
+ $this->country_codes['GF'] = 'French Guiana';
86
+ $this->country_codes['GH'] = 'Ghana';
87
+ $this->country_codes['GI'] = 'Gibraltar';
88
+ $this->country_codes['GL'] = 'Greenland';
89
+ $this->country_codes['GM'] = 'Gambia';
90
+ $this->country_codes['GN'] = 'Guinea';
91
+ $this->country_codes['GP'] = 'Guadeloupe';
92
+ $this->country_codes['GQ'] = 'Equatorial Guinea';
93
+ $this->country_codes['GR'] = 'Greece';
94
+ $this->country_codes['GS'] = 'South Georgia and the South Sandwich Islands';
95
+ $this->country_codes['GT'] = 'Guatemala';
96
+ $this->country_codes['GU'] = 'Guam';
97
+ $this->country_codes['GW'] = 'Guinea-Bissau';
98
+ $this->country_codes['GY'] = 'Guyana';
99
+ $this->country_codes['HK'] = 'Hong Kong';
100
+ $this->country_codes['HM'] = 'Heard Island and McDonald Islands';
101
+ $this->country_codes['HN'] = 'Honduras';
102
+ $this->country_codes['HR'] = 'Croatia';
103
+ $this->country_codes['HT'] = 'Haiti';
104
+ $this->country_codes['HU'] = 'Hungary';
105
+ $this->country_codes['ID'] = 'Indonesia';
106
+ $this->country_codes['IE'] = 'Ireland';
107
+ $this->country_codes['IL'] = 'Israel';
108
+ $this->country_codes['IN'] = 'India';
109
+ $this->country_codes['IO'] = 'British Indian Ocean Territory';
110
+ $this->country_codes['IQ'] = 'Iraq';
111
+ $this->country_codes['IR'] = 'Iran';
112
+ $this->country_codes['IS'] = 'Iceland';
113
+ $this->country_codes['IT'] = 'Italy';
114
+ $this->country_codes['JM'] = 'Jamaica';
115
+ $this->country_codes['JO'] = 'Jordan';
116
+ $this->country_codes['JP'] = 'Japan';
117
+ $this->country_codes['KE'] = 'Kenya';
118
+ $this->country_codes['KG'] = 'Kyrgyzstan';
119
+ $this->country_codes['KH'] = 'Cambodia';
120
+ $this->country_codes['KI'] = 'Kiribati';
121
+ $this->country_codes['KM'] = 'Comoros';
122
+ $this->country_codes['KN'] = 'Saint Kitts and Nevis';
123
+ $this->country_codes['KP'] = 'North Korea';
124
+ $this->country_codes['KR'] = 'South Korea';
125
+ $this->country_codes['KW'] = 'Kuwait';
126
+ $this->country_codes['KY'] = 'Cayman Islands';
127
+ $this->country_codes['KZ'] = 'Kazakstan';
128
+ $this->country_codes['LA'] = 'Laos';
129
+ $this->country_codes['LB'] = 'Lebanon';
130
+ $this->country_codes['LC'] = 'Saint Lucia';
131
+ $this->country_codes['LI'] = 'Liechtenstein';
132
+ $this->country_codes['LK'] = 'Sri Lanka';
133
+ $this->country_codes['LR'] = 'Liberia';
134
+ $this->country_codes['LS'] = 'Lesotho';
135
+ $this->country_codes['LT'] = 'Lithuania';
136
+ $this->country_codes['LU'] = 'Luxembourg';
137
+ $this->country_codes['LV'] = 'Latvia';
138
+ $this->country_codes['LY'] = 'Libyan Arab Jamahiriya';
139
+ $this->country_codes['MA'] = 'Morocco';
140
+ $this->country_codes['MC'] = 'Monaco';
141
+ $this->country_codes['MD'] = 'Moldova';
142
+ $this->country_codes['MG'] = 'Madagascar';
143
+ $this->country_codes['MH'] = 'Marshall Islands';
144
+ $this->country_codes['MK'] = 'Macedonia';
145
+ $this->country_codes['ML'] = 'Mali';
146
+ $this->country_codes['MM'] = 'Myanmar';
147
+ $this->country_codes['MN'] = 'Mongolia';
148
+ $this->country_codes['MO'] = 'Macao';
149
+ $this->country_codes['MP'] = 'Northern Mariana Islands';
150
+ $this->country_codes['MQ'] = 'Martinique';
151
+ $this->country_codes['MR'] = 'Mauritania';
152
+ $this->country_codes['MS'] = 'Montserrat';
153
+ $this->country_codes['MT'] = 'Malta';
154
+ $this->country_codes['MU'] = 'Mauritius';
155
+ $this->country_codes['MV'] = 'Maldives';
156
+ $this->country_codes['MW'] = 'Malawi';
157
+ $this->country_codes['MX'] = 'Mexico';
158
+ $this->country_codes['MY'] = 'Malaysia';
159
+ $this->country_codes['MZ'] = 'Mozambique';
160
+ $this->country_codes['NA'] = 'Namibia';
161
+ $this->country_codes['NC'] = 'New Caledonia';
162
+ $this->country_codes['NE'] = 'Niger';
163
+ $this->country_codes['NF'] = 'Norfolk Island';
164
+ $this->country_codes['NG'] = 'Nigeria';
165
+ $this->country_codes['NI'] = 'Nicaragua';
166
+ $this->country_codes['NL'] = 'Netherlands';
167
+ $this->country_codes['NO'] = 'Norway';
168
+ $this->country_codes['NP'] = 'Nepal';
169
+ $this->country_codes['NR'] = 'Nauru';
170
+ $this->country_codes['NU'] = 'Niue';
171
+ $this->country_codes['NZ'] = 'New Zealand';
172
+ $this->country_codes['OM'] = 'Oman';
173
+ $this->country_codes['PA'] = 'Panama';
174
+ $this->country_codes['PE'] = 'Peru';
175
+ $this->country_codes['PF'] = 'French Polynesia';
176
+ $this->country_codes['PG'] = 'Papua New Guinea';
177
+ $this->country_codes['PH'] = 'Philippines';
178
+ $this->country_codes['PK'] = 'Pakistan';
179
+ $this->country_codes['PL'] = 'Poland';
180
+ $this->country_codes['PM'] = 'Saint Pierre and Miquelon';
181
+ $this->country_codes['PN'] = 'Pitcairn';
182
+ $this->country_codes['PR'] = 'Puerto Rico';
183
+ $this->country_codes['PS'] = 'Palestine';
184
+ $this->country_codes['PT'] = 'Portugal';
185
+ $this->country_codes['PW'] = 'Palau';
186
+ $this->country_codes['PY'] = 'Paraguay';
187
+ $this->country_codes['QA'] = 'Qatar';
188
+ $this->country_codes['RE'] = 'Reunion';
189
+ $this->country_codes['RO'] = 'Romania';
190
+ $this->country_codes['RU'] = 'Russia';
191
+ $this->country_codes['RW'] = 'Rwanda';
192
+ $this->country_codes['SA'] = 'Saudi Arabia';
193
+ $this->country_codes['SB'] = 'Solomon Islands';
194
+ $this->country_codes['SC'] = 'Seychelles';
195
+ $this->country_codes['SD'] = 'Sudan';
196
+ $this->country_codes['SE'] = 'Sweden';
197
+ $this->country_codes['SG'] = 'Singapore';
198
+ $this->country_codes['SH'] = 'Saint Helena';
199
+ $this->country_codes['SI'] = 'Slovenia';
200
+ $this->country_codes['SJ'] = 'Svalbard and Jan Mayen';
201
+ $this->country_codes['SK'] = 'Slovakia';
202
+ $this->country_codes['SL'] = 'Sierra Leone';
203
+ $this->country_codes['SM'] = 'San Marino';
204
+ $this->country_codes['SN'] = 'Senegal';
205
+ $this->country_codes['SO'] = 'Somalia';
206
+ $this->country_codes['SR'] = 'Suriname';
207
+ $this->country_codes['ST'] = 'Sao Tome and Principe';
208
+ $this->country_codes['SV'] = 'El Salvador';
209
+ $this->country_codes['SY'] = 'Syria';
210
+ $this->country_codes['SZ'] = 'Swaziland';
211
+ $this->country_codes['TC'] = 'Turks and Caicos Islands';
212
+ $this->country_codes['TD'] = 'Chad';
213
+ $this->country_codes['TF'] = 'French Southern territories';
214
+ $this->country_codes['TG'] = 'Togo';
215
+ $this->country_codes['TH'] = 'Thailand';
216
+ $this->country_codes['TJ'] = 'Tajikistan';
217
+ $this->country_codes['TK'] = 'Tokelau';
218
+ $this->country_codes['TM'] = 'Turkmenistan';
219
+ $this->country_codes['TN'] = 'Tunisia';
220
+ $this->country_codes['TO'] = 'Tonga';
221
+ $this->country_codes['TP'] = 'East Timor';
222
+ $this->country_codes['TR'] = 'Turkey';
223
+ $this->country_codes['TT'] = 'Trinidad and Tobago';
224
+ $this->country_codes['TV'] = 'Tuvalu';
225
+ $this->country_codes['TW'] = 'Taiwan';
226
+ $this->country_codes['TZ'] = 'Tanzania';
227
+ $this->country_codes['UA'] = 'Ukraine';
228
+ $this->country_codes['UG'] = 'Uganda';
229
+ $this->country_codes['UM'] = 'United States Minor Outlying Islands';
230
+ $this->country_codes['US'] = 'United States';
231
+ $this->country_codes['UY'] = 'Uruguay';
232
+ $this->country_codes['UZ'] = 'Uzbekistan';
233
+ $this->country_codes['VA'] = 'Holy See (Vatican City State)';
234
+ $this->country_codes['VC'] = 'Saint Vincent and the Grenadines';
235
+ $this->country_codes['VE'] = 'Venezuela';
236
+ $this->country_codes['VG'] = 'Virgin Islands, British';
237
+ $this->country_codes['VI'] = 'Virgin Islands, U.S.';
238
+ $this->country_codes['VN'] = 'Vietnam';
239
+ $this->country_codes['VU'] = 'Vanuatu';
240
+ $this->country_codes['WF'] = 'Wallis and Futuna';
241
+ $this->country_codes['WS'] = 'Samoa';
242
+ $this->country_codes['YE'] = 'Yemen';
243
+ $this->country_codes['YT'] = 'Mayotte';
244
+ $this->country_codes['YU'] = 'Yugoslavia';
245
+ $this->country_codes['ZA'] = 'South Africa';
246
+ $this->country_codes['ZM'] = 'Zambia';
247
+ $this->country_codes['ZW'] = 'Zimbabwe';
tools/nprogress/nprogress.css ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Make clicks pass-through */
2
+ #nprogress {
3
+ pointer-events: none;
4
+ }
5
+
6
+ #nprogress .bar {
7
+ background: #29d;
8
+ position: fixed;
9
+ z-index: 1031;
10
+ top: 0;
11
+ left: 0;
12
+ width: 100%;
13
+ height: 2px;
14
+ }
15
+
16
+ /* Fancy blur effect */
17
+ #nprogress .peg {
18
+ display: block;
19
+ position: absolute;
20
+ right: 0px;
21
+ width: 100px;
22
+ height: 100%;
23
+ box-shadow: 0 0 10px #29d, 0 0 5px #29d;
24
+ opacity: 1.0;
25
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
26
+ -ms-transform: rotate(3deg) translate(0px, -4px);
27
+ transform: rotate(3deg) translate(0px, -4px);
28
+ }
29
+
30
+ /* Remove these to get rid of the spinner */
31
+ #nprogress .spinner {
32
+ display: block;
33
+ position: fixed;
34
+ z-index: 1031;
35
+ top: 15px;
36
+ right: 15px;
37
+ }
38
+
39
+ #nprogress .spinner-icon {
40
+ width: 18px;
41
+ height: 18px;
42
+ box-sizing: border-box;
43
+ border: solid 2px transparent;
44
+ border-top-color: #29d;
45
+ border-left-color: #29d;
46
+ border-radius: 50%;
47
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
48
+ animation: nprogress-spinner 400ms linear infinite;
49
+ }
50
+
51
+ .nprogress-custom-parent {
52
+ overflow: hidden;
53
+ position: relative;
54
+ }
55
+
56
+ .nprogress-custom-parent #nprogress .spinner, .nprogress-custom-parent #nprogress .bar
57
+ {
58
+ position: absolute;
59
+ }
60
+
61
+ @
62
+ -webkit-keyframes nprogress-spinner { 0% {
63
+ -webkit-transform: rotate(0deg);
64
+ }
65
+
66
+ 100%
67
+ {
68
+ -webkit-transform
69
+ :
70
+
71
+ rotate
72
+ (360deg);
73
+
74
+ }
75
+ }
76
+ @
77
+ keyframes nprogress-spinner { 0% {
78
+ transform: rotate(0deg);
79
+ }
80
+ 100%
81
+ {
82
+ transform
83
+ :
84
+
85
+ rotate
86
+ (360deg);
87
+
88
+ }
89
+ }
tools/nprogress/nprogress.js ADDED
@@ -0,0 +1,476 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
2
+ * @license MIT */
3
+
4
+ ;(function(root, factory) {
5
+
6
+ if (typeof define === 'function' && define.amd) {
7
+ define(factory);
8
+ } else if (typeof exports === 'object') {
9
+ module.exports = factory();
10
+ } else {
11
+ root.NProgress = factory();
12
+ }
13
+
14
+ })(this, function() {
15
+ var NProgress = {};
16
+
17
+ NProgress.version = '0.1.6';
18
+
19
+ var Settings = NProgress.settings = {
20
+ minimum: 0.08,
21
+ easing: 'ease',
22
+ positionUsing: '',
23
+ speed: 200,
24
+ trickle: true,
25
+ trickleRate: 0.02,
26
+ trickleSpeed: 800,
27
+ showSpinner: true,
28
+ barSelector: '[role="bar"]',
29
+ spinnerSelector: '[role="spinner"]',
30
+ parent: 'body',
31
+ template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
32
+ };
33
+
34
+ /**
35
+ * Updates configuration.
36
+ *
37
+ * NProgress.configure({
38
+ * minimum: 0.1
39
+ * });
40
+ */
41
+ NProgress.configure = function(options) {
42
+ var key, value;
43
+ for (key in options) {
44
+ value = options[key];
45
+ if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;
46
+ }
47
+
48
+ return this;
49
+ };
50
+
51
+ /**
52
+ * Last number.
53
+ */
54
+
55
+ NProgress.status = null;
56
+
57
+ /**
58
+ * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.
59
+ *
60
+ * NProgress.set(0.4);
61
+ * NProgress.set(1.0);
62
+ */
63
+
64
+ NProgress.set = function(n) {
65
+ var started = NProgress.isStarted();
66
+
67
+ n = clamp(n, Settings.minimum, 1);
68
+ NProgress.status = (n === 1 ? null : n);
69
+
70
+ var progress = NProgress.render(!started),
71
+ bar = progress.querySelector(Settings.barSelector),
72
+ speed = Settings.speed,
73
+ ease = Settings.easing;
74
+
75
+ progress.offsetWidth; /* Repaint */
76
+
77
+ queue(function(next) {
78
+ // Set positionUsing if it hasn't already been set
79
+ if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();
80
+
81
+ // Add transition
82
+ css(bar, barPositionCSS(n, speed, ease));
83
+
84
+ if (n === 1) {
85
+ // Fade out
86
+ css(progress, {
87
+ transition: 'none',
88
+ opacity: 1
89
+ });
90
+ progress.offsetWidth; /* Repaint */
91
+
92
+ setTimeout(function() {
93
+ css(progress, {
94
+ transition: 'all ' + speed + 'ms linear',
95
+ opacity: 0
96
+ });
97
+ setTimeout(function() {
98
+ NProgress.remove();
99
+ next();
100
+ }, speed);
101
+ }, speed);
102
+ } else {
103
+ setTimeout(next, speed);
104
+ }
105
+ });
106
+
107
+ return this;
108
+ };
109
+
110
+ NProgress.isStarted = function() {
111
+ return typeof NProgress.status === 'number';
112
+ };
113
+
114
+ /**
115
+ * Shows the progress bar.
116
+ * This is the same as setting the status to 0%, except that it doesn't go backwards.
117
+ *
118
+ * NProgress.start();
119
+ *
120
+ */
121
+ NProgress.start = function() {
122
+ if (!NProgress.status) NProgress.set(0);
123
+
124
+ var work = function() {
125
+ setTimeout(function() {
126
+ if (!NProgress.status) return;
127
+ NProgress.trickle();
128
+ work();
129
+ }, Settings.trickleSpeed);
130
+ };
131
+
132
+ if (Settings.trickle) work();
133
+
134
+ return this;
135
+ };
136
+
137
+ /**
138
+ * Hides the progress bar.
139
+ * This is the *sort of* the same as setting the status to 100%, with the
140
+ * difference being `done()` makes some placebo effect of some realistic motion.
141
+ *
142
+ * NProgress.done();
143
+ *
144
+ * If `true` is passed, it will show the progress bar even if its hidden.
145
+ *
146
+ * NProgress.done(true);
147
+ */
148
+
149
+ NProgress.done = function(force) {
150
+ if (!force && !NProgress.status) return this;
151
+
152
+ return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);
153
+ };
154
+
155
+ /**
156
+ * Increments by a random amount.
157
+ */
158
+
159
+ NProgress.inc = function(amount) {
160
+ var n = NProgress.status;
161
+
162
+ if (!n) {
163
+ return NProgress.start();
164
+ } else {
165
+ if (typeof amount !== 'number') {
166
+ amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);
167
+ }
168
+
169
+ n = clamp(n + amount, 0, 0.994);
170
+ return NProgress.set(n);
171
+ }
172
+ };
173
+
174
+ NProgress.trickle = function() {
175
+ return NProgress.inc(Math.random() * Settings.trickleRate);
176
+ };
177
+
178
+ /**
179
+ * Waits for all supplied jQuery promises and
180
+ * increases the progress as the promises resolve.
181
+ *
182
+ * @param $promise jQUery Promise
183
+ */
184
+ (function() {
185
+ var initial = 0, current = 0;
186
+
187
+ NProgress.promise = function($promise) {
188
+ if (!$promise || $promise.state() == "resolved") {
189
+ return this;
190
+ }
191
+
192
+ if (current == 0) {
193
+ NProgress.start();
194
+ }
195
+
196
+ initial++;
197
+ current++;
198
+
199
+ $promise.always(function() {
200
+ current--;
201
+ if (current == 0) {
202
+ initial = 0;
203
+ NProgress.done();
204
+ } else {
205
+ NProgress.set((initial - current) / initial);
206
+ }
207
+ });
208
+
209
+ return this;
210
+ };
211
+
212
+ })();
213
+
214
+ /**
215
+ * (Internal) renders the progress bar markup based on the `template`
216
+ * setting.
217
+ */
218
+
219
+ NProgress.render = function(fromStart) {
220
+ if (NProgress.isRendered()) return document.getElementById('nprogress');
221
+
222
+ addClass(document.documentElement, 'nprogress-busy');
223
+
224
+ var progress = document.createElement('div');
225
+ progress.id = 'nprogress';
226
+ progress.innerHTML = Settings.template;
227
+
228
+ var bar = progress.querySelector(Settings.barSelector),
229
+ perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),
230
+ parent = document.querySelector(Settings.parent),
231
+ spinner;
232
+
233
+ css(bar, {
234
+ transition: 'all 0 linear',
235
+ transform: 'translate3d(' + perc + '%,0,0)'
236
+ });
237
+
238
+ if (!Settings.showSpinner) {
239
+ spinner = progress.querySelector(Settings.spinnerSelector);
240
+ spinner && removeElement(spinner);
241
+ }
242
+
243
+ if (parent != document.body) {
244
+ addClass(parent, 'nprogress-custom-parent');
245
+ }
246
+
247
+ parent.appendChild(progress);
248
+ return progress;
249
+ };
250
+
251
+ /**
252
+ * Removes the element. Opposite of render().
253
+ */
254
+
255
+ NProgress.remove = function() {
256
+ removeClass(document.documentElement, 'nprogress-busy');
257
+ removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent')
258
+ var progress = document.getElementById('nprogress');
259
+ progress && removeElement(progress);
260
+ };
261
+
262
+ /**
263
+ * Checks if the progress bar is rendered.
264
+ */
265
+
266
+ NProgress.isRendered = function() {
267
+ return !!document.getElementById('nprogress');
268
+ };
269
+
270
+ /**
271
+ * Determine which positioning CSS rule to use.
272
+ */
273
+
274
+ NProgress.getPositioningCSS = function() {
275
+ // Sniff on document.body.style
276
+ var bodyStyle = document.body.style;
277
+
278
+ // Sniff prefixes
279
+ var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :
280
+ ('MozTransform' in bodyStyle) ? 'Moz' :
281
+ ('msTransform' in bodyStyle) ? 'ms' :
282
+ ('OTransform' in bodyStyle) ? 'O' : '';
283
+
284
+ if (vendorPrefix + 'Perspective' in bodyStyle) {
285
+ // Modern browsers with 3D support, e.g. Webkit, IE10
286
+ return 'translate3d';
287
+ } else if (vendorPrefix + 'Transform' in bodyStyle) {
288
+ // Browsers without 3D support, e.g. IE9
289
+ return 'translate';
290
+ } else {
291
+ // Browsers without translate() support, e.g. IE7-8
292
+ return 'margin';
293
+ }
294
+ };
295
+
296
+ /**
297
+ * Helpers
298
+ */
299
+
300
+ function clamp(n, min, max) {
301
+ if (n < min) return min;
302
+ if (n > max) return max;
303
+ return n;
304
+ }
305
+
306
+ /**
307
+ * (Internal) converts a percentage (`0..1`) to a bar translateX
308
+ * percentage (`-100%..0%`).
309
+ */
310
+
311
+ function toBarPerc(n) {
312
+ return (-1 + n) * 100;
313
+ }
314
+
315
+
316
+ /**
317
+ * (Internal) returns the correct CSS for changing the bar's
318
+ * position given an n percentage, and speed and ease from Settings
319
+ */
320
+
321
+ function barPositionCSS(n, speed, ease) {
322
+ var barCSS;
323
+
324
+ if (Settings.positionUsing === 'translate3d') {
325
+ barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };
326
+ } else if (Settings.positionUsing === 'translate') {
327
+ barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };
328
+ } else {
329
+ barCSS = { 'margin-left': toBarPerc(n)+'%' };
330
+ }
331
+
332
+ barCSS.transition = 'all '+speed+'ms '+ease;
333
+
334
+ return barCSS;
335
+ }
336
+
337
+ /**
338
+ * (Internal) Queues a function to be executed.
339
+ */
340
+
341
+ var queue = (function() {
342
+ var pending = [];
343
+
344
+ function next() {
345
+ var fn = pending.shift();
346
+ if (fn) {
347
+ fn(next);
348
+ }
349
+ }
350
+
351
+ return function(fn) {
352
+ pending.push(fn);
353
+ if (pending.length == 1) next();
354
+ };
355
+ })();
356
+
357
+ /**
358
+ * (Internal) Applies css properties to an element, similar to the jQuery
359
+ * css method.
360
+ *
361
+ * While this helper does assist with vendor prefixed property names, it
362
+ * does not perform any manipulation of values prior to setting styles.
363
+ */
364
+
365
+ var css = (function() {
366
+ var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],
367
+ cssProps = {};
368
+
369
+ function camelCase(string) {
370
+ return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) {
371
+ return letter.toUpperCase();
372
+ });
373
+ }
374
+
375
+ function getVendorProp(name) {
376
+ var style = document.body.style;
377
+ if (name in style) return name;
378
+
379
+ var i = cssPrefixes.length,
380
+ capName = name.charAt(0).toUpperCase() + name.slice(1),
381
+ vendorName;
382
+ while (i--) {
383
+ vendorName = cssPrefixes[i] + capName;
384
+ if (vendorName in style) return vendorName;
385
+ }
386
+
387
+ return name;
388
+ }
389
+
390
+ function getStyleProp(name) {
391
+ name = camelCase(name);
392
+ return cssProps[name] || (cssProps[name] = getVendorProp(name));
393
+ }
394
+
395
+ function applyCss(element, prop, value) {
396
+ prop = getStyleProp(prop);
397
+ element.style[prop] = value;
398
+ }
399
+
400
+ return function(element, properties) {
401
+ var args = arguments,
402
+ prop,
403
+ value;
404
+
405
+ if (args.length == 2) {
406
+ for (prop in properties) {
407
+ value = properties[prop];
408
+ if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);
409
+ }
410
+ } else {
411
+ applyCss(element, args[1], args[2]);
412
+ }
413
+ }
414
+ })();
415
+
416
+ /**
417
+ * (Internal) Determines if an element or space separated list of class names contains a class name.
418
+ */
419
+
420
+ function hasClass(element, name) {
421
+ var list = typeof element == 'string' ? element : classList(element);
422
+ return list.indexOf(' ' + name + ' ') >= 0;
423
+ }
424
+
425
+ /**
426
+ * (Internal) Adds a class to an element.
427
+ */
428
+
429
+ function addClass(element, name) {
430
+ var oldList = classList(element),
431
+ newList = oldList + name;
432
+
433
+ if (hasClass(oldList, name)) return;
434
+
435
+ // Trim the opening space.
436
+ element.className = newList.substring(1);
437
+ }
438
+
439
+ /**
440
+ * (Internal) Removes a class from an element.
441
+ */
442
+
443
+ function removeClass(element, name) {
444
+ var oldList = classList(element),
445
+ newList;
446
+
447
+ if (!hasClass(element, name)) return;
448
+
449
+ // Replace the class name.
450
+ newList = oldList.replace(' ' + name + ' ', ' ');
451
+
452
+ // Trim the opening and closing spaces.
453
+ element.className = newList.substring(1, newList.length - 1);
454
+ }
455
+
456
+ /**
457
+ * (Internal) Gets a space separated list of the class names on the element.
458
+ * The list is wrapped with a single space on each end to facilitate finding
459
+ * matches within the list.
460
+ */
461
+
462
+ function classList(element) {
463
+ return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' ');
464
+ }
465
+
466
+ /**
467
+ * (Internal) Removes an element from the DOM.
468
+ */
469
+
470
+ function removeElement(element) {
471
+ element && element.parentNode && element.parentNode.removeChild(element);
472
+ }
473
+
474
+ return NProgress;
475
+ });
476
+
tools/src/Google/Auth/Abstract.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Abstract class for the Authentication in the API client
22
+ * @author Chris Chabot <chabotc@google.com>
23
+ *
24
+ */
25
+ abstract class Google_Auth_Abstract
26
+ {
27
+ /**
28
+ * An utility function that first calls $this->auth->sign($request) and then
29
+ * executes makeRequest() on that signed request. Used for when a request
30
+ * should be authenticated
31
+ * @param Google_Http_Request $request
32
+ * @return Google_Http_Request $request
33
+ */
34
+ abstract public function authenticatedRequest(Google_Http_Request $request);
35
+ abstract public function sign(Google_Http_Request $request);
36
+ }
tools/src/Google/Auth/AppIdentity.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /*
19
+ * WARNING - this class depends on the Google App Engine PHP library
20
+ * which is 5.3 and above only, so if you include this in a PHP 5.2
21
+ * setup or one without 5.3 things will blow up.
22
+ */
23
+ use google\appengine\api\app_identity\AppIdentityService;
24
+
25
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
26
+
27
+ /**
28
+ * Authentication via the Google App Engine App Identity service.
29
+ */
30
+ class Google_Auth_AppIdentity extends Google_Auth_Abstract
31
+ {
32
+ const CACHE_PREFIX = "Google_Auth_AppIdentity::";
33
+ private $key = null;
34
+ private $client;
35
+ private $token = false;
36
+ private $tokenScopes = false;
37
+
38
+ public function __construct(Google_Client $client, $config = null)
39
+ {
40
+ $this->client = $client;
41
+ }
42
+
43
+ /**
44
+ * Retrieve an access token for the scopes supplied.
45
+ */
46
+ public function authenticateForScope($scopes)
47
+ {
48
+ if ($this->token && $this->tokenScopes == $scopes) {
49
+ return $this->token;
50
+ }
51
+
52
+ $cacheKey = self::CACHE_PREFIX;
53
+ if (is_string($scopes)) {
54
+ $cacheKey .= $scopes;
55
+ } else if (is_array($scopes)) {
56
+ $cacheKey .= implode(":", $scopes);
57
+ }
58
+
59
+ $this->token = $this->client->getCache()->get($cacheKey);
60
+ if (!$this->token) {
61
+ $this->token = AppIdentityService::getAccessToken($scopes);
62
+ if ($this->token) {
63
+ $this->client->getCache()->set(
64
+ $cacheKey,
65
+ $this->token
66
+ );
67
+ }
68
+ }
69
+ $this->tokenScopes = $scopes;
70
+ return $this->token;
71
+ }
72
+
73
+ /**
74
+ * Perform an authenticated / signed apiHttpRequest.
75
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
76
+ * (which can modify the request in what ever way fits the auth mechanism)
77
+ * and then calls apiCurlIO::makeRequest on the signed request
78
+ *
79
+ * @param Google_Http_Request $request
80
+ * @return Google_Http_Request The resulting HTTP response including the
81
+ * responseHttpCode, responseHeaders and responseBody.
82
+ */
83
+ public function authenticatedRequest(Google_Http_Request $request)
84
+ {
85
+ $request = $this->sign($request);
86
+ return $this->client->getIo()->makeRequest($request);
87
+ }
88
+
89
+ public function sign(Google_Http_Request $request)
90
+ {
91
+ if (!$this->token) {
92
+ // No token, so nothing to do.
93
+ return $request;
94
+ }
95
+
96
+ $this->client->getLogger()->debug('App Identity authentication');
97
+
98
+ // Add the OAuth2 header to the request
99
+ $request->setRequestHeaders(
100
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
101
+ );
102
+
103
+ return $request;
104
+ }
105
+ }
tools/src/Google/Auth/AssertionCredentials.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Credentials object used for OAuth 2.0 Signed JWT assertion grants.
22
+ *
23
+ * @author Chirag Shah <chirags@google.com>
24
+ */
25
+ class Google_Auth_AssertionCredentials
26
+ {
27
+ const MAX_TOKEN_LIFETIME_SECS = 3600;
28
+
29
+ public $serviceAccountName;
30
+ public $scopes;
31
+ public $privateKey;
32
+ public $privateKeyPassword;
33
+ public $assertionType;
34
+ public $sub;
35
+ /**
36
+ * @deprecated
37
+ * @link http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
38
+ */
39
+ public $prn;
40
+ private $useCache;
41
+
42
+ /**
43
+ * @param $serviceAccountName
44
+ * @param $scopes array List of scopes
45
+ * @param $privateKey
46
+ * @param string $privateKeyPassword
47
+ * @param string $assertionType
48
+ * @param bool|string $sub The email address of the user for which the
49
+ * application is requesting delegated access.
50
+ * @param bool useCache Whether to generate a cache key and allow
51
+ * automatic caching of the generated token.
52
+ */
53
+ public function __construct(
54
+ $serviceAccountName,
55
+ $scopes,
56
+ $privateKey,
57
+ $privateKeyPassword = 'notasecret',
58
+ $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
59
+ $sub = false,
60
+ $useCache = true
61
+ ) {
62
+ $this->serviceAccountName = $serviceAccountName;
63
+ $this->scopes = is_string($scopes) ? $scopes : implode(' ', $scopes);
64
+ $this->privateKey = $privateKey;
65
+ $this->privateKeyPassword = $privateKeyPassword;
66
+ $this->assertionType = $assertionType;
67
+ $this->sub = $sub;
68
+ $this->prn = $sub;
69
+ $this->useCache = $useCache;
70
+ }
71
+
72
+ /**
73
+ * Generate a unique key to represent this credential.
74
+ * @return string
75
+ */
76
+ public function getCacheKey()
77
+ {
78
+ if (!$this->useCache) {
79
+ return false;
80
+ }
81
+ $h = $this->sub;
82
+ $h .= $this->assertionType;
83
+ $h .= $this->privateKey;
84
+ $h .= $this->scopes;
85
+ $h .= $this->serviceAccountName;
86
+ return md5($h);
87
+ }
88
+
89
+ public function generateAssertion()
90
+ {
91
+ $now = time();
92
+
93
+ $jwtParams = array(
94
+ 'aud' => Google_Auth_OAuth2::OAUTH2_TOKEN_URI,
95
+ 'scope' => $this->scopes,
96
+ 'iat' => $now,
97
+ 'exp' => $now + self::MAX_TOKEN_LIFETIME_SECS,
98
+ 'iss' => $this->serviceAccountName,
99
+ );
100
+
101
+ if ($this->sub !== false) {
102
+ $jwtParams['sub'] = $this->sub;
103
+ } else if ($this->prn !== false) {
104
+ $jwtParams['prn'] = $this->prn;
105
+ }
106
+
107
+ return $this->makeSignedJwt($jwtParams);
108
+ }
109
+
110
+ /**
111
+ * Creates a signed JWT.
112
+ * @param array $payload
113
+ * @return string The signed JWT.
114
+ */
115
+ private function makeSignedJwt($payload)
116
+ {
117
+ $header = array('typ' => 'JWT', 'alg' => 'RS256');
118
+
119
+ $payload = json_encode($payload);
120
+ // Handle some overzealous escaping in PHP json that seemed to cause some errors
121
+ // with claimsets.
122
+ $payload = str_replace('\/', '/', $payload);
123
+
124
+ $segments = array(
125
+ Google_Utils::urlSafeB64Encode(json_encode($header)),
126
+ Google_Utils::urlSafeB64Encode($payload)
127
+ );
128
+
129
+ $signingInput = implode('.', $segments);
130
+ $signer = new Google_Signer_P12($this->privateKey, $this->privateKeyPassword);
131
+ $signature = $signer->sign($signingInput);
132
+ $segments[] = Google_Utils::urlSafeB64Encode($signature);
133
+
134
+ return implode(".", $segments);
135
+ }
136
+ }
tools/src/Google/Auth/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ class Google_Auth_Exception extends Google_Exception
21
+ {
22
+ }
tools/src/Google/Auth/LoginTicket.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Class to hold information about an authenticated login.
22
+ *
23
+ * @author Brian Eaton <beaton@google.com>
24
+ */
25
+ class Google_Auth_LoginTicket
26
+ {
27
+ const USER_ATTR = "sub";
28
+
29
+ // Information from id token envelope.
30
+ private $envelope;
31
+
32
+ // Information from id token payload.
33
+ private $payload;
34
+
35
+ /**
36
+ * Creates a user based on the supplied token.
37
+ *
38
+ * @param string $envelope Header from a verified authentication token.
39
+ * @param string $payload Information from a verified authentication token.
40
+ */
41
+ public function __construct($envelope, $payload)
42
+ {
43
+ $this->envelope = $envelope;
44
+ $this->payload = $payload;
45
+ }
46
+
47
+ /**
48
+ * Returns the numeric identifier for the user.
49
+ * @throws Google_Auth_Exception
50
+ * @return
51
+ */
52
+ public function getUserId()
53
+ {
54
+ if (array_key_exists(self::USER_ATTR, $this->payload)) {
55
+ return $this->payload[self::USER_ATTR];
56
+ }
57
+ throw new Google_Auth_Exception("No user_id in token");
58
+ }
59
+
60
+ /**
61
+ * Returns attributes from the login ticket. This can contain
62
+ * various information about the user session.
63
+ * @return array
64
+ */
65
+ public function getAttributes()
66
+ {
67
+ return array("envelope" => $this->envelope, "payload" => $this->payload);
68
+ }
69
+ }
tools/src/Google/Auth/OAuth2.php ADDED
@@ -0,0 +1,633 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Authentication class that deals with the OAuth 2 web-server authentication flow
22
+ *
23
+ * @author Chris Chabot <chabotc@google.com>
24
+ * @author Chirag Shah <chirags@google.com>
25
+ *
26
+ */
27
+ class Google_Auth_OAuth2 extends Google_Auth_Abstract
28
+ {
29
+ const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke';
30
+ const OAUTH2_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token';
31
+ const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/auth';
32
+ const CLOCK_SKEW_SECS = 300; // five minutes in seconds
33
+ const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
34
+ const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
35
+ const OAUTH2_ISSUER = 'accounts.google.com';
36
+
37
+ /** @var Google_Auth_AssertionCredentials $assertionCredentials */
38
+ private $assertionCredentials;
39
+
40
+ /**
41
+ * @var string The state parameters for CSRF and other forgery protection.
42
+ */
43
+ private $state;
44
+
45
+ /**
46
+ * @var array The token bundle.
47
+ */
48
+ private $token = array();
49
+
50
+ /**
51
+ * @var Google_Client the base client
52
+ */
53
+ private $client;
54
+
55
+ /**
56
+ * Instantiates the class, but does not initiate the login flow, leaving it
57
+ * to the discretion of the caller.
58
+ */
59
+ public function __construct(Google_Client $client)
60
+ {
61
+ $this->client = $client;
62
+ }
63
+
64
+ /**
65
+ * Perform an authenticated / signed apiHttpRequest.
66
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
67
+ * (which can modify the request in what ever way fits the auth mechanism)
68
+ * and then calls apiCurlIO::makeRequest on the signed request
69
+ *
70
+ * @param Google_Http_Request $request
71
+ * @return Google_Http_Request The resulting HTTP response including the
72
+ * responseHttpCode, responseHeaders and responseBody.
73
+ */
74
+ public function authenticatedRequest(Google_Http_Request $request)
75
+ {
76
+ $request = $this->sign($request);
77
+ return $this->client->getIo()->makeRequest($request);
78
+ }
79
+
80
+ /**
81
+ * @param string $code
82
+ * @throws Google_Auth_Exception
83
+ * @return string
84
+ */
85
+ public function authenticate($code)
86
+ {
87
+ if (strlen($code) == 0) {
88
+ throw new Google_Auth_Exception("Invalid code");
89
+ }
90
+
91
+ // We got here from the redirect from a successful authorization grant,
92
+ // fetch the access token
93
+ $request = new Google_Http_Request(
94
+ self::OAUTH2_TOKEN_URI,
95
+ 'POST',
96
+ array(),
97
+ array(
98
+ 'code' => $code,
99
+ 'grant_type' => 'authorization_code',
100
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
101
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
102
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret')
103
+ )
104
+ );
105
+ $request->disableGzip();
106
+ $response = $this->client->getIo()->makeRequest($request);
107
+
108
+ if ($response->getResponseHttpCode() == 200) {
109
+ $this->setAccessToken($response->getResponseBody());
110
+ $this->token['created'] = time();
111
+ return $this->getAccessToken();
112
+ } else {
113
+ $decodedResponse = json_decode($response->getResponseBody(), true);
114
+ if ($decodedResponse != null && $decodedResponse['error']) {
115
+ $errorText = $decodedResponse['error'];
116
+ if (isset($decodedResponse['error_description'])) {
117
+ $errorText .= ": " . $decodedResponse['error_description'];
118
+ }
119
+ }
120
+ throw new Google_Auth_Exception(
121
+ sprintf(
122
+ "Error fetching OAuth2 access token, message: '%s'",
123
+ $errorText
124
+ ),
125
+ $response->getResponseHttpCode()
126
+ );
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Create a URL to obtain user authorization.
132
+ * The authorization endpoint allows the user to first
133
+ * authenticate, and then grant/deny the access request.
134
+ * @param string $scope The scope is expressed as a list of space-delimited strings.
135
+ * @return string
136
+ */
137
+ public function createAuthUrl($scope)
138
+ {
139
+ $params = array(
140
+ 'response_type' => 'code',
141
+ 'redirect_uri' => $this->client->getClassConfig($this, 'redirect_uri'),
142
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
143
+ 'scope' => $scope,
144
+ 'access_type' => $this->client->getClassConfig($this, 'access_type'),
145
+ );
146
+
147
+ // Prefer prompt to approval prompt.
148
+ if ($this->client->getClassConfig($this, 'prompt')) {
149
+ $params = $this->maybeAddParam($params, 'prompt');
150
+ } else {
151
+ $params = $this->maybeAddParam($params, 'approval_prompt');
152
+ }
153
+ $params = $this->maybeAddParam($params, 'login_hint');
154
+ $params = $this->maybeAddParam($params, 'hd');
155
+ $params = $this->maybeAddParam($params, 'openid.realm');
156
+ $params = $this->maybeAddParam($params, 'include_granted_scopes');
157
+
158
+ // If the list of scopes contains plus.login, add request_visible_actions
159
+ // to auth URL.
160
+ $rva = $this->client->getClassConfig($this, 'request_visible_actions');
161
+ if (strpos($scope, 'plus.login') && strlen($rva) > 0) {
162
+ $params['request_visible_actions'] = $rva;
163
+ }
164
+
165
+ if (isset($this->state)) {
166
+ $params['state'] = $this->state;
167
+ }
168
+
169
+ return self::OAUTH2_AUTH_URL . "?" . http_build_query($params, '', '&');
170
+ }
171
+
172
+ /**
173
+ * @param string $token
174
+ * @throws Google_Auth_Exception
175
+ */
176
+ public function setAccessToken($token)
177
+ {
178
+ $token = json_decode($token, true);
179
+ if ($token == null) {
180
+ throw new Google_Auth_Exception('Could not json decode the token');
181
+ }
182
+ if (! isset($token['access_token'])) {
183
+ throw new Google_Auth_Exception("Invalid token format");
184
+ }
185
+ $this->token = $token;
186
+ }
187
+
188
+ public function getAccessToken()
189
+ {
190
+ return json_encode($this->token);
191
+ }
192
+
193
+ public function getRefreshToken()
194
+ {
195
+ if (array_key_exists('refresh_token', $this->token)) {
196
+ return $this->token['refresh_token'];
197
+ } else {
198
+ return null;
199
+ }
200
+ }
201
+
202
+ public function setState($state)
203
+ {
204
+ $this->state = $state;
205
+ }
206
+
207
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
208
+ {
209
+ $this->assertionCredentials = $creds;
210
+ }
211
+
212
+ /**
213
+ * Include an accessToken in a given apiHttpRequest.
214
+ * @param Google_Http_Request $request
215
+ * @return Google_Http_Request
216
+ * @throws Google_Auth_Exception
217
+ */
218
+ public function sign(Google_Http_Request $request)
219
+ {
220
+ // add the developer key to the request before signing it
221
+ if ($this->client->getClassConfig($this, 'developer_key')) {
222
+ $request->setQueryParam('key', $this->client->getClassConfig($this, 'developer_key'));
223
+ }
224
+
225
+ // Cannot sign the request without an OAuth access token.
226
+ if (null == $this->token && null == $this->assertionCredentials) {
227
+ return $request;
228
+ }
229
+
230
+ // Check if the token is set to expire in the next 30 seconds
231
+ // (or has already expired).
232
+ if ($this->isAccessTokenExpired()) {
233
+ if ($this->assertionCredentials) {
234
+ $this->refreshTokenWithAssertion();
235
+ } else {
236
+ $this->client->getLogger()->debug('OAuth2 access token expired');
237
+ if (! array_key_exists('refresh_token', $this->token)) {
238
+ $error = "The OAuth 2.0 access token has expired,"
239
+ ." and a refresh token is not available. Refresh tokens"
240
+ ." are not returned for responses that were auto-approved.";
241
+
242
+ $this->client->getLogger()->error($error);
243
+ throw new Google_Auth_Exception($error);
244
+ }
245
+ $this->refreshToken($this->token['refresh_token']);
246
+ }
247
+ }
248
+
249
+ $this->client->getLogger()->debug('OAuth2 authentication');
250
+
251
+ // Add the OAuth2 header to the request
252
+ $request->setRequestHeaders(
253
+ array('Authorization' => 'Bearer ' . $this->token['access_token'])
254
+ );
255
+
256
+ return $request;
257
+ }
258
+
259
+ /**
260
+ * Fetches a fresh access token with the given refresh token.
261
+ * @param string $refreshToken
262
+ * @return void
263
+ */
264
+ public function refreshToken($refreshToken)
265
+ {
266
+ $this->refreshTokenRequest(
267
+ array(
268
+ 'client_id' => $this->client->getClassConfig($this, 'client_id'),
269
+ 'client_secret' => $this->client->getClassConfig($this, 'client_secret'),
270
+ 'refresh_token' => $refreshToken,
271
+ 'grant_type' => 'refresh_token'
272
+ )
273
+ );
274
+ }
275
+
276
+ /**
277
+ * Fetches a fresh access token with a given assertion token.
278
+ * @param Google_Auth_AssertionCredentials $assertionCredentials optional.
279
+ * @return void
280
+ */
281
+ public function refreshTokenWithAssertion($assertionCredentials = null)
282
+ {
283
+ if (!$assertionCredentials) {
284
+ $assertionCredentials = $this->assertionCredentials;
285
+ }
286
+
287
+ $cacheKey = $assertionCredentials->getCacheKey();
288
+
289
+ if ($cacheKey) {
290
+ // We can check whether we have a token available in the
291
+ // cache. If it is expired, we can retrieve a new one from
292
+ // the assertion.
293
+ $token = $this->client->getCache()->get($cacheKey);
294
+ if ($token) {
295
+ $this->setAccessToken($token);
296
+ }
297
+ if (!$this->isAccessTokenExpired()) {
298
+ return;
299
+ }
300
+ }
301
+
302
+ $this->client->getLogger()->debug('OAuth2 access token expired');
303
+ $this->refreshTokenRequest(
304
+ array(
305
+ 'grant_type' => 'assertion',
306
+ 'assertion_type' => $assertionCredentials->assertionType,
307
+ 'assertion' => $assertionCredentials->generateAssertion(),
308
+ )
309
+ );
310
+
311
+ if ($cacheKey) {
312
+ // Attempt to cache the token.
313
+ $this->client->getCache()->set(
314
+ $cacheKey,
315
+ $this->getAccessToken()
316
+ );
317
+ }
318
+ }
319
+
320
+ private function refreshTokenRequest($params)
321
+ {
322
+ if (isset($params['assertion'])) {
323
+ $this->client->getLogger()->info(
324
+ 'OAuth2 access token refresh with Signed JWT assertion grants.'
325
+ );
326
+ } else {
327
+ $this->client->getLogger()->info('OAuth2 access token refresh');
328
+ }
329
+
330
+ $http = new Google_Http_Request(
331
+ self::OAUTH2_TOKEN_URI,
332
+ 'POST',
333
+ array(),
334
+ $params
335
+ );
336
+ $http->disableGzip();
337
+ $request = $this->client->getIo()->makeRequest($http);
338
+
339
+ $code = $request->getResponseHttpCode();
340
+ $body = $request->getResponseBody();
341
+ if (200 == $code) {
342
+ $token = json_decode($body, true);
343
+ if ($token == null) {
344
+ throw new Google_Auth_Exception("Could not json decode the access token");
345
+ }
346
+
347
+ if (! isset($token['access_token']) || ! isset($token['expires_in'])) {
348
+ throw new Google_Auth_Exception("Invalid token format");
349
+ }
350
+
351
+ if (isset($token['id_token'])) {
352
+ $this->token['id_token'] = $token['id_token'];
353
+ }
354
+ $this->token['access_token'] = $token['access_token'];
355
+ $this->token['expires_in'] = $token['expires_in'];
356
+ $this->token['created'] = time();
357
+ } else {
358
+ throw new Google_Auth_Exception("Error refreshing the OAuth2 token, message: '$body'", $code);
359
+ }
360
+ }
361
+
362
+ /**
363
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
364
+ * token, if a token isn't provided.
365
+ * @throws Google_Auth_Exception
366
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
367
+ * @return boolean Returns True if the revocation was successful, otherwise False.
368
+ */
369
+ public function revokeToken($token = null)
370
+ {
371
+ if (!$token) {
372
+ if (!$this->token) {
373
+ // Not initialized, no token to actually revoke
374
+ return false;
375
+ } elseif (array_key_exists('refresh_token', $this->token)) {
376
+ $token = $this->token['refresh_token'];
377
+ } else {
378
+ $token = $this->token['access_token'];
379
+ }
380
+ }
381
+ $request = new Google_Http_Request(
382
+ self::OAUTH2_REVOKE_URI,
383
+ 'POST',
384
+ array(),
385
+ "token=$token"
386
+ );
387
+ $request->disableGzip();
388
+ $response = $this->client->getIo()->makeRequest($request);
389
+ $code = $response->getResponseHttpCode();
390
+ if ($code == 200) {
391
+ $this->token = null;
392
+ return true;
393
+ }
394
+
395
+ return false;
396
+ }
397
+
398
+ /**
399
+ * Returns if the access_token is expired.
400
+ * @return bool Returns True if the access_token is expired.
401
+ */
402
+ public function isAccessTokenExpired()
403
+ {
404
+ if (!$this->token || !isset($this->token['created'])) {
405
+ return true;
406
+ }
407
+
408
+ // If the token is set to expire in the next 30 seconds.
409
+ $expired = ($this->token['created']
410
+ + ($this->token['expires_in'] - 30)) < time();
411
+
412
+ return $expired;
413
+ }
414
+
415
+ // Gets federated sign-on certificates to use for verifying identity tokens.
416
+ // Returns certs as array structure, where keys are key ids, and values
417
+ // are PEM encoded certificates.
418
+ private function getFederatedSignOnCerts()
419
+ {
420
+ return $this->retrieveCertsFromLocation(
421
+ $this->client->getClassConfig($this, 'federated_signon_certs_url')
422
+ );
423
+ }
424
+
425
+ /**
426
+ * Retrieve and cache a certificates file.
427
+ *
428
+ * @param $url string location
429
+ * @throws Google_Auth_Exception
430
+ * @return array certificates
431
+ */
432
+ public function retrieveCertsFromLocation($url)
433
+ {
434
+ // If we're retrieving a local file, just grab it.
435
+ if ("http" != substr($url, 0, 4)) {
436
+ $file = file_get_contents($url);
437
+ if ($file) {
438
+ return json_decode($file, true);
439
+ } else {
440
+ throw new Google_Auth_Exception(
441
+ "Failed to retrieve verification certificates: '" .
442
+ $url . "'."
443
+ );
444
+ }
445
+ }
446
+
447
+ // This relies on makeRequest caching certificate responses.
448
+ $request = $this->client->getIo()->makeRequest(
449
+ new Google_Http_Request(
450
+ $url
451
+ )
452
+ );
453
+ if ($request->getResponseHttpCode() == 200) {
454
+ $certs = json_decode($request->getResponseBody(), true);
455
+ if ($certs) {
456
+ return $certs;
457
+ }
458
+ }
459
+ throw new Google_Auth_Exception(
460
+ "Failed to retrieve verification certificates: '" .
461
+ $request->getResponseBody() . "'.",
462
+ $request->getResponseHttpCode()
463
+ );
464
+ }
465
+
466
+ /**
467
+ * Verifies an id token and returns the authenticated apiLoginTicket.
468
+ * Throws an exception if the id token is not valid.
469
+ * The audience parameter can be used to control which id tokens are
470
+ * accepted. By default, the id token must have been issued to this OAuth2 client.
471
+ *
472
+ * @param $id_token
473
+ * @param $audience
474
+ * @return Google_Auth_LoginTicket
475
+ */
476
+ public function verifyIdToken($id_token = null, $audience = null)
477
+ {
478
+ if (!$id_token) {
479
+ $id_token = $this->token['id_token'];
480
+ }
481
+ $certs = $this->getFederatedSignonCerts();
482
+ if (!$audience) {
483
+ $audience = $this->client->getClassConfig($this, 'client_id');
484
+ }
485
+
486
+ return $this->verifySignedJwtWithCerts($id_token, $certs, $audience, self::OAUTH2_ISSUER);
487
+ }
488
+
489
+ /**
490
+ * Verifies the id token, returns the verified token contents.
491
+ *
492
+ * @param $jwt string the token
493
+ * @param $certs array of certificates
494
+ * @param $required_audience string the expected consumer of the token
495
+ * @param [$issuer] the expected issues, defaults to Google
496
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
497
+ * @throws Google_Auth_Exception
498
+ * @return mixed token information if valid, false if not
499
+ */
500
+ public function verifySignedJwtWithCerts(
501
+ $jwt,
502
+ $certs,
503
+ $required_audience,
504
+ $issuer = null,
505
+ $max_expiry = null
506
+ ) {
507
+ if (!$max_expiry) {
508
+ // Set the maximum time we will accept a token for.
509
+ $max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
510
+ }
511
+
512
+ $segments = explode(".", $jwt);
513
+ if (count($segments) != 3) {
514
+ throw new Google_Auth_Exception("Wrong number of segments in token: $jwt");
515
+ }
516
+ $signed = $segments[0] . "." . $segments[1];
517
+ $signature = Google_Utils::urlSafeB64Decode($segments[2]);
518
+
519
+ // Parse envelope.
520
+ $envelope = json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
521
+ if (!$envelope) {
522
+ throw new Google_Auth_Exception("Can't parse token envelope: " . $segments[0]);
523
+ }
524
+
525
+ // Parse token
526
+ $json_body = Google_Utils::urlSafeB64Decode($segments[1]);
527
+ $payload = json_decode($json_body, true);
528
+ if (!$payload) {
529
+ throw new Google_Auth_Exception("Can't parse token payload: " . $segments[1]);
530
+ }
531
+
532
+ // Check signature
533
+ $verified = false;
534
+ foreach ($certs as $keyName => $pem) {
535
+ $public_key = new Google_Verifier_Pem($pem);
536
+ if ($public_key->verify($signed, $signature)) {
537
+ $verified = true;
538
+ break;
539
+ }
540
+ }
541
+
542
+ if (!$verified) {
543
+ throw new Google_Auth_Exception("Invalid token signature: $jwt");
544
+ }
545
+
546
+ // Check issued-at timestamp
547
+ $iat = 0;
548
+ if (array_key_exists("iat", $payload)) {
549
+ $iat = $payload["iat"];
550
+ }
551
+ if (!$iat) {
552
+ throw new Google_Auth_Exception("No issue time in token: $json_body");
553
+ }
554
+ $earliest = $iat - self::CLOCK_SKEW_SECS;
555
+
556
+ // Check expiration timestamp
557
+ $now = time();
558
+ $exp = 0;
559
+ if (array_key_exists("exp", $payload)) {
560
+ $exp = $payload["exp"];
561
+ }
562
+ if (!$exp) {
563
+ throw new Google_Auth_Exception("No expiration time in token: $json_body");
564
+ }
565
+ if ($exp >= $now + $max_expiry) {
566
+ throw new Google_Auth_Exception(
567
+ sprintf("Expiration time too far in future: %s", $json_body)
568
+ );
569
+ }
570
+
571
+ $latest = $exp + self::CLOCK_SKEW_SECS;
572
+ if ($now < $earliest) {
573
+ throw new Google_Auth_Exception(
574
+ sprintf(
575
+ "Token used too early, %s < %s: %s",
576
+ $now,
577
+ $earliest,
578
+ $json_body
579
+ )
580
+ );
581
+ }
582
+ if ($now > $latest) {
583
+ throw new Google_Auth_Exception(
584
+ sprintf(
585
+ "Token used too late, %s > %s: %s",
586
+ $now,
587
+ $latest,
588
+ $json_body
589
+ )
590
+ );
591
+ }
592
+
593
+ $iss = $payload['iss'];
594
+ if ($issuer && $iss != $issuer) {
595
+ throw new Google_Auth_Exception(
596
+ sprintf(
597
+ "Invalid issuer, %s != %s: %s",
598
+ $iss,
599
+ $issuer,
600
+ $json_body
601
+ )
602
+ );
603
+ }
604
+
605
+ // Check audience
606
+ $aud = $payload["aud"];
607
+ if ($aud != $required_audience) {
608
+ throw new Google_Auth_Exception(
609
+ sprintf(
610
+ "Wrong recipient, %s != %s:",
611
+ $aud,
612
+ $required_audience,
613
+ $json_body
614
+ )
615
+ );
616
+ }
617
+
618
+ // All good.
619
+ return new Google_Auth_LoginTicket($envelope, $payload);
620
+ }
621
+
622
+ /**
623
+ * Add a parameter to the auth params if not empty string.
624
+ */
625
+ private function maybeAddParam($params, $name)
626
+ {
627
+ $param = $this->client->getClassConfig($this, $name);
628
+ if ($param != '') {
629
+ $params[$name] = $param;
630
+ }
631
+ return $params;
632
+ }
633
+ }
tools/src/Google/Auth/Simple.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Simple API access implementation. Can either be used to make requests
22
+ * completely unauthenticated, or by using a Simple API Access developer
23
+ * key.
24
+ * @author Chris Chabot <chabotc@google.com>
25
+ * @author Chirag Shah <chirags@google.com>
26
+ */
27
+ class Google_Auth_Simple extends Google_Auth_Abstract
28
+ {
29
+ private $key = null;
30
+ private $client;
31
+
32
+ public function __construct(Google_Client $client, $config = null)
33
+ {
34
+ $this->client = $client;
35
+ }
36
+
37
+ /**
38
+ * Perform an authenticated / signed apiHttpRequest.
39
+ * This function takes the apiHttpRequest, calls apiAuth->sign on it
40
+ * (which can modify the request in what ever way fits the auth mechanism)
41
+ * and then calls apiCurlIO::makeRequest on the signed request
42
+ *
43
+ * @param Google_Http_Request $request
44
+ * @return Google_Http_Request The resulting HTTP response including the
45
+ * responseHttpCode, responseHeaders and responseBody.
46
+ */
47
+ public function authenticatedRequest(Google_Http_Request $request)
48
+ {
49
+ $request = $this->sign($request);
50
+ return $this->io->makeRequest($request);
51
+ }
52
+
53
+ public function sign(Google_Http_Request $request)
54
+ {
55
+ $key = $this->client->getClassConfig($this, 'developer_key');
56
+ if ($key) {
57
+ $this->client->getLogger()->debug(
58
+ 'Simple API Access developer key authentication'
59
+ );
60
+ $request->setQueryParam('key', $key);
61
+ }
62
+ return $request;
63
+ }
64
+ }
tools/src/Google/Cache/Abstract.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Abstract storage class
20
+ *
21
+ * @author Chris Chabot <chabotc@google.com>
22
+ */
23
+ abstract class Google_Cache_Abstract
24
+ {
25
+
26
+ abstract public function __construct(Google_Client $client);
27
+
28
+ /**
29
+ * Retrieves the data for the given key, or false if they
30
+ * key is unknown or expired
31
+ *
32
+ * @param String $key The key who's data to retrieve
33
+ * @param boolean|int $expiration Expiration time in seconds
34
+ *
35
+ */
36
+ abstract public function get($key, $expiration = false);
37
+
38
+ /**
39
+ * Store the key => $value set. The $value is serialized
40
+ * by this function so can be of any type
41
+ *
42
+ * @param string $key Key of the data
43
+ * @param string $value data
44
+ */
45
+ abstract public function set($key, $value);
46
+
47
+ /**
48
+ * Removes the key/data pair for the given $key
49
+ *
50
+ * @param String $key
51
+ */
52
+ abstract public function delete($key);
53
+ }
tools/src/Google/Cache/Apc.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * A persistent storage class based on the APC cache, which is not
22
+ * really very persistent, as soon as you restart your web server
23
+ * the storage will be wiped, however for debugging and/or speed
24
+ * it can be useful, and cache is a lot cheaper then storage.
25
+ *
26
+ * @author Chris Chabot <chabotc@google.com>
27
+ */
28
+ class Google_Cache_Apc extends Google_Cache_Abstract
29
+ {
30
+ /**
31
+ * @var Google_Client the current client
32
+ */
33
+ private $client;
34
+
35
+ public function __construct(Google_Client $client)
36
+ {
37
+ if (! function_exists('apc_add') ) {
38
+ $error = "Apc functions not available";
39
+
40
+ $client->getLogger()->error($error);
41
+ throw new Google_Cache_Exception($error);
42
+ }
43
+
44
+ $this->client = $client;
45
+ }
46
+
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ public function get($key, $expiration = false)
51
+ {
52
+ $ret = apc_fetch($key);
53
+ if ($ret === false) {
54
+ $this->client->getLogger()->debug(
55
+ 'APC cache miss',
56
+ array('key' => $key)
57
+ );
58
+ return false;
59
+ }
60
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
61
+ $this->client->getLogger()->debug(
62
+ 'APC cache miss (expired)',
63
+ array('key' => $key, 'var' => $ret)
64
+ );
65
+ $this->delete($key);
66
+ return false;
67
+ }
68
+
69
+ $this->client->getLogger()->debug(
70
+ 'APC cache hit',
71
+ array('key' => $key, 'var' => $ret)
72
+ );
73
+
74
+ return $ret['data'];
75
+ }
76
+
77
+ /**
78
+ * @inheritDoc
79
+ */
80
+ public function set($key, $value)
81
+ {
82
+ $var = array('time' => time(), 'data' => $value);
83
+ $rc = apc_store($key, $var);
84
+
85
+ if ($rc == false) {
86
+ $this->client->getLogger()->error(
87
+ 'APC cache set failed',
88
+ array('key' => $key, 'var' => $var)
89
+ );
90
+ throw new Google_Cache_Exception("Couldn't store data");
91
+ }
92
+
93
+ $this->client->getLogger()->debug(
94
+ 'APC cache set',
95
+ array('key' => $key, 'var' => $var)
96
+ );
97
+ }
98
+
99
+ /**
100
+ * @inheritDoc
101
+ * @param String $key
102
+ */
103
+ public function delete($key)
104
+ {
105
+ $this->client->getLogger()->debug(
106
+ 'APC cache delete',
107
+ array('key' => $key)
108
+ );
109
+ apc_delete($key);
110
+ }
111
+ }
tools/src/Google/Cache/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ class Google_Cache_Exception extends Google_Exception
21
+ {
22
+ }
tools/src/Google/Cache/File.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /*
21
+ * This class implements a basic on disk storage. While that does
22
+ * work quite well it's not the most elegant and scalable solution.
23
+ * It will also get you into a heap of trouble when you try to run
24
+ * this in a clustered environment.
25
+ *
26
+ * @author Chris Chabot <chabotc@google.com>
27
+ */
28
+ class Google_Cache_File extends Google_Cache_Abstract
29
+ {
30
+ const MAX_LOCK_RETRIES = 10;
31
+ private $path;
32
+ private $fh;
33
+
34
+ /**
35
+ * @var Google_Client the current client
36
+ */
37
+ private $client;
38
+
39
+ public function __construct(Google_Client $client)
40
+ {
41
+ $this->client = $client;
42
+ $this->path = $this->client->getClassConfig($this, 'directory');
43
+ }
44
+
45
+ public function get($key, $expiration = false)
46
+ {
47
+ $storageFile = $this->getCacheFile($key);
48
+ $data = false;
49
+
50
+ if (!file_exists($storageFile)) {
51
+ $this->client->getLogger()->debug(
52
+ 'File cache miss',
53
+ array('key' => $key, 'file' => $storageFile)
54
+ );
55
+ return false;
56
+ }
57
+
58
+ if ($expiration) {
59
+ $mtime = filemtime($storageFile);
60
+ if ((time() - $mtime) >= $expiration) {
61
+ $this->client->getLogger()->debug(
62
+ 'File cache miss (expired)',
63
+ array('key' => $key, 'file' => $storageFile)
64
+ );
65
+ $this->delete($key);
66
+ return false;
67
+ }
68
+ }
69
+
70
+ if ($this->acquireReadLock($storageFile)) {
71
+ $data = fread($this->fh, filesize($storageFile));
72
+ $data = unserialize($data);
73
+ $this->unlock($storageFile);
74
+ }
75
+
76
+ $this->client->getLogger()->debug(
77
+ 'File cache hit',
78
+ array('key' => $key, 'file' => $storageFile, 'var' => $data)
79
+ );
80
+
81
+ return $data;
82
+ }
83
+
84
+ public function set($key, $value)
85
+ {
86
+ $storageFile = $this->getWriteableCacheFile($key);
87
+ if ($this->acquireWriteLock($storageFile)) {
88
+ // We serialize the whole request object, since we don't only want the
89
+ // responseContent but also the postBody used, headers, size, etc.
90
+ $data = serialize($value);
91
+ $result = fwrite($this->fh, $data);
92
+ $this->unlock($storageFile);
93
+
94
+ $this->client->getLogger()->debug(
95
+ 'File cache set',
96
+ array('key' => $key, 'file' => $storageFile, 'var' => $value)
97
+ );
98
+ } else {
99
+ $this->client->getLogger()->notice(
100
+ 'File cache set failed',
101
+ array('key' => $key, 'file' => $storageFile)
102
+ );
103
+ }
104
+ }
105
+
106
+ public function delete($key)
107
+ {
108
+ $file = $this->getCacheFile($key);
109
+ if (file_exists($file) && !unlink($file)) {
110
+ $this->client->getLogger()->error(
111
+ 'File cache delete failed',
112
+ array('key' => $key, 'file' => $file)
113
+ );
114
+ throw new Google_Cache_Exception("Cache file could not be deleted");
115
+ }
116
+
117
+ $this->client->getLogger()->debug(
118
+ 'File cache delete',
119
+ array('key' => $key, 'file' => $file)
120
+ );
121
+ }
122
+
123
+ private function getWriteableCacheFile($file)
124
+ {
125
+ return $this->getCacheFile($file, true);
126
+ }
127
+
128
+ private function getCacheFile($file, $forWrite = false)
129
+ {
130
+ return $this->getCacheDir($file, $forWrite) . '/' . md5($file);
131
+ }
132
+
133
+ private function getCacheDir($file, $forWrite)
134
+ {
135
+ // use the first 2 characters of the hash as a directory prefix
136
+ // this should prevent slowdowns due to huge directory listings
137
+ // and thus give some basic amount of scalability
138
+ $storageDir = $this->path . '/' . substr(md5($file), 0, 2);
139
+ if ($forWrite && ! is_dir($storageDir)) {
140
+ if (! mkdir($storageDir, 0755, true)) {
141
+ $this->client->getLogger()->error(
142
+ 'File cache creation failed',
143
+ array('dir' => $storageDir)
144
+ );
145
+ throw new Google_Cache_Exception("Could not create storage directory: $storageDir");
146
+ }
147
+ }
148
+ return $storageDir;
149
+ }
150
+
151
+ private function acquireReadLock($storageFile)
152
+ {
153
+ return $this->acquireLock(LOCK_SH, $storageFile);
154
+ }
155
+
156
+ private function acquireWriteLock($storageFile)
157
+ {
158
+ $rc = $this->acquireLock(LOCK_EX, $storageFile);
159
+ if (!$rc) {
160
+ $this->client->getLogger()->notice(
161
+ 'File cache write lock failed',
162
+ array('file' => $storageFile)
163
+ );
164
+ $this->delete($storageFile);
165
+ }
166
+ return $rc;
167
+ }
168
+
169
+ private function acquireLock($type, $storageFile)
170
+ {
171
+ $mode = $type == LOCK_EX ? "w" : "r";
172
+ $this->fh = fopen($storageFile, $mode);
173
+ $count = 0;
174
+ while (!flock($this->fh, $type | LOCK_NB)) {
175
+ // Sleep for 10ms.
176
+ usleep(10000);
177
+ if (++$count < self::MAX_LOCK_RETRIES) {
178
+ return false;
179
+ }
180
+ }
181
+ return true;
182
+ }
183
+
184
+ public function unlock($storageFile)
185
+ {
186
+ if ($this->fh) {
187
+ flock($this->fh, LOCK_UN);
188
+ }
189
+ }
190
+ }
tools/src/Google/Cache/Memcache.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2008 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * A persistent storage class based on the memcache, which is not
22
+ * really very persistent, as soon as you restart your memcache daemon
23
+ * the storage will be wiped.
24
+ *
25
+ * Will use either the memcache or memcached extensions, preferring
26
+ * memcached.
27
+ *
28
+ * @author Chris Chabot <chabotc@google.com>
29
+ */
30
+ class Google_Cache_Memcache extends Google_Cache_Abstract
31
+ {
32
+ private $connection = false;
33
+ private $mc = false;
34
+ private $host;
35
+ private $port;
36
+
37
+ /**
38
+ * @var Google_Client the current client
39
+ */
40
+ private $client;
41
+
42
+ public function __construct(Google_Client $client)
43
+ {
44
+ if (!function_exists('memcache_connect') && !class_exists("Memcached")) {
45
+ $error = "Memcache functions not available";
46
+
47
+ $client->getLogger()->error($error);
48
+ throw new Google_Cache_Exception($error);
49
+ }
50
+
51
+ $this->client = $client;
52
+
53
+ if ($client->isAppEngine()) {
54
+ // No credentials needed for GAE.
55
+ $this->mc = new Memcached();
56
+ $this->connection = true;
57
+ } else {
58
+ $this->host = $client->getClassConfig($this, 'host');
59
+ $this->port = $client->getClassConfig($this, 'port');
60
+ if (empty($this->host) || (empty($this->port) && (string) $this->port != "0")) {
61
+ $error = "You need to supply a valid memcache host and port";
62
+
63
+ $client->getLogger()->error($error);
64
+ throw new Google_Cache_Exception($error);
65
+ }
66
+ }
67
+ }
68
+
69
+ /**
70
+ * @inheritDoc
71
+ */
72
+ public function get($key, $expiration = false)
73
+ {
74
+ $this->connect();
75
+ $ret = false;
76
+ if ($this->mc) {
77
+ $ret = $this->mc->get($key);
78
+ } else {
79
+ $ret = memcache_get($this->connection, $key);
80
+ }
81
+ if ($ret === false) {
82
+ $this->client->getLogger()->debug(
83
+ 'Memcache cache miss',
84
+ array('key' => $key)
85
+ );
86
+ return false;
87
+ }
88
+ if (is_numeric($expiration) && (time() - $ret['time'] > $expiration)) {
89
+ $this->client->getLogger()->debug(
90
+ 'Memcache cache miss (expired)',
91
+ array('key' => $key, 'var' => $ret)
92
+ );
93
+ $this->delete($key);
94
+ return false;
95
+ }
96
+
97
+ $this->client->getLogger()->debug(
98
+ 'Memcache cache hit',
99
+ array('key' => $key, 'var' => $ret)
100
+ );
101
+
102
+ return $ret['data'];
103
+ }
104
+
105
+ /**
106
+ * @inheritDoc
107
+ * @param string $key
108
+ * @param string $value
109
+ * @throws Google_Cache_Exception
110
+ */
111
+ public function set($key, $value)
112
+ {
113
+ $this->connect();
114
+ // we store it with the cache_time default expiration so objects will at
115
+ // least get cleaned eventually.
116
+ $data = array('time' => time(), 'data' => $value);
117
+ $rc = false;
118
+ if ($this->mc) {
119
+ $rc = $this->mc->set($key, $data);
120
+ } else {
121
+ $rc = memcache_set($this->connection, $key, $data, false);
122
+ }
123
+ if ($rc == false) {
124
+ $this->client->getLogger()->error(
125
+ 'Memcache cache set failed',
126
+ array('key' => $key, 'var' => $data)
127
+ );
128
+
129
+ throw new Google_Cache_Exception("Couldn't store data in cache");
130
+ }
131
+
132
+ $this->client->getLogger()->debug(
133
+ 'Memcache cache set',
134
+ array('key' => $key, 'var' => $data)
135
+ );
136
+ }
137
+
138
+ /**
139
+ * @inheritDoc
140
+ * @param String $key
141
+ */
142
+ public function delete($key)
143
+ {
144
+ $this->connect();
145
+ if ($this->mc) {
146
+ $this->mc->delete($key, 0);
147
+ } else {
148
+ memcache_delete($this->connection, $key, 0);
149
+ }
150
+
151
+ $this->client->getLogger()->debug(
152
+ 'Memcache cache delete',
153
+ array('key' => $key)
154
+ );
155
+ }
156
+
157
+ /**
158
+ * Lazy initialiser for memcache connection. Uses pconnect for to take
159
+ * advantage of the persistence pool where possible.
160
+ */
161
+ private function connect()
162
+ {
163
+ if ($this->connection) {
164
+ return;
165
+ }
166
+
167
+ if (class_exists("Memcached")) {
168
+ $this->mc = new Memcached();
169
+ $this->mc->addServer($this->host, $this->port);
170
+ $this->connection = true;
171
+ } else {
172
+ $this->connection = memcache_pconnect($this->host, $this->port);
173
+ }
174
+
175
+ if (! $this->connection) {
176
+ $error = "Couldn't connect to memcache server";
177
+
178
+ $this->client->getLogger()->error($error);
179
+ throw new Google_Cache_Exception($error);
180
+ }
181
+ }
182
+ }
tools/src/Google/Cache/Null.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * A blank storage class, for cases where caching is not
22
+ * required.
23
+ */
24
+ class Google_Cache_Null extends Google_Cache_Abstract
25
+ {
26
+ public function __construct(Google_Client $client)
27
+ {
28
+
29
+ }
30
+
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ public function get($key, $expiration = false)
35
+ {
36
+ return false;
37
+ }
38
+
39
+ /**
40
+ * @inheritDoc
41
+ */
42
+ public function set($key, $value)
43
+ {
44
+ // Nop.
45
+ }
46
+
47
+ /**
48
+ * @inheritDoc
49
+ * @param String $key
50
+ */
51
+ public function delete($key)
52
+ {
53
+ // Nop.
54
+ }
55
+ }
tools/src/Google/Client.php ADDED
@@ -0,0 +1,686 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../autoload.php');
19
+
20
+ /**
21
+ * The Google API Client
22
+ * http://code.google.com/p/google-api-php-client/
23
+ *
24
+ * @author Chris Chabot <chabotc@google.com>
25
+ * @author Chirag Shah <chirags@google.com>
26
+ */
27
+ class Google_Client
28
+ {
29
+ const LIBVER = "1.1.2";
30
+ const USER_AGENT_SUFFIX = "google-api-php-client/";
31
+ /**
32
+ * @var Google_Auth_Abstract $auth
33
+ */
34
+ private $auth;
35
+
36
+ /**
37
+ * @var Google_IO_Abstract $io
38
+ */
39
+ private $io;
40
+
41
+ /**
42
+ * @var Google_Cache_Abstract $cache
43
+ */
44
+ private $cache;
45
+
46
+ /**
47
+ * @var Google_Config $config
48
+ */
49
+ private $config;
50
+
51
+ /**
52
+ * @var Google_Logger_Abstract $logger
53
+ */
54
+ private $logger;
55
+
56
+ /**
57
+ * @var boolean $deferExecution
58
+ */
59
+ private $deferExecution = false;
60
+
61
+ /** @var array $scopes */
62
+ // Scopes requested by the client
63
+ protected $requestedScopes = array();
64
+
65
+ // definitions of services that are discovered.
66
+ protected $services = array();
67
+
68
+ // Used to track authenticated state, can't discover services after doing authenticate()
69
+ private $authenticated = false;
70
+
71
+ /**
72
+ * Construct the Google Client.
73
+ *
74
+ * @param $config Google_Config or string for the ini file to load
75
+ */
76
+ public function __construct($config = null)
77
+ {
78
+ if (is_string($config) && strlen($config)) {
79
+ $config = new Google_Config($config);
80
+ } else if ( !($config instanceof Google_Config)) {
81
+ $config = new Google_Config();
82
+
83
+ if ($this->isAppEngine()) {
84
+ // Automatically use Memcache if we're in AppEngine.
85
+ $config->setCacheClass('Google_Cache_Memcache');
86
+ }
87
+
88
+ if (version_compare(phpversion(), "5.3.4", "<=") || $this->isAppEngine()) {
89
+ // Automatically disable compress.zlib, as currently unsupported.
90
+ $config->setClassConfig('Google_Http_Request', 'disable_gzip', true);
91
+ }
92
+ }
93
+
94
+ if ($config->getIoClass() == Google_Config::USE_AUTO_IO_SELECTION) {
95
+ if (function_exists('curl_version') && function_exists('curl_exec')
96
+ && !$this->isAppEngine()) {
97
+ $config->setIoClass("Google_IO_Curl");
98
+ } else {
99
+ $config->setIoClass("Google_IO_Stream");
100
+ }
101
+ }
102
+
103
+ $this->config = $config;
104
+ }
105
+
106
+ /**
107
+ * Get a string containing the version of the library.
108
+ *
109
+ * @return string
110
+ */
111
+ public function getLibraryVersion()
112
+ {
113
+ return self::LIBVER;
114
+ }
115
+
116
+ /**
117
+ * Attempt to exchange a code for an valid authentication token.
118
+ * Helper wrapped around the OAuth 2.0 implementation.
119
+ *
120
+ * @param $code string code from accounts.google.com
121
+ * @return string token
122
+ */
123
+ public function authenticate($code)
124
+ {
125
+ $this->authenticated = true;
126
+ return $this->getAuth()->authenticate($code);
127
+ }
128
+
129
+ /**
130
+ * Set the auth config from the JSON string provided.
131
+ * This structure should match the file downloaded from
132
+ * the "Download JSON" button on in the Google Developer
133
+ * Console.
134
+ * @param string $json the configuration json
135
+ * @throws Google_Exception
136
+ */
137
+ public function setAuthConfig($json)
138
+ {
139
+ $data = json_decode($json);
140
+ $key = isset($data->installed) ? 'installed' : 'web';
141
+ if (!isset($data->$key)) {
142
+ throw new Google_Exception("Invalid client secret JSON file.");
143
+ }
144
+ $this->setClientId($data->$key->client_id);
145
+ $this->setClientSecret($data->$key->client_secret);
146
+ if (isset($data->$key->redirect_uris)) {
147
+ $this->setRedirectUri($data->$key->redirect_uris[0]);
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Set the auth config from the JSON file in the path
153
+ * provided. This should match the file downloaded from
154
+ * the "Download JSON" button on in the Google Developer
155
+ * Console.
156
+ * @param string $file the file location of the client json
157
+ */
158
+ public function setAuthConfigFile($file)
159
+ {
160
+ $this->setAuthConfig(file_get_contents($file));
161
+ }
162
+
163
+ /**
164
+ * @throws Google_Auth_Exception
165
+ * @return array
166
+ * @visible For Testing
167
+ */
168
+ public function prepareScopes()
169
+ {
170
+ if (empty($this->requestedScopes)) {
171
+ throw new Google_Auth_Exception("No scopes specified");
172
+ }
173
+ $scopes = implode(' ', $this->requestedScopes);
174
+ return $scopes;
175
+ }
176
+
177
+ /**
178
+ * Set the OAuth 2.0 access token using the string that resulted from calling createAuthUrl()
179
+ * or Google_Client#getAccessToken().
180
+ * @param string $accessToken JSON encoded string containing in the following format:
181
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
182
+ * "expires_in":3600, "id_token":"TOKEN", "created":1320790426}
183
+ */
184
+ public function setAccessToken($accessToken)
185
+ {
186
+ if ($accessToken == 'null') {
187
+ $accessToken = null;
188
+ }
189
+ $this->getAuth()->setAccessToken($accessToken);
190
+ }
191
+
192
+
193
+
194
+ /**
195
+ * Set the authenticator object
196
+ * @param Google_Auth_Abstract $auth
197
+ */
198
+ public function setAuth(Google_Auth_Abstract $auth)
199
+ {
200
+ $this->config->setAuthClass(get_class($auth));
201
+ $this->auth = $auth;
202
+ }
203
+
204
+ /**
205
+ * Set the IO object
206
+ * @param Google_IO_Abstract $io
207
+ */
208
+ public function setIo(Google_IO_Abstract $io)
209
+ {
210
+ $this->config->setIoClass(get_class($io));
211
+ $this->io = $io;
212
+ }
213
+
214
+ /**
215
+ * Set the Cache object
216
+ * @param Google_Cache_Abstract $cache
217
+ */
218
+ public function setCache(Google_Cache_Abstract $cache)
219
+ {
220
+ $this->config->setCacheClass(get_class($cache));
221
+ $this->cache = $cache;
222
+ }
223
+
224
+ /**
225
+ * Set the Logger object
226
+ * @param Google_Logger_Abstract $logger
227
+ */
228
+ public function setLogger(Google_Logger_Abstract $logger)
229
+ {
230
+ $this->config->setLoggerClass(get_class($logger));
231
+ $this->logger = $logger;
232
+ }
233
+
234
+ /**
235
+ * Construct the OAuth 2.0 authorization request URI.
236
+ * @return string
237
+ */
238
+ public function createAuthUrl()
239
+ {
240
+ $scopes = $this->prepareScopes();
241
+ return $this->getAuth()->createAuthUrl($scopes);
242
+ }
243
+
244
+ /**
245
+ * Get the OAuth 2.0 access token.
246
+ * @return string $accessToken JSON encoded string in the following format:
247
+ * {"access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
248
+ * "expires_in":3600,"id_token":"TOKEN", "created":1320790426}
249
+ */
250
+ public function getAccessToken()
251
+ {
252
+ $token = $this->getAuth()->getAccessToken();
253
+ // The response is json encoded, so could be the string null.
254
+ // It is arguable whether this check should be here or lower
255
+ // in the library.
256
+ return (null == $token || 'null' == $token || '[]' == $token) ? null : $token;
257
+ }
258
+
259
+ /**
260
+ * Get the OAuth 2.0 refresh token.
261
+ * @return string $refreshToken refresh token or null if not available
262
+ */
263
+ public function getRefreshToken()
264
+ {
265
+ return $this->getAuth()->getRefreshToken();
266
+ }
267
+
268
+ /**
269
+ * Returns if the access_token is expired.
270
+ * @return bool Returns True if the access_token is expired.
271
+ */
272
+ public function isAccessTokenExpired()
273
+ {
274
+ return $this->getAuth()->isAccessTokenExpired();
275
+ }
276
+
277
+ /**
278
+ * Set OAuth 2.0 "state" parameter to achieve per-request customization.
279
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
280
+ * @param string $state
281
+ */
282
+ public function setState($state)
283
+ {
284
+ $this->getAuth()->setState($state);
285
+ }
286
+
287
+ /**
288
+ * @param string $accessType Possible values for access_type include:
289
+ * {@code "offline"} to request offline access from the user.
290
+ * {@code "online"} to request online access from the user.
291
+ */
292
+ public function setAccessType($accessType)
293
+ {
294
+ $this->config->setAccessType($accessType);
295
+ }
296
+
297
+ /**
298
+ * @param string $approvalPrompt Possible values for approval_prompt include:
299
+ * {@code "force"} to force the approval UI to appear. (This is the default value)
300
+ * {@code "auto"} to request auto-approval when possible.
301
+ */
302
+ public function setApprovalPrompt($approvalPrompt)
303
+ {
304
+ $this->config->setApprovalPrompt($approvalPrompt);
305
+ }
306
+
307
+ /**
308
+ * Set the login hint, email address or sub id.
309
+ * @param string $loginHint
310
+ */
311
+ public function setLoginHint($loginHint)
312
+ {
313
+ $this->config->setLoginHint($loginHint);
314
+ }
315
+
316
+ /**
317
+ * Set the application name, this is included in the User-Agent HTTP header.
318
+ * @param string $applicationName
319
+ */
320
+ public function setApplicationName($applicationName)
321
+ {
322
+ $this->config->setApplicationName($applicationName);
323
+ }
324
+
325
+ /**
326
+ * Set the OAuth 2.0 Client ID.
327
+ * @param string $clientId
328
+ */
329
+ public function setClientId($clientId)
330
+ {
331
+ $this->config->setClientId($clientId);
332
+ }
333
+
334
+ /**
335
+ * Set the OAuth 2.0 Client Secret.
336
+ * @param string $clientSecret
337
+ */
338
+ public function setClientSecret($clientSecret)
339
+ {
340
+ $this->config->setClientSecret($clientSecret);
341
+ }
342
+
343
+ /**
344
+ * Set the OAuth 2.0 Redirect URI.
345
+ * @param string $redirectUri
346
+ */
347
+ public function setRedirectUri($redirectUri)
348
+ {
349
+ $this->config->setRedirectUri($redirectUri);
350
+ }
351
+
352
+ /**
353
+ * If 'plus.login' is included in the list of requested scopes, you can use
354
+ * this method to define types of app activities that your app will write.
355
+ * You can find a list of available types here:
356
+ * @link https://developers.google.com/+/api/moment-types
357
+ *
358
+ * @param array $requestVisibleActions Array of app activity types
359
+ */
360
+ public function setRequestVisibleActions($requestVisibleActions)
361
+ {
362
+ if (is_array($requestVisibleActions)) {
363
+ $requestVisibleActions = join(" ", $requestVisibleActions);
364
+ }
365
+ $this->config->setRequestVisibleActions($requestVisibleActions);
366
+ }
367
+
368
+ /**
369
+ * Set the developer key to use, these are obtained through the API Console.
370
+ * @see http://code.google.com/apis/console-help/#generatingdevkeys
371
+ * @param string $developerKey
372
+ */
373
+ public function setDeveloperKey($developerKey)
374
+ {
375
+ $this->config->setDeveloperKey($developerKey);
376
+ }
377
+
378
+ /**
379
+ * Set the hd (hosted domain) parameter streamlines the login process for
380
+ * Google Apps hosted accounts. By including the domain of the user, you
381
+ * restrict sign-in to accounts at that domain.
382
+ * @param $hd string - the domain to use.
383
+ */
384
+ public function setHostedDomain($hd)
385
+ {
386
+ $this->config->setHostedDomain($hd);
387
+ }
388
+
389
+ /**
390
+ * Set the prompt hint. Valid values are none, consent and select_account.
391
+ * If no value is specified and the user has not previously authorized
392
+ * access, then the user is shown a consent screen.
393
+ * @param $prompt string
394
+ */
395
+ public function setPrompt($prompt)
396
+ {
397
+ $this->config->setPrompt($prompt);
398
+ }
399
+
400
+ /**
401
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
402
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
403
+ * an authentication request is valid.
404
+ * @param $realm string - the URL-space to use.
405
+ */
406
+ public function setOpenidRealm($realm)
407
+ {
408
+ $this->config->setOpenidRealm($realm);
409
+ }
410
+
411
+ /**
412
+ * If this is provided with the value true, and the authorization request is
413
+ * granted, the authorization will include any previous authorizations
414
+ * granted to this user/application combination for other scopes.
415
+ * @param $include boolean - the URL-space to use.
416
+ */
417
+ public function setIncludeGrantedScopes($include)
418
+ {
419
+ $this->config->setIncludeGrantedScopes($include);
420
+ }
421
+
422
+ /**
423
+ * Fetches a fresh OAuth 2.0 access token with the given refresh token.
424
+ * @param string $refreshToken
425
+ */
426
+ public function refreshToken($refreshToken)
427
+ {
428
+ $this->getAuth()->refreshToken($refreshToken);
429
+ }
430
+
431
+ /**
432
+ * Revoke an OAuth2 access token or refresh token. This method will revoke the current access
433
+ * token, if a token isn't provided.
434
+ * @throws Google_Auth_Exception
435
+ * @param string|null $token The token (access token or a refresh token) that should be revoked.
436
+ * @return boolean Returns True if the revocation was successful, otherwise False.
437
+ */
438
+ public function revokeToken($token = null)
439
+ {
440
+ return $this->getAuth()->revokeToken($token);
441
+ }
442
+
443
+ /**
444
+ * Verify an id_token. This method will verify the current id_token, if one
445
+ * isn't provided.
446
+ * @throws Google_Auth_Exception
447
+ * @param string|null $token The token (id_token) that should be verified.
448
+ * @return Google_Auth_LoginTicket Returns an apiLoginTicket if the verification was
449
+ * successful.
450
+ */
451
+ public function verifyIdToken($token = null)
452
+ {
453
+ return $this->getAuth()->verifyIdToken($token);
454
+ }
455
+
456
+ /**
457
+ * Verify a JWT that was signed with your own certificates.
458
+ *
459
+ * @param $id_token string The JWT token
460
+ * @param $cert_location array of certificates
461
+ * @param $audience string the expected consumer of the token
462
+ * @param $issuer string the expected issuer, defaults to Google
463
+ * @param [$max_expiry] the max lifetime of a token, defaults to MAX_TOKEN_LIFETIME_SECS
464
+ * @return mixed token information if valid, false if not
465
+ */
466
+ public function verifySignedJwt($id_token, $cert_location, $audience, $issuer, $max_expiry = null)
467
+ {
468
+ $auth = new Google_Auth_OAuth2($this);
469
+ $certs = $auth->retrieveCertsFromLocation($cert_location);
470
+ return $auth->verifySignedJwtWithCerts($id_token, $certs, $audience, $issuer, $max_expiry);
471
+ }
472
+
473
+ /**
474
+ * @param $creds Google_Auth_AssertionCredentials
475
+ */
476
+ public function setAssertionCredentials(Google_Auth_AssertionCredentials $creds)
477
+ {
478
+ $this->getAuth()->setAssertionCredentials($creds);
479
+ }
480
+
481
+ /**
482
+ * Set the scopes to be requested. Must be called before createAuthUrl().
483
+ * Will remove any previously configured scopes.
484
+ * @param array $scopes, ie: array('https://www.googleapis.com/auth/plus.login',
485
+ * 'https://www.googleapis.com/auth/moderator')
486
+ */
487
+ public function setScopes($scopes)
488
+ {
489
+ $this->requestedScopes = array();
490
+ $this->addScope($scopes);
491
+ }
492
+
493
+ /**
494
+ * This functions adds a scope to be requested as part of the OAuth2.0 flow.
495
+ * Will append any scopes not previously requested to the scope parameter.
496
+ * A single string will be treated as a scope to request. An array of strings
497
+ * will each be appended.
498
+ * @param $scope_or_scopes string|array e.g. "profile"
499
+ */
500
+ public function addScope($scope_or_scopes)
501
+ {
502
+ if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {
503
+ $this->requestedScopes[] = $scope_or_scopes;
504
+ } else if (is_array($scope_or_scopes)) {
505
+ foreach ($scope_or_scopes as $scope) {
506
+ $this->addScope($scope);
507
+ }
508
+ }
509
+ }
510
+
511
+ /**
512
+ * Returns the list of scopes requested by the client
513
+ * @return array the list of scopes
514
+ *
515
+ */
516
+ public function getScopes()
517
+ {
518
+ return $this->requestedScopes;
519
+ }
520
+
521
+ /**
522
+ * Declare whether batch calls should be used. This may increase throughput
523
+ * by making multiple requests in one connection.
524
+ *
525
+ * @param boolean $useBatch True if the batch support should
526
+ * be enabled. Defaults to False.
527
+ */
528
+ public function setUseBatch($useBatch)
529
+ {
530
+ // This is actually an alias for setDefer.
531
+ $this->setDefer($useBatch);
532
+ }
533
+
534
+ /**
535
+ * Declare whether making API calls should make the call immediately, or
536
+ * return a request which can be called with ->execute();
537
+ *
538
+ * @param boolean $defer True if calls should not be executed right away.
539
+ */
540
+ public function setDefer($defer)
541
+ {
542
+ $this->deferExecution = $defer;
543
+ }
544
+
545
+ /**
546
+ * Helper method to execute deferred HTTP requests.
547
+ *
548
+ * @param $request Google_Http_Request|Google_Http_Batch
549
+ * @throws Google_Exception
550
+ * @return object of the type of the expected class or array.
551
+ */
552
+ public function execute($request)
553
+ {
554
+ if ($request instanceof Google_Http_Request) {
555
+ $request->setUserAgent(
556
+ $this->getApplicationName()
557
+ . " " . self::USER_AGENT_SUFFIX
558
+ . $this->getLibraryVersion()
559
+ );
560
+ if (!$this->getClassConfig("Google_Http_Request", "disable_gzip")) {
561
+ $request->enableGzip();
562
+ }
563
+ $request->maybeMoveParametersToBody();
564
+ return Google_Http_REST::execute($this, $request);
565
+ } else if ($request instanceof Google_Http_Batch) {
566
+ return $request->execute();
567
+ } else {
568
+ throw new Google_Exception("Do not know how to execute this type of object.");
569
+ }
570
+ }
571
+
572
+ /**
573
+ * Whether or not to return raw requests
574
+ * @return boolean
575
+ */
576
+ public function shouldDefer()
577
+ {
578
+ return $this->deferExecution;
579
+ }
580
+
581
+ /**
582
+ * @return Google_Auth_Abstract Authentication implementation
583
+ */
584
+ public function getAuth()
585
+ {
586
+ if (!isset($this->auth)) {
587
+ $class = $this->config->getAuthClass();
588
+ $this->auth = new $class($this);
589
+ }
590
+ return $this->auth;
591
+ }
592
+
593
+ /**
594
+ * @return Google_IO_Abstract IO implementation
595
+ */
596
+ public function getIo()
597
+ {
598
+ if (!isset($this->io)) {
599
+ $class = $this->config->getIoClass();
600
+ $this->io = new $class($this);
601
+ }
602
+ return $this->io;
603
+ }
604
+
605
+ /**
606
+ * @return Google_Cache_Abstract Cache implementation
607
+ */
608
+ public function getCache()
609
+ {
610
+ if (!isset($this->cache)) {
611
+ $class = $this->config->getCacheClass();
612
+ $this->cache = new $class($this);
613
+ }
614
+ return $this->cache;
615
+ }
616
+
617
+ /**
618
+ * @return Google_Logger_Abstract Logger implementation
619
+ */
620
+ public function getLogger()
621
+ {
622
+ if (!isset($this->logger)) {
623
+ $class = $this->config->getLoggerClass();
624
+ $this->logger = new $class($this);
625
+ }
626
+ return $this->logger;
627
+ }
628
+
629
+ /**
630
+ * Retrieve custom configuration for a specific class.
631
+ * @param $class string|object - class or instance of class to retrieve
632
+ * @param $key string optional - key to retrieve
633
+ * @return array
634
+ */
635
+ public function getClassConfig($class, $key = null)
636
+ {
637
+ if (!is_string($class)) {
638
+ $class = get_class($class);
639
+ }
640
+ return $this->config->getClassConfig($class, $key);
641
+ }
642
+
643
+ /**
644
+ * Set configuration specific to a given class.
645
+ * $config->setClassConfig('Google_Cache_File',
646
+ * array('directory' => '/tmp/cache'));
647
+ * @param $class string|object - The class name for the configuration
648
+ * @param $config string key or an array of configuration values
649
+ * @param $value string optional - if $config is a key, the value
650
+ *
651
+ */
652
+ public function setClassConfig($class, $config, $value = null)
653
+ {
654
+ if (!is_string($class)) {
655
+ $class = get_class($class);
656
+ }
657
+ $this->config->setClassConfig($class, $config, $value);
658
+
659
+ }
660
+
661
+ /**
662
+ * @return string the base URL to use for calls to the APIs
663
+ */
664
+ public function getBasePath()
665
+ {
666
+ return $this->config->getBasePath();
667
+ }
668
+
669
+ /**
670
+ * @return string the name of the application
671
+ */
672
+ public function getApplicationName()
673
+ {
674
+ return $this->config->getApplicationName();
675
+ }
676
+
677
+ /**
678
+ * Are we running in Google AppEngine?
679
+ * return bool
680
+ */
681
+ public function isAppEngine()
682
+ {
683
+ return (isset($_SERVER['SERVER_SOFTWARE']) &&
684
+ strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);
685
+ }
686
+ }
tools/src/Google/Collection.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once realpath(dirname(__FILE__) . '/../../autoload.php');
4
+
5
+ /**
6
+ * Extension to the regular Google_Model that automatically
7
+ * exposes the items array for iteration, so you can just
8
+ * iterate over the object rather than a reference inside.
9
+ */
10
+ class Google_Collection extends Google_Model implements Iterator, Countable
11
+ {
12
+ protected $collection_key = 'items';
13
+
14
+ public function rewind()
15
+ {
16
+ if (isset($this->modelData[$this->collection_key])
17
+ && is_array($this->modelData[$this->collection_key])) {
18
+ reset($this->modelData[$this->collection_key]);
19
+ }
20
+ }
21
+
22
+ public function current()
23
+ {
24
+ $this->coerceType($this->key());
25
+ if (is_array($this->modelData[$this->collection_key])) {
26
+ return current($this->modelData[$this->collection_key]);
27
+ }
28
+ }
29
+
30
+ public function key()
31
+ {
32
+ if (isset($this->modelData[$this->collection_key])
33
+ && is_array($this->modelData[$this->collection_key])) {
34
+ return key($this->modelData[$this->collection_key]);
35
+ }
36
+ }
37
+
38
+ public function next()
39
+ {
40
+ return next($this->modelData[$this->collection_key]);
41
+ }
42
+
43
+ public function valid()
44
+ {
45
+ $key = $this->key();
46
+ return $key !== null && $key !== false;
47
+ }
48
+
49
+ public function count()
50
+ {
51
+ return count($this->modelData[$this->collection_key]);
52
+ }
53
+
54
+ public function offsetExists ($offset)
55
+ {
56
+ if (!is_numeric($offset)) {
57
+ return parent::offsetExists($offset);
58
+ }
59
+ return isset($this->modelData[$this->collection_key][$offset]);
60
+ }
61
+
62
+ public function offsetGet($offset)
63
+ {
64
+ if (!is_numeric($offset)) {
65
+ return parent::offsetGet($offset);
66
+ }
67
+ $this->coerceType($offset);
68
+ return $this->modelData[$this->collection_key][$offset];
69
+ }
70
+
71
+ public function offsetSet($offset, $value)
72
+ {
73
+ if (!is_numeric($offset)) {
74
+ return parent::offsetSet($offset, $value);
75
+ }
76
+ $this->modelData[$this->collection_key][$offset] = $value;
77
+ }
78
+
79
+ public function offsetUnset($offset)
80
+ {
81
+ if (!is_numeric($offset)) {
82
+ return parent::offsetUnset($offset);
83
+ }
84
+ unset($this->modelData[$this->collection_key][$offset]);
85
+ }
86
+
87
+ private function coerceType($offset)
88
+ {
89
+ $typeKey = $this->keyType($this->collection_key);
90
+ if (isset($this->$typeKey) && !is_object($this->modelData[$this->collection_key][$offset])) {
91
+ $type = $this->$typeKey;
92
+ $this->modelData[$this->collection_key][$offset] =
93
+ new $type($this->modelData[$this->collection_key][$offset]);
94
+ }
95
+ }
96
+ }
tools/src/Google/Config.php ADDED
@@ -0,0 +1,414 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * A class to contain the library configuration for the Google API client.
20
+ */
21
+ class Google_Config
22
+ {
23
+ const GZIP_DISABLED = true;
24
+ const GZIP_ENABLED = false;
25
+ const GZIP_UPLOADS_ENABLED = true;
26
+ const GZIP_UPLOADS_DISABLED = false;
27
+ const USE_AUTO_IO_SELECTION = "auto";
28
+ protected $configuration;
29
+
30
+ /**
31
+ * Create a new Google_Config. Can accept an ini file location with the
32
+ * local configuration. For example:
33
+ * application_name="My App"
34
+ *
35
+ * @param [$ini_file_location] - optional - The location of the ini file to load
36
+ */
37
+ public function __construct($ini_file_location = null)
38
+ {
39
+ $this->configuration = array(
40
+ // The application_name is included in the User-Agent HTTP header.
41
+ 'application_name' => '',
42
+
43
+ // Which Authentication, Storage and HTTP IO classes to use.
44
+ 'auth_class' => 'Google_Auth_OAuth2',
45
+ 'io_class' => self::USE_AUTO_IO_SELECTION,
46
+ 'cache_class' => 'Google_Cache_File',
47
+ 'logger_class' => 'Google_Logger_Null',
48
+
49
+ // Don't change these unless you're working against a special development
50
+ // or testing environment.
51
+ 'base_path' => 'https://www.googleapis.com',
52
+
53
+ // Definition of class specific values, like file paths and so on.
54
+ 'classes' => array(
55
+ 'Google_IO_Abstract' => array(
56
+ 'request_timeout_seconds' => 100,
57
+ ),
58
+ 'Google_Logger_Abstract' => array(
59
+ 'level' => 'debug',
60
+ 'log_format' => "[%datetime%] %level%: %message% %context%\n",
61
+ 'date_format' => 'd/M/Y:H:i:s O',
62
+ 'allow_newlines' => true
63
+ ),
64
+ 'Google_Logger_File' => array(
65
+ 'file' => 'php://stdout',
66
+ 'mode' => 0640,
67
+ 'lock' => false,
68
+ ),
69
+ 'Google_Http_Request' => array(
70
+ // Disable the use of gzip on calls if set to true. Defaults to false.
71
+ 'disable_gzip' => self::GZIP_ENABLED,
72
+
73
+ // We default gzip to disabled on uploads even if gzip is otherwise
74
+ // enabled, due to some issues seen with small packet sizes for uploads.
75
+ // Please test with this option before enabling gzip for uploads in
76
+ // a production environment.
77
+ 'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
78
+ ),
79
+ // If you want to pass in OAuth 2.0 settings, they will need to be
80
+ // structured like this.
81
+ 'Google_Auth_OAuth2' => array(
82
+ // Keys for OAuth 2.0 access, see the API console at
83
+ // https://developers.google.com/console
84
+ 'client_id' => '',
85
+ 'client_secret' => '',
86
+ 'redirect_uri' => '',
87
+
88
+ // Simple API access key, also from the API console. Ensure you get
89
+ // a Server key, and not a Browser key.
90
+ 'developer_key' => '',
91
+
92
+ // Other parameters.
93
+ 'hd' => '',
94
+ 'prompt' => '',
95
+ 'openid.realm' => '',
96
+ 'include_granted_scopes' => '',
97
+ 'login_hint' => '',
98
+ 'request_visible_actions' => '',
99
+ 'access_type' => 'online',
100
+ 'approval_prompt' => 'auto',
101
+ 'federated_signon_certs_url' =>
102
+ 'https://www.googleapis.com/oauth2/v1/certs',
103
+ ),
104
+ // Set a default directory for the file cache.
105
+ 'Google_Cache_File' => array(
106
+ 'directory' => sys_get_temp_dir() . '/Google_Client'
107
+ )
108
+ ),
109
+ );
110
+ if ($ini_file_location) {
111
+ $ini = parse_ini_file($ini_file_location, true);
112
+ if (is_array($ini) && count($ini)) {
113
+ $merged_configuration = $ini + $this->configuration;
114
+ if (isset($ini['classes']) && isset($this->configuration['classes'])) {
115
+ $merged_configuration['classes'] = $ini['classes'] + $this->configuration['classes'];
116
+ }
117
+ $this->configuration = $merged_configuration;
118
+ }
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Set configuration specific to a given class.
124
+ * $config->setClassConfig('Google_Cache_File',
125
+ * array('directory' => '/tmp/cache'));
126
+ * @param $class string The class name for the configuration
127
+ * @param $config string key or an array of configuration values
128
+ * @param $value string optional - if $config is a key, the value
129
+ */
130
+ public function setClassConfig($class, $config, $value = null)
131
+ {
132
+ if (!is_array($config)) {
133
+ if (!isset($this->configuration['classes'][$class])) {
134
+ $this->configuration['classes'][$class] = array();
135
+ }
136
+ $this->configuration['classes'][$class][$config] = $value;
137
+ } else {
138
+ $this->configuration['classes'][$class] = $config;
139
+ }
140
+ }
141
+
142
+ public function getClassConfig($class, $key = null)
143
+ {
144
+ if (!isset($this->configuration['classes'][$class])) {
145
+ return null;
146
+ }
147
+ if ($key === null) {
148
+ return $this->configuration['classes'][$class];
149
+ } else {
150
+ return $this->configuration['classes'][$class][$key];
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Return the configured cache class.
156
+ * @return string
157
+ */
158
+ public function getCacheClass()
159
+ {
160
+ return $this->configuration['cache_class'];
161
+ }
162
+
163
+ /**
164
+ * Return the configured logger class.
165
+ * @return string
166
+ */
167
+ public function getLoggerClass()
168
+ {
169
+ return $this->configuration['logger_class'];
170
+ }
171
+
172
+ /**
173
+ * Return the configured Auth class.
174
+ * @return string
175
+ */
176
+ public function getAuthClass()
177
+ {
178
+ return $this->configuration['auth_class'];
179
+ }
180
+
181
+ /**
182
+ * Set the auth class.
183
+ *
184
+ * @param $class string the class name to set
185
+ */
186
+ public function setAuthClass($class)
187
+ {
188
+ $prev = $this->configuration['auth_class'];
189
+ if (!isset($this->configuration['classes'][$class]) &&
190
+ isset($this->configuration['classes'][$prev])) {
191
+ $this->configuration['classes'][$class] =
192
+ $this->configuration['classes'][$prev];
193
+ }
194
+ $this->configuration['auth_class'] = $class;
195
+ }
196
+
197
+ /**
198
+ * Set the IO class.
199
+ *
200
+ * @param $class string the class name to set
201
+ */
202
+ public function setIoClass($class)
203
+ {
204
+ $prev = $this->configuration['io_class'];
205
+ if (!isset($this->configuration['classes'][$class]) &&
206
+ isset($this->configuration['classes'][$prev])) {
207
+ $this->configuration['classes'][$class] =
208
+ $this->configuration['classes'][$prev];
209
+ }
210
+ $this->configuration['io_class'] = $class;
211
+ }
212
+
213
+ /**
214
+ * Set the cache class.
215
+ *
216
+ * @param $class string the class name to set
217
+ */
218
+ public function setCacheClass($class)
219
+ {
220
+ $prev = $this->configuration['cache_class'];
221
+ if (!isset($this->configuration['classes'][$class]) &&
222
+ isset($this->configuration['classes'][$prev])) {
223
+ $this->configuration['classes'][$class] =
224
+ $this->configuration['classes'][$prev];
225
+ }
226
+ $this->configuration['cache_class'] = $class;
227
+ }
228
+
229
+ /**
230
+ * Set the logger class.
231
+ *
232
+ * @param $class string the class name to set
233
+ */
234
+ public function setLoggerClass($class)
235
+ {
236
+ $prev = $this->configuration['logger_class'];
237
+ if (!isset($this->configuration['classes'][$class]) &&
238
+ isset($this->configuration['classes'][$prev])) {
239
+ $this->configuration['classes'][$class] =
240
+ $this->configuration['classes'][$prev];
241
+ }
242
+ $this->configuration['logger_class'] = $class;
243
+ }
244
+
245
+ /**
246
+ * Return the configured IO class.
247
+ *
248
+ * @return string
249
+ */
250
+ public function getIoClass()
251
+ {
252
+ return $this->configuration['io_class'];
253
+ }
254
+
255
+ /**
256
+ * Set the application name, this is included in the User-Agent HTTP header.
257
+ * @param string $name
258
+ */
259
+ public function setApplicationName($name)
260
+ {
261
+ $this->configuration['application_name'] = $name;
262
+ }
263
+
264
+ /**
265
+ * @return string the name of the application
266
+ */
267
+ public function getApplicationName()
268
+ {
269
+ return $this->configuration['application_name'];
270
+ }
271
+
272
+ /**
273
+ * Set the client ID for the auth class.
274
+ * @param $clientId string - the API console client ID
275
+ */
276
+ public function setClientId($clientId)
277
+ {
278
+ $this->setAuthConfig('client_id', $clientId);
279
+ }
280
+
281
+ /**
282
+ * Set the client secret for the auth class.
283
+ * @param $secret string - the API console client secret
284
+ */
285
+ public function setClientSecret($secret)
286
+ {
287
+ $this->setAuthConfig('client_secret', $secret);
288
+ }
289
+
290
+ /**
291
+ * Set the redirect uri for the auth class. Note that if using the
292
+ * Javascript based sign in flow, this should be the string 'postmessage'.
293
+ *
294
+ * @param $uri string - the URI that users should be redirected to
295
+ */
296
+ public function setRedirectUri($uri)
297
+ {
298
+ $this->setAuthConfig('redirect_uri', $uri);
299
+ }
300
+
301
+ /**
302
+ * Set the app activities for the auth class.
303
+ * @param $rva string a space separated list of app activity types
304
+ */
305
+ public function setRequestVisibleActions($rva)
306
+ {
307
+ $this->setAuthConfig('request_visible_actions', $rva);
308
+ }
309
+
310
+ /**
311
+ * Set the the access type requested (offline or online.)
312
+ * @param $access string - the access type
313
+ */
314
+ public function setAccessType($access)
315
+ {
316
+ $this->setAuthConfig('access_type', $access);
317
+ }
318
+
319
+ /**
320
+ * Set when to show the approval prompt (auto or force)
321
+ * @param $approval string - the approval request
322
+ */
323
+ public function setApprovalPrompt($approval)
324
+ {
325
+ $this->setAuthConfig('approval_prompt', $approval);
326
+ }
327
+
328
+ /**
329
+ * Set the login hint (email address or sub identifier)
330
+ * @param $hint string
331
+ */
332
+ public function setLoginHint($hint)
333
+ {
334
+ $this->setAuthConfig('login_hint', $hint);
335
+ }
336
+
337
+ /**
338
+ * Set the developer key for the auth class. Note that this is separate value
339
+ * from the client ID - if it looks like a URL, its a client ID!
340
+ * @param $key string - the API console developer key
341
+ */
342
+ public function setDeveloperKey($key)
343
+ {
344
+ $this->setAuthConfig('developer_key', $key);
345
+ }
346
+
347
+ /**
348
+ * Set the hd (hosted domain) parameter streamlines the login process for
349
+ * Google Apps hosted accounts. By including the domain of the user, you
350
+ * restrict sign-in to accounts at that domain.
351
+ * @param $hd string - the domain to use.
352
+ */
353
+ public function setHostedDomain($hd)
354
+ {
355
+ $this->setAuthConfig('hd', $hd);
356
+ }
357
+
358
+ /**
359
+ * Set the prompt hint. Valid values are none, consent and select_account.
360
+ * If no value is specified and the user has not previously authorized
361
+ * access, then the user is shown a consent screen.
362
+ * @param $prompt string
363
+ */
364
+ public function setPrompt($prompt)
365
+ {
366
+ $this->setAuthConfig('prompt', $prompt);
367
+ }
368
+
369
+ /**
370
+ * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth
371
+ * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which
372
+ * an authentication request is valid.
373
+ * @param $realm string - the URL-space to use.
374
+ */
375
+ public function setOpenidRealm($realm)
376
+ {
377
+ $this->setAuthConfig('openid.realm', $realm);
378
+ }
379
+
380
+ /**
381
+ * If this is provided with the value true, and the authorization request is
382
+ * granted, the authorization will include any previous authorizations
383
+ * granted to this user/application combination for other scopes.
384
+ * @param $include boolean - the URL-space to use.
385
+ */
386
+ public function setIncludeGrantedScopes($include)
387
+ {
388
+ $this->setAuthConfig(
389
+ 'include_granted_scopes',
390
+ $include ? "true" : "false"
391
+ );
392
+ }
393
+
394
+ /**
395
+ * @return string the base URL to use for API calls
396
+ */
397
+ public function getBasePath()
398
+ {
399
+ return $this->configuration['base_path'];
400
+ }
401
+
402
+ /**
403
+ * Set the auth configuration for the current auth class.
404
+ * @param $key - the key to set
405
+ * @param $value - the parameter value
406
+ */
407
+ private function setAuthConfig($key, $value)
408
+ {
409
+ if (!isset($this->configuration['classes'][$this->getAuthClass()])) {
410
+ $this->configuration['classes'][$this->getAuthClass()] = array();
411
+ }
412
+ $this->configuration['classes'][$this->getAuthClass()][$key] = $value;
413
+ }
414
+ }
tools/src/Google/Exception.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ class Google_Exception extends Exception
19
+ {
20
+ }
tools/src/Google/Http/Batch.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * @author Chirag Shah <chirags@google.com>
22
+ */
23
+ class Google_Http_Batch
24
+ {
25
+ /** @var string Multipart Boundary. */
26
+ private $boundary;
27
+
28
+ /** @var array service requests to be executed. */
29
+ private $requests = array();
30
+
31
+ /** @var Google_Client */
32
+ private $client;
33
+
34
+ private $expected_classes = array();
35
+
36
+ private $base_path;
37
+
38
+ public function __construct(Google_Client $client, $boundary = false)
39
+ {
40
+ $this->client = $client;
41
+ $this->base_path = $this->client->getBasePath();
42
+ $this->expected_classes = array();
43
+ $boundary = (false == $boundary) ? mt_rand() : $boundary;
44
+ $this->boundary = str_replace('"', '', $boundary);
45
+ }
46
+
47
+ public function add(Google_Http_Request $request, $key = false)
48
+ {
49
+ if (false == $key) {
50
+ $key = mt_rand();
51
+ }
52
+
53
+ $this->requests[$key] = $request;
54
+ }
55
+
56
+ public function execute()
57
+ {
58
+ $body = '';
59
+
60
+ /** @var Google_Http_Request $req */
61
+ foreach ($this->requests as $key => $req) {
62
+ $body .= "--{$this->boundary}\n";
63
+ $body .= $req->toBatchString($key) . "\n";
64
+ $this->expected_classes["response-" . $key] = $req->getExpectedClass();
65
+ }
66
+
67
+ $body = rtrim($body);
68
+ $body .= "\n--{$this->boundary}--";
69
+
70
+ $url = $this->base_path . '/batch';
71
+ $httpRequest = new Google_Http_Request($url, 'POST');
72
+ $httpRequest->setRequestHeaders(
73
+ array('Content-Type' => 'multipart/mixed; boundary=' . $this->boundary)
74
+ );
75
+
76
+ $httpRequest->setPostBody($body);
77
+ $response = $this->client->getIo()->makeRequest($httpRequest);
78
+
79
+ return $this->parseResponse($response);
80
+ }
81
+
82
+ public function parseResponse(Google_Http_Request $response)
83
+ {
84
+ $contentType = $response->getResponseHeader('content-type');
85
+ $contentType = explode(';', $contentType);
86
+ $boundary = false;
87
+ foreach ($contentType as $part) {
88
+ $part = (explode('=', $part, 2));
89
+ if (isset($part[0]) && 'boundary' == trim($part[0])) {
90
+ $boundary = $part[1];
91
+ }
92
+ }
93
+
94
+ $body = $response->getResponseBody();
95
+ if ($body) {
96
+ $body = str_replace("--$boundary--", "--$boundary", $body);
97
+ $parts = explode("--$boundary", $body);
98
+ $responses = array();
99
+
100
+ foreach ($parts as $part) {
101
+ $part = trim($part);
102
+ if (!empty($part)) {
103
+ list($metaHeaders, $part) = explode("\r\n\r\n", $part, 2);
104
+ $metaHeaders = $this->client->getIo()->getHttpResponseHeaders($metaHeaders);
105
+
106
+ $status = substr($part, 0, strpos($part, "\n"));
107
+ $status = explode(" ", $status);
108
+ $status = $status[1];
109
+
110
+ list($partHeaders, $partBody) = $this->client->getIo()->ParseHttpResponse($part, false);
111
+ $response = new Google_Http_Request("");
112
+ $response->setResponseHttpCode($status);
113
+ $response->setResponseHeaders($partHeaders);
114
+ $response->setResponseBody($partBody);
115
+
116
+ // Need content id.
117
+ $key = $metaHeaders['content-id'];
118
+
119
+ if (isset($this->expected_classes[$key]) &&
120
+ strlen($this->expected_classes[$key]) > 0) {
121
+ $class = $this->expected_classes[$key];
122
+ $response->setExpectedClass($class);
123
+ }
124
+
125
+ try {
126
+ $response = Google_Http_REST::decodeHttpResponse($response, $this->client);
127
+ $responses[$key] = $response;
128
+ } catch (Google_Service_Exception $e) {
129
+ // Store the exception as the response, so successful responses
130
+ // can be processed.
131
+ $responses[$key] = $e;
132
+ }
133
+ }
134
+ }
135
+
136
+ return $responses;
137
+ }
138
+
139
+ return null;
140
+ }
141
+ }
tools/src/Google/Http/CacheParser.php ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Implement the caching directives specified in rfc2616. This
22
+ * implementation is guided by the guidance offered in rfc2616-sec13.
23
+ * @author Chirag Shah <chirags@google.com>
24
+ */
25
+ class Google_Http_CacheParser
26
+ {
27
+ public static $CACHEABLE_HTTP_METHODS = array('GET', 'HEAD');
28
+ public static $CACHEABLE_STATUS_CODES = array('200', '203', '300', '301');
29
+
30
+ /**
31
+ * Check if an HTTP request can be cached by a private local cache.
32
+ *
33
+ * @static
34
+ * @param Google_Http_Request $resp
35
+ * @return bool True if the request is cacheable.
36
+ * False if the request is uncacheable.
37
+ */
38
+ public static function isRequestCacheable(Google_Http_Request $resp)
39
+ {
40
+ $method = $resp->getRequestMethod();
41
+ if (! in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
42
+ return false;
43
+ }
44
+
45
+ // Don't cache authorized requests/responses.
46
+ // [rfc2616-14.8] When a shared cache receives a request containing an
47
+ // Authorization field, it MUST NOT return the corresponding response
48
+ // as a reply to any other request...
49
+ if ($resp->getRequestHeader("authorization")) {
50
+ return false;
51
+ }
52
+
53
+ return true;
54
+ }
55
+
56
+ /**
57
+ * Check if an HTTP response can be cached by a private local cache.
58
+ *
59
+ * @static
60
+ * @param Google_Http_Request $resp
61
+ * @return bool True if the response is cacheable.
62
+ * False if the response is un-cacheable.
63
+ */
64
+ public static function isResponseCacheable(Google_Http_Request $resp)
65
+ {
66
+ // First, check if the HTTP request was cacheable before inspecting the
67
+ // HTTP response.
68
+ if (false == self::isRequestCacheable($resp)) {
69
+ return false;
70
+ }
71
+
72
+ $code = $resp->getResponseHttpCode();
73
+ if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
74
+ return false;
75
+ }
76
+
77
+ // The resource is uncacheable if the resource is already expired and
78
+ // the resource doesn't have an ETag for revalidation.
79
+ $etag = $resp->getResponseHeader("etag");
80
+ if (self::isExpired($resp) && $etag == false) {
81
+ return false;
82
+ }
83
+
84
+ // [rfc2616-14.9.2] If [no-store is] sent in a response, a cache MUST NOT
85
+ // store any part of either this response or the request that elicited it.
86
+ $cacheControl = $resp->getParsedCacheControl();
87
+ if (isset($cacheControl['no-store'])) {
88
+ return false;
89
+ }
90
+
91
+ // Pragma: no-cache is an http request directive, but is occasionally
92
+ // used as a response header incorrectly.
93
+ $pragma = $resp->getResponseHeader('pragma');
94
+ if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
95
+ return false;
96
+ }
97
+
98
+ // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
99
+ // a cache cannot determine from the request headers of a subsequent request
100
+ // whether this response is the appropriate representation."
101
+ // Given this, we deem responses with the Vary header as uncacheable.
102
+ $vary = $resp->getResponseHeader('vary');
103
+ if ($vary) {
104
+ return false;
105
+ }
106
+
107
+ return true;
108
+ }
109
+
110
+ /**
111
+ * @static
112
+ * @param Google_Http_Request $resp
113
+ * @return bool True if the HTTP response is considered to be expired.
114
+ * False if it is considered to be fresh.
115
+ */
116
+ public static function isExpired(Google_Http_Request $resp)
117
+ {
118
+ // HTTP/1.1 clients and caches MUST treat other invalid date formats,
119
+ // especially including the value “0”, as in the past.
120
+ $parsedExpires = false;
121
+ $responseHeaders = $resp->getResponseHeaders();
122
+
123
+ if (isset($responseHeaders['expires'])) {
124
+ $rawExpires = $responseHeaders['expires'];
125
+ // Check for a malformed expires header first.
126
+ if (empty($rawExpires) || (is_numeric($rawExpires) && $rawExpires <= 0)) {
127
+ return true;
128
+ }
129
+
130
+ // See if we can parse the expires header.
131
+ $parsedExpires = strtotime($rawExpires);
132
+ if (false == $parsedExpires || $parsedExpires <= 0) {
133
+ return true;
134
+ }
135
+ }
136
+
137
+ // Calculate the freshness of an http response.
138
+ $freshnessLifetime = false;
139
+ $cacheControl = $resp->getParsedCacheControl();
140
+ if (isset($cacheControl['max-age'])) {
141
+ $freshnessLifetime = $cacheControl['max-age'];
142
+ }
143
+
144
+ $rawDate = $resp->getResponseHeader('date');
145
+ $parsedDate = strtotime($rawDate);
146
+
147
+ if (empty($rawDate) || false == $parsedDate) {
148
+ // We can't default this to now, as that means future cache reads
149
+ // will always pass with the logic below, so we will require a
150
+ // date be injected if not supplied.
151
+ throw new Google_Exception("All cacheable requests must have creation dates.");
152
+ }
153
+
154
+ if (false == $freshnessLifetime && isset($responseHeaders['expires'])) {
155
+ $freshnessLifetime = $parsedExpires - $parsedDate;
156
+ }
157
+
158
+ if (false == $freshnessLifetime) {
159
+ return true;
160
+ }
161
+
162
+ // Calculate the age of an http response.
163
+ $age = max(0, time() - $parsedDate);
164
+ if (isset($responseHeaders['age'])) {
165
+ $age = max($age, strtotime($responseHeaders['age']));
166
+ }
167
+
168
+ return $freshnessLifetime <= $age;
169
+ }
170
+
171
+ /**
172
+ * Determine if a cache entry should be revalidated with by the origin.
173
+ *
174
+ * @param Google_Http_Request $response
175
+ * @return bool True if the entry is expired, else return false.
176
+ */
177
+ public static function mustRevalidate(Google_Http_Request $response)
178
+ {
179
+ // [13.3] When a cache has a stale entry that it would like to use as a
180
+ // response to a client's request, it first has to check with the origin
181
+ // server to see if its cached entry is still usable.
182
+ return self::isExpired($response);
183
+ }
184
+ }
tools/src/Google/Http/MediaFileUpload.php ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2012 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * @author Chirag Shah <chirags@google.com>
22
+ *
23
+ */
24
+ class Google_Http_MediaFileUpload
25
+ {
26
+ const UPLOAD_MEDIA_TYPE = 'media';
27
+ const UPLOAD_MULTIPART_TYPE = 'multipart';
28
+ const UPLOAD_RESUMABLE_TYPE = 'resumable';
29
+
30
+ /** @var string $mimeType */
31
+ private $mimeType;
32
+
33
+ /** @var string $data */
34
+ private $data;
35
+
36
+ /** @var bool $resumable */
37
+ private $resumable;
38
+
39
+ /** @var int $chunkSize */
40
+ private $chunkSize;
41
+
42
+ /** @var int $size */
43
+ private $size;
44
+
45
+ /** @var string $resumeUri */
46
+ private $resumeUri;
47
+
48
+ /** @var int $progress */
49
+ private $progress;
50
+
51
+ /** @var Google_Client */
52
+ private $client;
53
+
54
+ /** @var Google_Http_Request */
55
+ private $request;
56
+
57
+ /** @var string */
58
+ private $boundary;
59
+
60
+ /**
61
+ * Result code from last HTTP call
62
+ * @var int
63
+ */
64
+ private $httpResultCode;
65
+
66
+ /**
67
+ * @param $mimeType string
68
+ * @param $data string The bytes you want to upload.
69
+ * @param $resumable bool
70
+ * @param bool $chunkSize File will be uploaded in chunks of this many bytes.
71
+ * only used if resumable=True
72
+ */
73
+ public function __construct(
74
+ Google_Client $client,
75
+ Google_Http_Request $request,
76
+ $mimeType,
77
+ $data,
78
+ $resumable = false,
79
+ $chunkSize = false,
80
+ $boundary = false
81
+ ) {
82
+ $this->client = $client;
83
+ $this->request = $request;
84
+ $this->mimeType = $mimeType;
85
+ $this->data = $data;
86
+ $this->size = strlen($this->data);
87
+ $this->resumable = $resumable;
88
+ if (!$chunkSize) {
89
+ $chunkSize = 256 * 1024;
90
+ }
91
+ $this->chunkSize = $chunkSize;
92
+ $this->progress = 0;
93
+ $this->boundary = $boundary;
94
+
95
+ // Process Media Request
96
+ $this->process();
97
+ }
98
+
99
+ /**
100
+ * Set the size of the file that is being uploaded.
101
+ * @param $size - int file size in bytes
102
+ */
103
+ public function setFileSize($size)
104
+ {
105
+ $this->size = $size;
106
+ }
107
+
108
+ /**
109
+ * Return the progress on the upload
110
+ * @return int progress in bytes uploaded.
111
+ */
112
+ public function getProgress()
113
+ {
114
+ return $this->progress;
115
+ }
116
+
117
+ /**
118
+ * Return the HTTP result code from the last call made.
119
+ * @return int code
120
+ */
121
+ public function getHttpResultCode()
122
+ {
123
+ return $this->httpResultCode;
124
+ }
125
+
126
+ /**
127
+ * Send the next part of the file to upload.
128
+ * @param [$chunk] the next set of bytes to send. If false will used $data passed
129
+ * at construct time.
130
+ */
131
+ public function nextChunk($chunk = false)
132
+ {
133
+ if (false == $this->resumeUri) {
134
+ $this->resumeUri = $this->getResumeUri();
135
+ }
136
+
137
+ if (false == $chunk) {
138
+ $chunk = substr($this->data, $this->progress, $this->chunkSize);
139
+ }
140
+
141
+ $lastBytePos = $this->progress + strlen($chunk) - 1;
142
+ $headers = array(
143
+ 'content-range' => "bytes $this->progress-$lastBytePos/$this->size",
144
+ 'content-type' => $this->request->getRequestHeader('content-type'),
145
+ 'content-length' => $this->chunkSize,
146
+ 'expect' => '',
147
+ );
148
+
149
+ $httpRequest = new Google_Http_Request(
150
+ $this->resumeUri,
151
+ 'PUT',
152
+ $headers,
153
+ $chunk
154
+ );
155
+
156
+ if ($this->client->getClassConfig("Google_Http_Request", "enable_gzip_for_uploads")) {
157
+ $httpRequest->enableGzip();
158
+ } else {
159
+ $httpRequest->disableGzip();
160
+ }
161
+
162
+ $response = $this->client->getIo()->makeRequest($httpRequest);
163
+ $response->setExpectedClass($this->request->getExpectedClass());
164
+ $code = $response->getResponseHttpCode();
165
+ $this->httpResultCode = $code;
166
+
167
+ if (308 == $code) {
168
+ // Track the amount uploaded.
169
+ $range = explode('-', $response->getResponseHeader('range'));
170
+ $this->progress = $range[1] + 1;
171
+
172
+ // Allow for changing upload URLs.
173
+ $location = $response->getResponseHeader('location');
174
+ if ($location) {
175
+ $this->resumeUri = $location;
176
+ }
177
+
178
+ // No problems, but upload not complete.
179
+ return false;
180
+ } else {
181
+ return Google_Http_REST::decodeHttpResponse($response, $this->client);
182
+ }
183
+ }
184
+
185
+ /**
186
+ * @param $meta
187
+ * @param $params
188
+ * @return array|bool
189
+ * @visible for testing
190
+ */
191
+ private function process()
192
+ {
193
+ $postBody = false;
194
+ $contentType = false;
195
+
196
+ $meta = $this->request->getPostBody();
197
+ $meta = is_string($meta) ? json_decode($meta, true) : $meta;
198
+
199
+ $uploadType = $this->getUploadType($meta);
200
+ $this->request->setQueryParam('uploadType', $uploadType);
201
+ $this->transformToUploadUrl();
202
+ $mimeType = $this->mimeType ?
203
+ $this->mimeType :
204
+ $this->request->getRequestHeader('content-type');
205
+
206
+ if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {
207
+ $contentType = $mimeType;
208
+ $postBody = is_string($meta) ? $meta : json_encode($meta);
209
+ } else if (self::UPLOAD_MEDIA_TYPE == $uploadType) {
210
+ $contentType = $mimeType;
211
+ $postBody = $this->data;
212
+ } else if (self::UPLOAD_MULTIPART_TYPE == $uploadType) {
213
+ // This is a multipart/related upload.
214
+ $boundary = $this->boundary ? $this->boundary : mt_rand();
215
+ $boundary = str_replace('"', '', $boundary);
216
+ $contentType = 'multipart/related; boundary=' . $boundary;
217
+ $related = "--$boundary\r\n";
218
+ $related .= "Content-Type: application/json; charset=UTF-8\r\n";
219
+ $related .= "\r\n" . json_encode($meta) . "\r\n";
220
+ $related .= "--$boundary\r\n";
221
+ $related .= "Content-Type: $mimeType\r\n";
222
+ $related .= "Content-Transfer-Encoding: base64\r\n";
223
+ $related .= "\r\n" . base64_encode($this->data) . "\r\n";
224
+ $related .= "--$boundary--";
225
+ $postBody = $related;
226
+ }
227
+
228
+ $this->request->setPostBody($postBody);
229
+
230
+ if (isset($contentType) && $contentType) {
231
+ $contentTypeHeader['content-type'] = $contentType;
232
+ $this->request->setRequestHeaders($contentTypeHeader);
233
+ }
234
+ }
235
+
236
+ private function transformToUploadUrl()
237
+ {
238
+ $base = $this->request->getBaseComponent();
239
+ $this->request->setBaseComponent($base . '/upload');
240
+ }
241
+
242
+ /**
243
+ * Valid upload types:
244
+ * - resumable (UPLOAD_RESUMABLE_TYPE)
245
+ * - media (UPLOAD_MEDIA_TYPE)
246
+ * - multipart (UPLOAD_MULTIPART_TYPE)
247
+ * @param $meta
248
+ * @return string
249
+ * @visible for testing
250
+ */
251
+ public function getUploadType($meta)
252
+ {
253
+ if ($this->resumable) {
254
+ return self::UPLOAD_RESUMABLE_TYPE;
255
+ }
256
+
257
+ if (false == $meta && $this->data) {
258
+ return self::UPLOAD_MEDIA_TYPE;
259
+ }
260
+
261
+ return self::UPLOAD_MULTIPART_TYPE;
262
+ }
263
+
264
+ private function getResumeUri()
265
+ {
266
+ $result = null;
267
+ $body = $this->request->getPostBody();
268
+ if ($body) {
269
+ $headers = array(
270
+ 'content-type' => 'application/json; charset=UTF-8',
271
+ 'content-length' => Google_Utils::getStrLen($body),
272
+ 'x-upload-content-type' => $this->mimeType,
273
+ 'x-upload-content-length' => $this->size,
274
+ 'expect' => '',
275
+ );
276
+ $this->request->setRequestHeaders($headers);
277
+ }
278
+
279
+ $response = $this->client->getIo()->makeRequest($this->request);
280
+ $location = $response->getResponseHeader('location');
281
+ $code = $response->getResponseHttpCode();
282
+
283
+ if (200 == $code && true == $location) {
284
+ return $location;
285
+ }
286
+ $message = $code;
287
+ $body = @json_decode($response->getResponseBody());
288
+ if (!empty( $body->error->errors ) ) {
289
+ $message .= ': ';
290
+ foreach ($body->error->errors as $error) {
291
+ $message .= "{$error->domain}, {$error->message};";
292
+ }
293
+ $message = rtrim($message, ';');
294
+ }
295
+
296
+ $error = "Failed to start the resumable upload (HTTP {$message})";
297
+ $this->client->getLogger()->error($error);
298
+ throw new Google_Exception($error);
299
+ }
300
+ }
tools/src/Google/Http/REST.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * This class implements the RESTful transport of apiServiceRequest()'s
22
+ *
23
+ * @author Chris Chabot <chabotc@google.com>
24
+ * @author Chirag Shah <chirags@google.com>
25
+ */
26
+ class Google_Http_REST
27
+ {
28
+ /**
29
+ * Executes a Google_Http_Request
30
+ *
31
+ * @param Google_Client $client
32
+ * @param Google_Http_Request $req
33
+ * @return array decoded result
34
+ * @throws Google_Service_Exception on server side error (ie: not authenticated,
35
+ * invalid or malformed post body, invalid url)
36
+ */
37
+ public static function execute(Google_Client $client, Google_Http_Request $req)
38
+ {
39
+ $httpRequest = $client->getIo()->makeRequest($req);
40
+ $httpRequest->setExpectedClass($req->getExpectedClass());
41
+ return self::decodeHttpResponse($httpRequest, $client);
42
+ }
43
+
44
+ /**
45
+ * Decode an HTTP Response.
46
+ * @static
47
+ * @throws Google_Service_Exception
48
+ * @param Google_Http_Request $response The http response to be decoded.
49
+ * @param Google_Client $client
50
+ * @return mixed|null
51
+ */
52
+ public static function decodeHttpResponse($response, Google_Client $client = null)
53
+ {
54
+ $code = $response->getResponseHttpCode();
55
+ $body = $response->getResponseBody();
56
+ $decoded = null;
57
+
58
+ if ((intVal($code)) >= 300) {
59
+ $decoded = json_decode($body, true);
60
+ $err = 'Error calling ' . $response->getRequestMethod() . ' ' . $response->getUrl();
61
+ if (isset($decoded['error']) &&
62
+ isset($decoded['error']['message']) &&
63
+ isset($decoded['error']['code'])) {
64
+ // if we're getting a json encoded error definition, use that instead of the raw response
65
+ // body for improved readability
66
+ $err .= ": ({$decoded['error']['code']}) {$decoded['error']['message']}";
67
+ } else {
68
+ $err .= ": ($code) $body";
69
+ }
70
+
71
+ $errors = null;
72
+ // Specific check for APIs which don't return error details, such as Blogger.
73
+ if (isset($decoded['error']) && isset($decoded['error']['errors'])) {
74
+ $errors = $decoded['error']['errors'];
75
+ }
76
+
77
+ if ($client) {
78
+ $client->getLogger()->error(
79
+ $err,
80
+ array('code' => $code, 'errors' => $errors)
81
+ );
82
+ }
83
+ throw new Google_Service_Exception($err, $code, null, $errors);
84
+ }
85
+
86
+ // Only attempt to decode the response, if the response code wasn't (204) 'no content'
87
+ if ($code != '204') {
88
+ $decoded = json_decode($body, true);
89
+ if ($decoded === null || $decoded === "") {
90
+ $error = "Invalid json in service response: $body";
91
+ if ($client) {
92
+ $client->getLogger()->error($error);
93
+ }
94
+ throw new Google_Service_Exception($error);
95
+ }
96
+
97
+ if ($response->getExpectedClass()) {
98
+ $class = $response->getExpectedClass();
99
+ $decoded = new $class($decoded);
100
+ }
101
+ }
102
+ return $decoded;
103
+ }
104
+
105
+ /**
106
+ * Parse/expand request parameters and create a fully qualified
107
+ * request uri.
108
+ * @static
109
+ * @param string $servicePath
110
+ * @param string $restPath
111
+ * @param array $params
112
+ * @return string $requestUrl
113
+ */
114
+ public static function createRequestUri($servicePath, $restPath, $params)
115
+ {
116
+ $requestUrl = $servicePath . $restPath;
117
+ $uriTemplateVars = array();
118
+ $queryVars = array();
119
+ foreach ($params as $paramName => $paramSpec) {
120
+ if ($paramSpec['type'] == 'boolean') {
121
+ $paramSpec['value'] = ($paramSpec['value']) ? 'true' : 'false';
122
+ }
123
+ if ($paramSpec['location'] == 'path') {
124
+ $uriTemplateVars[$paramName] = $paramSpec['value'];
125
+ } else if ($paramSpec['location'] == 'query') {
126
+ if (isset($paramSpec['repeated']) && is_array($paramSpec['value'])) {
127
+ foreach ($paramSpec['value'] as $value) {
128
+ $queryVars[] = $paramName . '=' . rawurlencode($value);
129
+ }
130
+ } else {
131
+ $queryVars[] = $paramName . '=' . rawurlencode($paramSpec['value']);
132
+ }
133
+ }
134
+ }
135
+
136
+ if (count($uriTemplateVars)) {
137
+ $uriTemplateParser = new Google_Utils_URITemplate();
138
+ $requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);
139
+ }
140
+
141
+ if (count($queryVars)) {
142
+ $requestUrl .= '?' . implode($queryVars, '&');
143
+ }
144
+
145
+ return $requestUrl;
146
+ }
147
+ }
tools/src/Google/Http/Request.php ADDED
@@ -0,0 +1,476 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * HTTP Request to be executed by IO classes. Upon execution, the
22
+ * responseHttpCode, responseHeaders and responseBody will be filled in.
23
+ *
24
+ * @author Chris Chabot <chabotc@google.com>
25
+ * @author Chirag Shah <chirags@google.com>
26
+ *
27
+ */
28
+ class Google_Http_Request
29
+ {
30
+ const GZIP_UA = " (gzip)";
31
+
32
+ private $batchHeaders = array(
33
+ 'Content-Type' => 'application/http',
34
+ 'Content-Transfer-Encoding' => 'binary',
35
+ 'MIME-Version' => '1.0',
36
+ );
37
+
38
+ protected $queryParams;
39
+ protected $requestMethod;
40
+ protected $requestHeaders;
41
+ protected $baseComponent = null;
42
+ protected $path;
43
+ protected $postBody;
44
+ protected $userAgent;
45
+ protected $canGzip = null;
46
+
47
+ protected $responseHttpCode;
48
+ protected $responseHeaders;
49
+ protected $responseBody;
50
+
51
+ protected $expectedClass;
52
+
53
+ public $accessKey;
54
+
55
+ public function __construct(
56
+ $url,
57
+ $method = 'GET',
58
+ $headers = array(),
59
+ $postBody = null
60
+ ) {
61
+ $this->setUrl($url);
62
+ $this->setRequestMethod($method);
63
+ $this->setRequestHeaders($headers);
64
+ $this->setPostBody($postBody);
65
+ }
66
+
67
+ /**
68
+ * Misc function that returns the base url component of the $url
69
+ * used by the OAuth signing class to calculate the base string
70
+ * @return string The base url component of the $url.
71
+ */
72
+ public function getBaseComponent()
73
+ {
74
+ return $this->baseComponent;
75
+ }
76
+
77
+ /**
78
+ * Set the base URL that path and query parameters will be added to.
79
+ * @param $baseComponent string
80
+ */
81
+ public function setBaseComponent($baseComponent)
82
+ {
83
+ $this->baseComponent = $baseComponent;
84
+ }
85
+
86
+ /**
87
+ * Enable support for gzipped responses with this request.
88
+ */
89
+ public function enableGzip()
90
+ {
91
+ $this->setRequestHeaders(array("Accept-Encoding" => "gzip"));
92
+ $this->canGzip = true;
93
+ $this->setUserAgent($this->userAgent);
94
+ }
95
+
96
+ /**
97
+ * Disable support for gzip responses with this request.
98
+ */
99
+ public function disableGzip()
100
+ {
101
+ if (
102
+ isset($this->requestHeaders['accept-encoding']) &&
103
+ $this->requestHeaders['accept-encoding'] == "gzip"
104
+ ) {
105
+ unset($this->requestHeaders['accept-encoding']);
106
+ }
107
+ $this->canGzip = false;
108
+ $this->userAgent = str_replace(self::GZIP_UA, "", $this->userAgent);
109
+ }
110
+
111
+ /**
112
+ * Can this request accept a gzip response?
113
+ * @return bool
114
+ */
115
+ public function canGzip()
116
+ {
117
+ return $this->canGzip;
118
+ }
119
+
120
+ /**
121
+ * Misc function that returns an array of the query parameters of the current
122
+ * url used by the OAuth signing class to calculate the signature
123
+ * @return array Query parameters in the query string.
124
+ */
125
+ public function getQueryParams()
126
+ {
127
+ return $this->queryParams;
128
+ }
129
+
130
+ /**
131
+ * Set a new query parameter.
132
+ * @param $key - string to set, does not need to be URL encoded
133
+ * @param $value - string to set, does not need to be URL encoded
134
+ */
135
+ public function setQueryParam($key, $value)
136
+ {
137
+ $this->queryParams[$key] = $value;
138
+ }
139
+
140
+ /**
141
+ * @return string HTTP Response Code.
142
+ */
143
+ public function getResponseHttpCode()
144
+ {
145
+ return (int) $this->responseHttpCode;
146
+ }
147
+
148
+ /**
149
+ * @param int $responseHttpCode HTTP Response Code.
150
+ */
151
+ public function setResponseHttpCode($responseHttpCode)
152
+ {
153
+ $this->responseHttpCode = $responseHttpCode;
154
+ }
155
+
156
+ /**
157
+ * @return $responseHeaders (array) HTTP Response Headers.
158
+ */
159
+ public function getResponseHeaders()
160
+ {
161
+ return $this->responseHeaders;
162
+ }
163
+
164
+ /**
165
+ * @return string HTTP Response Body
166
+ */
167
+ public function getResponseBody()
168
+ {
169
+ return $this->responseBody;
170
+ }
171
+
172
+ /**
173
+ * Set the class the response to this request should expect.
174
+ *
175
+ * @param $class string the class name
176
+ */
177
+ public function setExpectedClass($class)
178
+ {
179
+ $this->expectedClass = $class;
180
+ }
181
+
182
+ /**
183
+ * Retrieve the expected class the response should expect.
184
+ * @return string class name
185
+ */
186
+ public function getExpectedClass()
187
+ {
188
+ return $this->expectedClass;
189
+ }
190
+
191
+ /**
192
+ * @param array $headers The HTTP response headers
193
+ * to be normalized.
194
+ */
195
+ public function setResponseHeaders($headers)
196
+ {
197
+ $headers = Google_Utils::normalize($headers);
198
+ if ($this->responseHeaders) {
199
+ $headers = array_merge($this->responseHeaders, $headers);
200
+ }
201
+
202
+ $this->responseHeaders = $headers;
203
+ }
204
+
205
+ /**
206
+ * @param string $key
207
+ * @return array|boolean Returns the requested HTTP header or
208
+ * false if unavailable.
209
+ */
210
+ public function getResponseHeader($key)
211
+ {
212
+ return isset($this->responseHeaders[$key])
213
+ ? $this->responseHeaders[$key]
214
+ : false;
215
+ }
216
+
217
+ /**
218
+ * @param string $responseBody The HTTP response body.
219
+ */
220
+ public function setResponseBody($responseBody)
221
+ {
222
+ $this->responseBody = $responseBody;
223
+ }
224
+
225
+ /**
226
+ * @return string $url The request URL.
227
+ */
228
+ public function getUrl()
229
+ {
230
+ return $this->baseComponent . $this->path .
231
+ (count($this->queryParams) ?
232
+ "?" . $this->buildQuery($this->queryParams) :
233
+ '');
234
+ }
235
+
236
+ /**
237
+ * @return string $method HTTP Request Method.
238
+ */
239
+ public function getRequestMethod()
240
+ {
241
+ return $this->requestMethod;
242
+ }
243
+
244
+ /**
245
+ * @return array $headers HTTP Request Headers.
246
+ */
247
+ public function getRequestHeaders()
248
+ {
249
+ return $this->requestHeaders;
250
+ }
251
+
252
+ /**
253
+ * @param string $key
254
+ * @return array|boolean Returns the requested HTTP header or
255
+ * false if unavailable.
256
+ */
257
+ public function getRequestHeader($key)
258
+ {
259
+ return isset($this->requestHeaders[$key])
260
+ ? $this->requestHeaders[$key]
261
+ : false;
262
+ }
263
+
264
+ /**
265
+ * @return string $postBody HTTP Request Body.
266
+ */
267
+ public function getPostBody()
268
+ {
269
+ return $this->postBody;
270
+ }
271
+
272
+ /**
273
+ * @param string $url the url to set
274
+ */
275
+ public function setUrl($url)
276
+ {
277
+ if (substr($url, 0, 4) != 'http') {
278
+ // Force the path become relative.
279
+ if (substr($url, 0, 1) !== '/') {
280
+ $url = '/' . $url;
281
+ }
282
+ }
283
+ $parts = parse_url($url);
284
+ if (isset($parts['host'])) {
285
+ $this->baseComponent = sprintf(
286
+ "%s%s%s",
287
+ isset($parts['scheme']) ? $parts['scheme'] . "://" : '',
288
+ isset($parts['host']) ? $parts['host'] : '',
289
+ isset($parts['port']) ? ":" . $parts['port'] : ''
290
+ );
291
+ }
292
+ $this->path = isset($parts['path']) ? $parts['path'] : '';
293
+ $this->queryParams = array();
294
+ if (isset($parts['query'])) {
295
+ $this->queryParams = $this->parseQuery($parts['query']);
296
+ }
297
+ }
298
+
299
+ /**
300
+ * @param string $method Set he HTTP Method and normalize
301
+ * it to upper-case, as required by HTTP.
302
+ *
303
+ */
304
+ public function setRequestMethod($method)
305
+ {
306
+ $this->requestMethod = strtoupper($method);
307
+ }
308
+
309
+ /**
310
+ * @param array $headers The HTTP request headers
311
+ * to be set and normalized.
312
+ */
313
+ public function setRequestHeaders($headers)
314
+ {
315
+ $headers = Google_Utils::normalize($headers);
316
+ if ($this->requestHeaders) {
317
+ $headers = array_merge($this->requestHeaders, $headers);
318
+ }
319
+ $this->requestHeaders = $headers;
320
+ }
321
+
322
+ /**
323
+ * @param string $postBody the postBody to set
324
+ */
325
+ public function setPostBody($postBody)
326
+ {
327
+ $this->postBody = $postBody;
328
+ }
329
+
330
+ /**
331
+ * Set the User-Agent Header.
332
+ * @param string $userAgent The User-Agent.
333
+ */
334
+ public function setUserAgent($userAgent)
335
+ {
336
+ $this->userAgent = $userAgent;
337
+ if ($this->canGzip) {
338
+ $this->userAgent = $userAgent . self::GZIP_UA;
339
+ }
340
+ }
341
+
342
+ /**
343
+ * @return string The User-Agent.
344
+ */
345
+ public function getUserAgent()
346
+ {
347
+ return $this->userAgent;
348
+ }
349
+
350
+ /**
351
+ * Returns a cache key depending on if this was an OAuth signed request
352
+ * in which case it will use the non-signed url and access key to make this
353
+ * cache key unique per authenticated user, else use the plain request url
354
+ * @return string The md5 hash of the request cache key.
355
+ */
356
+ public function getCacheKey()
357
+ {
358
+ $key = $this->getUrl();
359
+
360
+ if (isset($this->accessKey)) {
361
+ $key .= $this->accessKey;
362
+ }
363
+
364
+ if (isset($this->requestHeaders['authorization'])) {
365
+ $key .= $this->requestHeaders['authorization'];
366
+ }
367
+
368
+ return md5($key);
369
+ }
370
+
371
+ public function getParsedCacheControl()
372
+ {
373
+ $parsed = array();
374
+ $rawCacheControl = $this->getResponseHeader('cache-control');
375
+ if ($rawCacheControl) {
376
+ $rawCacheControl = str_replace(', ', '&', $rawCacheControl);
377
+ parse_str($rawCacheControl, $parsed);
378
+ }
379
+
380
+ return $parsed;
381
+ }
382
+
383
+ /**
384
+ * @param string $id
385
+ * @return string A string representation of the HTTP Request.
386
+ */
387
+ public function toBatchString($id)
388
+ {
389
+ $str = '';
390
+ $path = parse_url($this->getUrl(), PHP_URL_PATH) . "?" .
391
+ http_build_query($this->queryParams);
392
+ $str .= $this->getRequestMethod() . ' ' . $path . " HTTP/1.1\n";
393
+
394
+ foreach ($this->getRequestHeaders() as $key => $val) {
395
+ $str .= $key . ': ' . $val . "\n";
396
+ }
397
+
398
+ if ($this->getPostBody()) {
399
+ $str .= "\n";
400
+ $str .= $this->getPostBody();
401
+ }
402
+
403
+ $headers = '';
404
+ foreach ($this->batchHeaders as $key => $val) {
405
+ $headers .= $key . ': ' . $val . "\n";
406
+ }
407
+
408
+ $headers .= "Content-ID: $id\n";
409
+ $str = $headers . "\n" . $str;
410
+
411
+ return $str;
412
+ }
413
+
414
+ /**
415
+ * Our own version of parse_str that allows for multiple variables
416
+ * with the same name.
417
+ * @param $string - the query string to parse
418
+ */
419
+ private function parseQuery($string)
420
+ {
421
+ $return = array();
422
+ $parts = explode("&", $string);
423
+ foreach ($parts as $part) {
424
+ list($key, $value) = explode('=', $part, 2);
425
+ $value = urldecode($value);
426
+ if (isset($return[$key])) {
427
+ if (!is_array($return[$key])) {
428
+ $return[$key] = array($return[$key]);
429
+ }
430
+ $return[$key][] = $value;
431
+ } else {
432
+ $return[$key] = $value;
433
+ }
434
+ }
435
+ return $return;
436
+ }
437
+
438
+ /**
439
+ * A version of build query that allows for multiple
440
+ * duplicate keys.
441
+ * @param $parts array of key value pairs
442
+ */
443
+ private function buildQuery($parts)
444
+ {
445
+ $return = array();
446
+ foreach ($parts as $key => $value) {
447
+ if (is_array($value)) {
448
+ foreach ($value as $v) {
449
+ $return[] = urlencode($key) . "=" . urlencode($v);
450
+ }
451
+ } else {
452
+ $return[] = urlencode($key) . "=" . urlencode($value);
453
+ }
454
+ }
455
+ return implode('&', $return);
456
+ }
457
+
458
+ /**
459
+ * If we're POSTing and have no body to send, we can send the query
460
+ * parameters in there, which avoids length issues with longer query
461
+ * params.
462
+ */
463
+ public function maybeMoveParametersToBody()
464
+ {
465
+ if ($this->getRequestMethod() == "POST" && empty($this->postBody)) {
466
+ $this->setRequestHeaders(
467
+ array(
468
+ "content-type" =>
469
+ "application/x-www-form-urlencoded; charset=UTF-8"
470
+ )
471
+ );
472
+ $this->setPostBody($this->buildQuery($this->queryParams));
473
+ $this->queryParams = array();
474
+ }
475
+ }
476
+ }
tools/src/Google/IO/Abstract.php ADDED
@@ -0,0 +1,329 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Abstract IO base class
20
+ */
21
+
22
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
23
+
24
+ abstract class Google_IO_Abstract
25
+ {
26
+ const UNKNOWN_CODE = 0;
27
+ const FORM_URLENCODED = 'application/x-www-form-urlencoded';
28
+ private static $CONNECTION_ESTABLISHED_HEADERS = array(
29
+ "HTTP/1.0 200 Connection established\r\n\r\n",
30
+ "HTTP/1.1 200 Connection established\r\n\r\n",
31
+ );
32
+ private static $ENTITY_HTTP_METHODS = array("POST" => null, "PUT" => null);
33
+
34
+ /** @var Google_Client */
35
+ protected $client;
36
+
37
+ public function __construct(Google_Client $client)
38
+ {
39
+ $this->client = $client;
40
+ $timeout = $client->getClassConfig('Google_IO_Abstract', 'request_timeout_seconds');
41
+ if ($timeout > 0) {
42
+ $this->setTimeout($timeout);
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Executes a Google_Http_Request and returns the resulting populated Google_Http_Request
48
+ * @param Google_Http_Request $request
49
+ * @return Google_Http_Request $request
50
+ */
51
+ abstract public function executeRequest(Google_Http_Request $request);
52
+
53
+ /**
54
+ * Set options that update the transport implementation's behavior.
55
+ * @param $options
56
+ */
57
+ abstract public function setOptions($options);
58
+
59
+ /**
60
+ * Set the maximum request time in seconds.
61
+ * @param $timeout in seconds
62
+ */
63
+ abstract public function setTimeout($timeout);
64
+
65
+ /**
66
+ * Get the maximum request time in seconds.
67
+ * @return timeout in seconds
68
+ */
69
+ abstract public function getTimeout();
70
+
71
+ /**
72
+ * Test for the presence of a cURL header processing bug
73
+ *
74
+ * The cURL bug was present in versions prior to 7.30.0 and caused the header
75
+ * length to be miscalculated when a "Connection established" header added by
76
+ * some proxies was present.
77
+ *
78
+ * @return boolean
79
+ */
80
+ abstract protected function needsQuirk();
81
+
82
+ /**
83
+ * @visible for testing.
84
+ * Cache the response to an HTTP request if it is cacheable.
85
+ * @param Google_Http_Request $request
86
+ * @return bool Returns true if the insertion was successful.
87
+ * Otherwise, return false.
88
+ */
89
+ public function setCachedRequest(Google_Http_Request $request)
90
+ {
91
+ // Determine if the request is cacheable.
92
+ if (Google_Http_CacheParser::isResponseCacheable($request)) {
93
+ $this->client->getCache()->set($request->getCacheKey(), $request);
94
+ return true;
95
+ }
96
+
97
+ return false;
98
+ }
99
+
100
+ /**
101
+ * Execute an HTTP Request
102
+ *
103
+ * @param Google_HttpRequest $request the http request to be executed
104
+ * @return Google_HttpRequest http request with the response http code,
105
+ * response headers and response body filled in
106
+ * @throws Google_IO_Exception on curl or IO error
107
+ */
108
+ public function makeRequest(Google_Http_Request $request)
109
+ {
110
+ // First, check to see if we have a valid cached version.
111
+ $cached = $this->getCachedRequest($request);
112
+ if ($cached !== false && $cached instanceof Google_Http_Request) {
113
+ if (!$this->checkMustRevalidateCachedRequest($cached, $request)) {
114
+ return $cached;
115
+ }
116
+ }
117
+
118
+ if (array_key_exists($request->getRequestMethod(), self::$ENTITY_HTTP_METHODS)) {
119
+ $request = $this->processEntityRequest($request);
120
+ }
121
+
122
+ list($responseData, $responseHeaders, $respHttpCode) = $this->executeRequest($request);
123
+
124
+ if ($respHttpCode == 304 && $cached) {
125
+ // If the server responded NOT_MODIFIED, return the cached request.
126
+ $this->updateCachedRequest($cached, $responseHeaders);
127
+ return $cached;
128
+ }
129
+
130
+ if (!isset($responseHeaders['Date']) && !isset($responseHeaders['date'])) {
131
+ $responseHeaders['Date'] = date("r");
132
+ }
133
+
134
+ $request->setResponseHttpCode($respHttpCode);
135
+ $request->setResponseHeaders($responseHeaders);
136
+ $request->setResponseBody($responseData);
137
+ // Store the request in cache (the function checks to see if the request
138
+ // can actually be cached)
139
+ $this->setCachedRequest($request);
140
+ return $request;
141
+ }
142
+
143
+ /**
144
+ * @visible for testing.
145
+ * @param Google_Http_Request $request
146
+ * @return Google_Http_Request|bool Returns the cached object or
147
+ * false if the operation was unsuccessful.
148
+ */
149
+ public function getCachedRequest(Google_Http_Request $request)
150
+ {
151
+ if (false === Google_Http_CacheParser::isRequestCacheable($request)) {
152
+ return false;
153
+ }
154
+
155
+ return $this->client->getCache()->get($request->getCacheKey());
156
+ }
157
+
158
+ /**
159
+ * @visible for testing
160
+ * Process an http request that contains an enclosed entity.
161
+ * @param Google_Http_Request $request
162
+ * @return Google_Http_Request Processed request with the enclosed entity.
163
+ */
164
+ public function processEntityRequest(Google_Http_Request $request)
165
+ {
166
+ $postBody = $request->getPostBody();
167
+ $contentType = $request->getRequestHeader("content-type");
168
+
169
+ // Set the default content-type as application/x-www-form-urlencoded.
170
+ if (false == $contentType) {
171
+ $contentType = self::FORM_URLENCODED;
172
+ $request->setRequestHeaders(array('content-type' => $contentType));
173
+ }
174
+
175
+ // Force the payload to match the content-type asserted in the header.
176
+ if ($contentType == self::FORM_URLENCODED && is_array($postBody)) {
177
+ $postBody = http_build_query($postBody, '', '&');
178
+ $request->setPostBody($postBody);
179
+ }
180
+
181
+ // Make sure the content-length header is set.
182
+ if (!$postBody || is_string($postBody)) {
183
+ $postsLength = strlen($postBody);
184
+ $request->setRequestHeaders(array('content-length' => $postsLength));
185
+ }
186
+
187
+ return $request;
188
+ }
189
+
190
+ /**
191
+ * Check if an already cached request must be revalidated, and if so update
192
+ * the request with the correct ETag headers.
193
+ * @param Google_Http_Request $cached A previously cached response.
194
+ * @param Google_Http_Request $request The outbound request.
195
+ * return bool If the cached object needs to be revalidated, false if it is
196
+ * still current and can be re-used.
197
+ */
198
+ protected function checkMustRevalidateCachedRequest($cached, $request)
199
+ {
200
+ if (Google_Http_CacheParser::mustRevalidate($cached)) {
201
+ $addHeaders = array();
202
+ if ($cached->getResponseHeader('etag')) {
203
+ // [13.3.4] If an entity tag has been provided by the origin server,
204
+ // we must use that entity tag in any cache-conditional request.
205
+ $addHeaders['If-None-Match'] = $cached->getResponseHeader('etag');
206
+ } elseif ($cached->getResponseHeader('date')) {
207
+ $addHeaders['If-Modified-Since'] = $cached->getResponseHeader('date');
208
+ }
209
+
210
+ $request->setRequestHeaders($addHeaders);
211
+ return true;
212
+ } else {
213
+ return false;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * Update a cached request, using the headers from the last response.
219
+ * @param Google_HttpRequest $cached A previously cached response.
220
+ * @param mixed Associative array of response headers from the last request.
221
+ */
222
+ protected function updateCachedRequest($cached, $responseHeaders)
223
+ {
224
+ if (isset($responseHeaders['connection'])) {
225
+ $hopByHop = array_merge(
226
+ self::$HOP_BY_HOP,
227
+ explode(
228
+ ',',
229
+ $responseHeaders['connection']
230
+ )
231
+ );
232
+
233
+ $endToEnd = array();
234
+ foreach ($hopByHop as $key) {
235
+ if (isset($responseHeaders[$key])) {
236
+ $endToEnd[$key] = $responseHeaders[$key];
237
+ }
238
+ }
239
+ $cached->setResponseHeaders($endToEnd);
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Used by the IO lib and also the batch processing.
245
+ *
246
+ * @param $respData
247
+ * @param $headerSize
248
+ * @return array
249
+ */
250
+ public function parseHttpResponse($respData, $headerSize)
251
+ {
252
+ // check proxy header
253
+ foreach (self::$CONNECTION_ESTABLISHED_HEADERS as $established_header) {
254
+ if (stripos($respData, $established_header) !== false) {
255
+ // existed, remove it
256
+ $respData = str_ireplace($established_header, '', $respData);
257
+ // Subtract the proxy header size unless the cURL bug prior to 7.30.0
258
+ // is present which prevented the proxy header size from being taken into
259
+ // account.
260
+ if (!$this->needsQuirk()) {
261
+ $headerSize -= strlen($established_header);
262
+ }
263
+ break;
264
+ }
265
+ }
266
+
267
+ if ($headerSize) {
268
+ $responseBody = substr($respData, $headerSize);
269
+ $responseHeaders = substr($respData, 0, $headerSize);
270
+ } else {
271
+ $responseSegments = explode("\r\n\r\n", $respData, 2);
272
+ $responseHeaders = $responseSegments[0];
273
+ $responseBody = isset($responseSegments[1]) ? $responseSegments[1] :
274
+ null;
275
+ }
276
+
277
+ $responseHeaders = $this->getHttpResponseHeaders($responseHeaders);
278
+ return array($responseHeaders, $responseBody);
279
+ }
280
+
281
+ /**
282
+ * Parse out headers from raw headers
283
+ * @param rawHeaders array or string
284
+ * @return array
285
+ */
286
+ public function getHttpResponseHeaders($rawHeaders)
287
+ {
288
+ if (is_array($rawHeaders)) {
289
+ return $this->parseArrayHeaders($rawHeaders);
290
+ } else {
291
+ return $this->parseStringHeaders($rawHeaders);
292
+ }
293
+ }
294
+
295
+ private function parseStringHeaders($rawHeaders)
296
+ {
297
+ $headers = array();
298
+ $responseHeaderLines = explode("\r\n", $rawHeaders);
299
+ foreach ($responseHeaderLines as $headerLine) {
300
+ if ($headerLine && strpos($headerLine, ':') !== false) {
301
+ list($header, $value) = explode(': ', $headerLine, 2);
302
+ $header = strtolower($header);
303
+ if (isset($headers[$header])) {
304
+ $headers[$header] .= "\n" . $value;
305
+ } else {
306
+ $headers[$header] = $value;
307
+ }
308
+ }
309
+ }
310
+ return $headers;
311
+ }
312
+
313
+ private function parseArrayHeaders($rawHeaders)
314
+ {
315
+ $header_count = count($rawHeaders);
316
+ $headers = array();
317
+
318
+ for ($i = 0; $i < $header_count; $i++) {
319
+ $header = $rawHeaders[$i];
320
+ // Times will have colons in - so we just want the first match.
321
+ $header_parts = explode(': ', $header, 2);
322
+ if (count($header_parts) == 2) {
323
+ $headers[$header_parts[0]] = $header_parts[1];
324
+ }
325
+ }
326
+
327
+ return $headers;
328
+ }
329
+ }
tools/src/Google/IO/Curl.php ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Curl based implementation of Google_IO.
20
+ *
21
+ * @author Stuart Langley <slangley@google.com>
22
+ */
23
+
24
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
25
+
26
+ class Google_IO_Curl extends Google_IO_Abstract
27
+ {
28
+ // cURL hex representation of version 7.30.0
29
+ const NO_QUIRK_VERSION = 0x071E00;
30
+
31
+ private $options = array();
32
+ /**
33
+ * Execute an HTTP Request
34
+ *
35
+ * @param Google_HttpRequest $request the http request to be executed
36
+ * @return Google_HttpRequest http request with the response http code,
37
+ * response headers and response body filled in
38
+ * @throws Google_IO_Exception on curl or IO error
39
+ */
40
+ public function executeRequest(Google_Http_Request $request)
41
+ {
42
+ $curl = curl_init();
43
+
44
+ if ($request->getPostBody()) {
45
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getPostBody());
46
+ }
47
+
48
+ $requestHeaders = $request->getRequestHeaders();
49
+ if ($requestHeaders && is_array($requestHeaders)) {
50
+ $curlHeaders = array();
51
+ foreach ($requestHeaders as $k => $v) {
52
+ $curlHeaders[] = "$k: $v";
53
+ }
54
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
55
+ }
56
+ curl_setopt($curl, CURLOPT_URL, $request->getUrl());
57
+
58
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $request->getRequestMethod());
59
+ curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
60
+
61
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
62
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
63
+ // 1 is CURL_SSLVERSION_TLSv1, which is not always defined in PHP.
64
+ curl_setopt($curl, CURLOPT_SSLVERSION, 1);
65
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
66
+ curl_setopt($curl, CURLOPT_HEADER, true);
67
+
68
+ if ($request->canGzip()) {
69
+ curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
70
+ }
71
+
72
+ foreach ($this->options as $key => $var) {
73
+ curl_setopt($curl, $key, $var);
74
+ }
75
+
76
+ if (!isset($this->options[CURLOPT_CAINFO])) {
77
+ curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacerts.pem');
78
+ }
79
+
80
+ $this->client->getLogger()->debug(
81
+ 'cURL request',
82
+ array(
83
+ 'url' => $request->getUrl(),
84
+ 'method' => $request->getRequestMethod(),
85
+ 'headers' => $requestHeaders,
86
+ 'body' => $request->getPostBody()
87
+ )
88
+ );
89
+
90
+ $response = curl_exec($curl);
91
+ if ($response === false) {
92
+ $error = curl_error($curl);
93
+
94
+ $this->client->getLogger()->error('cURL ' . $error);
95
+ throw new Google_IO_Exception($error);
96
+ }
97
+ $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
98
+
99
+ list($responseHeaders, $responseBody) = $this->parseHttpResponse($response, $headerSize);
100
+ $responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
101
+
102
+ $this->client->getLogger()->debug(
103
+ 'cURL response',
104
+ array(
105
+ 'code' => $responseCode,
106
+ 'headers' => $responseHeaders,
107
+ 'body' => $responseBody,
108
+ )
109
+ );
110
+
111
+ return array($responseBody, $responseHeaders, $responseCode);
112
+ }
113
+
114
+ /**
115
+ * Set options that update the transport implementation's behavior.
116
+ * @param $options
117
+ */
118
+ public function setOptions($options)
119
+ {
120
+ $this->options = $options + $this->options;
121
+ }
122
+
123
+ /**
124
+ * Set the maximum request time in seconds.
125
+ * @param $timeout in seconds
126
+ */
127
+ public function setTimeout($timeout)
128
+ {
129
+ // Since this timeout is really for putting a bound on the time
130
+ // we'll set them both to the same. If you need to specify a longer
131
+ // CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
132
+ // do is use the setOptions method for the values individually.
133
+ $this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
134
+ $this->options[CURLOPT_TIMEOUT] = $timeout;
135
+ }
136
+
137
+ /**
138
+ * Get the maximum request time in seconds.
139
+ * @return timeout in seconds
140
+ */
141
+ public function getTimeout()
142
+ {
143
+ return $this->options[CURLOPT_TIMEOUT];
144
+ }
145
+
146
+ /**
147
+ * Test for the presence of a cURL header processing bug
148
+ *
149
+ * {@inheritDoc}
150
+ *
151
+ * @return boolean
152
+ */
153
+ protected function needsQuirk()
154
+ {
155
+ $ver = curl_version();
156
+ $versionNum = $ver['version_number'];
157
+ return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
158
+ }
159
+ }
tools/src/Google/IO/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ class Google_IO_Exception extends Google_Exception
21
+ {
22
+ }
tools/src/Google/IO/Stream.php ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2013 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * Http Streams based implementation of Google_IO.
20
+ *
21
+ * @author Stuart Langley <slangley@google.com>
22
+ */
23
+
24
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
25
+
26
+ class Google_IO_Stream extends Google_IO_Abstract
27
+ {
28
+ const TIMEOUT = "timeout";
29
+ const ZLIB = "compress.zlib://";
30
+ private $options = array();
31
+ private $trappedErrorNumber;
32
+ private $trappedErrorString;
33
+
34
+ private static $DEFAULT_HTTP_CONTEXT = array(
35
+ "follow_location" => 0,
36
+ "ignore_errors" => 1,
37
+ );
38
+
39
+ private static $DEFAULT_SSL_CONTEXT = array(
40
+ "verify_peer" => true,
41
+ );
42
+
43
+ /**
44
+ * Execute an HTTP Request
45
+ *
46
+ * @param Google_HttpRequest $request the http request to be executed
47
+ * @return Google_HttpRequest http request with the response http code,
48
+ * response headers and response body filled in
49
+ * @throws Google_IO_Exception on curl or IO error
50
+ */
51
+ public function executeRequest(Google_Http_Request $request)
52
+ {
53
+ $default_options = stream_context_get_options(stream_context_get_default());
54
+
55
+ $requestHttpContext = array_key_exists('http', $default_options) ?
56
+ $default_options['http'] : array();
57
+
58
+ if ($request->getPostBody()) {
59
+ $requestHttpContext["content"] = $request->getPostBody();
60
+ }
61
+
62
+ $requestHeaders = $request->getRequestHeaders();
63
+ if ($requestHeaders && is_array($requestHeaders)) {
64
+ $headers = "";
65
+ foreach ($requestHeaders as $k => $v) {
66
+ $headers .= "$k: $v\r\n";
67
+ }
68
+ $requestHttpContext["header"] = $headers;
69
+ }
70
+
71
+ $requestHttpContext["method"] = $request->getRequestMethod();
72
+ $requestHttpContext["user_agent"] = $request->getUserAgent();
73
+
74
+ $requestSslContext = array_key_exists('ssl', $default_options) ?
75
+ $default_options['ssl'] : array();
76
+
77
+ if (!array_key_exists("cafile", $requestSslContext)) {
78
+ $requestSslContext["cafile"] = dirname(__FILE__) . '/cacerts.pem';
79
+ }
80
+
81
+ $options = array(
82
+ "http" => array_merge(
83
+ self::$DEFAULT_HTTP_CONTEXT,
84
+ $requestHttpContext
85
+ ),
86
+ "ssl" => array_merge(
87
+ self::$DEFAULT_SSL_CONTEXT,
88
+ $requestSslContext
89
+ )
90
+ );
91
+
92
+ $context = stream_context_create($options);
93
+
94
+ $url = $request->getUrl();
95
+
96
+ if ($request->canGzip()) {
97
+ $url = self::ZLIB . $url;
98
+ }
99
+
100
+ $this->client->getLogger()->debug(
101
+ 'Stream request',
102
+ array(
103
+ 'url' => $url,
104
+ 'method' => $request->getRequestMethod(),
105
+ 'headers' => $requestHeaders,
106
+ 'body' => $request->getPostBody()
107
+ )
108
+ );
109
+
110
+ // We are trapping any thrown errors in this method only and
111
+ // throwing an exception.
112
+ $this->trappedErrorNumber = null;
113
+ $this->trappedErrorString = null;
114
+
115
+ // START - error trap.
116
+ set_error_handler(array($this, 'trapError'));
117
+ $fh = fopen($url, 'r', false, $context);
118
+ restore_error_handler();
119
+ // END - error trap.
120
+
121
+ if ($this->trappedErrorNumber) {
122
+ $error = sprintf(
123
+ "HTTP Error: Unable to connect: '%s'",
124
+ $this->trappedErrorString
125
+ );
126
+
127
+ $this->client->getLogger()->error('Stream ' . $error);
128
+ throw new Google_IO_Exception($error, $this->trappedErrorNumber);
129
+ }
130
+
131
+ $response_data = false;
132
+ $respHttpCode = self::UNKNOWN_CODE;
133
+ if ($fh) {
134
+ if (isset($this->options[self::TIMEOUT])) {
135
+ stream_set_timeout($fh, $this->options[self::TIMEOUT]);
136
+ }
137
+
138
+ $response_data = stream_get_contents($fh);
139
+ fclose($fh);
140
+
141
+ $respHttpCode = $this->getHttpResponseCode($http_response_header);
142
+ }
143
+
144
+ if (false === $response_data) {
145
+ $error = sprintf(
146
+ "HTTP Error: Unable to connect: '%s'",
147
+ $respHttpCode
148
+ );
149
+
150
+ $this->client->getLogger()->error('Stream ' . $error);
151
+ throw new Google_IO_Exception($error, $respHttpCode);
152
+ }
153
+
154
+ $responseHeaders = $this->getHttpResponseHeaders($http_response_header);
155
+
156
+ $this->client->getLogger()->debug(
157
+ 'Stream response',
158
+ array(
159
+ 'code' => $respHttpCode,
160
+ 'headers' => $responseHeaders,
161
+ 'body' => $response_data,
162
+ )
163
+ );
164
+
165
+ return array($response_data, $responseHeaders, $respHttpCode);
166
+ }
167
+
168
+ /**
169
+ * Set options that update the transport implementation's behavior.
170
+ * @param $options
171
+ */
172
+ public function setOptions($options)
173
+ {
174
+ $this->options = $options + $this->options;
175
+ }
176
+
177
+ /**
178
+ * Method to handle errors, used for error handling around
179
+ * stream connection methods.
180
+ */
181
+ public function trapError($errno, $errstr)
182
+ {
183
+ $this->trappedErrorNumber = $errno;
184
+ $this->trappedErrorString = $errstr;
185
+ }
186
+
187
+ /**
188
+ * Set the maximum request time in seconds.
189
+ * @param $timeout in seconds
190
+ */
191
+ public function setTimeout($timeout)
192
+ {
193
+ $this->options[self::TIMEOUT] = $timeout;
194
+ }
195
+
196
+ /**
197
+ * Get the maximum request time in seconds.
198
+ * @return timeout in seconds
199
+ */
200
+ public function getTimeout()
201
+ {
202
+ return $this->options[self::TIMEOUT];
203
+ }
204
+
205
+ /**
206
+ * Test for the presence of a cURL header processing bug
207
+ *
208
+ * {@inheritDoc}
209
+ *
210
+ * @return boolean
211
+ */
212
+ protected function needsQuirk()
213
+ {
214
+ return false;
215
+ }
216
+
217
+ protected function getHttpResponseCode($response_headers)
218
+ {
219
+ $header_count = count($response_headers);
220
+
221
+ for ($i = 0; $i < $header_count; $i++) {
222
+ $header = $response_headers[$i];
223
+ if (strncasecmp("HTTP", $header, strlen("HTTP")) == 0) {
224
+ $response = explode(' ', $header);
225
+ return $response[1];
226
+ }
227
+ }
228
+ return self::UNKNOWN_CODE;
229
+ }
230
+ }
tools/src/Google/IO/cacerts.pem ADDED
@@ -0,0 +1,2183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
2
+ # Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc.
3
+ # Label: "GTE CyberTrust Global Root"
4
+ # Serial: 421
5
+ # MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db
6
+ # SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74
7
+ # SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36
8
+ -----BEGIN CERTIFICATE-----
9
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
10
+ VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
11
+ bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
12
+ b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
13
+ UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
14
+ cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
15
+ b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
16
+ iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
17
+ r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
18
+ 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
19
+ GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
20
+ 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
21
+ lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
22
+ -----END CERTIFICATE-----
23
+
24
+ # Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
25
+ # Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division
26
+ # Label: "Thawte Server CA"
27
+ # Serial: 1
28
+ # MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d
29
+ # SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c
30
+ # SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9
31
+ -----BEGIN CERTIFICATE-----
32
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
33
+ FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
34
+ VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
35
+ biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
36
+ MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
37
+ MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
38
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
39
+ dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
40
+ cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
41
+ DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
42
+ gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
43
+ yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
44
+ L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
45
+ EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
46
+ 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
47
+ QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
48
+ qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
49
+ -----END CERTIFICATE-----
50
+
51
+ # Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
52
+ # Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division
53
+ # Label: "Thawte Premium Server CA"
54
+ # Serial: 1
55
+ # MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a
56
+ # SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a
57
+ # SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72
58
+ -----BEGIN CERTIFICATE-----
59
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
60
+ FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
61
+ VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
62
+ biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
63
+ dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
64
+ MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
65
+ MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
66
+ A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
67
+ b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
68
+ cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
69
+ bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
70
+ VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
71
+ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
72
+ uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
73
+ 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
74
+ hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
75
+ pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
76
+ -----END CERTIFICATE-----
77
+
78
+ # Issuer: O=Equifax OU=Equifax Secure Certificate Authority
79
+ # Subject: O=Equifax OU=Equifax Secure Certificate Authority
80
+ # Label: "Equifax Secure CA"
81
+ # Serial: 903804111
82
+ # MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4
83
+ # SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a
84
+ # SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78
85
+ -----BEGIN CERTIFICATE-----
86
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
87
+ UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
88
+ dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
89
+ MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
90
+ dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
91
+ AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
92
+ BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
93
+ cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
94
+ AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
95
+ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
96
+ aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
97
+ ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
98
+ IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
99
+ MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
100
+ A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
101
+ 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
102
+ 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
103
+ -----END CERTIFICATE-----
104
+
105
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
106
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
107
+ # Label: "Verisign Class 3 Public Primary Certification Authority"
108
+ # Serial: 149843929435818692848040365716851702463
109
+ # MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67
110
+ # SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2
111
+ # SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70
112
+ -----BEGIN CERTIFICATE-----
113
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
114
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
115
+ cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
116
+ MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
117
+ BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
118
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
119
+ ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
120
+ BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
121
+ I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
122
+ CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
123
+ lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
124
+ AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
125
+ -----END CERTIFICATE-----
126
+
127
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
128
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network
129
+ # Label: "Verisign Class 3 Public Primary Certification Authority - G2"
130
+ # Serial: 167285380242319648451154478808036881606
131
+ # MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9
132
+ # SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f
133
+ # SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b
134
+ -----BEGIN CERTIFICATE-----
135
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
136
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
137
+ c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
138
+ MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
139
+ emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
140
+ DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
141
+ FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
142
+ UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
143
+ YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
144
+ MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
145
+ AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
146
+ pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
147
+ 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
148
+ AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
149
+ U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
150
+ F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
151
+ oJ2daZH9
152
+ -----END CERTIFICATE-----
153
+
154
+ # Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
155
+ # Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
156
+ # Label: "GlobalSign Root CA"
157
+ # Serial: 4835703278459707669005204
158
+ # MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a
159
+ # SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c
160
+ # SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99
161
+ -----BEGIN CERTIFICATE-----
162
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
163
+ A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
164
+ b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
165
+ MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
166
+ YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
167
+ aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
168
+ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
169
+ xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
170
+ 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
171
+ snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
172
+ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
173
+ 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
174
+ BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
175
+ AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
176
+ yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
177
+ 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
178
+ AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
179
+ DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
180
+ HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
181
+ -----END CERTIFICATE-----
182
+
183
+ # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
184
+ # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
185
+ # Label: "GlobalSign Root CA - R2"
186
+ # Serial: 4835703278459682885658125
187
+ # MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30
188
+ # SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe
189
+ # SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e
190
+ -----BEGIN CERTIFICATE-----
191
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
192
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
193
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
194
+ MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
195
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
196
+ hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
197
+ v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
198
+ eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
199
+ tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
200
+ C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
201
+ zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
202
+ mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
203
+ V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
204
+ bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
205
+ 3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
206
+ J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
207
+ 291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
208
+ ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
209
+ AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
210
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
211
+ -----END CERTIFICATE-----
212
+
213
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
214
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority
215
+ # Label: "ValiCert Class 1 VA"
216
+ # Serial: 1
217
+ # MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb
218
+ # SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e
219
+ # SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04
220
+ -----BEGIN CERTIFICATE-----
221
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
222
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
223
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
224
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
225
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
226
+ NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
227
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
228
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
229
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
230
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
231
+ LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
232
+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
233
+ TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
234
+ LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
235
+ I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
236
+ nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
237
+ -----END CERTIFICATE-----
238
+
239
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
240
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority
241
+ # Label: "ValiCert Class 2 VA"
242
+ # Serial: 1
243
+ # MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87
244
+ # SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6
245
+ # SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b
246
+ -----BEGIN CERTIFICATE-----
247
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
248
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
249
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
250
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
251
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
252
+ NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
253
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
254
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
255
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
256
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
257
+ dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
258
+ WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
259
+ v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
260
+ UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
261
+ IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
262
+ W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
263
+ -----END CERTIFICATE-----
264
+
265
+ # Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
266
+ # Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority
267
+ # Label: "RSA Root Certificate 1"
268
+ # Serial: 1
269
+ # MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72
270
+ # SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb
271
+ # SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a
272
+ -----BEGIN CERTIFICATE-----
273
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
274
+ IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
275
+ BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
276
+ aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
277
+ 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
278
+ NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
279
+ azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
280
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
281
+ Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
282
+ cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
283
+ cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
284
+ 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
285
+ JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
286
+ Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
287
+ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
288
+ PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
289
+ -----END CERTIFICATE-----
290
+
291
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
292
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
293
+ # Label: "Verisign Class 3 Public Primary Certification Authority - G3"
294
+ # Serial: 206684696279472310254277870180966723415
295
+ # MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09
296
+ # SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6
297
+ # SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44
298
+ -----BEGIN CERTIFICATE-----
299
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
300
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
301
+ cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
302
+ LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
303
+ aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
304
+ dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
305
+ VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
306
+ aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
307
+ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
308
+ IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
309
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
310
+ N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
311
+ KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
312
+ kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
313
+ CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
314
+ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
315
+ imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
316
+ 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
317
+ DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
318
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
319
+ F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
320
+ TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
321
+ -----END CERTIFICATE-----
322
+
323
+ # Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
324
+ # Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only
325
+ # Label: "Verisign Class 4 Public Primary Certification Authority - G3"
326
+ # Serial: 314531972711909413743075096039378935511
327
+ # MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df
328
+ # SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d
329
+ # SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06
330
+ -----BEGIN CERTIFICATE-----
331
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
332
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
333
+ cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
334
+ LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
335
+ aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
336
+ dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
337
+ VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
338
+ aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
339
+ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
340
+ IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
341
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
342
+ GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
343
+ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
344
+ U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
345
+ NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
346
+ ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
347
+ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
348
+ CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
349
+ g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
350
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
351
+ 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
352
+ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
353
+ -----END CERTIFICATE-----
354
+
355
+ # Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
356
+ # Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
357
+ # Label: "Entrust.net Secure Server CA"
358
+ # Serial: 927650371
359
+ # MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee
360
+ # SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39
361
+ # SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50
362
+ -----BEGIN CERTIFICATE-----
363
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
364
+ VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
365
+ ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
366
+ KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
367
+ ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
368
+ MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
369
+ ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
370
+ b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
371
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
372
+ U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
373
+ A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
374
+ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
375
+ wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
376
+ AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
377
+ oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
378
+ BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
379
+ dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
380
+ MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
381
+ b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
382
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
383
+ MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
384
+ E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
385
+ MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
386
+ hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
387
+ 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
388
+ 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
389
+ -----END CERTIFICATE-----
390
+
391
+ # Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
392
+ # Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
393
+ # Label: "Entrust.net Premium 2048 Secure Server CA"
394
+ # Serial: 946059622
395
+ # MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc
396
+ # SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe
397
+ # SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f
398
+ -----BEGIN CERTIFICATE-----
399
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
400
+ RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
401
+ bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
402
+ IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
403
+ ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
404
+ MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
405
+ LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
406
+ YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
407
+ A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
408
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
409
+ K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
410
+ sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
411
+ MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
412
+ XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
413
+ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
414
+ 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
415
+ vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
416
+ CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
417
+ WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
418
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
419
+ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
420
+ f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
421
+ B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
422
+ vUxFnmG6v4SBkgPR0ml8xQ==
423
+ -----END CERTIFICATE-----
424
+
425
+ # Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
426
+ # Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
427
+ # Label: "Baltimore CyberTrust Root"
428
+ # Serial: 33554617
429
+ # MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
430
+ # SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
431
+ # SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
434
+ RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
435
+ VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
436
+ DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
437
+ ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
438
+ VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
439
+ mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
440
+ IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
441
+ mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
442
+ XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
443
+ dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
444
+ jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
445
+ BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
446
+ DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
447
+ 9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
448
+ jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
449
+ Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
450
+ ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
451
+ R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
452
+ -----END CERTIFICATE-----
453
+
454
+ # Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
455
+ # Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc.
456
+ # Label: "Equifax Secure Global eBusiness CA"
457
+ # Serial: 1
458
+ # MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc
459
+ # SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45
460
+ # SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07
461
+ -----BEGIN CERTIFICATE-----
462
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
463
+ MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
464
+ ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
465
+ MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
466
+ dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
467
+ c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
468
+ UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
469
+ 58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
470
+ o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
471
+ MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
472
+ aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
473
+ A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
474
+ Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
475
+ 8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
476
+ -----END CERTIFICATE-----
477
+
478
+ # Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
479
+ # Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc.
480
+ # Label: "Equifax Secure eBusiness CA 1"
481
+ # Serial: 4
482
+ # MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d
483
+ # SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41
484
+ # SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73
485
+ -----BEGIN CERTIFICATE-----
486
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
487
+ MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
488
+ ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
489
+ MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
490
+ LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
491
+ KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
492
+ RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
493
+ WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
494
+ Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
495
+ AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
496
+ eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
497
+ zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
498
+ WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
499
+ /Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
500
+ -----END CERTIFICATE-----
501
+
502
+ # Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
503
+ # Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2
504
+ # Label: "Equifax Secure eBusiness CA 2"
505
+ # Serial: 930140085
506
+ # MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca
507
+ # SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc
508
+ # SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20
509
+ -----BEGIN CERTIFICATE-----
510
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
511
+ UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
512
+ dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
513
+ NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
514
+ VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
515
+ AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
516
+ vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
517
+ BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
518
+ AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
519
+ MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
520
+ IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
521
+ NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
522
+ y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
523
+ MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
524
+ A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
525
+ 0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
526
+ E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
527
+ -----END CERTIFICATE-----
528
+
529
+ # Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
530
+ # Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network
531
+ # Label: "AddTrust Low-Value Services Root"
532
+ # Serial: 1
533
+ # MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc
534
+ # SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d
535
+ # SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7
536
+ -----BEGIN CERTIFICATE-----
537
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
538
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
539
+ b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
540
+ MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
541
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
542
+ VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
543
+ A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
544
+ CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
545
+ tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
546
+ dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
547
+ PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
548
+ +Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
549
+ BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
550
+ BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
551
+ MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
552
+ ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
553
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
554
+ 7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
555
+ 43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
556
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
557
+ pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
558
+ WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
559
+ -----END CERTIFICATE-----
560
+
561
+ # Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
562
+ # Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network
563
+ # Label: "AddTrust External Root"
564
+ # Serial: 1
565
+ # MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f
566
+ # SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68
567
+ # SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2
568
+ -----BEGIN CERTIFICATE-----
569
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
570
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
571
+ IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
572
+ MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
573
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
574
+ bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
575
+ dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
576
+ H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
577
+ uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
578
+ mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
579
+ a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
580
+ E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
581
+ WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
582
+ VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
583
+ Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
584
+ cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
585
+ IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
586
+ AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
587
+ YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
588
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
589
+ Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
590
+ c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
591
+ mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
592
+ -----END CERTIFICATE-----
593
+
594
+ # Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
595
+ # Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network
596
+ # Label: "AddTrust Public Services Root"
597
+ # Serial: 1
598
+ # MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f
599
+ # SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5
600
+ # SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27
601
+ -----BEGIN CERTIFICATE-----
602
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
603
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
604
+ b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
605
+ MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
606
+ ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
607
+ BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
608
+ AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
609
+ 6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
610
+ GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
611
+ dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
612
+ 1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
613
+ 62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
614
+ BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
615
+ AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
616
+ MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
617
+ cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
618
+ b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
619
+ IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
620
+ iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
621
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
622
+ 4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
623
+ XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
624
+ -----END CERTIFICATE-----
625
+
626
+ # Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
627
+ # Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network
628
+ # Label: "AddTrust Qualified Certificates Root"
629
+ # Serial: 1
630
+ # MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb
631
+ # SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf
632
+ # SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16
633
+ -----BEGIN CERTIFICATE-----
634
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
635
+ MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
636
+ b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
637
+ MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
638
+ EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
639
+ BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
640
+ AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
641
+ xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
642
+ 87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
643
+ 2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
644
+ WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
645
+ 0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
646
+ A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
647
+ AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
648
+ pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
649
+ ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
650
+ aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
651
+ hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
652
+ hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
653
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
654
+ P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
655
+ iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
656
+ xqE=
657
+ -----END CERTIFICATE-----
658
+
659
+ # Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
660
+ # Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
661
+ # Label: "Entrust Root Certification Authority"
662
+ # Serial: 1164660820
663
+ # MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
664
+ # SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
665
+ # SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
666
+ -----BEGIN CERTIFICATE-----
667
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
668
+ VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
669
+ Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
670
+ KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
671
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
672
+ NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
673
+ NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
674
+ ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
675
+ BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
676
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
677
+ Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
678
+ 4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
679
+ KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
680
+ rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
681
+ 94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
682
+ sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
683
+ gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
684
+ kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
685
+ vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
686
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
687
+ O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
688
+ AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
689
+ 9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
690
+ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
691
+ 0vdXcDazv/wor3ElhVsT/h5/WrQ8
692
+ -----END CERTIFICATE-----
693
+
694
+ # Issuer: CN=GeoTrust Global CA O=GeoTrust Inc.
695
+ # Subject: CN=GeoTrust Global CA O=GeoTrust Inc.
696
+ # Label: "GeoTrust Global CA"
697
+ # Serial: 144470
698
+ # MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5
699
+ # SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12
700
+ # SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a
701
+ -----BEGIN CERTIFICATE-----
702
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
703
+ MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
704
+ YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
705
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
706
+ R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
707
+ 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
708
+ fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
709
+ iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
710
+ 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
711
+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
712
+ MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
713
+ ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
714
+ uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
715
+ Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
716
+ tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
717
+ PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
718
+ hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
719
+ 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
720
+ -----END CERTIFICATE-----
721
+
722
+ # Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
723
+ # Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc.
724
+ # Label: "GeoTrust Global CA 2"
725
+ # Serial: 1
726
+ # MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9
727
+ # SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d
728
+ # SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85
729
+ -----BEGIN CERTIFICATE-----
730
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
731
+ MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
732
+ IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
733
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
734
+ R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
735
+ PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
736
+ Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
737
+ TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
738
+ 5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
739
+ S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
740
+ 2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
741
+ FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
742
+ EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
743
+ EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
744
+ /NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
745
+ A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
746
+ abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
747
+ I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
748
+ 4iIprn2DQKi6bA==
749
+ -----END CERTIFICATE-----
750
+
751
+ # Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc.
752
+ # Subject: CN=GeoTrust Universal CA O=GeoTrust Inc.
753
+ # Label: "GeoTrust Universal CA"
754
+ # Serial: 1
755
+ # MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48
756
+ # SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79
757
+ # SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12
758
+ -----BEGIN CERTIFICATE-----
759
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
760
+ MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
761
+ c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
762
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
763
+ IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
764
+ VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
765
+ cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
766
+ QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
767
+ F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
768
+ c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
769
+ mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
770
+ VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
771
+ teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
772
+ f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
773
+ Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
774
+ nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
775
+ /wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
776
+ MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
777
+ 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
778
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
779
+ IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
780
+ ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
781
+ uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
782
+ Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
783
+ QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
784
+ koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
785
+ ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
786
+ DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
787
+ bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
788
+ -----END CERTIFICATE-----
789
+
790
+ # Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
791
+ # Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc.
792
+ # Label: "GeoTrust Universal CA 2"
793
+ # Serial: 1
794
+ # MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7
795
+ # SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79
796
+ # SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b
797
+ -----BEGIN CERTIFICATE-----
798
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
799
+ MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
800
+ c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
801
+ VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
802
+ c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
803
+ AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
804
+ WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
805
+ FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
806
+ XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
807
+ se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
808
+ KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
809
+ IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
810
+ y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
811
+ hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
812
+ QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
813
+ Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
814
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
815
+ HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
816
+ KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
817
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
818
+ L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
819
+ Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
820
+ ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
821
+ T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
822
+ GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
823
+ 1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
824
+ OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
825
+ 6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
826
+ QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
827
+ -----END CERTIFICATE-----
828
+
829
+ # Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc.
830
+ # Subject: CN=America Online Root Certification Authority 1 O=America Online Inc.
831
+ # Label: "America Online Root Certification Authority 1"
832
+ # Serial: 1
833
+ # MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e
834
+ # SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a
835
+ # SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3
836
+ -----BEGIN CERTIFICATE-----
837
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
838
+ MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
839
+ bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
840
+ MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
841
+ ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
842
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
843
+ ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
844
+ hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
845
+ 1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
846
+ OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
847
+ 2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
848
+ O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
849
+ AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
850
+ AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
851
+ BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
852
+ Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
853
+ LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
854
+ oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
855
+ MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
856
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
857
+ -----END CERTIFICATE-----
858
+
859
+ # Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc.
860
+ # Subject: CN=America Online Root Certification Authority 2 O=America Online Inc.
861
+ # Label: "America Online Root Certification Authority 2"
862
+ # Serial: 1
863
+ # MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf
864
+ # SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84
865
+ # SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd
866
+ -----BEGIN CERTIFICATE-----
867
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
868
+ MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
869
+ bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
870
+ MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
871
+ ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
872
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
873
+ ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
874
+ 206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
875
+ KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
876
+ JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
877
+ BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
878
+ Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
879
+ PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
880
+ Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
881
+ Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
882
+ o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
883
+ +L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
884
+ YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
885
+ FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
886
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
887
+ xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
888
+ LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
889
+ obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
890
+ CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
891
+ IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
892
+ DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
893
+ AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
894
+ Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
895
+ AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
896
+ Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
897
+ RY8mkaKO/qk=
898
+ -----END CERTIFICATE-----
899
+
900
+ # Issuer: CN=AAA Certificate Services O=Comodo CA Limited
901
+ # Subject: CN=AAA Certificate Services O=Comodo CA Limited
902
+ # Label: "Comodo AAA Services root"
903
+ # Serial: 1
904
+ # MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
905
+ # SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
906
+ # SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
907
+ -----BEGIN CERTIFICATE-----
908
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
909
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
910
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
911
+ YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
912
+ MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
913
+ BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
914
+ GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
915
+ ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
916
+ BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
917
+ 3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
918
+ YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
919
+ rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
920
+ ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
921
+ oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
922
+ MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
923
+ QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
924
+ b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
925
+ AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
926
+ GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
927
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
928
+ G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
929
+ l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
930
+ smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
931
+ -----END CERTIFICATE-----
932
+
933
+ # Issuer: CN=Secure Certificate Services O=Comodo CA Limited
934
+ # Subject: CN=Secure Certificate Services O=Comodo CA Limited
935
+ # Label: "Comodo Secure Services root"
936
+ # Serial: 1
937
+ # MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd
938
+ # SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1
939
+ # SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8
940
+ -----BEGIN CERTIFICATE-----
941
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
942
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
943
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
944
+ ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
945
+ fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
946
+ A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
947
+ BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
948
+ BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
949
+ cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
950
+ HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
951
+ CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
952
+ 3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
953
+ 6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
954
+ HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
955
+ EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
956
+ Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
957
+ Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
958
+ DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
959
+ 5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
960
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
961
+ gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
962
+ aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
963
+ izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
964
+ -----END CERTIFICATE-----
965
+
966
+ # Issuer: CN=Trusted Certificate Services O=Comodo CA Limited
967
+ # Subject: CN=Trusted Certificate Services O=Comodo CA Limited
968
+ # Label: "Comodo Trusted Services root"
969
+ # Serial: 1
970
+ # MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27
971
+ # SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd
972
+ # SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69
973
+ -----BEGIN CERTIFICATE-----
974
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
975
+ MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
976
+ GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
977
+ aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
978
+ MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
979
+ BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
980
+ VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
981
+ AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
982
+ fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
983
+ TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
984
+ fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
985
+ 1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
986
+ kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
987
+ A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
988
+ VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
989
+ ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
990
+ dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
991
+ Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
992
+ HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
993
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
994
+ jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
995
+ xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
996
+ dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
997
+ -----END CERTIFICATE-----
998
+
999
+ # Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
1000
+ # Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com
1001
+ # Label: "UTN DATACorp SGC Root CA"
1002
+ # Serial: 91374294542884689855167577680241077609
1003
+ # MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06
1004
+ # SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4
1005
+ # SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48
1006
+ -----BEGIN CERTIFICATE-----
1007
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
1008
+ kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1009
+ Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1010
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
1011
+ IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
1012
+ EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
1013
+ VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
1014
+ dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
1015
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
1016
+ E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
1017
+ D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
1018
+ 4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
1019
+ lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
1020
+ bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
1021
+ o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
1022
+ MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
1023
+ LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
1024
+ BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
1025
+ AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1026
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
1027
+ j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
1028
+ KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
1029
+ 2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
1030
+ mfnGV/TJVTl4uix5yaaIK/QI
1031
+ -----END CERTIFICATE-----
1032
+
1033
+ # Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
1034
+ # Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com
1035
+ # Label: "UTN USERFirst Hardware Root CA"
1036
+ # Serial: 91374294542884704022267039221184531197
1037
+ # MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39
1038
+ # SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7
1039
+ # SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37
1040
+ -----BEGIN CERTIFICATE-----
1041
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
1042
+ lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
1043
+ Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
1044
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
1045
+ SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
1046
+ A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
1047
+ MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
1048
+ d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
1049
+ cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
1050
+ 0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
1051
+ M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
1052
+ MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
1053
+ oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
1054
+ DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
1055
+ oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
1056
+ VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
1057
+ dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
1058
+ bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
1059
+ BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1060
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
1061
+ CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
1062
+ CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
1063
+ 3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
1064
+ KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
1065
+ -----END CERTIFICATE-----
1066
+
1067
+ # Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
1068
+ # Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com
1069
+ # Label: "XRamp Global CA Root"
1070
+ # Serial: 107108908803651509692980124233745014957
1071
+ # MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1
1072
+ # SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6
1073
+ # SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2
1074
+ -----BEGIN CERTIFICATE-----
1075
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
1076
+ gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
1077
+ MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
1078
+ UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
1079
+ NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
1080
+ dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
1081
+ dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1082
+ dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
1083
+ 38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
1084
+ KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
1085
+ DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
1086
+ qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
1087
+ JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
1088
+ PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
1089
+ BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
1090
+ jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
1091
+ eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
1092
+ ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
1093
+ vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1094
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
1095
+ IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
1096
+ i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
1097
+ O+7ETPTsJ3xCwnR8gooJybQDJbw=
1098
+ -----END CERTIFICATE-----
1099
+
1100
+ # Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
1101
+ # Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
1102
+ # Label: "Go Daddy Class 2 CA"
1103
+ # Serial: 0
1104
+ # MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
1105
+ # SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
1106
+ # SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
1107
+ -----BEGIN CERTIFICATE-----
1108
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
1109
+ MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
1110
+ YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
1111
+ MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
1112
+ ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
1113
+ MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
1114
+ ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
1115
+ PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
1116
+ wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
1117
+ EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
1118
+ avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
1119
+ YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
1120
+ sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
1121
+ /t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
1122
+ IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
1123
+ YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
1124
+ ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
1125
+ OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
1126
+ TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1127
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
1128
+ dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
1129
+ ReYNnyicsbkqWletNw+vHX/bvZ8=
1130
+ -----END CERTIFICATE-----
1131
+
1132
+ # Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
1133
+ # Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
1134
+ # Label: "Starfield Class 2 CA"
1135
+ # Serial: 0
1136
+ # MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
1137
+ # SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
1138
+ # SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
1139
+ -----BEGIN CERTIFICATE-----
1140
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
1141
+ MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
1142
+ U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
1143
+ NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
1144
+ ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
1145
+ ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
1146
+ DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
1147
+ 8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
1148
+ +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
1149
+ X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
1150
+ K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
1151
+ 1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
1152
+ A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
1153
+ zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
1154
+ YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
1155
+ bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
1156
+ DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
1157
+ L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
1158
+ eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1159
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
1160
+ VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
1161
+ WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
1162
+ -----END CERTIFICATE-----
1163
+
1164
+ # Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
1165
+ # Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
1166
+ # Label: "StartCom Certification Authority"
1167
+ # Serial: 1
1168
+ # MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16
1169
+ # SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f
1170
+ # SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea
1171
+ -----BEGIN CERTIFICATE-----
1172
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
1173
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
1174
+ Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
1175
+ dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
1176
+ MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
1177
+ U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
1178
+ cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
1179
+ A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
1180
+ pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
1181
+ OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
1182
+ Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
1183
+ Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
1184
+ HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
1185
+ Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
1186
+ +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
1187
+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
1188
+ Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
1189
+ 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
1190
+ AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1191
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
1192
+ ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
1193
+ LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
1194
+ BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
1195
+ Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
1196
+ dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
1197
+ cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
1198
+ YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
1199
+ dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
1200
+ bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
1201
+ YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
1202
+ TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
1203
+ 9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
1204
+ jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
1205
+ FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
1206
+ ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
1207
+ ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
1208
+ EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
1209
+ L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1210
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
1211
+ O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
1212
+ um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
1213
+ NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
1214
+ -----END CERTIFICATE-----
1215
+
1216
+ # Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
1217
+ # Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
1218
+ # Label: "DigiCert Assured ID Root CA"
1219
+ # Serial: 17154717934120587862167794914071425081
1220
+ # MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72
1221
+ # SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43
1222
+ # SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c
1223
+ -----BEGIN CERTIFICATE-----
1224
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
1225
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1226
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
1227
+ b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
1228
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
1229
+ cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
1230
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
1231
+ JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
1232
+ mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
1233
+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
1234
+ VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
1235
+ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
1236
+ AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
1237
+ BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
1238
+ pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
1239
+ dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
1240
+ fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
1241
+ NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
1242
+ H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1243
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1244
+ -----END CERTIFICATE-----
1245
+
1246
+ # Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
1247
+ # Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
1248
+ # Label: "DigiCert Global Root CA"
1249
+ # Serial: 10944719598952040374951832963794454346
1250
+ # MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
1251
+ # SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
1252
+ # SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
1253
+ -----BEGIN CERTIFICATE-----
1254
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
1255
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1256
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
1257
+ QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
1258
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
1259
+ b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
1260
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
1261
+ CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
1262
+ nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
1263
+ 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
1264
+ T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
1265
+ gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
1266
+ BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
1267
+ TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
1268
+ DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
1269
+ hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
1270
+ 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
1271
+ PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
1272
+ YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1273
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1274
+ -----END CERTIFICATE-----
1275
+
1276
+ # Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
1277
+ # Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
1278
+ # Label: "DigiCert High Assurance EV Root CA"
1279
+ # Serial: 3553400076410547919724730734378100087
1280
+ # MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a
1281
+ # SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25
1282
+ # SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf
1283
+ -----BEGIN CERTIFICATE-----
1284
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
1285
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
1286
+ d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
1287
+ ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
1288
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
1289
+ LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
1290
+ RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
1291
+ +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
1292
+ PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
1293
+ xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
1294
+ Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
1295
+ hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
1296
+ EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
1297
+ MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
1298
+ FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
1299
+ nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
1300
+ eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
1301
+ hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
1302
+ Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1303
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
1304
+ +OkuE6N36B9K
1305
+ -----END CERTIFICATE-----
1306
+
1307
+ # Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
1308
+ # Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc.
1309
+ # Label: "GeoTrust Primary Certification Authority"
1310
+ # Serial: 32798226551256963324313806436981982369
1311
+ # MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf
1312
+ # SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96
1313
+ # SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c
1314
+ -----BEGIN CERTIFICATE-----
1315
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
1316
+ MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
1317
+ R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
1318
+ MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
1319
+ Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
1320
+ ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1321
+ AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
1322
+ AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
1323
+ ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
1324
+ 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
1325
+ kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
1326
+ mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
1327
+ A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
1328
+ KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
1329
+ 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
1330
+ 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
1331
+ oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
1332
+ UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
1333
+ AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1334
+ -----END CERTIFICATE-----
1335
+
1336
+ # Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
1337
+ # Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only
1338
+ # Label: "thawte Primary Root CA"
1339
+ # Serial: 69529181992039203566298953787712940909
1340
+ # MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12
1341
+ # SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81
1342
+ # SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f
1343
+ -----BEGIN CERTIFICATE-----
1344
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
1345
+ qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
1346
+ Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
1347
+ MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
1348
+ BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
1349
+ NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
1350
+ LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
1351
+ A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1352
+ IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
1353
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
1354
+ W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
1355
+ 3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
1356
+ 6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
1357
+ Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
1358
+ NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
1359
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
1360
+ r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
1361
+ DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
1362
+ YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1363
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
1364
+ /qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
1365
+ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
1366
+ jVaMaA==
1367
+ -----END CERTIFICATE-----
1368
+
1369
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
1370
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only
1371
+ # Label: "VeriSign Class 3 Public Primary Certification Authority - G5"
1372
+ # Serial: 33037644167568058970164719475676101450
1373
+ # MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c
1374
+ # SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5
1375
+ # SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df
1376
+ -----BEGIN CERTIFICATE-----
1377
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
1378
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
1379
+ ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
1380
+ U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
1381
+ ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
1382
+ aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
1383
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
1384
+ ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
1385
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
1386
+ U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
1387
+ aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
1388
+ nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
1389
+ t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
1390
+ SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
1391
+ BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
1392
+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
1393
+ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
1394
+ BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
1395
+ BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1396
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
1397
+ MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
1398
+ p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
1399
+ 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
1400
+ WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
1401
+ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
1402
+ hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1403
+ -----END CERTIFICATE-----
1404
+
1405
+ # Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
1406
+ # Subject: CN=COMODO Certification Authority O=COMODO CA Limited
1407
+ # Label: "COMODO Certification Authority"
1408
+ # Serial: 104350513648249232941998508985834464573
1409
+ # MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75
1410
+ # SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b
1411
+ # SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66
1412
+ -----BEGIN CERTIFICATE-----
1413
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
1414
+ gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
1415
+ A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
1416
+ BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
1417
+ MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
1418
+ YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
1419
+ RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
1420
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
1421
+ UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
1422
+ 2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
1423
+ Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
1424
+ +2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
1425
+ DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
1426
+ nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
1427
+ /zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
1428
+ PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
1429
+ QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
1430
+ SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
1431
+ IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1432
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
1433
+ zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
1434
+ BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
1435
+ ZQ==
1436
+ -----END CERTIFICATE-----
1437
+
1438
+ # Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
1439
+ # Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.
1440
+ # Label: "Network Solutions Certificate Authority"
1441
+ # Serial: 116697915152937497490437556386812487904
1442
+ # MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e
1443
+ # SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce
1444
+ # SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c
1445
+ -----BEGIN CERTIFICATE-----
1446
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
1447
+ MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1448
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
1449
+ dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
1450
+ UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
1451
+ ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1452
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
1453
+ c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
1454
+ OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
1455
+ mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
1456
+ BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
1457
+ qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
1458
+ gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
1459
+ BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
1460
+ bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
1461
+ dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
1462
+ 6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
1463
+ h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
1464
+ /nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1465
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
1466
+ pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1467
+ -----END CERTIFICATE-----
1468
+
1469
+ # Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
1470
+ # Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
1471
+ # Label: "COMODO ECC Certification Authority"
1472
+ # Serial: 41578283867086692638256921589707938090
1473
+ # MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23
1474
+ # SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11
1475
+ # SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7
1476
+ -----BEGIN CERTIFICATE-----
1477
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
1478
+ MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
1479
+ BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
1480
+ IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
1481
+ MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
1482
+ ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
1483
+ T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
1484
+ biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
1485
+ FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
1486
+ cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
1487
+ BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
1488
+ BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
1489
+ fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
1490
+ GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1491
+ -----END CERTIFICATE-----
1492
+
1493
+ # Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
1494
+ # Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA
1495
+ # Label: "TC TrustCenter Class 2 CA II"
1496
+ # Serial: 941389028203453866782103406992443
1497
+ # MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23
1498
+ # SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e
1499
+ # SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4
1500
+ -----BEGIN CERTIFICATE-----
1501
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
1502
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
1503
+ BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
1504
+ Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
1505
+ OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
1506
+ SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
1507
+ VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
1508
+ ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
1509
+ tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
1510
+ uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
1511
+ XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
1512
+ 8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
1513
+ 5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
1514
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
1515
+ kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
1516
+ dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
1517
+ Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
1518
+ JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
1519
+ Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
1520
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
1521
+ GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
1522
+ ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
1523
+ au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
1524
+ hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
1525
+ dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
1526
+ -----END CERTIFICATE-----
1527
+
1528
+ # Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
1529
+ # Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA
1530
+ # Label: "TC TrustCenter Class 3 CA II"
1531
+ # Serial: 1506523511417715638772220530020799
1532
+ # MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e
1533
+ # SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5
1534
+ # SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e
1535
+ -----BEGIN CERTIFICATE-----
1536
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
1537
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
1538
+ BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
1539
+ Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
1540
+ OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
1541
+ SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
1542
+ VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
1543
+ ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
1544
+ Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
1545
+ Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
1546
+ 1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
1547
+ ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
1548
+ Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
1549
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
1550
+ XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
1551
+ dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
1552
+ Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
1553
+ JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
1554
+ Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
1555
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
1556
+ irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
1557
+ TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
1558
+ g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
1559
+ 95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
1560
+ S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
1561
+ -----END CERTIFICATE-----
1562
+
1563
+ # Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1564
+ # Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1565
+ # Label: "TC TrustCenter Universal CA I"
1566
+ # Serial: 601024842042189035295619584734726
1567
+ # MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c
1568
+ # SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3
1569
+ # SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7
1570
+ -----BEGIN CERTIFICATE-----
1571
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
1572
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
1573
+ BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
1574
+ c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
1575
+ MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
1576
+ R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
1577
+ VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
1578
+ AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
1579
+ JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
1580
+ fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
1581
+ jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
1582
+ wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
1583
+ fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
1584
+ VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
1585
+ BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
1586
+ CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
1587
+ 7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
1588
+ 8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
1589
+ ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
1590
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
1591
+ 2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
1592
+ -----END CERTIFICATE-----
1593
+
1594
+ # Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc
1595
+ # Subject: CN=Cybertrust Global Root O=Cybertrust, Inc
1596
+ # Label: "Cybertrust Global Root"
1597
+ # Serial: 4835703278459682877484360
1598
+ # MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1
1599
+ # SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6
1600
+ # SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3
1601
+ -----BEGIN CERTIFICATE-----
1602
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
1603
+ A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
1604
+ bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
1605
+ ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
1606
+ b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
1607
+ 7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
1608
+ J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
1609
+ HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
1610
+ t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
1611
+ FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
1612
+ XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
1613
+ MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
1614
+ hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
1615
+ MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
1616
+ A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
1617
+ Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
1618
+ XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
1619
+ omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
1620
+ A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
1621
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
1622
+ -----END CERTIFICATE-----
1623
+
1624
+ # Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
1625
+ # Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only
1626
+ # Label: "GeoTrust Primary Certification Authority - G3"
1627
+ # Serial: 28809105769928564313984085209975885599
1628
+ # MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05
1629
+ # SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd
1630
+ # SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
1633
+ mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
1634
+ MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
1635
+ eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
1636
+ cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
1637
+ BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
1638
+ MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
1639
+ BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
1640
+ LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
1641
+ +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
1642
+ hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
1643
+ 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
1644
+ JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
1645
+ DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
1646
+ huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
1647
+ HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
1648
+ AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
1649
+ zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
1650
+ kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
1651
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
1652
+ SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
1653
+ spki4cErx5z481+oghLrGREt
1654
+ -----END CERTIFICATE-----
1655
+
1656
+ # Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
1657
+ # Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only
1658
+ # Label: "thawte Primary Root CA - G2"
1659
+ # Serial: 71758320672825410020661621085256472406
1660
+ # MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f
1661
+ # SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12
1662
+ # SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57
1663
+ -----BEGIN CERTIFICATE-----
1664
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
1665
+ MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
1666
+ IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
1667
+ BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
1668
+ MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
1669
+ d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
1670
+ YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
1671
+ dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
1672
+ BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
1673
+ papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
1674
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
1675
+ DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
1676
+ KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
1677
+ XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
1678
+ -----END CERTIFICATE-----
1679
+
1680
+ # Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
1681
+ # Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only
1682
+ # Label: "thawte Primary Root CA - G3"
1683
+ # Serial: 127614157056681299805556476275995414779
1684
+ # MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31
1685
+ # SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2
1686
+ # SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c
1687
+ -----BEGIN CERTIFICATE-----
1688
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
1689
+ rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
1690
+ Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
1691
+ MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
1692
+ BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
1693
+ Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
1694
+ LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
1695
+ MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
1696
+ ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
1697
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
1698
+ gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
1699
+ YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
1700
+ b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
1701
+ 9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
1702
+ zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
1703
+ OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
1704
+ HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
1705
+ 2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
1706
+ oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
1707
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
1708
+ KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
1709
+ m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
1710
+ MdRAGmI0Nj81Aa6sY6A=
1711
+ -----END CERTIFICATE-----
1712
+
1713
+ # Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
1714
+ # Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only
1715
+ # Label: "GeoTrust Primary Certification Authority - G2"
1716
+ # Serial: 80682863203381065782177908751794619243
1717
+ # MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a
1718
+ # SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0
1719
+ # SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66
1720
+ -----BEGIN CERTIFICATE-----
1721
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
1722
+ MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
1723
+ KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
1724
+ MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
1725
+ eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
1726
+ BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
1727
+ NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
1728
+ BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
1729
+ MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
1730
+ So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
1731
+ tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
1732
+ BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
1733
+ CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
1734
+ qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
1735
+ rD6ogRLQy7rQkgu2npaqBA+K
1736
+ -----END CERTIFICATE-----
1737
+
1738
+ # Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
1739
+ # Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only
1740
+ # Label: "VeriSign Universal Root Certification Authority"
1741
+ # Serial: 85209574734084581917763752644031726877
1742
+ # MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19
1743
+ # SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54
1744
+ # SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c
1745
+ -----BEGIN CERTIFICATE-----
1746
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
1747
+ vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
1748
+ ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
1749
+ U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
1750
+ ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
1751
+ Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
1752
+ MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
1753
+ IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
1754
+ IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
1755
+ bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
1756
+ AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
1757
+ 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
1758
+ H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
1759
+ LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
1760
+ /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
1761
+ rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
1762
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
1763
+ WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
1764
+ exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
1765
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
1766
+ sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
1767
+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
1768
+ 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
1769
+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
1770
+ lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
1771
+ 7M2CYfE45k+XmCpajQ==
1772
+ -----END CERTIFICATE-----
1773
+
1774
+ # Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
1775
+ # Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only
1776
+ # Label: "VeriSign Class 3 Public Primary Certification Authority - G4"
1777
+ # Serial: 63143484348153506665311985501458640051
1778
+ # MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41
1779
+ # SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a
1780
+ # SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79
1781
+ -----BEGIN CERTIFICATE-----
1782
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
1783
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
1784
+ ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
1785
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
1786
+ U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
1787
+ aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
1788
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
1789
+ U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
1790
+ SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
1791
+ biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1792
+ IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
1793
+ GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
1794
+ fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
1795
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
1796
+ aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
1797
+ aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
1798
+ kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
1799
+ 4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
1800
+ FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1801
+ -----END CERTIFICATE-----
1802
+
1803
+ # Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
1804
+ # Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority
1805
+ # Label: "Verisign Class 3 Public Primary Certification Authority"
1806
+ # Serial: 80507572722862485515306429940691309246
1807
+ # MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4
1808
+ # SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b
1809
+ # SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05
1810
+ -----BEGIN CERTIFICATE-----
1811
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
1812
+ A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
1813
+ cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
1814
+ MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
1815
+ BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
1816
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
1817
+ ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
1818
+ BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
1819
+ I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
1820
+ CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
1821
+ 2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
1822
+ 2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
1823
+ -----END CERTIFICATE-----
1824
+
1825
+ # Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
1826
+ # Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
1827
+ # Label: "GlobalSign Root CA - R3"
1828
+ # Serial: 4835703278459759426209954
1829
+ # MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28
1830
+ # SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad
1831
+ # SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b
1832
+ -----BEGIN CERTIFICATE-----
1833
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
1834
+ A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
1835
+ Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
1836
+ MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
1837
+ A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
1838
+ hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
1839
+ RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
1840
+ gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
1841
+ KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
1842
+ QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
1843
+ XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
1844
+ DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
1845
+ LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
1846
+ RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
1847
+ jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
1848
+ 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
1849
+ mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
1850
+ Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
1851
+ WD9f
1852
+ -----END CERTIFICATE-----
1853
+
1854
+ # Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1855
+ # Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA
1856
+ # Label: "TC TrustCenter Universal CA III"
1857
+ # Serial: 2010889993983507346460533407902964
1858
+ # MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b
1859
+ # SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87
1860
+ # SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d
1861
+ -----BEGIN CERTIFICATE-----
1862
+ MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
1863
+ MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
1864
+ BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
1865
+ c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
1866
+ MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
1867
+ ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
1868
+ BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
1869
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
1870
+ 5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
1871
+ DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
1872
+ zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
1873
+ yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
1874
+ dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
1875
+ MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
1876
+ Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
1877
+ 4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
1878
+ dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
1879
+ aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
1880
+ DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
1881
+ CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
1882
+ LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
1883
+ -----END CERTIFICATE-----
1884
+
1885
+ # Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
1886
+ # Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
1887
+ # Label: "Go Daddy Root Certificate Authority - G2"
1888
+ # Serial: 0
1889
+ # MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01
1890
+ # SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b
1891
+ # SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da
1892
+ -----BEGIN CERTIFICATE-----
1893
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
1894
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
1895
+ EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
1896
+ ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
1897
+ NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
1898
+ EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
1899
+ AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
1900
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
1901
+ E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
1902
+ /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
1903
+ DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
1904
+ GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
1905
+ tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
1906
+ AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
1907
+ FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
1908
+ WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
1909
+ 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
1910
+ gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
1911
+ 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
1912
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
1913
+ 4uJEvlz36hz1
1914
+ -----END CERTIFICATE-----
1915
+
1916
+ # Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1917
+ # Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1918
+ # Label: "Starfield Root Certificate Authority - G2"
1919
+ # Serial: 0
1920
+ # MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96
1921
+ # SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e
1922
+ # SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5
1923
+ -----BEGIN CERTIFICATE-----
1924
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
1925
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
1926
+ HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
1927
+ ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
1928
+ MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
1929
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
1930
+ aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
1931
+ Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1932
+ ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
1933
+ nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
1934
+ HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
1935
+ Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
1936
+ dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
1937
+ HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
1938
+ BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
1939
+ CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
1940
+ sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
1941
+ 4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
1942
+ 8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
1943
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
1944
+ mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
1945
+ -----END CERTIFICATE-----
1946
+
1947
+ # Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1948
+ # Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.
1949
+ # Label: "Starfield Services Root Certificate Authority - G2"
1950
+ # Serial: 0
1951
+ # MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2
1952
+ # SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f
1953
+ # SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5
1954
+ -----BEGIN CERTIFICATE-----
1955
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
1956
+ EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
1957
+ HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
1958
+ ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
1959
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
1960
+ VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
1961
+ ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
1962
+ dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
1963
+ hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
1964
+ OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
1965
+ 8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
1966
+ Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
1967
+ hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
1968
+ 6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
1969
+ DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
1970
+ AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
1971
+ bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
1972
+ ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
1973
+ qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
1974
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
1975
+ 0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
1976
+ sSi6
1977
+ -----END CERTIFICATE-----
1978
+
1979
+ # Issuer: CN=AffirmTrust Commercial O=AffirmTrust
1980
+ # Subject: CN=AffirmTrust Commercial O=AffirmTrust
1981
+ # Label: "AffirmTrust Commercial"
1982
+ # Serial: 8608355977964138876
1983
+ # MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
1984
+ # SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
1985
+ # SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
1986
+ -----BEGIN CERTIFICATE-----
1987
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
1988
+ BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
1989
+ dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
1990
+ MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
1991
+ cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
1992
+ AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
1993
+ Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
1994
+ ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
1995
+ MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
1996
+ yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
1997
+ VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
1998
+ nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
1999
+ KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
2000
+ XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
2001
+ vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
2002
+ Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
2003
+ N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
2004
+ nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
2005
+ -----END CERTIFICATE-----
2006
+
2007
+ # Issuer: CN=AffirmTrust Networking O=AffirmTrust
2008
+ # Subject: CN=AffirmTrust Networking O=AffirmTrust
2009
+ # Label: "AffirmTrust Networking"
2010
+ # Serial: 8957382827206547757
2011
+ # MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
2012
+ # SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
2013
+ # SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
2014
+ -----BEGIN CERTIFICATE-----
2015
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
2016
+ BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
2017
+ dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
2018
+ MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
2019
+ cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
2020
+ AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
2021
+ YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
2022
+ kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
2023
+ QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
2024
+ 6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
2025
+ yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
2026
+ QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
2027
+ KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
2028
+ tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
2029
+ QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
2030
+ Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
2031
+ olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
2032
+ x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
2033
+ -----END CERTIFICATE-----
2034
+
2035
+ # Issuer: CN=AffirmTrust Premium O=AffirmTrust
2036
+ # Subject: CN=AffirmTrust Premium O=AffirmTrust
2037
+ # Label: "AffirmTrust Premium"
2038
+ # Serial: 7893706540734352110
2039
+ # MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
2040
+ # SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
2041
+ # SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
2042
+ -----BEGIN CERTIFICATE-----
2043
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
2044
+ BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
2045
+ dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
2046
+ A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
2047
+ cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
2048
+ qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
2049
+ JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
2050
+ +jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
2051
+ s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
2052
+ HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
2053
+ 70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
2054
+ V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
2055
+ qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
2056
+ 5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
2057
+ C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
2058
+ OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
2059
+ FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
2060
+ BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
2061
+ KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
2062
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
2063
+ 8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
2064
+ MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
2065
+ 0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
2066
+ u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
2067
+ u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
2068
+ YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
2069
+ GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
2070
+ RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
2071
+ KeC2uAloGRwYQw==
2072
+ -----END CERTIFICATE-----
2073
+
2074
+ # Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
2075
+ # Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
2076
+ # Label: "AffirmTrust Premium ECC"
2077
+ # Serial: 8401224907861490260
2078
+ # MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
2079
+ # SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
2080
+ # SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
2081
+ -----BEGIN CERTIFICATE-----
2082
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
2083
+ VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
2084
+ cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
2085
+ BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
2086
+ VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
2087
+ 0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
2088
+ ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
2089
+ A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
2090
+ A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
2091
+ aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
2092
+ flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
2093
+ -----END CERTIFICATE-----
2094
+
2095
+ # Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
2096
+ # Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing
2097
+ # Label: "StartCom Certification Authority"
2098
+ # Serial: 45
2099
+ # MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16
2100
+ # SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0
2101
+ # SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11
2102
+ -----BEGIN CERTIFICATE-----
2103
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
2104
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
2105
+ Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
2106
+ dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
2107
+ MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
2108
+ U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
2109
+ cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
2110
+ A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
2111
+ pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
2112
+ OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
2113
+ Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
2114
+ Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
2115
+ HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
2116
+ Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
2117
+ +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
2118
+ Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
2119
+ Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
2120
+ 26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
2121
+ AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
2122
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
2123
+ F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
2124
+ ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
2125
+ ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
2126
+ aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
2127
+ YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
2128
+ c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
2129
+ aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
2130
+ d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
2131
+ CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
2132
+ dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
2133
+ wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
2134
+ Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
2135
+ 0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
2136
+ pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
2137
+ CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
2138
+ P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
2139
+ 1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
2140
+ KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
2141
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
2142
+ 8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
2143
+ fyWl8kgAwKQB2j8=
2144
+ -----END CERTIFICATE-----
2145
+
2146
+ # Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd.
2147
+ # Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd.
2148
+ # Label: "StartCom Certification Authority G2"
2149
+ # Serial: 59
2150
+ # MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64
2151
+ # SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17
2152
+ # SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95
2153
+ -----BEGIN CERTIFICATE-----
2154
+ MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
2155
+ MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
2156
+ aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
2157
+ OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
2158
+ A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
2159
+ CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
2160
+ JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
2161
+ vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
2162
+ D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
2163
+ Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
2164
+ RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
2165
+ HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
2166
+ nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
2167
+ 0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
2168
+ UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
2169
+ Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
2170
+ TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2171
+ AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
2172
+ BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
2173
+ 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
2174
+ UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
2175
+ 6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
2176
+ 9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
2177
+ HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
2178
+ wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
2179
+ XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
2180
+ IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
2181
+ hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
2182
+ so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
2183
+ -----END CERTIFICATE-----
tools/src/Google/Logger/Abstract.php ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Abstract logging class based on the PSR-3 standard.
22
+ *
23
+ * NOTE: We don't implement `Psr\Log\LoggerInterface` because we need to
24
+ * maintain PHP 5.2 support.
25
+ *
26
+ * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
27
+ */
28
+ abstract class Google_Logger_Abstract
29
+ {
30
+ /**
31
+ * Default log format
32
+ */
33
+ const DEFAULT_LOG_FORMAT = "[%datetime%] %level%: %message% %context%\n";
34
+ /**
35
+ * Default date format
36
+ *
37
+ * Example: 16/Nov/2014:03:26:16 -0500
38
+ */
39
+ const DEFAULT_DATE_FORMAT = 'd/M/Y:H:i:s O';
40
+
41
+ /**
42
+ * System is unusable
43
+ */
44
+ const EMERGENCY = 'emergency';
45
+ /**
46
+ * Action must be taken immediately
47
+ *
48
+ * Example: Entire website down, database unavailable, etc. This should
49
+ * trigger the SMS alerts and wake you up.
50
+ */
51
+ const ALERT = 'alert';
52
+ /**
53
+ * Critical conditions
54
+ *
55
+ * Example: Application component unavailable, unexpected exception.
56
+ */
57
+ const CRITICAL = 'critical';
58
+ /**
59
+ * Runtime errors that do not require immediate action but should typically
60
+ * be logged and monitored.
61
+ */
62
+ const ERROR = 'error';
63
+ /**
64
+ * Exceptional occurrences that are not errors.
65
+ *
66
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
67
+ * that are not necessarily wrong.
68
+ */
69
+ const WARNING = 'warning';
70
+ /**
71
+ * Normal but significant events.
72
+ */
73
+ const NOTICE = 'notice';
74
+ /**
75
+ * Interesting events.
76
+ *
77
+ * Example: User logs in, SQL logs.
78
+ */
79
+ const INFO = 'info';
80
+ /**
81
+ * Detailed debug information.
82
+ */
83
+ const DEBUG = 'debug';
84
+
85
+ /**
86
+ * @var array $levels Logging levels
87
+ */
88
+ protected static $levels = array(
89
+ self::EMERGENCY => 600,
90
+ self::ALERT => 550,
91
+ self::CRITICAL => 500,
92
+ self::ERROR => 400,
93
+ self::WARNING => 300,
94
+ self::NOTICE => 250,
95
+ self::INFO => 200,
96
+ self::DEBUG => 100,
97
+ );
98
+
99
+ /**
100
+ * @var integer $level The minimum logging level
101
+ */
102
+ protected $level = self::DEBUG;
103
+
104
+ /**
105
+ * @var string $logFormat The current log format
106
+ */
107
+ protected $logFormat = self::DEFAULT_LOG_FORMAT;
108
+ /**
109
+ * @var string $dateFormat The current date format
110
+ */
111
+ protected $dateFormat = self::DEFAULT_DATE_FORMAT;
112
+
113
+ /**
114
+ * @var boolean $allowNewLines If newlines are allowed
115
+ */
116
+ protected $allowNewLines = false;
117
+
118
+ /**
119
+ * @param Google_Client $client The current Google client
120
+ */
121
+ public function __construct(Google_Client $client)
122
+ {
123
+ $this->setLevel(
124
+ $client->getClassConfig('Google_Logger_Abstract', 'level')
125
+ );
126
+
127
+ $format = $client->getClassConfig('Google_Logger_Abstract', 'log_format');
128
+ $this->logFormat = $format ? $format : self::DEFAULT_LOG_FORMAT;
129
+
130
+ $format = $client->getClassConfig('Google_Logger_Abstract', 'date_format');
131
+ $this->dateFormat = $format ? $format : self::DEFAULT_DATE_FORMAT;
132
+
133
+ $this->allowNewLines = (bool) $client->getClassConfig(
134
+ 'Google_Logger_Abstract',
135
+ 'allow_newlines'
136
+ );
137
+ }
138
+
139
+ /**
140
+ * Sets the minimum logging level that this logger handles.
141
+ *
142
+ * @param integer $level
143
+ */
144
+ public function setLevel($level)
145
+ {
146
+ $this->level = $this->normalizeLevel($level);
147
+ }
148
+
149
+ /**
150
+ * Checks if the logger should handle messages at the provided level.
151
+ *
152
+ * @param integer $level
153
+ * @return boolean
154
+ */
155
+ public function shouldHandle($level)
156
+ {
157
+ return $this->normalizeLevel($level) >= $this->level;
158
+ }
159
+
160
+ /**
161
+ * System is unusable.
162
+ *
163
+ * @param string $message The log message
164
+ * @param array $context The log context
165
+ */
166
+ public function emergency($message, array $context = array())
167
+ {
168
+ $this->log(self::EMERGENCY, $message, $context);
169
+ }
170
+
171
+ /**
172
+ * Action must be taken immediately.
173
+ *
174
+ * Example: Entire website down, database unavailable, etc. This should
175
+ * trigger the SMS alerts and wake you up.
176
+ *
177
+ * @param string $message The log message
178
+ * @param array $context The log context
179
+ */
180
+ public function alert($message, array $context = array())
181
+ {
182
+ $this->log(self::ALERT, $message, $context);
183
+ }
184
+
185
+ /**
186
+ * Critical conditions.
187
+ *
188
+ * Example: Application component unavailable, unexpected exception.
189
+ *
190
+ * @param string $message The log message
191
+ * @param array $context The log context
192
+ */
193
+ public function critical($message, array $context = array())
194
+ {
195
+ $this->log(self::CRITICAL, $message, $context);
196
+ }
197
+
198
+ /**
199
+ * Runtime errors that do not require immediate action but should typically
200
+ * be logged and monitored.
201
+ *
202
+ * @param string $message The log message
203
+ * @param array $context The log context
204
+ */
205
+ public function error($message, array $context = array())
206
+ {
207
+ $this->log(self::ERROR, $message, $context);
208
+ }
209
+
210
+ /**
211
+ * Exceptional occurrences that are not errors.
212
+ *
213
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
214
+ * that are not necessarily wrong.
215
+ *
216
+ * @param string $message The log message
217
+ * @param array $context The log context
218
+ */
219
+ public function warning($message, array $context = array())
220
+ {
221
+ $this->log(self::WARNING, $message, $context);
222
+ }
223
+
224
+ /**
225
+ * Normal but significant events.
226
+ *
227
+ * @param string $message The log message
228
+ * @param array $context The log context
229
+ */
230
+ public function notice($message, array $context = array())
231
+ {
232
+ $this->log(self::NOTICE, $message, $context);
233
+ }
234
+
235
+ /**
236
+ * Interesting events.
237
+ *
238
+ * Example: User logs in, SQL logs.
239
+ *
240
+ * @param string $message The log message
241
+ * @param array $context The log context
242
+ */
243
+ public function info($message, array $context = array())
244
+ {
245
+ $this->log(self::INFO, $message, $context);
246
+ }
247
+
248
+ /**
249
+ * Detailed debug information.
250
+ *
251
+ * @param string $message The log message
252
+ * @param array $context The log context
253
+ */
254
+ public function debug($message, array $context = array())
255
+ {
256
+ $this->log(self::DEBUG, $message, $context);
257
+ }
258
+
259
+ /**
260
+ * Logs with an arbitrary level.
261
+ *
262
+ * @param mixed $level The log level
263
+ * @param string $message The log message
264
+ * @param array $context The log context
265
+ */
266
+ public function log($level, $message, array $context = array())
267
+ {
268
+ if (!$this->shouldHandle($level)) {
269
+ return false;
270
+ }
271
+
272
+ $levelName = is_int($level) ? array_search($level, self::$levels) : $level;
273
+ $message = $this->interpolate(
274
+ array(
275
+ 'message' => $message,
276
+ 'context' => $context,
277
+ 'level' => strtoupper($levelName),
278
+ 'datetime' => new DateTime(),
279
+ )
280
+ );
281
+
282
+ $this->write($message);
283
+ }
284
+
285
+ /**
286
+ * Interpolates log variables into the defined log format.
287
+ *
288
+ * @param array $variables The log variables.
289
+ * @return string
290
+ */
291
+ protected function interpolate(array $variables = array())
292
+ {
293
+ $template = $this->logFormat;
294
+
295
+ if (!$variables['context']) {
296
+ $template = str_replace('%context%', '', $template);
297
+ unset($variables['context']);
298
+ } else {
299
+ $this->reverseJsonInContext($variables['context']);
300
+ }
301
+
302
+ foreach ($variables as $key => $value) {
303
+ if (strpos($template, '%'. $key .'%') !== false) {
304
+ $template = str_replace(
305
+ '%' . $key . '%',
306
+ $this->export($value),
307
+ $template
308
+ );
309
+ }
310
+ }
311
+
312
+ return $template;
313
+ }
314
+
315
+ /**
316
+ * Reverses JSON encoded PHP arrays and objects so that they log better.
317
+ *
318
+ * @param array $context The log context
319
+ */
320
+ protected function reverseJsonInContext(array &$context)
321
+ {
322
+ if (!$context) {
323
+ return;
324
+ }
325
+
326
+ foreach ($context as $key => $val) {
327
+ if (!$val || !is_string($val) || !($val[0] == '{' || $val[0] == '[')) {
328
+ continue;
329
+ }
330
+
331
+ $json = @json_decode($val);
332
+ if (is_object($json) || is_array($json)) {
333
+ $context[$key] = $json;
334
+ }
335
+ }
336
+ }
337
+
338
+ /**
339
+ * Exports a PHP value for logging to a string.
340
+ *
341
+ * @param mixed $value The value to
342
+ */
343
+ protected function export($value)
344
+ {
345
+ if (is_string($value)) {
346
+ if ($this->allowNewLines) {
347
+ return $value;
348
+ }
349
+
350
+ return preg_replace('/[\r\n]+/', ' ', $value);
351
+ }
352
+
353
+ if (is_resource($value)) {
354
+ return sprintf(
355
+ 'resource(%d) of type (%s)',
356
+ $value,
357
+ get_resource_type($value)
358
+ );
359
+ }
360
+
361
+ if ($value instanceof DateTime) {
362
+ return $value->format($this->dateFormat);
363
+ }
364
+
365
+ if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
366
+ $options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
367
+
368
+ if ($this->allowNewLines) {
369
+ $options |= JSON_PRETTY_PRINT;
370
+ }
371
+
372
+ return @json_encode($value, $options);
373
+ }
374
+
375
+ return str_replace('\\/', '/', @json_encode($value));
376
+ }
377
+
378
+ /**
379
+ * Converts a given log level to the integer form.
380
+ *
381
+ * @param mixed $level The logging level
382
+ * @return integer $level The normalized level
383
+ * @throws Google_Logger_Exception If $level is invalid
384
+ */
385
+ protected function normalizeLevel($level)
386
+ {
387
+ if (is_int($level) && array_search($level, self::$levels) !== false) {
388
+ return $level;
389
+ }
390
+
391
+ if (is_string($level) && isset(self::$levels[$level])) {
392
+ return self::$levels[$level];
393
+ }
394
+
395
+ throw new Google_Logger_Exception(
396
+ sprintf("Unknown LogLevel: '%s'", $level)
397
+ );
398
+ }
399
+
400
+ /**
401
+ * Writes a message to the current log implementation.
402
+ *
403
+ * @param string $message The message
404
+ */
405
+ abstract protected function write($message);
406
+ }
tools/src/Google/Logger/Exception.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ class Google_Logger_Exception extends Google_Exception
21
+ {
22
+ }
tools/src/Google/Logger/File.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * File logging class based on the PSR-3 standard.
22
+ *
23
+ * This logger writes to a PHP stream resource.
24
+ */
25
+ class Google_Logger_File extends Google_Logger_Abstract
26
+ {
27
+ /**
28
+ * @var string|resource $file Where logs are written
29
+ */
30
+ private $file;
31
+ /**
32
+ * @var integer $mode The mode to use if the log file needs to be created
33
+ */
34
+ private $mode = 0640;
35
+ /**
36
+ * @var boolean $lock If a lock should be attempted before writing to the log
37
+ */
38
+ private $lock = false;
39
+
40
+ /**
41
+ * @var integer $trappedErrorNumber Trapped error number
42
+ */
43
+ private $trappedErrorNumber;
44
+ /**
45
+ * @var string $trappedErrorString Trapped error string
46
+ */
47
+ private $trappedErrorString;
48
+
49
+ /**
50
+ * {@inheritdoc}
51
+ */
52
+ public function __construct(Google_Client $client)
53
+ {
54
+ parent::__construct($client);
55
+
56
+ $file = $client->getClassConfig('Google_Logger_File', 'file');
57
+ if (!is_string($file) && !is_resource($file)) {
58
+ throw new Google_Logger_Exception(
59
+ 'File logger requires a filename or a valid file pointer'
60
+ );
61
+ }
62
+
63
+ $mode = $client->getClassConfig('Google_Logger_File', 'mode');
64
+ if (!$mode) {
65
+ $this->mode = $mode;
66
+ }
67
+
68
+ $this->lock = (bool) $client->getClassConfig('Google_Logger_File', 'lock');
69
+ $this->file = $file;
70
+ }
71
+
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ protected function write($message)
76
+ {
77
+ if (is_string($this->file)) {
78
+ $this->open();
79
+ } elseif (!is_resource($this->file)) {
80
+ throw new Google_Logger_Exception('File pointer is no longer available');
81
+ }
82
+
83
+ if ($this->lock) {
84
+ flock($this->file, LOCK_EX);
85
+ }
86
+
87
+ fwrite($this->file, (string) $message);
88
+
89
+ if ($this->lock) {
90
+ flock($this->file, LOCK_UN);
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Opens the log for writing.
96
+ *
97
+ * @return resource
98
+ */
99
+ private function open()
100
+ {
101
+ // Used for trapping `fopen()` errors.
102
+ $this->trappedErrorNumber = null;
103
+ $this->trappedErrorString = null;
104
+
105
+ $old = set_error_handler(array($this, 'trapError'));
106
+
107
+ $needsChmod = !file_exists($this->file);
108
+ $fh = fopen($this->file, 'a');
109
+
110
+ restore_error_handler();
111
+
112
+ // Handles trapped `fopen()` errors.
113
+ if ($this->trappedErrorNumber) {
114
+ throw new Google_Logger_Exception(
115
+ sprintf(
116
+ "Logger Error: '%s'",
117
+ $this->trappedErrorString
118
+ ),
119
+ $this->trappedErrorNumber
120
+ );
121
+ }
122
+
123
+ if ($needsChmod) {
124
+ @chmod($this->file, $this->mode & ~umask());
125
+ }
126
+
127
+ return $this->file = $fh;
128
+ }
129
+
130
+ /**
131
+ * Closes the log stream resource.
132
+ */
133
+ private function close()
134
+ {
135
+ if (is_resource($this->file)) {
136
+ fclose($this->file);
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Traps `fopen()` errors.
142
+ *
143
+ * @param integer $errno The error number
144
+ * @param string $errstr The error string
145
+ */
146
+ private function trapError($errno, $errstr)
147
+ {
148
+ $this->trappedErrorNumber = $errno;
149
+ $this->trappedErrorString = $errstr;
150
+ }
151
+
152
+ public function __destruct()
153
+ {
154
+ $this->close();
155
+ }
156
+ }
tools/src/Google/Logger/Null.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Null logger based on the PSR-3 standard.
22
+ *
23
+ * This logger simply discards all messages.
24
+ */
25
+ class Google_Logger_Null extends Google_Logger_Abstract
26
+ {
27
+ /**
28
+ * {@inheritdoc}
29
+ */
30
+ public function shouldHandle($level)
31
+ {
32
+ return false;
33
+ }
34
+
35
+ /**
36
+ * {@inheritdoc}
37
+ */
38
+ protected function write($message, array $context = array())
39
+ {
40
+ }
41
+ }
tools/src/Google/Logger/Psr.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2014 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ require_once realpath(dirname(__FILE__) . '/../../../autoload.php');
19
+
20
+ /**
21
+ * Psr logging class based on the PSR-3 standard.
22
+ *
23
+ * This logger will delegate all logging to a PSR-3 compatible logger specified
24
+ * with the `Google_Logger_Psr::setLogger()` method.
25
+ */
26
+ class Google_Logger_Psr extends Google_Logger_Abstract
27
+ {
28
+ /**
29
+ * @param Psr\Log\LoggerInterface $logger The PSR-3 logger
30
+ */
31
+ private $logger;
32
+
33
+ /**
34
+ * @param Google_Client $client The current Google client
35
+ * @param Psr\Log\LoggerInterface $logger PSR-3 logger where logging will be delegated.
36
+ */
37
+ public function __construct(Google_Client $client, /*Psr\Log\LoggerInterface*/ $logger = null)
38
+ {
39
+ parent::__construct($client);
40
+
41
+ if ($logger) {
42
+ $this->setLogger($logger);
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Sets the PSR-3 logger where logging will be delegated.
48
+ *
49
+ * NOTE: The `$logger` should technically implement
50
+ * `Psr\Log\LoggerInterface`, but we don't explicitly require this so that
51
+ * we can be compatible with PHP 5.2.
52
+ *
53
+ * @param Psr\Log\LoggerInterface $logger The PSR-3 logger
54
+ */
55
+ public function setLogger(/*Psr\Log\LoggerInterface*/ $logger)
56
+ {
57
+ $this->logger = $logger;
58
+ }
59
+
60
+ /**
61
+ * {@inheritdoc}
62
+ */
63
+ public function shouldHandle($level)
64
+ {
65
+ return isset($this->logger) && parent::shouldHandle($level);
66
+ }
67
+
68
+ /**
69
+ * {@inheritdoc}
70
+ */
71
+ public function log($level, $message, array $context = array())
72
+ {
73
+ if (!$this->shouldHandle($level)) {
74
+ return false;
75
+ }
76
+
77
+ if ($context) {
78
+ $this->reverseJsonInContext($context);
79
+ }
80
+
81
+ $levelName = is_int($level) ? array_search($level, self::$levels) : $level;
82
+ $this->logger->log($levelName, $message, $context);
83
+ }
84
+
85
+ /**
86
+ * {@inheritdoc}
87
+ */
88
+ protected function write($message, array $context = array())
89
+ {
90
+ }
91
+ }
tools/src/Google/Model.php ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2011 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /**
19
+ * This class defines attributes, valid values, and usage which is generated
20
+ * from a given json schema.
21
+ * http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
22
+ *
23
+ * @author Chirag Shah <chirags@google.com>
24
+ *
25
+ */
26
+ class Google_Model implements ArrayAccess
27
+ {
28
+ protected $internal_gapi_mappings = array();
29
+ protected $modelData = array();
30
+ protected $processed = array();
31
+
32
+ /**
33
+ * Polymorphic - accepts a variable number of arguments dependent
34
+ * on the type of the model subclass.
35
+ */
36
+ final public function __construct()
37
+ {
38
+ if (func_num_args() == 1 && is_array(func_get_arg(0))) {
39
+ // Initialize the model with the array's contents.
40
+ $array = func_get_arg(0);
41
+ $this->mapTypes($array);
42
+ }
43
+ $this->gapiInit();
44
+ }
45
+
46
+ /**
47
+ * Getter that handles passthrough access to the data array, and lazy object creation.
48
+ * @param string $key Property name.
49
+ * @return mixed The value if any, or null.
50
+ */
51
+ public function __get($key)
52
+ {
53
+ $keyTypeName = $this->keyType($key);
54
+ $keyDataType = $this->dataType($key);
55
+ if (isset($this->$keyTypeName) && !isset($this->processed[$key])) {
56
+ if (isset($this->modelData[$key])) {
57
+ $val = $this->modelData[$key];
58
+ } else if (isset($this->$keyDataType) &&
59
+ ($this->$keyDataType == 'array' || $this->$keyDataType == 'map')) {
60
+ $val = array();
61
+ } else {
62
+ $val = null;
63
+ }
64
+
65
+ if ($this->isAssociativeArray($val)) {
66
+ if (isset($this->$keyDataType) && 'map' == $this->$keyDataType) {
67
+ foreach ($val as $arrayKey => $arrayItem) {
68
+ $this->modelData[$key][$arrayKey] =
69
+ $this->createObjectFromName($keyTypeName, $arrayItem);
70
+ }
71
+ } else {
72
+ $this->modelData[$key] = $this->createObjectFromName($keyTypeName, $val);
73
+ }
74
+ } else if (is_array($val)) {
75
+ $arrayObject = array();
76
+ foreach ($val as $arrayIndex => $arrayItem) {
77
+ $arrayObject[$arrayIndex] =
78
+ $this->createObjectFromName($keyTypeName, $arrayItem);
79
+ }
80
+ $this->modelData[$key] = $arrayObject;
81
+ }
82
+ $this->processed[$key] = true;
83
+ }
84
+
85
+ return isset($this->modelData[$key]) ? $this->modelData[$key] : null;
86
+ }
87
+
88
+ /**
89
+ * Initialize this object's properties from an array.
90
+ *
91
+ * @param array $array Used to seed this object's properties.
92
+ * @return void
93
+ */
94
+ protected function mapTypes($array)
95
+ {
96
+ // Hard initilise simple types, lazy load more complex ones.
97
+ foreach ($array as $key => $val) {
98
+ if ( !property_exists($this, $this->keyType($key)) &&
99
+ property_exists($this, $key)) {
100
+ $this->$key = $val;
101
+ unset($array[$key]);
102
+ } elseif (property_exists($this, $camelKey = Google_Utils::camelCase($key))) {
103
+ // This checks if property exists as camelCase, leaving it in array as snake_case
104
+ // in case of backwards compatibility issues.
105
+ $this->$camelKey = $val;
106
+ }
107
+ }
108
+ $this->modelData = $array;
109
+ }
110
+
111
+ /**
112
+ * Blank initialiser to be used in subclasses to do post-construction initialisation - this
113
+ * avoids the need for subclasses to have to implement the variadics handling in their
114
+ * constructors.
115
+ */
116
+ protected function gapiInit()
117
+ {
118
+ return;
119
+ }
120
+
121
+ /**
122
+ * Create a simplified object suitable for straightforward
123
+ * conversion to JSON. This is relatively expensive
124
+ * due to the usage of reflection, but shouldn't be called
125
+ * a whole lot, and is the most straightforward way to filter.
126
+ */
127
+ public function toSimpleObject()
128
+ {
129
+ $object = new stdClass();
130
+
131
+ // Process all other data.
132
+ foreach ($this->modelData as $key => $val) {
133
+ $result = $this->getSimpleValue($val);
134
+ if ($result !== null) {
135
+ $object->$key = $result;
136
+ }
137
+ }
138
+
139
+ // Process all public properties.
140
+ $reflect = new ReflectionObject($this);
141
+ $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
142
+ foreach ($props as $member) {
143
+ $name = $member->getName();
144
+ $result = $this->getSimpleValue($this->$name);
145
+ if ($result !== null) {
146
+ $name = $this->getMappedName($name);
147
+ $object->$name = $result;
148
+ }
149
+ }
150
+
151
+ return $object;
152
+ }
153
+
154
+ /**
155
+ * Handle different types of values, primarily
156
+ * other objects and map and array data types.
157
+ */
158
+ private function getSimpleValue($value)
159
+ {
160
+ if ($value instanceof Google_Model) {
161
+ return $value->toSimpleObject();
162
+ } else if (is_array($value)) {
163
+ $return = array();
164
+ foreach ($value as $key => $a_value) {
165
+ $a_value = $this->getSimpleValue($a_value);
166
+ if ($a_value !== null) {
167
+ $key = $this->getMappedName($key);
168
+ $return[$key] = $a_value;
169
+ }
170
+ }
171
+ return $return;
172
+ }
173
+ return $value;
174
+ }
175
+
176
+ /**
177
+ * If there is an internal name mapping, use that.
178
+ */
179
+ private function getMappedName($key)
180
+ {
181
+ if (isset($this->internal_gapi_mappings) &&
182
+ isset($this->internal_gapi_mappings[$key])) {
183
+ $key = $this->internal_gapi_mappings[$key];
184
+ }
185
+ return $key;
186
+ }
187
+
188
+ /**
189
+ * Returns true only if the array is associative.
190
+ * @param array $array
191
+ * @return bool True if the array is associative.
192
+ */
193
+ protected function isAssociativeArray($array)
194
+ {
195
+ if (!is_array($array)) {
196
+ return false;
197
+ }
198
+ $keys = array_keys($array);
199
+ foreach ($keys as $key) {
200
+ if (is_string($key)) {
201
+ return true;
202
+ }
203
+ }
204
+ return false;
205
+ }
206
+
207
+ /**
208
+ * Given a variable name, discover its type.
209
+ *
210
+ * @param $name
211
+ * @param $item
212
+ * @return object The object from the item.
213
+ */
214
+ private function createObjectFromName($name, $item)
215
+ {
216
+ $type = $this->$name;
217
+ return new $type($item);
218
+ }
219
+
220
+ /**
221
+ * Verify if $obj is an array.
222
+ * @throws Google_Exception Thrown if $obj isn't an array.
223
+ * @param array $obj Items that should be validated.
224
+ * @param string $method Method expecting an array as an argument.
225
+ */
226
+ public function assertIsArray($obj, $method)
227
+ {
228
+ if ($obj && !is_array($obj)) {
229
+ throw new Google_Exception(
230
+ "Incorrect parameter type passed to $method(). Expected an array."
231
+ );
232
+ }
233
+ }
234
+
235
+ public function offsetExists($offset)
236
+ {
237
+ return isset($this->$offset) || isset($this->modelData[$offset]);
238
+ }
239
+
240
+ public function offsetGet($offset)
241
+ {
242
+ return isset($this->$offset) ?
243
+ $this->$offset :
244
+ $this->__get($offset);
245
+ }
246
+
247
+ public function offsetSet($offset, $value)
248
+ {
249
+ if (property_exists($this, $offset)) {
250
+ $this->$offset = $value;
251
+ } else {
252
+ $this->modelData[$offset] = $value;
253
+ $this->processed[$offset] = true;
254
+ }
255
+ }
256
+
257
+ public function offsetUnset($offset)
258
+ {
259
+ unset($this->modelData[$offset]);
260
+ }
261
+
262
+ protected function keyType($key)
263
+ {
264
+ return $key . "Type";
265
+ }
266
+
267
+ protected function dataType($key)
268
+ {
269
+ return $key . "DataType";
270
+ }
271
+
272
+ public function __isset($key)
273
+ {
274
+ return isset($this->modelData[$key]);
275
+ }
276
+
277
+ public function __unset($key)
278
+ {
279
+ unset($this->modelData[$key]);
280
+ }
281
+ }
tools/src/Google/Service.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ class Google_Service
19
+ {
20
+ public $version;
21
+ public $servicePath;
22
+ public $availableScopes;
23
+ public $resource;
24
+ private $client;
25
+
26
+ public function __construct(Google_Client $client)
27
+ {
28
+ $this->client = $client;
29
+ }
30
+
31
+ /**
32
+ * Return the associated Google_Client class.
33
+ * @return Google_Client
34
+ */
35
+ public function getClient()
36
+ {
37
+ return $this->client;
38
+ }
39
+ }
tools/src/Google/Service/AdSense.php ADDED
@@ -0,0 +1,3585 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+
18
+ /**
19
+ * Service definition for AdSense (v1.4).
20
+ *
21
+ * <p>
22
+ * Gives AdSense publishers access to their inventory and the ability to
23
+ * generate reports</p>
24
+ *
25
+ * <p>
26
+ * For more information about this service, see the API
27
+ * <a href="https://developers.google.com/adsense/management/" target="_blank">Documentation</a>
28
+ * </p>
29
+ *
30
+ * @author Google, Inc.
31
+ */
32
+ class Google_Service_AdSense extends Google_Service
33
+ {
34
+ /** View and manage your AdSense data. */
35
+ const ADSENSE =
36
+ "https://www.googleapis.com/auth/adsense";
37
+ /** View your AdSense data. */
38
+ const ADSENSE_READONLY =
39
+ "https://www.googleapis.com/auth/adsense.readonly";
40
+
41
+ public $accounts;
42
+ public $accounts_adclients;
43
+ public $accounts_adunits;
44
+ public $accounts_adunits_customchannels;
45
+ public $accounts_alerts;
46
+ public $accounts_customchannels;
47
+ public $accounts_customchannels_adunits;
48
+ public $accounts_payments;
49
+ public $accounts_reports;
50
+ public $accounts_reports_saved;
51
+ public $accounts_savedadstyles;
52
+ public $accounts_urlchannels;
53
+ public $adclients;
54
+ public $adunits;
55
+ public $adunits_customchannels;
56
+ public $alerts;
57
+ public $customchannels;
58
+ public $customchannels_adunits;
59
+ public $metadata_dimensions;
60
+ public $metadata_metrics;
61
+ public $payments;
62
+ public $reports;
63
+ public $reports_saved;
64
+ public $savedadstyles;
65
+ public $urlchannels;
66
+
67
+
68
+ /**
69
+ * Constructs the internal representation of the AdSense service.
70
+ *
71
+ * @param Google_Client $client
72
+ */
73
+ public function __construct(Google_Client $client)
74
+ {
75
+ parent::__construct($client);
76
+ $this->servicePath = 'adsense/v1.4/';
77
+ $this->version = 'v1.4';
78
+ $this->serviceName = 'adsense';
79
+
80
+ $this->accounts = new Google_Service_AdSense_Accounts_Resource(
81
+ $this,
82
+ $this->serviceName,
83
+ 'accounts',
84
+ array(
85
+ 'methods' => array(
86
+ 'get' => array(
87
+ 'path' => 'accounts/{accountId}',
88
+ 'httpMethod' => 'GET',
89
+ 'parameters' => array(
90
+ 'accountId' => array(
91
+ 'location' => 'path',
92
+ 'type' => 'string',
93
+ 'required' => true,
94
+ ),
95
+ 'tree' => array(
96
+ 'location' => 'query',
97
+ 'type' => 'boolean',
98
+ ),
99
+ ),
100
+ ),'list' => array(
101
+ 'path' => 'accounts',
102
+ 'httpMethod' => 'GET',
103
+ 'parameters' => array(
104
+ 'pageToken' => array(
105
+ 'location' => 'query',
106
+ 'type' => 'string',
107
+ ),
108
+ 'maxResults' => array(
109
+ 'location' => 'query',
110
+ 'type' => 'integer',
111
+ ),
112
+ ),
113
+ ),
114
+ )
115
+ )
116
+ );
117
+ $this->accounts_adclients = new Google_Service_AdSense_AccountsAdclients_Resource(
118
+ $this,
119
+ $this->serviceName,
120
+ 'adclients',
121
+ array(
122
+ 'methods' => array(
123
+ 'list' => array(
124
+ 'path' => 'accounts/{accountId}/adclients',
125
+ 'httpMethod' => 'GET',
126
+ 'parameters' => array(
127
+ 'accountId' => array(
128
+ 'location' => 'path',
129
+ 'type' => 'string',
130
+ 'required' => true,
131
+ ),
132
+ 'pageToken' => array(
133
+ 'location' => 'query',
134
+ 'type' => 'string',
135
+ ),
136
+ 'maxResults' => array(
137
+ 'location' => 'query',
138
+ 'type' => 'integer',
139
+ ),
140
+ ),
141
+ ),
142
+ )
143
+ )
144
+ );
145
+ $this->accounts_adunits = new Google_Service_AdSense_AccountsAdunits_Resource(
146
+ $this,
147
+ $this->serviceName,
148
+ 'adunits',
149
+ array(
150
+ 'methods' => array(
151
+ 'get' => array(
152
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}',
153
+ 'httpMethod' => 'GET',
154
+ 'parameters' => array(
155
+ 'accountId' => array(
156
+ 'location' => 'path',
157
+ 'type' => 'string',
158
+ 'required' => true,
159
+ ),
160
+ 'adClientId' => array(
161
+ 'location' => 'path',
162
+ 'type' => 'string',
163
+ 'required' => true,
164
+ ),
165
+ 'adUnitId' => array(
166
+ 'location' => 'path',
167
+ 'type' => 'string',
168
+ 'required' => true,
169
+ ),
170
+ ),
171
+ ),'getAdCode' => array(
172
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode',
173
+ 'httpMethod' => 'GET',
174
+ 'parameters' => array(
175
+ 'accountId' => array(
176
+ 'location' => 'path',
177
+ 'type' => 'string',
178
+ 'required' => true,
179
+ ),
180
+ 'adClientId' => array(
181
+ 'location' => 'path',
182
+ 'type' => 'string',
183
+ 'required' => true,
184
+ ),
185
+ 'adUnitId' => array(
186
+ 'location' => 'path',
187
+ 'type' => 'string',
188
+ 'required' => true,
189
+ ),
190
+ ),
191
+ ),'list' => array(
192
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/adunits',
193
+ 'httpMethod' => 'GET',
194
+ 'parameters' => array(
195
+ 'accountId' => array(
196
+ 'location' => 'path',
197
+ 'type' => 'string',
198
+ 'required' => true,
199
+ ),
200
+ 'adClientId' => array(
201
+ 'location' => 'path',
202
+ 'type' => 'string',
203
+ 'required' => true,
204
+ ),
205
+ 'includeInactive' => array(
206
+ 'location' => 'query',
207
+ 'type' => 'boolean',
208
+ ),
209
+ 'pageToken' => array(
210
+ 'location' => 'query',
211
+ 'type' => 'string',
212
+ ),
213
+ 'maxResults' => array(
214
+ 'location' => 'query',
215
+ 'type' => 'integer',
216
+ ),
217
+ ),
218
+ ),
219
+ )
220
+ )
221
+ );
222
+ $this->accounts_adunits_customchannels = new Google_Service_AdSense_AccountsAdunitsCustomchannels_Resource(
223
+ $this,
224
+ $this->serviceName,
225
+ 'customchannels',
226
+ array(
227
+ 'methods' => array(
228
+ 'list' => array(
229
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels',
230
+ 'httpMethod' => 'GET',
231
+ 'parameters' => array(
232
+ 'accountId' => array(
233
+ 'location' => 'path',
234
+ 'type' => 'string',
235
+ 'required' => true,
236
+ ),
237
+ 'adClientId' => array(
238
+ 'location' => 'path',
239
+ 'type' => 'string',
240
+ 'required' => true,
241
+ ),
242
+ 'adUnitId' => array(
243
+ 'location' => 'path',
244
+ 'type' => 'string',
245
+ 'required' => true,
246
+ ),
247
+ 'pageToken' => array(
248
+ 'location' => 'query',
249
+ 'type' => 'string',
250
+ ),
251
+ 'maxResults' => array(
252
+ 'location' => 'query',
253
+ 'type' => 'integer',
254
+ ),
255
+ ),
256
+ ),
257
+ )
258
+ )
259
+ );
260
+ $this->accounts_alerts = new Google_Service_AdSense_AccountsAlerts_Resource(
261
+ $this,
262
+ $this->serviceName,
263
+ 'alerts',
264
+ array(
265
+ 'methods' => array(
266
+ 'delete' => array(
267
+ 'path' => 'accounts/{accountId}/alerts/{alertId}',
268
+ 'httpMethod' => 'DELETE',
269
+ 'parameters' => array(
270
+ 'accountId' => array(
271
+ 'location' => 'path',
272
+ 'type' => 'string',
273
+ 'required' => true,
274
+ ),
275
+ 'alertId' => array(
276
+ 'location' => 'path',
277
+ 'type' => 'string',
278
+ 'required' => true,
279
+ ),
280
+ ),
281
+ ),'list' => array(
282
+ 'path' => 'accounts/{accountId}/alerts',
283
+ 'httpMethod' => 'GET',
284
+ 'parameters' => array(
285
+ 'accountId' => array(
286
+ 'location' => 'path',
287
+ 'type' => 'string',
288
+ 'required' => true,
289
+ ),
290
+ 'locale' => array(
291
+ 'location' => 'query',
292
+ 'type' => 'string',
293
+ ),
294
+ ),
295
+ ),
296
+ )
297
+ )
298
+ );
299
+ $this->accounts_customchannels = new Google_Service_AdSense_AccountsCustomchannels_Resource(
300
+ $this,
301
+ $this->serviceName,
302
+ 'customchannels',
303
+ array(
304
+ 'methods' => array(
305
+ 'get' => array(
306
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}',
307
+ 'httpMethod' => 'GET',
308
+ 'parameters' => array(
309
+ 'accountId' => array(
310
+ 'location' => 'path',
311
+ 'type' => 'string',
312
+ 'required' => true,
313
+ ),
314
+ 'adClientId' => array(
315
+ 'location' => 'path',
316
+ 'type' => 'string',
317
+ 'required' => true,
318
+ ),
319
+ 'customChannelId' => array(
320
+ 'location' => 'path',
321
+ 'type' => 'string',
322
+ 'required' => true,
323
+ ),
324
+ ),
325
+ ),'list' => array(
326
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/customchannels',
327
+ 'httpMethod' => 'GET',
328
+ 'parameters' => array(
329
+ 'accountId' => array(
330
+ 'location' => 'path',
331
+ 'type' => 'string',
332
+ 'required' => true,
333
+ ),
334
+ 'adClientId' => array(
335
+ 'location' => 'path',
336
+ 'type' => 'string',
337
+ 'required' => true,
338
+ ),
339
+ 'pageToken' => array(
340
+ 'location' => 'query',
341
+ 'type' => 'string',
342
+ ),
343
+ 'maxResults' => array(
344
+ 'location' => 'query',
345
+ 'type' => 'integer',
346
+ ),
347
+ ),
348
+ ),
349
+ )
350
+ )
351
+ );
352
+ $this->accounts_customchannels_adunits = new Google_Service_AdSense_AccountsCustomchannelsAdunits_Resource(
353
+ $this,
354
+ $this->serviceName,
355
+ 'adunits',
356
+ array(
357
+ 'methods' => array(
358
+ 'list' => array(
359
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits',
360
+ 'httpMethod' => 'GET',
361
+ 'parameters' => array(
362
+ 'accountId' => array(
363
+ 'location' => 'path',
364
+ 'type' => 'string',
365
+ 'required' => true,
366
+ ),
367
+ 'adClientId' => array(
368
+ 'location' => 'path',
369
+ 'type' => 'string',
370
+ 'required' => true,
371
+ ),
372
+ 'customChannelId' => array(
373
+ 'location' => 'path',
374
+ 'type' => 'string',
375
+ 'required' => true,
376
+ ),
377
+ 'includeInactive' => array(
378
+ 'location' => 'query',
379
+ 'type' => 'boolean',
380
+ ),
381
+ 'maxResults' => array(
382
+ 'location' => 'query',
383
+ 'type' => 'integer',
384
+ ),
385
+ 'pageToken' => array(
386
+ 'location' => 'query',
387
+ 'type' => 'string',
388
+ ),
389
+ ),
390
+ ),
391
+ )
392
+ )
393
+ );
394
+ $this->accounts_payments = new Google_Service_AdSense_AccountsPayments_Resource(
395
+ $this,
396
+ $this->serviceName,
397
+ 'payments',
398
+ array(
399
+ 'methods' => array(
400
+ 'list' => array(
401
+ 'path' => 'accounts/{accountId}/payments',
402
+ 'httpMethod' => 'GET',
403
+ 'parameters' => array(
404
+ 'accountId' => array(
405
+ 'location' => 'path',
406
+ 'type' => 'string',
407
+ 'required' => true,
408
+ ),
409
+ ),
410
+ ),
411
+ )
412
+ )
413
+ );
414
+ $this->accounts_reports = new Google_Service_AdSense_AccountsReports_Resource(
415
+ $this,
416
+ $this->serviceName,
417
+ 'reports',
418
+ array(
419
+ 'methods' => array(
420
+ 'generate' => array(
421
+ 'path' => 'accounts/{accountId}/reports',
422
+ 'httpMethod' => 'GET',
423
+ 'parameters' => array(
424
+ 'accountId' => array(
425
+ 'location' => 'path',
426
+ 'type' => 'string',
427
+ 'required' => true,
428
+ ),
429
+ 'startDate' => array(
430
+ 'location' => 'query',
431
+ 'type' => 'string',
432
+ 'required' => true,
433
+ ),
434
+ 'endDate' => array(
435
+ 'location' => 'query',
436
+ 'type' => 'string',
437
+ 'required' => true,
438
+ ),
439
+ 'sort' => array(
440
+ 'location' => 'query',
441
+ 'type' => 'string',
442
+ 'repeated' => true,
443
+ ),
444
+ 'locale' => array(
445
+ 'location' => 'query',
446
+ 'type' => 'string',
447
+ ),
448
+ 'metric' => array(
449
+ 'location' => 'query',
450
+ 'type' => 'string',
451
+ 'repeated' => true,
452
+ ),
453
+ 'maxResults' => array(
454
+ 'location' => 'query',
455
+ 'type' => 'integer',
456
+ ),
457
+ 'filter' => array(
458
+ 'location' => 'query',
459
+ 'type' => 'string',
460
+ 'repeated' => true,
461
+ ),
462
+ 'currency' => array(
463
+ 'location' => 'query',
464
+ 'type' => 'string',
465
+ ),
466
+ 'startIndex' => array(
467
+ 'location' => 'query',
468
+ 'type' => 'integer',
469
+ ),
470
+ 'useTimezoneReporting' => array(
471
+ 'location' => 'query',
472
+ 'type' => 'boolean',
473
+ ),
474
+ 'dimension' => array(
475
+ 'location' => 'query',
476
+ 'type' => 'string',
477
+ 'repeated' => true,
478
+ ),
479
+ ),
480
+ ),
481
+ )
482
+ )
483
+ );
484
+ $this->accounts_reports_saved = new Google_Service_AdSense_AccountsReportsSaved_Resource(
485
+ $this,
486
+ $this->serviceName,
487
+ 'saved',
488
+ array(
489
+ 'methods' => array(
490
+ 'generate' => array(
491
+ 'path' => 'accounts/{accountId}/reports/{savedReportId}',
492
+ 'httpMethod' => 'GET',
493
+ 'parameters' => array(
494
+ 'accountId' => array(
495
+ 'location' => 'path',
496
+ 'type' => 'string',
497
+ 'required' => true,
498
+ ),
499
+ 'savedReportId' => array(
500
+ 'location' => 'path',
501
+ 'type' => 'string',
502
+ 'required' => true,
503
+ ),
504
+ 'locale' => array(
505
+ 'location' => 'query',
506
+ 'type' => 'string',
507
+ ),
508
+ 'startIndex' => array(
509
+ 'location' => 'query',
510
+ 'type' => 'integer',
511
+ ),
512
+ 'maxResults' => array(
513
+ 'location' => 'query',
514
+ 'type' => 'integer',
515
+ ),
516
+ ),
517
+ ),'list' => array(
518
+ 'path' => 'accounts/{accountId}/reports/saved',
519
+ 'httpMethod' => 'GET',
520
+ 'parameters' => array(
521
+ 'accountId' => array(
522
+ 'location' => 'path',
523
+ 'type' => 'string',
524
+ 'required' => true,
525
+ ),
526
+ 'pageToken' => array(
527
+ 'location' => 'query',
528
+ 'type' => 'string',
529
+ ),
530
+ 'maxResults' => array(
531
+ 'location' => 'query',
532
+ 'type' => 'integer',
533
+ ),
534
+ ),
535
+ ),
536
+ )
537
+ )
538
+ );
539
+ $this->accounts_savedadstyles = new Google_Service_AdSense_AccountsSavedadstyles_Resource(
540
+ $this,
541
+ $this->serviceName,
542
+ 'savedadstyles',
543
+ array(
544
+ 'methods' => array(
545
+ 'get' => array(
546
+ 'path' => 'accounts/{accountId}/savedadstyles/{savedAdStyleId}',
547
+ 'httpMethod' => 'GET',
548
+ 'parameters' => array(
549
+ 'accountId' => array(
550
+ 'location' => 'path',
551
+ 'type' => 'string',
552
+ 'required' => true,
553
+ ),
554
+ 'savedAdStyleId' => array(
555
+ 'location' => 'path',
556
+ 'type' => 'string',
557
+ 'required' => true,
558
+ ),
559
+ ),
560
+ ),'list' => array(
561
+ 'path' => 'accounts/{accountId}/savedadstyles',
562
+ 'httpMethod' => 'GET',
563
+ 'parameters' => array(
564
+ 'accountId' => array(
565
+ 'location' => 'path',
566
+ 'type' => 'string',
567
+ 'required' => true,
568
+ ),
569
+ 'pageToken' => array(
570
+ 'location' => 'query',
571
+ 'type' => 'string',
572
+ ),
573
+ 'maxResults' => array(
574
+ 'location' => 'query',
575
+ 'type' => 'integer',
576
+ ),
577
+ ),
578
+ ),
579
+ )
580
+ )
581
+ );
582
+ $this->accounts_urlchannels = new Google_Service_AdSense_AccountsUrlchannels_Resource(
583
+ $this,
584
+ $this->serviceName,
585
+ 'urlchannels',
586
+ array(
587
+ 'methods' => array(
588
+ 'list' => array(
589
+ 'path' => 'accounts/{accountId}/adclients/{adClientId}/urlchannels',
590
+ 'httpMethod' => 'GET',
591
+ 'parameters' => array(
592
+ 'accountId' => array(
593
+ 'location' => 'path',
594
+ 'type' => 'string',
595
+ 'required' => true,
596
+ ),
597
+ 'adClientId' => array(
598
+ 'location' => 'path',
599
+ 'type' => 'string',
600
+ 'required' => true,
601
+ ),
602
+ 'pageToken' => array(
603
+ 'location' => 'query',
604
+ 'type' => 'string',
605
+ ),
606
+ 'maxResults' => array(
607
+ 'location' => 'query',
608
+ 'type' => 'integer',
609
+ ),
610
+ ),
611
+ ),
612
+ )
613
+ )
614
+ );
615
+ $this->adclients = new Google_Service_AdSense_Adclients_Resource(
616
+ $this,
617
+ $this->serviceName,
618
+ 'adclients',
619
+ array(
620
+ 'methods' => array(
621
+ 'list' => array(
622
+ 'path' => 'adclients',
623
+ 'httpMethod' => 'GET',
624
+ 'parameters' => array(
625
+ 'pageToken' => array(
626
+ 'location' => 'query',
627
+ 'type' => 'string',
628
+ ),
629
+ 'maxResults' => array(
630
+ 'location' => 'query',
631
+ 'type' => 'integer',
632
+ ),
633
+ ),
634
+ ),
635
+ )
636
+ )
637
+ );
638
+ $this->adunits = new Google_Service_AdSense_Adunits_Resource(
639
+ $this,
640
+ $this->serviceName,
641
+ 'adunits',
642
+ array(
643
+ 'methods' => array(
644
+ 'get' => array(
645
+ 'path' => 'adclients/{adClientId}/adunits/{adUnitId}',
646
+ 'httpMethod' => 'GET',
647
+ 'parameters' => array(
648
+ 'adClientId' => array(
649
+ 'location' => 'path',
650
+ 'type' => 'string',
651
+ 'required' => true,
652
+ ),
653
+ 'adUnitId' => array(
654
+ 'location' => 'path',
655
+ 'type' => 'string',
656
+ 'required' => true,
657
+ ),
658
+ ),
659
+ ),'getAdCode' => array(
660
+ 'path' => 'adclients/{adClientId}/adunits/{adUnitId}/adcode',
661
+ 'httpMethod' => 'GET',
662
+ 'parameters' => array(
663
+ 'adClientId' => array(
664
+ 'location' => 'path',
665
+ 'type' => 'string',
666
+ 'required' => true,
667
+ ),
668
+ 'adUnitId' => array(
669
+ 'location' => 'path',
670
+ 'type' => 'string',
671
+ 'required' => true,
672
+ ),
673
+ ),
674
+ ),'list' => array(
675
+ 'path' => 'adclients/{adClientId}/adunits',
676
+ 'httpMethod' => 'GET',
677
+ 'parameters' => array(
678
+ 'adClientId' => array(
679
+ 'location' => 'path',
680
+ 'type' => 'string',
681
+ 'required' => true,
682
+ ),
683
+ 'includeInactive' => array(
684
+ 'location' => 'query',
685
+ 'type' => 'boolean',
686
+ ),
687
+ 'pageToken' => array(
688
+ 'location' => 'query',
689
+ 'type' => 'string',
690
+ ),
691
+ 'maxResults' => array(
692
+ 'location' => 'query',
693
+ 'type' => 'integer',
694
+ ),
695
+ ),
696
+ ),
697
+ )
698
+ )
699
+ );
700
+ $this->adunits_customchannels = new Google_Service_AdSense_AdunitsCustomchannels_Resource(
701
+ $this,
702
+ $this->serviceName,
703
+ 'customchannels',
704
+ array(
705
+ 'methods' => array(
706
+ 'list' => array(
707
+ 'path' => 'adclients/{adClientId}/adunits/{adUnitId}/customchannels',
708
+ 'httpMethod' => 'GET',
709
+ 'parameters' => array(
710
+ 'adClientId' => array(
711
+ 'location' => 'path',
712
+ 'type' => 'string',
713
+ 'required' => true,
714
+ ),
715
+ 'adUnitId' => array(
716
+ 'location' => 'path',
717
+ 'type' => 'string',
718
+ 'required' => true,
719
+ ),
720
+ 'pageToken' => array(
721
+ 'location' => 'query',
722
+ 'type' => 'string',
723
+ ),
724
+ 'maxResults' => array(
725
+ 'location' => 'query',
726
+ 'type' => 'integer',
727
+ ),
728
+ ),
729
+ ),
730
+ )
731
+ )
732
+ );
733
+ $this->alerts = new Google_Service_AdSense_Alerts_Resource(
734
+ $this,
735
+ $this->serviceName,
736
+ 'alerts',
737
+ array(
738
+ 'methods' => array(
739
+ 'delete' => array(
740
+ 'path' => 'alerts/{alertId}',
741
+ 'httpMethod' => 'DELETE',
742
+ 'parameters' => array(
743
+ 'alertId' => array(
744
+ 'location' => 'path',
745
+ 'type' => 'string',
746
+ 'required' => true,
747
+ ),
748
+ ),
749
+ ),'list' => array(
750
+ 'path' => 'alerts',
751
+ 'httpMethod' => 'GET',
752
+ 'parameters' => array(
753
+ 'locale' => array(
754
+ 'location' => 'query',
755
+ 'type' => 'string',
756
+ ),
757
+ ),
758
+ ),
759
+ )
760
+ )
761
+ );
762
+ $this->customchannels = new Google_Service_AdSense_Customchannels_Resource(
763
+ $this,
764
+ $this->serviceName,
765
+ 'customchannels',
766
+ array(
767
+ 'methods' => array(
768
+ 'get' => array(
769
+ 'path' => 'adclients/{adClientId}/customchannels/{customChannelId}',
770
+ 'httpMethod' => 'GET',
771
+ 'parameters' => array(
772
+ 'adClientId' => array(
773
+ 'location' => 'path',
774
+ 'type' => 'string',
775
+ 'required' => true,
776
+ ),
777
+ 'customChannelId' => array(
778
+ 'location' => 'path',
779
+ 'type' => 'string',
780
+ 'required' => true,
781
+ ),
782
+ ),
783
+ ),'list' => array(
784
+ 'path' => 'adclients/{adClientId}/customchannels',
785
+ 'httpMethod' => 'GET',
786
+ 'parameters' => array(
787
+ 'adClientId' => array(
788
+ 'location' => 'path',
789
+ 'type' => 'string',
790
+ 'required' => true,
791
+ ),
792
+ 'pageToken' => array(
793
+ 'location' => 'query',
794
+ 'type' => 'string',
795
+ ),
796
+ 'maxResults' => array(
797
+ 'location' => 'query',
798
+ 'type' => 'integer',
799
+ ),
800
+ ),
801
+ ),
802
+ )
803
+ )
804
+ );
805
+ $this->customchannels_adunits = new Google_Service_AdSense_CustomchannelsAdunits_Resource(
806
+ $this,
807
+ $this->serviceName,
808
+ 'adunits',
809
+ array(
810
+ 'methods' => array(
811
+ 'list' => array(
812
+ 'path' => 'adclients/{adClientId}/customchannels/{customChannelId}/adunits',
813
+ 'httpMethod' => 'GET',
814
+ 'parameters' => array(
815
+ 'adClientId' => array(
816
+ 'location' => 'path',
817
+ 'type' => 'string',
818
+ 'required' => true,
819
+ ),
820
+ 'customChannelId' => array(
821
+ 'location' => 'path',
822
+ 'type' => 'string',
823
+ 'required' => true,
824
+ ),
825
+ 'includeInactive' => array(
826
+ 'location' => 'query',
827
+ 'type' => 'boolean',
828
+ ),
829
+ 'pageToken' => array(
830
+ 'location' => 'query',
831
+ 'type' => 'string',
832
+ ),
833
+ 'maxResults' => array(
834
+ 'location' => 'query',
835
+ 'type' => 'integer',
836
+ ),
837
+ ),
838
+ ),
839
+ )
840
+ )
841
+ );
842
+ $this->metadata_dimensions = new Google_Service_AdSense_MetadataDimensions_Resource(
843
+ $this,
844
+ $this->serviceName,
845
+ 'dimensions',
846
+ array(
847
+ 'methods' => array(
848
+ 'list' => array(
849
+ 'path' => 'metadata/dimensions',
850
+ 'httpMethod' => 'GET',
851
+ 'parameters' => array(),
852
+ ),
853
+ )
854
+ )
855
+ );
856
+ $this->metadata_metrics = new Google_Service_AdSense_MetadataMetrics_Resource(
857
+ $this,
858
+ $this->serviceName,
859
+ 'metrics',
860
+ array(
861
+ 'methods' => array(
862
+ 'list' => array(
863
+ 'path' => 'metadata/metrics',
864
+ 'httpMethod' => 'GET',
865
+ 'parameters' => array(),
866
+ ),
867
+ )
868
+ )
869
+ );
870
+ $this->payments = new Google_Service_AdSense_Payments_Resource(
871
+ $this,
872
+ $this->serviceName,
873
+ 'payments',
874
+ array(
875
+ 'methods' => array(
876
+ 'list' => array(
877
+ 'path' => 'payments',
878
+ 'httpMethod' => 'GET',
879
+ 'parameters' => array(),
880
+ ),
881
+ )
882
+ )
883
+ );
884
+ $this->reports = new Google_Service_AdSense_Reports_Resource(
885
+ $this,
886
+ $this->serviceName,
887
+ 'reports',
888
+ array(
889
+ 'methods' => array(
890
+ 'generate' => array(
891
+ 'path' => 'reports',
892
+ 'httpMethod' => 'GET',
893
+ 'parameters' => array(
894
+ 'startDate' => array(
895
+ 'location' => 'query',
896
+ 'type' => 'string',
897
+ 'required' => true,
898
+ ),
899
+ 'endDate' => array(
900
+ 'location' => 'query',
901
+ 'type' => 'string',
902
+ 'required' => true,
903
+ ),
904
+ 'sort' => array(
905
+ 'location' => 'query',
906
+ 'type' => 'string',
907
+ 'repeated' => true,
908
+ ),
909
+ 'locale' => array(
910
+ 'location' => 'query',
911
+ 'type' => 'string',
912
+ ),
913
+ 'metric' => array(
914
+ 'location' => 'query',
915
+ 'type' => 'string',
916
+ 'repeated' => true,
917
+ ),
918
+ 'maxResults' => array(
919
+ 'location' => 'query',
920
+ 'type' => 'integer',
921
+ ),
922
+ 'filter' => array(
923
+ 'location' => 'query',
924
+ 'type' => 'string',
925
+ 'repeated' => true,
926
+ ),
927
+ 'currency' => array(
928
+ 'location' => 'query',
929
+ 'type' => 'string',
930
+ ),
931
+ 'startIndex' => array(
932
+ 'location' => 'query',
933
+ 'type' => 'integer',
934
+ ),
935
+ 'useTimezoneReporting' => array(
936
+ 'location' => 'query',
937
+ 'type' => 'boolean',
938
+ ),
939
+ 'dimension' => array(
940
+ 'location' => 'query',
941
+ 'type' => 'string',
942
+ 'repeated' => true,
943
+ ),
944
+ 'accountId' => array(
945
+ 'location' => 'query',
946
+ 'type' => 'string',
947
+ 'repeated' => true,
948
+ ),
949
+ ),
950
+ ),
951
+ )
952
+ )
953
+ );
954
+ $this->reports_saved = new Google_Service_AdSense_ReportsSaved_Resource(
955
+ $this,
956
+ $this->serviceName,
957
+ 'saved',
958
+ array(
959
+ 'methods' => array(
960
+ 'generate' => array(
961
+ 'path' => 'reports/{savedReportId}',
962
+ 'httpMethod' => 'GET',
963
+ 'parameters' => array(
964
+ 'savedReportId' => array(
965
+ 'location' => 'path',
966
+ 'type' => 'string',
967
+ 'required' => true,
968
+ ),
969
+ 'locale' => array(
970
+ 'location' => 'query',
971
+ 'type' => 'string',
972
+ ),
973
+ 'startIndex' => array(
974
+ 'location' => 'query',
975
+ 'type' => 'integer',
976
+ ),
977
+ 'maxResults' => array(
978
+ 'location' => 'query',
979
+ 'type' => 'integer',
980
+ ),
981
+ ),
982
+ ),'list' => array(
983
+ 'path' => 'reports/saved',
984
+ 'httpMethod' => 'GET',
985
+ 'parameters' => array(
986
+ 'pageToken' => array(
987
+ 'location' => 'query',
988
+ 'type' => 'string',
989
+ ),
990
+ 'maxResults' => array(
991
+ 'location' => 'query',
992
+ 'type' => 'integer',
993
+ ),
994
+ ),
995
+ ),
996
+ )
997
+ )
998
+ );
999
+ $this->savedadstyles = new Google_Service_AdSense_Savedadstyles_Resource(
1000
+ $this,
1001
+ $this->serviceName,
1002
+ 'savedadstyles',
1003
+ array(
1004
+ 'methods' => array(
1005
+ 'get' => array(
1006
+ 'path' => 'savedadstyles/{savedAdStyleId}',
1007
+ 'httpMethod' => 'GET',
1008
+ 'parameters' => array(
1009
+ 'savedAdStyleId' => array(
1010
+ 'location' => 'path',
1011
+ 'type' => 'string',
1012
+ 'required' => true,
1013
+ ),
1014
+ ),
1015
+ ),'list' => array(
1016
+ 'path' => 'savedadstyles',
1017
+ 'httpMethod' => 'GET',
1018
+ 'parameters' => array(
1019
+ 'pageToken' => array(
1020
+ 'location' => 'query',
1021
+ 'type' => 'string',
1022
+ ),
1023
+ 'maxResults' => array(
1024
+ 'location' => 'query',
1025
+ 'type' => 'integer',
1026
+ ),
1027
+ ),
1028
+ ),
1029
+ )
1030
+ )
1031
+ );
1032
+ $this->urlchannels = new Google_Service_AdSense_Urlchannels_Resource(
1033
+ $this,
1034
+ $this->serviceName,
1035
+ 'urlchannels',
1036
+ array(
1037
+ 'methods' => array(
1038
+ 'list' => array(
1039
+ 'path' => 'adclients/{adClientId}/urlchannels',
1040
+ 'httpMethod' => 'GET',
1041
+ 'parameters' => array(
1042
+ 'adClientId' => array(
1043
+ 'location' => 'path',
1044
+ 'type' => 'string',
1045
+ 'required' => true,
1046
+ ),
1047
+ 'pageToken' => array(
1048
+ 'location' => 'query',
1049
+ 'type' => 'string',
1050
+ ),
1051
+ 'maxResults' => array(
1052
+ 'location' => 'query',
1053
+ 'type' => 'integer',
1054
+ ),
1055
+ ),
1056
+ ),
1057
+ )
1058
+ )
1059
+ );
1060
+ }
1061
+ }
1062
+
1063
+
1064
+ /**
1065
+ * The "accounts" collection of methods.
1066
+ * Typical usage is:
1067
+ * <code>
1068
+ * $adsenseService = new Google_Service_AdSense(...);
1069
+ * $accounts = $adsenseService->accounts;
1070
+ * </code>
1071
+ */
1072
+ class Google_Service_AdSense_Accounts_Resource extends Google_Service_Resource
1073
+ {
1074
+
1075
+ /**
1076
+ * Get information about the selected AdSense account. (accounts.get)
1077
+ *
1078
+ * @param string $accountId Account to get information about.
1079
+ * @param array $optParams Optional parameters.
1080
+ *
1081
+ * @opt_param bool tree Whether the tree of sub accounts should be returned.
1082
+ * @return Google_Service_AdSense_Account
1083
+ */
1084
+ public function get($accountId, $optParams = array())
1085
+ {
1086
+ $params = array('accountId' => $accountId);
1087
+ $params = array_merge($params, $optParams);
1088
+ return $this->call('get', array($params), "Google_Service_AdSense_Account");
1089
+ }
1090
+
1091
+ /**
1092
+ * List all accounts available to this AdSense account. (accounts.listAccounts)
1093
+ *
1094
+ * @param array $optParams Optional parameters.
1095
+ *
1096
+ * @opt_param string pageToken A continuation token, used to page through
1097
+ * accounts. To retrieve the next page, set this parameter to the value of
1098
+ * "nextPageToken" from the previous response.
1099
+ * @opt_param int maxResults The maximum number of accounts to include in the
1100
+ * response, used for paging.
1101
+ * @return Google_Service_AdSense_Accounts
1102
+ */
1103
+ public function listAccounts($optParams = array())
1104
+ {
1105
+ $params = array();
1106
+ $params = array_merge($params, $optParams);
1107
+ return $this->call('list', array($params), "Google_Service_AdSense_Accounts");
1108
+ }
1109
+ }
1110
+
1111
+ /**
1112
+ * The "adclients" collection of methods.
1113
+ * Typical usage is:
1114
+ * <code>
1115
+ * $adsenseService = new Google_Service_AdSense(...);
1116
+ * $adclients = $adsenseService->adclients;
1117
+ * </code>
1118
+ */
1119
+ class Google_Service_AdSense_AccountsAdclients_Resource extends Google_Service_Resource
1120
+ {
1121
+
1122
+ /**
1123
+ * List all ad clients in the specified account.
1124
+ * (adclients.listAccountsAdclients)
1125
+ *
1126
+ * @param string $accountId Account for which to list ad clients.
1127
+ * @param array $optParams Optional parameters.
1128
+ *
1129
+ * @opt_param string pageToken A continuation token, used to page through ad
1130
+ * clients. To retrieve the next page, set this parameter to the value of
1131
+ * "nextPageToken" from the previous response.
1132
+ * @opt_param int maxResults The maximum number of ad clients to include in the
1133
+ * response, used for paging.
1134
+ * @return Google_Service_AdSense_AdClients
1135
+ */
1136
+ public function listAccountsAdclients($accountId, $optParams = array())
1137
+ {
1138
+ $params = array('accountId' => $accountId);
1139
+ $params = array_merge($params, $optParams);
1140
+ return $this->call('list', array($params), "Google_Service_AdSense_AdClients");
1141
+ }
1142
+ }
1143
+ /**
1144
+ * The "adunits" collection of methods.
1145
+ * Typical usage is:
1146
+ * <code>
1147
+ * $adsenseService = new Google_Service_AdSense(...);
1148
+ * $adunits = $adsenseService->adunits;
1149
+ * </code>
1150
+ */
1151
+ class Google_Service_AdSense_AccountsAdunits_Resource extends Google_Service_Resource
1152
+ {
1153
+
1154
+ /**
1155
+ * Gets the specified ad unit in the specified ad client for the specified
1156
+ * account. (adunits.get)
1157
+ *
1158
+ * @param string $accountId Account to which the ad client belongs.
1159
+ * @param string $adClientId Ad client for which to get the ad unit.
1160
+ * @param string $adUnitId Ad unit to retrieve.
1161
+ * @param array $optParams Optional parameters.
1162
+ * @return Google_Service_AdSense_AdUnit
1163
+ */
1164
+ public function get($accountId, $adClientId, $adUnitId, $optParams = array())
1165
+ {
1166
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1167
+ $params = array_merge($params, $optParams);
1168
+ return $this->call('get', array($params), "Google_Service_AdSense_AdUnit");
1169
+ }
1170
+
1171
+ /**
1172
+ * Get ad code for the specified ad unit. (adunits.getAdCode)
1173
+ *
1174
+ * @param string $accountId Account which contains the ad client.
1175
+ * @param string $adClientId Ad client with contains the ad unit.
1176
+ * @param string $adUnitId Ad unit to get the code for.
1177
+ * @param array $optParams Optional parameters.
1178
+ * @return Google_Service_AdSense_AdCode
1179
+ */
1180
+ public function getAdCode($accountId, $adClientId, $adUnitId, $optParams = array())
1181
+ {
1182
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1183
+ $params = array_merge($params, $optParams);
1184
+ return $this->call('getAdCode', array($params), "Google_Service_AdSense_AdCode");
1185
+ }
1186
+
1187
+ /**
1188
+ * List all ad units in the specified ad client for the specified account.
1189
+ * (adunits.listAccountsAdunits)
1190
+ *
1191
+ * @param string $accountId Account to which the ad client belongs.
1192
+ * @param string $adClientId Ad client for which to list ad units.
1193
+ * @param array $optParams Optional parameters.
1194
+ *
1195
+ * @opt_param bool includeInactive Whether to include inactive ad units.
1196
+ * Default: true.
1197
+ * @opt_param string pageToken A continuation token, used to page through ad
1198
+ * units. To retrieve the next page, set this parameter to the value of
1199
+ * "nextPageToken" from the previous response.
1200
+ * @opt_param int maxResults The maximum number of ad units to include in the
1201
+ * response, used for paging.
1202
+ * @return Google_Service_AdSense_AdUnits
1203
+ */
1204
+ public function listAccountsAdunits($accountId, $adClientId, $optParams = array())
1205
+ {
1206
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId);
1207
+ $params = array_merge($params, $optParams);
1208
+ return $this->call('list', array($params), "Google_Service_AdSense_AdUnits");
1209
+ }
1210
+ }
1211
+
1212
+ /**
1213
+ * The "customchannels" collection of methods.
1214
+ * Typical usage is:
1215
+ * <code>
1216
+ * $adsenseService = new Google_Service_AdSense(...);
1217
+ * $customchannels = $adsenseService->customchannels;
1218
+ * </code>
1219
+ */
1220
+ class Google_Service_AdSense_AccountsAdunitsCustomchannels_Resource extends Google_Service_Resource
1221
+ {
1222
+
1223
+ /**
1224
+ * List all custom channels which the specified ad unit belongs to.
1225
+ * (customchannels.listAccountsAdunitsCustomchannels)
1226
+ *
1227
+ * @param string $accountId Account to which the ad client belongs.
1228
+ * @param string $adClientId Ad client which contains the ad unit.
1229
+ * @param string $adUnitId Ad unit for which to list custom channels.
1230
+ * @param array $optParams Optional parameters.
1231
+ *
1232
+ * @opt_param string pageToken A continuation token, used to page through custom
1233
+ * channels. To retrieve the next page, set this parameter to the value of
1234
+ * "nextPageToken" from the previous response.
1235
+ * @opt_param int maxResults The maximum number of custom channels to include in
1236
+ * the response, used for paging.
1237
+ * @return Google_Service_AdSense_CustomChannels
1238
+ */
1239
+ public function listAccountsAdunitsCustomchannels($accountId, $adClientId, $adUnitId, $optParams = array())
1240
+ {
1241
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1242
+ $params = array_merge($params, $optParams);
1243
+ return $this->call('list', array($params), "Google_Service_AdSense_CustomChannels");
1244
+ }
1245
+ }
1246
+ /**
1247
+ * The "alerts" collection of methods.
1248
+ * Typical usage is:
1249
+ * <code>
1250
+ * $adsenseService = new Google_Service_AdSense(...);
1251
+ * $alerts = $adsenseService->alerts;
1252
+ * </code>
1253
+ */
1254
+ class Google_Service_AdSense_AccountsAlerts_Resource extends Google_Service_Resource
1255
+ {
1256
+
1257
+ /**
1258
+ * Dismiss (delete) the specified alert from the specified publisher AdSense
1259
+ * account. (alerts.delete)
1260
+ *
1261
+ * @param string $accountId Account which contains the ad unit.
1262
+ * @param string $alertId Alert to delete.
1263
+ * @param array $optParams Optional parameters.
1264
+ */
1265
+ public function delete($accountId, $alertId, $optParams = array())
1266
+ {
1267
+ $params = array('accountId' => $accountId, 'alertId' => $alertId);
1268
+ $params = array_merge($params, $optParams);
1269
+ return $this->call('delete', array($params));
1270
+ }
1271
+
1272
+ /**
1273
+ * List the alerts for the specified AdSense account.
1274
+ * (alerts.listAccountsAlerts)
1275
+ *
1276
+ * @param string $accountId Account for which to retrieve the alerts.
1277
+ * @param array $optParams Optional parameters.
1278
+ *
1279
+ * @opt_param string locale The locale to use for translating alert messages.
1280
+ * The account locale will be used if this is not supplied. The AdSense default
1281
+ * (English) will be used if the supplied locale is invalid or unsupported.
1282
+ * @return Google_Service_AdSense_Alerts
1283
+ */
1284
+ public function listAccountsAlerts($accountId, $optParams = array())
1285
+ {
1286
+ $params = array('accountId' => $accountId);
1287
+ $params = array_merge($params, $optParams);
1288
+ return $this->call('list', array($params), "Google_Service_AdSense_Alerts");
1289
+ }
1290
+ }
1291
+ /**
1292
+ * The "customchannels" collection of methods.
1293
+ * Typical usage is:
1294
+ * <code>
1295
+ * $adsenseService = new Google_Service_AdSense(...);
1296
+ * $customchannels = $adsenseService->customchannels;
1297
+ * </code>
1298
+ */
1299
+ class Google_Service_AdSense_AccountsCustomchannels_Resource extends Google_Service_Resource
1300
+ {
1301
+
1302
+ /**
1303
+ * Get the specified custom channel from the specified ad client for the
1304
+ * specified account. (customchannels.get)
1305
+ *
1306
+ * @param string $accountId Account to which the ad client belongs.
1307
+ * @param string $adClientId Ad client which contains the custom channel.
1308
+ * @param string $customChannelId Custom channel to retrieve.
1309
+ * @param array $optParams Optional parameters.
1310
+ * @return Google_Service_AdSense_CustomChannel
1311
+ */
1312
+ public function get($accountId, $adClientId, $customChannelId, $optParams = array())
1313
+ {
1314
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId, 'customChannelId' => $customChannelId);
1315
+ $params = array_merge($params, $optParams);
1316
+ return $this->call('get', array($params), "Google_Service_AdSense_CustomChannel");
1317
+ }
1318
+
1319
+ /**
1320
+ * List all custom channels in the specified ad client for the specified
1321
+ * account. (customchannels.listAccountsCustomchannels)
1322
+ *
1323
+ * @param string $accountId Account to which the ad client belongs.
1324
+ * @param string $adClientId Ad client for which to list custom channels.
1325
+ * @param array $optParams Optional parameters.
1326
+ *
1327
+ * @opt_param string pageToken A continuation token, used to page through custom
1328
+ * channels. To retrieve the next page, set this parameter to the value of
1329
+ * "nextPageToken" from the previous response.
1330
+ * @opt_param int maxResults The maximum number of custom channels to include in
1331
+ * the response, used for paging.
1332
+ * @return Google_Service_AdSense_CustomChannels
1333
+ */
1334
+ public function listAccountsCustomchannels($accountId, $adClientId, $optParams = array())
1335
+ {
1336
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId);
1337
+ $params = array_merge($params, $optParams);
1338
+ return $this->call('list', array($params), "Google_Service_AdSense_CustomChannels");
1339
+ }
1340
+ }
1341
+
1342
+ /**
1343
+ * The "adunits" collection of methods.
1344
+ * Typical usage is:
1345
+ * <code>
1346
+ * $adsenseService = new Google_Service_AdSense(...);
1347
+ * $adunits = $adsenseService->adunits;
1348
+ * </code>
1349
+ */
1350
+ class Google_Service_AdSense_AccountsCustomchannelsAdunits_Resource extends Google_Service_Resource
1351
+ {
1352
+
1353
+ /**
1354
+ * List all ad units in the specified custom channel.
1355
+ * (adunits.listAccountsCustomchannelsAdunits)
1356
+ *
1357
+ * @param string $accountId Account to which the ad client belongs.
1358
+ * @param string $adClientId Ad client which contains the custom channel.
1359
+ * @param string $customChannelId Custom channel for which to list ad units.
1360
+ * @param array $optParams Optional parameters.
1361
+ *
1362
+ * @opt_param bool includeInactive Whether to include inactive ad units.
1363
+ * Default: true.
1364
+ * @opt_param int maxResults The maximum number of ad units to include in the
1365
+ * response, used for paging.
1366
+ * @opt_param string pageToken A continuation token, used to page through ad
1367
+ * units. To retrieve the next page, set this parameter to the value of
1368
+ * "nextPageToken" from the previous response.
1369
+ * @return Google_Service_AdSense_AdUnits
1370
+ */
1371
+ public function listAccountsCustomchannelsAdunits($accountId, $adClientId, $customChannelId, $optParams = array())
1372
+ {
1373
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId, 'customChannelId' => $customChannelId);
1374
+ $params = array_merge($params, $optParams);
1375
+ return $this->call('list', array($params), "Google_Service_AdSense_AdUnits");
1376
+ }
1377
+ }
1378
+ /**
1379
+ * The "payments" collection of methods.
1380
+ * Typical usage is:
1381
+ * <code>
1382
+ * $adsenseService = new Google_Service_AdSense(...);
1383
+ * $payments = $adsenseService->payments;
1384
+ * </code>
1385
+ */
1386
+ class Google_Service_AdSense_AccountsPayments_Resource extends Google_Service_Resource
1387
+ {
1388
+
1389
+ /**
1390
+ * List the payments for the specified AdSense account.
1391
+ * (payments.listAccountsPayments)
1392
+ *
1393
+ * @param string $accountId Account for which to retrieve the payments.
1394
+ * @param array $optParams Optional parameters.
1395
+ * @return Google_Service_AdSense_Payments
1396
+ */
1397
+ public function listAccountsPayments($accountId, $optParams = array())
1398
+ {
1399
+ $params = array('accountId' => $accountId);
1400
+ $params = array_merge($params, $optParams);
1401
+ return $this->call('list', array($params), "Google_Service_AdSense_Payments");
1402
+ }
1403
+ }
1404
+ /**
1405
+ * The "reports" collection of methods.
1406
+ * Typical usage is:
1407
+ * <code>
1408
+ * $adsenseService = new Google_Service_AdSense(...);
1409
+ * $reports = $adsenseService->reports;
1410
+ * </code>
1411
+ */
1412
+ class Google_Service_AdSense_AccountsReports_Resource extends Google_Service_Resource
1413
+ {
1414
+
1415
+ /**
1416
+ * Generate an AdSense report based on the report request sent in the query
1417
+ * parameters. Returns the result as JSON; to retrieve output in CSV format
1418
+ * specify "alt=csv" as a query parameter. (reports.generate)
1419
+ *
1420
+ * @param string $accountId Account upon which to report.
1421
+ * @param string $startDate Start of the date range to report on in "YYYY-MM-DD"
1422
+ * format, inclusive.
1423
+ * @param string $endDate End of the date range to report on in "YYYY-MM-DD"
1424
+ * format, inclusive.
1425
+ * @param array $optParams Optional parameters.
1426
+ *
1427
+ * @opt_param string sort The name of a dimension or metric to sort the
1428
+ * resulting report on, optionally prefixed with "+" to sort ascending or "-" to
1429
+ * sort descending. If no prefix is specified, the column is sorted ascending.
1430
+ * @opt_param string locale Optional locale to use for translating report output
1431
+ * to a local language. Defaults to "en_US" if not specified.
1432
+ * @opt_param string metric Numeric columns to include in the report.
1433
+ * @opt_param int maxResults The maximum number of rows of report data to
1434
+ * return.
1435
+ * @opt_param string filter Filters to be run on the report.
1436
+ * @opt_param string currency Optional currency to use when reporting on
1437
+ * monetary metrics. Defaults to the account's currency if not set.
1438
+ * @opt_param int startIndex Index of the first row of report data to return.
1439
+ * @opt_param bool useTimezoneReporting Whether the report should be generated
1440
+ * in the AdSense account's local timezone. If false default PST/PDT timezone
1441
+ * will be used.
1442
+ * @opt_param string dimension Dimensions to base the report on.
1443
+ * @return Google_Service_AdSense_AdsenseReportsGenerateResponse
1444
+ */
1445
+ public function generate($accountId, $startDate, $endDate, $optParams = array())
1446
+ {
1447
+ $params = array('accountId' => $accountId, 'startDate' => $startDate, 'endDate' => $endDate);
1448
+ $params = array_merge($params, $optParams);
1449
+ return $this->call('generate', array($params), "Google_Service_AdSense_AdsenseReportsGenerateResponse");
1450
+ }
1451
+ }
1452
+
1453
+ /**
1454
+ * The "saved" collection of methods.
1455
+ * Typical usage is:
1456
+ * <code>
1457
+ * $adsenseService = new Google_Service_AdSense(...);
1458
+ * $saved = $adsenseService->saved;
1459
+ * </code>
1460
+ */
1461
+ class Google_Service_AdSense_AccountsReportsSaved_Resource extends Google_Service_Resource
1462
+ {
1463
+
1464
+ /**
1465
+ * Generate an AdSense report based on the saved report ID sent in the query
1466
+ * parameters. (saved.generate)
1467
+ *
1468
+ * @param string $accountId Account to which the saved reports belong.
1469
+ * @param string $savedReportId The saved report to retrieve.
1470
+ * @param array $optParams Optional parameters.
1471
+ *
1472
+ * @opt_param string locale Optional locale to use for translating report output
1473
+ * to a local language. Defaults to "en_US" if not specified.
1474
+ * @opt_param int startIndex Index of the first row of report data to return.
1475
+ * @opt_param int maxResults The maximum number of rows of report data to
1476
+ * return.
1477
+ * @return Google_Service_AdSense_AdsenseReportsGenerateResponse
1478
+ */
1479
+ public function generate($accountId, $savedReportId, $optParams = array())
1480
+ {
1481
+ $params = array('accountId' => $accountId, 'savedReportId' => $savedReportId);
1482
+ $params = array_merge($params, $optParams);
1483
+ return $this->call('generate', array($params), "Google_Service_AdSense_AdsenseReportsGenerateResponse");
1484
+ }
1485
+
1486
+ /**
1487
+ * List all saved reports in the specified AdSense account.
1488
+ * (saved.listAccountsReportsSaved)
1489
+ *
1490
+ * @param string $accountId Account to which the saved reports belong.
1491
+ * @param array $optParams Optional parameters.
1492
+ *
1493
+ * @opt_param string pageToken A continuation token, used to page through saved
1494
+ * reports. To retrieve the next page, set this parameter to the value of
1495
+ * "nextPageToken" from the previous response.
1496
+ * @opt_param int maxResults The maximum number of saved reports to include in
1497
+ * the response, used for paging.
1498
+ * @return Google_Service_AdSense_SavedReports
1499
+ */
1500
+ public function listAccountsReportsSaved($accountId, $optParams = array())
1501
+ {
1502
+ $params = array('accountId' => $accountId);
1503
+ $params = array_merge($params, $optParams);
1504
+ return $this->call('list', array($params), "Google_Service_AdSense_SavedReports");
1505
+ }
1506
+ }
1507
+ /**
1508
+ * The "savedadstyles" collection of methods.
1509
+ * Typical usage is:
1510
+ * <code>
1511
+ * $adsenseService = new Google_Service_AdSense(...);
1512
+ * $savedadstyles = $adsenseService->savedadstyles;
1513
+ * </code>
1514
+ */
1515
+ class Google_Service_AdSense_AccountsSavedadstyles_Resource extends Google_Service_Resource
1516
+ {
1517
+
1518
+ /**
1519
+ * List a specific saved ad style for the specified account. (savedadstyles.get)
1520
+ *
1521
+ * @param string $accountId Account for which to get the saved ad style.
1522
+ * @param string $savedAdStyleId Saved ad style to retrieve.
1523
+ * @param array $optParams Optional parameters.
1524
+ * @return Google_Service_AdSense_SavedAdStyle
1525
+ */
1526
+ public function get($accountId, $savedAdStyleId, $optParams = array())
1527
+ {
1528
+ $params = array('accountId' => $accountId, 'savedAdStyleId' => $savedAdStyleId);
1529
+ $params = array_merge($params, $optParams);
1530
+ return $this->call('get', array($params), "Google_Service_AdSense_SavedAdStyle");
1531
+ }
1532
+
1533
+ /**
1534
+ * List all saved ad styles in the specified account.
1535
+ * (savedadstyles.listAccountsSavedadstyles)
1536
+ *
1537
+ * @param string $accountId Account for which to list saved ad styles.
1538
+ * @param array $optParams Optional parameters.
1539
+ *
1540
+ * @opt_param string pageToken A continuation token, used to page through saved
1541
+ * ad styles. To retrieve the next page, set this parameter to the value of
1542
+ * "nextPageToken" from the previous response.
1543
+ * @opt_param int maxResults The maximum number of saved ad styles to include in
1544
+ * the response, used for paging.
1545
+ * @return Google_Service_AdSense_SavedAdStyles
1546
+ */
1547
+ public function listAccountsSavedadstyles($accountId, $optParams = array())
1548
+ {
1549
+ $params = array('accountId' => $accountId);
1550
+ $params = array_merge($params, $optParams);
1551
+ return $this->call('list', array($params), "Google_Service_AdSense_SavedAdStyles");
1552
+ }
1553
+ }
1554
+ /**
1555
+ * The "urlchannels" collection of methods.
1556
+ * Typical usage is:
1557
+ * <code>
1558
+ * $adsenseService = new Google_Service_AdSense(...);
1559
+ * $urlchannels = $adsenseService->urlchannels;
1560
+ * </code>
1561
+ */
1562
+ class Google_Service_AdSense_AccountsUrlchannels_Resource extends Google_Service_Resource
1563
+ {
1564
+
1565
+ /**
1566
+ * List all URL channels in the specified ad client for the specified account.
1567
+ * (urlchannels.listAccountsUrlchannels)
1568
+ *
1569
+ * @param string $accountId Account to which the ad client belongs.
1570
+ * @param string $adClientId Ad client for which to list URL channels.
1571
+ * @param array $optParams Optional parameters.
1572
+ *
1573
+ * @opt_param string pageToken A continuation token, used to page through URL
1574
+ * channels. To retrieve the next page, set this parameter to the value of
1575
+ * "nextPageToken" from the previous response.
1576
+ * @opt_param int maxResults The maximum number of URL channels to include in
1577
+ * the response, used for paging.
1578
+ * @return Google_Service_AdSense_UrlChannels
1579
+ */
1580
+ public function listAccountsUrlchannels($accountId, $adClientId, $optParams = array())
1581
+ {
1582
+ $params = array('accountId' => $accountId, 'adClientId' => $adClientId);
1583
+ $params = array_merge($params, $optParams);
1584
+ return $this->call('list', array($params), "Google_Service_AdSense_UrlChannels");
1585
+ }
1586
+ }
1587
+
1588
+ /**
1589
+ * The "adclients" collection of methods.
1590
+ * Typical usage is:
1591
+ * <code>
1592
+ * $adsenseService = new Google_Service_AdSense(...);
1593
+ * $adclients = $adsenseService->adclients;
1594
+ * </code>
1595
+ */
1596
+ class Google_Service_AdSense_Adclients_Resource extends Google_Service_Resource
1597
+ {
1598
+
1599
+ /**
1600
+ * List all ad clients in this AdSense account. (adclients.listAdclients)
1601
+ *
1602
+ * @param array $optParams Optional parameters.
1603
+ *
1604
+ * @opt_param string pageToken A continuation token, used to page through ad
1605
+ * clients. To retrieve the next page, set this parameter to the value of
1606
+ * "nextPageToken" from the previous response.
1607
+ * @opt_param int maxResults The maximum number of ad clients to include in the
1608
+ * response, used for paging.
1609
+ * @return Google_Service_AdSense_AdClients
1610
+ */
1611
+ public function listAdclients($optParams = array())
1612
+ {
1613
+ $params = array();
1614
+ $params = array_merge($params, $optParams);
1615
+ return $this->call('list', array($params), "Google_Service_AdSense_AdClients");
1616
+ }
1617
+ }
1618
+
1619
+ /**
1620
+ * The "adunits" collection of methods.
1621
+ * Typical usage is:
1622
+ * <code>
1623
+ * $adsenseService = new Google_Service_AdSense(...);
1624
+ * $adunits = $adsenseService->adunits;
1625
+ * </code>
1626
+ */
1627
+ class Google_Service_AdSense_Adunits_Resource extends Google_Service_Resource
1628
+ {
1629
+
1630
+ /**
1631
+ * Gets the specified ad unit in the specified ad client. (adunits.get)
1632
+ *
1633
+ * @param string $adClientId Ad client for which to get the ad unit.
1634
+ * @param string $adUnitId Ad unit to retrieve.
1635
+ * @param array $optParams Optional parameters.
1636
+ * @return Google_Service_AdSense_AdUnit
1637
+ */
1638
+ public function get($adClientId, $adUnitId, $optParams = array())
1639
+ {
1640
+ $params = array('adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1641
+ $params = array_merge($params, $optParams);
1642
+ return $this->call('get', array($params), "Google_Service_AdSense_AdUnit");
1643
+ }
1644
+
1645
+ /**
1646
+ * Get ad code for the specified ad unit. (adunits.getAdCode)
1647
+ *
1648
+ * @param string $adClientId Ad client with contains the ad unit.
1649
+ * @param string $adUnitId Ad unit to get the code for.
1650
+ * @param array $optParams Optional parameters.
1651
+ * @return Google_Service_AdSense_AdCode
1652
+ */
1653
+ public function getAdCode($adClientId, $adUnitId, $optParams = array())
1654
+ {
1655
+ $params = array('adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1656
+ $params = array_merge($params, $optParams);
1657
+ return $this->call('getAdCode', array($params), "Google_Service_AdSense_AdCode");
1658
+ }
1659
+
1660
+ /**
1661
+ * List all ad units in the specified ad client for this AdSense account.
1662
+ * (adunits.listAdunits)
1663
+ *
1664
+ * @param string $adClientId Ad client for which to list ad units.
1665
+ * @param array $optParams Optional parameters.
1666
+ *
1667
+ * @opt_param bool includeInactive Whether to include inactive ad units.
1668
+ * Default: true.
1669
+ * @opt_param string pageToken A continuation token, used to page through ad
1670
+ * units. To retrieve the next page, set this parameter to the value of
1671
+ * "nextPageToken" from the previous response.
1672
+ * @opt_param int maxResults The maximum number of ad units to include in the
1673
+ * response, used for paging.
1674
+ * @return Google_Service_AdSense_AdUnits
1675
+ */
1676
+ public function listAdunits($adClientId, $optParams = array())
1677
+ {
1678
+ $params = array('adClientId' => $adClientId);
1679
+ $params = array_merge($params, $optParams);
1680
+ return $this->call('list', array($params), "Google_Service_AdSense_AdUnits");
1681
+ }
1682
+ }
1683
+
1684
+ /**
1685
+ * The "customchannels" collection of methods.
1686
+ * Typical usage is:
1687
+ * <code>
1688
+ * $adsenseService = new Google_Service_AdSense(...);
1689
+ * $customchannels = $adsenseService->customchannels;
1690
+ * </code>
1691
+ */
1692
+ class Google_Service_AdSense_AdunitsCustomchannels_Resource extends Google_Service_Resource
1693
+ {
1694
+
1695
+ /**
1696
+ * List all custom channels which the specified ad unit belongs to.
1697
+ * (customchannels.listAdunitsCustomchannels)
1698
+ *
1699
+ * @param string $adClientId Ad client which contains the ad unit.
1700
+ * @param string $adUnitId Ad unit for which to list custom channels.
1701
+ * @param array $optParams Optional parameters.
1702
+ *
1703
+ * @opt_param string pageToken A continuation token, used to page through custom
1704
+ * channels. To retrieve the next page, set this parameter to the value of
1705
+ * "nextPageToken" from the previous response.
1706
+ * @opt_param int maxResults The maximum number of custom channels to include in
1707
+ * the response, used for paging.
1708
+ * @return Google_Service_AdSense_CustomChannels
1709
+ */
1710
+ public function listAdunitsCustomchannels($adClientId, $adUnitId, $optParams = array())
1711
+ {
1712
+ $params = array('adClientId' => $adClientId, 'adUnitId' => $adUnitId);
1713
+ $params = array_merge($params, $optParams);
1714
+ return $this->call('list', array($params), "Google_Service_AdSense_CustomChannels");
1715
+ }
1716
+ }
1717
+
1718
+ /**
1719
+ * The "alerts" collection of methods.
1720
+ * Typical usage is:
1721
+ * <code>
1722
+ * $adsenseService = new Google_Service_AdSense(...);
1723
+ * $alerts = $adsenseService->alerts;
1724
+ * </code>
1725
+ */
1726
+ class Google_Service_AdSense_Alerts_Resource extends Google_Service_Resource
1727
+ {
1728
+
1729
+ /**
1730
+ * Dismiss (delete) the specified alert from the publisher's AdSense account.
1731
+ * (alerts.delete)
1732
+ *
1733
+ * @param string $alertId Alert to delete.
1734
+ * @param array $optParams Optional parameters.
1735
+ */
1736
+ public function delete($alertId, $optParams = array())
1737
+ {
1738
+ $params = array('alertId' => $alertId);
1739
+ $params = array_merge($params, $optParams);
1740
+ return $this->call('delete', array($params));
1741
+ }
1742
+
1743
+ /**
1744
+ * List the alerts for this AdSense account. (alerts.listAlerts)
1745
+ *
1746
+ * @param array $optParams Optional parameters.
1747
+ *
1748
+ * @opt_param string locale The locale to use for translating alert messages.
1749
+ * The account locale will be used if this is not supplied. The AdSense default
1750
+ * (English) will be used if the supplied locale is invalid or unsupported.
1751
+ * @return Google_Service_AdSense_Alerts
1752
+ */
1753
+ public function listAlerts($optParams = array())
1754
+ {
1755
+ $params = array();
1756
+ $params = array_merge($params, $optParams);
1757
+ return $this->call('list', array($params), "Google_Service_AdSense_Alerts");
1758
+ }
1759
+ }
1760
+
1761
+ /**
1762
+ * The "customchannels" collection of methods.
1763
+ * Typical usage is:
1764
+ * <code>
1765
+ * $adsenseService = new Google_Service_AdSense(...);
1766
+ * $customchannels = $adsenseService->customchannels;
1767
+ * </code>
1768
+ */
1769
+ class Google_Service_AdSense_Customchannels_Resource extends Google_Service_Resource
1770
+ {
1771
+
1772
+ /**
1773
+ * Get the specified custom channel from the specified ad client.
1774
+ * (customchannels.get)
1775
+ *
1776
+ * @param string $adClientId Ad client which contains the custom channel.
1777
+ * @param string $customChannelId Custom channel to retrieve.
1778
+ * @param array $optParams Optional parameters.
1779
+ * @return Google_Service_AdSense_CustomChannel
1780
+ */
1781
+ public function get($adClientId, $customChannelId, $optParams = array())
1782
+ {
1783
+ $params = array('adClientId' => $adClientId, 'customChannelId' => $customChannelId);
1784
+ $params = array_merge($params, $optParams);
1785
+ return $this->call('get', array($params), "Google_Service_AdSense_CustomChannel");
1786
+ }
1787
+
1788
+ /**
1789
+ * List all custom channels in the specified ad client for this AdSense account.
1790
+ * (customchannels.listCustomchannels)
1791
+ *
1792
+ * @param string $adClientId Ad client for which to list custom channels.
1793
+ * @param array $optParams Optional parameters.
1794
+ *
1795
+ * @opt_param string pageToken A continuation token, used to page through custom
1796
+ * channels. To retrieve the next page, set this parameter to the value of
1797
+ * "nextPageToken" from the previous response.
1798
+ * @opt_param int maxResults The maximum number of custom channels to include in
1799
+ * the response, used for paging.
1800
+ * @return Google_Service_AdSense_CustomChannels
1801
+ */
1802
+ public function listCustomchannels($adClientId, $optParams = array())
1803
+ {
1804
+ $params = array('adClientId' => $adClientId);
1805
+ $params = array_merge($params, $optParams);
1806
+ return $this->call('list', array($params), "Google_Service_AdSense_CustomChannels");
1807
+ }
1808
+ }
1809
+
1810
+ /**
1811
+ * The "adunits" collection of methods.
1812
+ * Typical usage is:
1813
+ * <code>
1814
+ * $adsenseService = new Google_Service_AdSense(...);
1815
+ * $adunits = $adsenseService->adunits;
1816
+ * </code>
1817
+ */
1818
+ class Google_Service_AdSense_CustomchannelsAdunits_Resource extends Google_Service_Resource
1819
+ {
1820
+
1821
+ /**
1822
+ * List all ad units in the specified custom channel.
1823
+ * (adunits.listCustomchannelsAdunits)
1824
+ *
1825
+ * @param string $adClientId Ad client which contains the custom channel.
1826
+ * @param string $customChannelId Custom channel for which to list ad units.
1827
+ * @param array $optParams Optional parameters.
1828
+ *
1829
+ * @opt_param bool includeInactive Whether to include inactive ad units.
1830
+ * Default: true.
1831
+ * @opt_param string pageToken A continuation token, used to page through ad
1832
+ * units. To retrieve the next page, set this parameter to the value of
1833
+ * "nextPageToken" from the previous response.
1834
+ * @opt_param int maxResults The maximum number of ad units to include in the
1835
+ * response, used for paging.
1836
+ * @return Google_Service_AdSense_AdUnits
1837
+ */
1838
+ public function listCustomchannelsAdunits($adClientId, $customChannelId, $optParams = array())
1839
+ {
1840
+ $params = array('adClientId' => $adClientId, 'customChannelId' => $customChannelId);
1841
+ $params = array_merge($params, $optParams);
1842
+ return $this->call('list', array($params), "Google_Service_AdSense_AdUnits");
1843
+ }
1844
+ }
1845
+
1846
+ /**
1847
+ * The "metadata" collection of methods.
1848
+ * Typical usage is:
1849
+ * <code>
1850
+ * $adsenseService = new Google_Service_AdSense(...);
1851
+ * $metadata = $adsenseService->metadata;
1852
+ * </code>
1853
+ */
1854
+ class Google_Service_AdSense_Metadata_Resource extends Google_Service_Resource
1855
+ {
1856
+ }
1857
+
1858
+ /**
1859
+ * The "dimensions" collection of methods.
1860
+ * Typical usage is:
1861
+ * <code>
1862
+ * $adsenseService = new Google_Service_AdSense(...);
1863
+ * $dimensions = $adsenseService->dimensions;
1864
+ * </code>
1865
+ */
1866
+ class Google_Service_AdSense_MetadataDimensions_Resource extends Google_Service_Resource
1867
+ {
1868
+
1869
+ /**
1870
+ * List the metadata for the dimensions available to this AdSense account.
1871
+ * (dimensions.listMetadataDimensions)
1872
+ *
1873
+ * @param array $optParams Optional parameters.
1874
+ * @return Google_Service_AdSense_Metadata
1875
+ */
1876
+ public function listMetadataDimensions($optParams = array())
1877
+ {
1878
+ $params = array();
1879
+ $params = array_merge($params, $optParams);
1880
+ return $this->call('list', array($params), "Google_Service_AdSense_Metadata");
1881
+ }
1882
+ }
1883
+ /**
1884
+ * The "metrics" collection of methods.
1885
+ * Typical usage is:
1886
+ * <code>
1887
+ * $adsenseService = new Google_Service_AdSense(...);
1888
+ * $metrics = $adsenseService->metrics;
1889
+ * </code>
1890
+ */
1891
+ class Google_Service_AdSense_MetadataMetrics_Resource extends Google_Service_Resource
1892
+ {
1893
+
1894
+ /**
1895
+ * List the metadata for the metrics available to this AdSense account.
1896
+ * (metrics.listMetadataMetrics)
1897
+ *
1898
+ * @param array $optParams Optional parameters.
1899
+ * @return Google_Service_AdSense_Metadata
1900
+ */
1901
+ public function listMetadataMetrics($optParams = array())
1902
+ {
1903
+ $params = array();
1904
+ $params = array_merge($params, $optParams);
1905
+ return $this->call('list', array($params), "Google_Service_AdSense_Metadata");
1906
+ }
1907
+ }
1908
+
1909
+ /**
1910
+ * The "payments" collection of methods.
1911
+ * Typical usage is:
1912
+ * <code>
1913
+ * $adsenseService = new Google_Service_AdSense(...);
1914
+ * $payments = $adsenseService->payments;
1915
+ * </code>
1916
+ */
1917
+ class Google_Service_AdSense_Payments_Resource extends Google_Service_Resource
1918
+ {
1919
+
1920
+ /**
1921
+ * List the payments for this AdSense account. (payments.listPayments)
1922
+ *
1923
+ * @param array $optParams Optional parameters.
1924
+ * @return Google_Service_AdSense_Payments
1925
+ */
1926
+ public function listPayments($optParams = array())
1927
+ {
1928
+ $params = array();
1929
+ $params = array_merge($params, $optParams);
1930
+ return $this->call('list', array($params), "Google_Service_AdSense_Payments");
1931
+ }
1932
+ }
1933
+
1934
+ /**
1935
+ * The "reports" collection of methods.
1936
+ * Typical usage is:
1937
+ * <code>
1938
+ * $adsenseService = new Google_Service_AdSense(...);
1939
+ * $reports = $adsenseService->reports;
1940
+ * </code>
1941
+ */
1942
+ class Google_Service_AdSense_Reports_Resource extends Google_Service_Resource
1943
+ {
1944
+
1945
+ /**
1946
+ * Generate an AdSense report based on the report request sent in the query
1947
+ * parameters. Returns the result as JSON; to retrieve output in CSV format
1948
+ * specify "alt=csv" as a query parameter. (reports.generate)
1949
+ *
1950
+ * @param string $startDate Start of the date range to report on in "YYYY-MM-DD"
1951
+ * format, inclusive.
1952
+ * @param string $endDate End of the date range to report on in "YYYY-MM-DD"
1953
+ * format, inclusive.
1954
+ * @param array $optParams Optional parameters.
1955
+ *
1956
+ * @opt_param string sort The name of a dimension or metric to sort the
1957
+ * resulting report on, optionally prefixed with "+" to sort ascending or "-" to
1958
+ * sort descending. If no prefix is specified, the column is sorted ascending.
1959
+ * @opt_param string locale Optional locale to use for translating report output
1960
+ * to a local language. Defaults to "en_US" if not specified.
1961
+ * @opt_param string metric Numeric columns to include in the report.
1962
+ * @opt_param int maxResults The maximum number of rows of report data to
1963
+ * return.
1964
+ * @opt_param string filter Filters to be run on the report.
1965
+ * @opt_param string currency Optional currency to use when reporting on
1966
+ * monetary metrics. Defaults to the account's currency if not set.
1967
+ * @opt_param int startIndex Index of the first row of report data to return.
1968
+ * @opt_param bool useTimezoneReporting Whether the report should be generated
1969
+ * in the AdSense account's local timezone. If false default PST/PDT timezone
1970
+ * will be used.
1971
+ * @opt_param string dimension Dimensions to base the report on.
1972
+ * @opt_param string accountId Accounts upon which to report.
1973
+ * @return Google_Service_AdSense_AdsenseReportsGenerateResponse
1974
+ */
1975
+ public function generate($startDate, $endDate, $optParams = array())
1976
+ {
1977
+ $params = array('startDate' => $startDate, 'endDate' => $endDate);
1978
+ $params = array_merge($params, $optParams);
1979
+ return $this->call('generate', array($params), "Google_Service_AdSense_AdsenseReportsGenerateResponse");
1980
+ }
1981
+ }
1982
+
1983
+ /**
1984
+ * The "saved" collection of methods.
1985
+ * Typical usage is:
1986
+ * <code>
1987
+ * $adsenseService = new Google_Service_AdSense(...);
1988
+ * $saved = $adsenseService->saved;
1989
+ * </code>
1990
+ */
1991
+ class Google_Service_AdSense_ReportsSaved_Resource extends Google_Service_Resource
1992
+ {
1993
+
1994
+ /**
1995
+ * Generate an AdSense report based on the saved report ID sent in the query
1996
+ * parameters. (saved.generate)
1997
+ *
1998
+ * @param string $savedReportId The saved report to retrieve.
1999
+ * @param array $optParams Optional parameters.
2000
+ *
2001
+ * @opt_param string locale Optional locale to use for translating report output
2002
+ * to a local language. Defaults to "en_US" if not specified.
2003
+ * @opt_param int startIndex Index of the first row of report data to return.
2004
+ * @opt_param int maxResults The maximum number of rows of report data to
2005
+ * return.
2006
+ * @return Google_Service_AdSense_AdsenseReportsGenerateResponse
2007
+ */
2008
+ public function generate($savedReportId, $optParams = array())
2009
+ {
2010
+ $params = array('savedReportId' => $savedReportId);
2011
+ $params = array_merge($params, $optParams);
2012
+ return $this->call('generate', array($params), "Google_Service_AdSense_AdsenseReportsGenerateResponse");
2013
+ }
2014
+
2015
+ /**
2016
+ * List all saved reports in this AdSense account. (saved.listReportsSaved)
2017
+ *
2018
+ * @param array $optParams Optional parameters.
2019
+ *
2020
+ * @opt_param string pageToken A continuation token, used to page through saved
2021
+ * reports. To retrieve the next page, set this parameter to the value of
2022
+ * "nextPageToken" from the previous response.
2023
+ * @opt_param int maxResults The maximum number of saved reports to include in
2024
+ * the response, used for paging.
2025
+ * @return Google_Service_AdSense_SavedReports
2026
+ */
2027
+ public function listReportsSaved($optParams = array())
2028
+ {
2029
+ $params = array();
2030
+ $params = array_merge($params, $optParams);
2031
+ return $this->call('list', array($params), "Google_Service_AdSense_SavedReports");
2032
+ }
2033
+ }
2034
+
2035
+ /**
2036
+ * The "savedadstyles" collection of methods.
2037
+ * Typical usage is:
2038
+ * <code>
2039
+ * $adsenseService = new Google_Service_AdSense(...);
2040
+ * $savedadstyles = $adsenseService->savedadstyles;
2041
+ * </code>
2042
+ */
2043
+ class Google_Service_AdSense_Savedadstyles_Resource extends Google_Service_Resource
2044
+ {
2045
+
2046
+ /**
2047
+ * Get a specific saved ad style from the user's account. (savedadstyles.get)
2048
+ *
2049
+ * @param string $savedAdStyleId Saved ad style to retrieve.
2050
+ * @param array $optParams Optional parameters.
2051
+ * @return Google_Service_AdSense_SavedAdStyle
2052
+ */
2053
+ public function get($savedAdStyleId, $optParams = array())
2054
+ {
2055
+ $params = array('savedAdStyleId' => $savedAdStyleId);
2056
+ $params = array_merge($params, $optParams);
2057
+ return $this->call('get', array($params), "Google_Service_AdSense_SavedAdStyle");
2058
+ }
2059
+
2060
+ /**
2061
+ * List all saved ad styles in the user's account.
2062
+ * (savedadstyles.listSavedadstyles)
2063
+ *
2064
+ * @param array $optParams Optional parameters.
2065
+ *
2066
+ * @opt_param string pageToken A continuation token, used to page through saved
2067
+ * ad styles. To retrieve the next page, set this parameter to the value of
2068
+ * "nextPageToken" from the previous response.
2069
+ * @opt_param int maxResults The maximum number of saved ad styles to include in
2070
+ * the response, used for paging.
2071
+ * @return Google_Service_AdSense_SavedAdStyles
2072
+ */
2073
+ public function listSavedadstyles($optParams = array())
2074
+ {
2075
+ $params = array();
2076
+ $params = array_merge($params, $optParams);
2077
+ return $this->call('list', array($params), "Google_Service_AdSense_SavedAdStyles");
2078
+ }
2079
+ }
2080
+
2081
+ /**
2082
+ * The "urlchannels" collection of methods.
2083
+ * Typical usage is:
2084
+ * <code>
2085
+ * $adsenseService = new Google_Service_AdSense(...);
2086
+ * $urlchannels = $adsenseService->urlchannels;
2087
+ * </code>
2088
+ */
2089
+ class Google_Service_AdSense_Urlchannels_Resource extends Google_Service_Resource
2090
+ {
2091
+
2092
+ /**
2093
+ * List all URL channels in the specified ad client for this AdSense account.
2094
+ * (urlchannels.listUrlchannels)
2095
+ *
2096
+ * @param string $adClientId Ad client for which to list URL channels.
2097
+ * @param array $optParams Optional parameters.
2098
+ *
2099
+ * @opt_param string pageToken A continuation token, used to page through URL
2100
+ * channels. To retrieve the next page, set this parameter to the value of
2101
+ * "nextPageToken" from the previous response.
2102
+ * @opt_param int maxResults The maximum number of URL channels to include in
2103
+ * the response, used for paging.
2104
+ * @return Google_Service_AdSense_UrlChannels
2105
+ */
2106
+ public function listUrlchannels($adClientId, $optParams = array())
2107
+ {
2108
+ $params = array('adClientId' => $adClientId);
2109
+ $params = array_merge($params, $optParams);
2110
+ return $this->call('list', array($params), "Google_Service_AdSense_UrlChannels");
2111
+ }
2112
+ }
2113
+
2114
+
2115
+
2116
+
2117
+ class Google_Service_AdSense_Account extends Google_Collection
2118
+ {
2119
+ protected $collection_key = 'subAccounts';
2120
+ protected $internal_gapi_mappings = array(
2121
+ );
2122
+ public $id;
2123
+ public $kind;
2124
+ public $name;
2125
+ public $premium;
2126
+ protected $subAccountsType = 'Google_Service_AdSense_Account';
2127
+ protected $subAccountsDataType = 'array';
2128
+ public $timezone;
2129
+
2130
+
2131
+ public function setId($id)
2132
+ {
2133
+ $this->id = $id;
2134
+ }
2135
+ public function getId()
2136
+ {
2137
+ return $this->id;
2138
+ }
2139
+ public function setKind($kind)
2140
+ {
2141
+ $this->kind = $kind;
2142
+ }
2143
+ public function getKind()
2144
+ {
2145
+ return $this->kind;
2146
+ }
2147
+ public function setName($name)
2148
+ {
2149
+ $this->name = $name;
2150
+ }
2151
+ public function getName()
2152
+ {
2153
+ return $this->name;
2154
+ }
2155
+ public function setPremium($premium)
2156
+ {
2157
+ $this->premium = $premium;
2158
+ }
2159
+ public function getPremium()
2160
+ {
2161
+ return $this->premium;
2162
+ }
2163
+ public function setSubAccounts($subAccounts)
2164
+ {
2165
+ $this->subAccounts = $subAccounts;
2166
+ }
2167
+ public function getSubAccounts()
2168
+ {
2169
+ return $this->subAccounts;
2170
+ }
2171
+ public function setTimezone($timezone)
2172
+ {
2173
+ $this->timezone = $timezone;
2174
+ }
2175
+ public function getTimezone()
2176
+ {
2177
+ return $this->timezone;
2178
+ }
2179
+ }
2180
+
2181
+ class Google_Service_AdSense_Accounts extends Google_Collection
2182
+ {
2183
+ protected $collection_key = 'items';
2184
+ protected $internal_gapi_mappings = array(
2185
+ );
2186
+ public $etag;
2187
+ protected $itemsType = 'Google_Service_AdSense_Account';
2188
+ protected $itemsDataType = 'array';
2189
+ public $kind;
2190
+ public $nextPageToken;
2191
+
2192
+
2193
+ public function setEtag($etag)
2194
+ {
2195
+ $this->etag = $etag;
2196
+ }
2197
+ public function getEtag()
2198
+ {
2199
+ return $this->etag;
2200
+ }
2201
+ public function setItems($items)
2202
+ {
2203
+ $this->items = $items;
2204
+ }
2205
+ public function getItems()
2206
+ {
2207
+ return $this->items;
2208
+ }
2209
+ public function setKind($kind)
2210
+ {
2211
+ $this->kind = $kind;
2212
+ }
2213
+ public function getKind()
2214
+ {
2215
+ return $this->kind;
2216
+ }
2217
+ public function setNextPageToken($nextPageToken)
2218
+ {
2219
+ $this->nextPageToken = $nextPageToken;
2220
+ }
2221
+ public function getNextPageToken()
2222
+ {
2223
+ return $this->nextPageToken;
2224
+ }
2225
+ }
2226
+
2227
+ class Google_Service_AdSense_AdClient extends Google_Model
2228
+ {
2229
+ protected $internal_gapi_mappings = array(
2230
+ );
2231
+ public $arcOptIn;
2232
+ public $arcReviewMode;
2233
+ public $id;
2234
+ public $kind;
2235
+ public $productCode;
2236
+ public $supportsReporting;
2237
+
2238
+
2239
+ public function setArcOptIn($arcOptIn)
2240
+ {
2241
+ $this->arcOptIn = $arcOptIn;
2242
+ }
2243
+ public function getArcOptIn()
2244
+ {
2245
+ return $this->arcOptIn;
2246
+ }
2247
+ public function setArcReviewMode($arcReviewMode)
2248
+ {
2249
+ $this->arcReviewMode = $arcReviewMode;
2250
+ }
2251
+ public function getArcReviewMode()
2252
+ {
2253
+ return $this->arcReviewMode;
2254
+ }
2255
+ public function setId($id)
2256
+ {
2257
+ $this->id = $id;
2258
+ }
2259
+ public function getId()
2260
+ {
2261
+ return $this->id;
2262
+ }
2263
+ public function setKind($kind)
2264
+ {
2265
+ $this->kind = $kind;
2266
+ }
2267
+ public function getKind()
2268
+ {
2269
+ return $this->kind;
2270
+ }
2271
+ public function setProductCode($productCode)
2272
+ {
2273
+ $this->productCode = $productCode;
2274
+ }
2275
+ public function getProductCode()
2276
+ {
2277
+ return $this->productCode;
2278
+ }
2279
+ public function setSupportsReporting($supportsReporting)
2280
+ {
2281
+ $this->supportsReporting = $supportsReporting;
2282
+ }
2283
+ public function getSupportsReporting()
2284
+ {
2285
+ return $this->supportsReporting;
2286
+ }
2287
+ }
2288
+
2289
+ class Google_Service_AdSense_AdClients extends Google_Collection
2290
+ {
2291
+ protected $collection_key = 'items';
2292
+ protected $internal_gapi_mappings = array(
2293
+ );
2294
+ public $etag;
2295
+ protected $itemsType = 'Google_Service_AdSense_AdClient';
2296
+ protected $itemsDataType = 'array';
2297
+ public $kind;
2298
+ public $nextPageToken;
2299
+
2300
+
2301
+ public function setEtag($etag)
2302
+ {
2303
+ $this->etag = $etag;
2304
+ }
2305
+ public function getEtag()
2306
+ {
2307
+ return $this->etag;
2308
+ }
2309
+ public function setItems($items)
2310
+ {
2311
+ $this->items = $items;
2312
+ }
2313
+ public function getItems()
2314
+ {
2315
+ return $this->items;
2316
+ }
2317
+ public function setKind($kind)
2318
+ {
2319
+ $this->kind = $kind;
2320
+ }
2321
+ public function getKind()
2322
+ {
2323
+ return $this->kind;
2324
+ }
2325
+ public function setNextPageToken($nextPageToken)
2326
+ {
2327
+ $this->nextPageToken = $nextPageToken;
2328
+ }
2329
+ public function getNextPageToken()
2330
+ {
2331
+ return $this->nextPageToken;
2332
+ }
2333
+ }
2334
+
2335
+ class Google_Service_AdSense_AdCode extends Google_Model
2336
+ {
2337
+ protected $internal_gapi_mappings = array(
2338
+ );
2339
+ public $adCode;
2340
+ public $kind;
2341
+
2342
+
2343
+ public function setAdCode($adCode)
2344
+ {
2345
+ $this->adCode = $adCode;
2346
+ }
2347
+ public function getAdCode()
2348
+ {
2349
+ return $this->adCode;
2350
+ }
2351
+ public function setKind($kind)
2352
+ {
2353
+ $this->kind = $kind;
2354
+ }
2355
+ public function getKind()
2356
+ {
2357
+ return $this->kind;
2358
+ }
2359
+ }
2360
+
2361
+ class Google_Service_AdSense_AdStyle extends Google_Model
2362
+ {
2363
+ protected $internal_gapi_mappings = array(
2364
+ );
2365
+ protected $colorsType = 'Google_Service_AdSense_AdStyleColors';
2366
+ protected $colorsDataType = '';
2367
+ public $corners;
2368
+ protected $fontType = 'Google_Service_AdSense_AdStyleFont';
2369
+ protected $fontDataType = '';
2370
+ public $kind;
2371
+
2372
+
2373
+ public function setColors(Google_Service_AdSense_AdStyleColors $colors)
2374
+ {
2375
+ $this->colors = $colors;
2376
+ }
2377
+ public function getColors()
2378
+ {
2379
+ return $this->colors;
2380
+ }
2381
+ public function setCorners($corners)
2382
+ {
2383
+ $this->corners = $corners;
2384
+ }
2385
+ public function getCorners()
2386
+ {
2387
+ return $this->corners;
2388
+ }
2389
+ public function setFont(Google_Service_AdSense_AdStyleFont $font)
2390
+ {
2391
+ $this->font = $font;
2392
+ }
2393
+ public function getFont()
2394
+ {
2395
+ return $this->font;
2396
+ }
2397
+ public function setKind($kind)
2398
+ {
2399
+ $this->kind = $kind;
2400
+ }
2401
+ public function getKind()
2402
+ {
2403
+ return $this->kind;
2404
+ }
2405
+ }
2406
+
2407
+ class Google_Service_AdSense_AdStyleColors extends Google_Model
2408
+ {
2409
+ protected $internal_gapi_mappings = array(
2410
+ );
2411
+ public $background;
2412
+ public $border;
2413
+ public $text;
2414
+ public $title;
2415
+ public $url;
2416
+
2417
+
2418
+ public function setBackground($background)
2419
+ {
2420
+ $this->background = $background;
2421
+ }
2422
+ public function getBackground()
2423
+ {
2424
+ return $this->background;
2425
+ }
2426
+ public function setBorder($border)
2427
+ {
2428
+ $this->border = $border;
2429
+ }
2430
+ public function getBorder()
2431
+ {
2432
+ return $this->border;
2433
+ }
2434
+ public function setText($text)
2435
+ {
2436
+ $this->text = $text;
2437
+ }
2438
+ public function getText()
2439
+ {
2440
+ return $this->text;
2441
+ }
2442
+ public function setTitle($title)
2443
+ {
2444
+ $this->title = $title;
2445
+ }
2446
+ public function getTitle()
2447
+ {
2448
+ return $this->title;
2449
+ }
2450
+ public function setUrl($url)
2451
+ {
2452
+ $this->url = $url;
2453
+ }
2454
+ public function getUrl()
2455
+ {
2456
+ return $this->url;
2457
+ }
2458
+ }
2459
+
2460
+ class Google_Service_AdSense_AdStyleFont extends Google_Model
2461
+ {
2462
+ protected $internal_gapi_mappings = array(
2463
+ );
2464
+ public $family;
2465
+ public $size;
2466
+
2467
+
2468
+ public function setFamily($family)
2469
+ {
2470
+ $this->family = $family;
2471
+ }
2472
+ public function getFamily()
2473
+ {
2474
+ return $this->family;
2475
+ }
2476
+ public function setSize($size)
2477
+ {
2478
+ $this->size = $size;
2479
+ }
2480
+ public function getSize()
2481
+ {
2482
+ return $this->size;
2483
+ }
2484
+ }
2485
+
2486
+ class Google_Service_AdSense_AdUnit extends Google_Model
2487
+ {
2488
+ protected $internal_gapi_mappings = array(
2489
+ );
2490
+ public $code;
2491
+ protected $contentAdsSettingsType = 'Google_Service_AdSense_AdUnitContentAdsSettings';
2492
+ protected $contentAdsSettingsDataType = '';
2493
+ protected $customStyleType = 'Google_Service_AdSense_AdStyle';
2494
+ protected $customStyleDataType = '';
2495
+ protected $feedAdsSettingsType = 'Google_Service_AdSense_AdUnitFeedAdsSettings';
2496
+ protected $feedAdsSettingsDataType = '';
2497
+ public $id;
2498
+ public $kind;
2499
+ protected $mobileContentAdsSettingsType = 'Google_Service_AdSense_AdUnitMobileContentAdsSettings';
2500
+ protected $mobileContentAdsSettingsDataType = '';
2501
+ public $name;
2502
+ public $savedStyleId;
2503
+ public $status;
2504
+
2505
+
2506
+ public function setCode($code)
2507
+ {
2508
+ $this->code = $code;
2509
+ }
2510
+ public function getCode()
2511
+ {
2512
+ return $this->code;
2513
+ }
2514
+ public function setContentAdsSettings(Google_Service_AdSense_AdUnitContentAdsSettings $contentAdsSettings)
2515
+ {
2516
+ $this->contentAdsSettings = $contentAdsSettings;
2517
+ }
2518
+ public function getContentAdsSettings()
2519
+ {
2520
+ return $this->contentAdsSettings;
2521
+ }
2522
+ public function setCustomStyle(Google_Service_AdSense_AdStyle $customStyle)
2523
+ {
2524
+ $this->customStyle = $customStyle;
2525
+ }
2526
+ public function getCustomStyle()
2527
+ {
2528
+ return $this->customStyle;
2529
+ }
2530
+ public function setFeedAdsSettings(Google_Service_AdSense_AdUnitFeedAdsSettings $feedAdsSettings)
2531
+ {
2532
+ $this->feedAdsSettings = $feedAdsSettings;
2533
+ }
2534
+ public function getFeedAdsSettings()
2535
+ {
2536
+ return $this->feedAdsSettings;
2537
+ }
2538
+ public function setId($id)
2539
+ {
2540
+ $this->id = $id;
2541
+ }
2542
+ public function getId()
2543
+ {
2544
+ return $this->id;
2545
+ }
2546
+ public function setKind($kind)
2547
+ {
2548
+ $this->kind = $kind;
2549
+ }
2550
+ public function getKind()
2551
+ {
2552
+ return $this->kind;
2553
+ }
2554
+ public function setMobileContentAdsSettings(Google_Service_AdSense_AdUnitMobileContentAdsSettings $mobileContentAdsSettings)
2555
+ {
2556
+ $this->mobileContentAdsSettings = $mobileContentAdsSettings;
2557
+ }
2558
+ public function getMobileContentAdsSettings()
2559
+ {
2560
+ return $this->mobileContentAdsSettings;
2561
+ }
2562
+ public function setName($name)
2563
+ {
2564
+ $this->name = $name;
2565
+ }
2566
+ public function getName()
2567
+ {
2568
+ return $this->name;
2569
+ }
2570
+ public function setSavedStyleId($savedStyleId)
2571
+ {
2572
+ $this->savedStyleId = $savedStyleId;
2573
+ }
2574
+ public function getSavedStyleId()
2575
+ {
2576
+ return $this->savedStyleId;
2577
+ }
2578
+ public function setStatus($status)
2579
+ {
2580
+ $this->status = $status;
2581
+ }
2582
+ public function getStatus()
2583
+ {
2584
+ return $this->status;
2585
+ }
2586
+ }
2587
+
2588
+ class Google_Service_AdSense_AdUnitContentAdsSettings extends Google_Model
2589
+ {
2590
+ protected $internal_gapi_mappings = array(
2591
+ );
2592
+ protected $backupOptionType = 'Google_Service_AdSense_AdUnitContentAdsSettingsBackupOption';
2593
+ protected $backupOptionDataType = '';
2594
+ public $size;
2595
+ public $type;
2596
+
2597
+
2598
+ public function setBackupOption(Google_Service_AdSense_AdUnitContentAdsSettingsBackupOption $backupOption)
2599
+ {
2600
+ $this->backupOption = $backupOption;
2601
+ }
2602
+ public function getBackupOption()
2603
+ {
2604
+ return $this->backupOption;
2605
+ }
2606
+ public function setSize($size)
2607
+ {
2608
+ $this->size = $size;
2609
+ }
2610
+ public function getSize()
2611
+ {
2612
+ return $this->size;
2613
+ }
2614
+ public function setType($type)
2615
+ {
2616
+ $this->type = $type;
2617
+ }
2618
+ public function getType()
2619
+ {
2620
+ return $this->type;
2621
+ }
2622
+ }
2623
+
2624
+ class Google_Service_AdSense_AdUnitContentAdsSettingsBackupOption extends Google_Model
2625
+ {
2626
+ protected $internal_gapi_mappings = array(
2627
+ );
2628
+ public $color;
2629
+ public $type;
2630
+ public $url;
2631
+
2632
+
2633
+ public function setColor($color)
2634
+ {
2635
+ $this->color = $color;
2636
+ }
2637
+ public function getColor()
2638
+ {
2639
+ return $this->color;
2640
+ }
2641
+ public function setType($type)
2642
+ {
2643
+ $this->type = $type;
2644
+ }
2645
+ public function getType()
2646
+ {
2647
+ return $this->type;
2648
+ }
2649
+ public function setUrl($url)
2650
+ {
2651
+ $this->url = $url;
2652
+ }
2653
+ public function getUrl()
2654
+ {
2655
+ return $this->url;
2656
+ }
2657
+ }
2658
+
2659
+ class Google_Service_AdSense_AdUnitFeedAdsSettings extends Google_Model
2660
+ {
2661
+ protected $internal_gapi_mappings = array(
2662
+ );
2663
+ public $adPosition;
2664
+ public $frequency;
2665
+ public $minimumWordCount;
2666
+ public $type;
2667
+
2668
+
2669
+ public function setAdPosition($adPosition)
2670
+ {
2671
+ $this->adPosition = $adPosition;
2672
+ }
2673
+ public function getAdPosition()
2674
+ {
2675
+ return $this->adPosition;
2676
+ }
2677
+ public function setFrequency($frequency)
2678
+ {
2679
+ $this->frequency = $frequency;
2680
+ }
2681
+ public function getFrequency()
2682
+ {
2683
+ return $this->frequency;
2684
+ }
2685
+ public function setMinimumWordCount($minimumWordCount)
2686
+ {
2687
+ $this->minimumWordCount = $minimumWordCount;
2688
+ }
2689
+ public function getMinimumWordCount()
2690
+ {
2691
+ return $this->minimumWordCount;
2692
+ }
2693
+ public function setType($type)
2694
+ {
2695
+ $this->type = $type;
2696
+ }
2697
+ public function getType()
2698
+ {
2699
+ return $this->type;
2700
+ }
2701
+ }
2702
+
2703
+ class Google_Service_AdSense_AdUnitMobileContentAdsSettings extends Google_Model
2704
+ {
2705
+ protected $internal_gapi_mappings = array(
2706
+ );
2707
+ public $markupLanguage;
2708
+ public $scriptingLanguage;
2709
+ public $size;
2710
+ public $type;
2711
+
2712
+
2713
+ public function setMarkupLanguage($markupLanguage)
2714
+ {
2715
+ $this->markupLanguage = $markupLanguage;
2716
+ }
2717
+ public function getMarkupLanguage()
2718
+ {
2719
+ return $this->markupLanguage;
2720
+ }
2721
+ public function setScriptingLanguage($scriptingLanguage)
2722
+ {
2723
+ $this->scriptingLanguage = $scriptingLanguage;
2724
+ }
2725
+ public function getScriptingLanguage()
2726
+ {
2727
+ return $this->scriptingLanguage;
2728
+ }
2729
+ public function setSize($size)
2730
+ {
2731
+ $this->size = $size;
2732
+ }
2733
+ public function getSize()
2734
+ {
2735
+ return $this->size;
2736
+ }
2737
+ public function setType($type)
2738
+ {
2739
+ $this->type = $type;
2740
+ }
2741
+ public function getType()
2742
+ {
2743
+ return $this->type;
2744
+ }
2745
+ }
2746
+
2747
+ class Google_Service_AdSense_AdUnits extends Google_Collection
2748
+ {
2749
+ protected $collection_key = 'items';
2750
+ protected $internal_gapi_mappings = array(
2751
+ );
2752
+ public $etag;
2753
+ protected $itemsType = 'Google_Service_AdSense_AdUnit';
2754
+ protected $itemsDataType = 'array';
2755
+ public $kind;
2756
+ public $nextPageToken;
2757
+
2758
+
2759
+ public function setEtag($etag)
2760
+ {
2761
+ $this->etag = $etag;
2762
+ }
2763
+ public function getEtag()
2764
+ {
2765
+ return $this->etag;
2766
+ }
2767
+ public function setItems($items)
2768
+ {
2769
+ $this->items = $items;
2770
+ }
2771
+ public function getItems()
2772
+ {
2773
+ return $this->items;
2774
+ }
2775
+ public function setKind($kind)
2776
+ {
2777
+ $this->kind = $kind;
2778
+ }
2779
+ public function getKind()
2780
+ {
2781
+ return $this->kind;
2782
+ }
2783
+ public function setNextPageToken($nextPageToken)
2784
+ {
2785
+ $this->nextPageToken = $nextPageToken;
2786
+ }
2787
+ public function getNextPageToken()
2788
+ {
2789
+ return $this->nextPageToken;
2790
+ }
2791
+ }
2792
+
2793
+ class Google_Service_AdSense_AdsenseReportsGenerateResponse extends Google_Collection
2794
+ {
2795
+ protected $collection_key = 'warnings';
2796
+ protected $internal_gapi_mappings = array(
2797
+ );
2798
+ public $averages;
2799
+ public $endDate;
2800
+ protected $headersType = 'Google_Service_AdSense_AdsenseReportsGenerateResponseHeaders';
2801
+ protected $headersDataType = 'array';
2802
+ public $kind;
2803
+ public $rows;
2804
+ public $startDate;
2805
+ public $totalMatchedRows;
2806
+ public $totals;
2807
+ public $warnings;
2808
+
2809
+
2810
+ public function setAverages($averages)
2811
+ {
2812
+ $this->averages = $averages;
2813
+ }
2814
+ public function getAverages()
2815
+ {
2816
+ return $this->averages;
2817
+ }
2818
+ public function setEndDate($endDate)
2819
+ {
2820
+ $this->endDate = $endDate;
2821
+ }
2822
+ public function getEndDate()
2823
+ {
2824
+ return $this->endDate;
2825
+ }
2826
+ public function setHeaders($headers)
2827
+ {
2828
+ $this->headers = $headers;
2829
+ }
2830
+ public function getHeaders()
2831
+ {
2832
+ return $this->headers;
2833
+ }
2834
+ public function setKind($kind)
2835
+ {
2836
+ $this->kind = $kind;
2837
+ }
2838
+ public function getKind()
2839
+ {
2840
+ return $this->kind;
2841
+ }
2842
+ public function setRows($rows)
2843
+ {
2844
+ $this->rows = $rows;
2845
+ }
2846
+ public function getRows()
2847
+ {
2848
+ return $this->rows;
2849
+ }
2850
+ public function setStartDate($startDate)
2851
+ {
2852
+ $this->startDate = $startDate;
2853
+ }
2854
+ public function getStartDate()
2855
+ {
2856
+ return $this->startDate;
2857
+ }
2858
+ public function setTotalMatchedRows($totalMatchedRows)
2859
+ {
2860
+ $this->totalMatchedRows = $totalMatchedRows;
2861
+ }
2862
+ public function getTotalMatchedRows()
2863
+ {
2864
+ return $this->totalMatchedRows;
2865
+ }
2866
+ public function setTotals($totals)
2867
+ {
2868
+ $this->totals = $totals;
2869
+ }
2870
+ public function getTotals()
2871
+ {
2872
+ return $this->totals;
2873
+ }
2874
+ public function setWarnings($warnings)
2875
+ {
2876
+ $this->warnings = $warnings;
2877
+ }
2878
+ public function getWarnings()
2879
+ {
2880
+ return $this->warnings;
2881
+ }
2882
+ }
2883
+
2884
+ class Google_Service_AdSense_AdsenseReportsGenerateResponseHeaders extends Google_Model
2885
+ {
2886
+ protected $internal_gapi_mappings = array(
2887
+ );
2888
+ public $currency;
2889
+ public $name;
2890
+ public $type;
2891
+
2892
+
2893
+ public function setCurrency($currency)
2894
+ {
2895
+ $this->currency = $currency;
2896
+ }
2897
+ public function getCurrency()
2898
+ {
2899
+ return $this->currency;
2900
+ }
2901
+ public function setName($name)
2902
+ {
2903
+ $this->name = $name;
2904
+ }
2905
+ public function getName()
2906
+ {
2907
+ return $this->name;
2908
+ }
2909
+ public function setType($type)
2910
+ {
2911
+ $this->type = $type;
2912
+ }
2913
+ public function getType()
2914
+ {
2915
+ return $this->type;
2916
+ }
2917
+ }
2918
+
2919
+ class Google_Service_AdSense_Alert extends Google_Model
2920
+ {
2921
+ protected $internal_gapi_mappings = array(
2922
+ );
2923
+ public $id;
2924
+ public $isDismissible;
2925
+ public $kind;
2926
+ public $message;
2927
+ public $severity;
2928
+ public $type;
2929
+
2930
+
2931
+ public function setId($id)
2932
+ {
2933
+ $this->id = $id;
2934
+ }
2935
+ public function getId()
2936
+ {
2937
+ return $this->id;
2938
+ }
2939
+ public function setIsDismissible($isDismissible)
2940
+ {
2941
+ $this->isDismissible = $isDismissible;
2942
+ }
2943
+ public function getIsDismissible()
2944
+ {
2945
+ return $this->isDismissible;
2946
+ }
2947
+ public function setKind($kind)
2948
+ {
2949
+ $this->kind = $kind;
2950
+ }
2951
+ public function getKind()
2952
+ {
2953
+ return $this->kind;
2954
+ }
2955
+ public function setMessage($message)
2956
+ {
2957
+ $this->message = $message;
2958
+ }
2959
+ public function getMessage()
2960
+ {
2961
+ return $this->message;
2962
+ }
2963
+ public function setSeverity($severity)
2964
+ {
2965
+ $this->severity = $severity;
2966
+ }
2967
+ public function getSeverity()
2968
+ {
2969
+ return $this->severity;
2970
+ }
2971
+ public function setType($type)
2972
+ {
2973
+ $this->type = $type;
2974
+ }
2975
+ public function getType()
2976
+ {
2977
+ return $this->type;
2978
+ }
2979
+ }
2980
+
2981
+ class Google_Service_AdSense_Alerts extends Google_Collection
2982
+ {
2983
+ protected $collection_key = 'items';
2984
+ protected $internal_gapi_mappings = array(
2985
+ );
2986
+ protected $itemsType = 'Google_Service_AdSense_Alert';
2987
+ protected $itemsDataType = 'array';
2988
+ public $kind;
2989
+
2990
+
2991
+ public function setItems($items)
2992
+ {
2993
+ $this->items = $items;
2994
+ }
2995
+ public function getItems()
2996
+ {
2997
+ return $this->items;
2998
+ }
2999
+ public function setKind($kind)
3000
+ {
3001
+ $this->kind = $kind;
3002
+ }
3003
+ public function getKind()
3004
+ {
3005
+ return $this->kind;
3006
+ }
3007
+ }
3008
+
3009
+ class Google_Service_AdSense_CustomChannel extends Google_Model
3010
+ {
3011
+ protected $internal_gapi_mappings = array(
3012
+ );
3013
+ public $code;
3014
+ public $id;
3015
+ public $kind;
3016
+ public $name;
3017
+ protected $targetingInfoType = 'Google_Service_AdSense_CustomChannelTargetingInfo';
3018
+ protected $targetingInfoDataType = '';
3019
+
3020
+
3021
+ public function setCode($code)
3022
+ {
3023
+ $this->code = $code;
3024
+ }
3025
+ public function getCode()
3026
+ {
3027
+ return $this->code;
3028
+ }
3029
+ public function setId($id)
3030
+ {
3031
+ $this->id = $id;
3032
+ }
3033
+ public function getId()
3034
+ {
3035
+ return $this->id;
3036
+ }
3037
+ public function setKind($kind)
3038
+ {
3039
+ $this->kind = $kind;
3040
+ }
3041
+ public function getKind()
3042
+ {
3043
+ return $this->kind;
3044
+ }
3045
+ public function setName($name)
3046
+ {
3047
+ $this->name = $name;
3048
+ }
3049
+ public function getName()
3050
+ {
3051
+ return $this->name;
3052
+ }
3053
+ public function setTargetingInfo(Google_Service_AdSense_CustomChannelTargetingInfo $targetingInfo)
3054
+ {
3055
+ $this->targetingInfo = $targetingInfo;
3056
+ }
3057
+ public function getTargetingInfo()
3058
+ {
3059
+ return $this->targetingInfo;
3060
+ }
3061
+ }
3062
+
3063
+ class Google_Service_AdSense_CustomChannelTargetingInfo extends Google_Model
3064
+ {
3065
+ protected $internal_gapi_mappings = array(
3066
+ );
3067
+ public $adsAppearOn;
3068
+ public $description;
3069
+ public $location;
3070
+ public $siteLanguage;
3071
+
3072
+
3073
+ public function setAdsAppearOn($adsAppearOn)
3074
+ {
3075
+ $this->adsAppearOn = $adsAppearOn;
3076
+ }
3077
+ public function getAdsAppearOn()
3078
+ {
3079
+ return $this->adsAppearOn;
3080
+ }
3081
+ public function setDescription($description)
3082
+ {
3083
+ $this->description = $description;
3084
+ }
3085
+ public function getDescription()
3086
+ {
3087
+ return $this->description;
3088
+ }
3089
+ public function setLocation($location)
3090
+ {
3091
+ $this->location = $location;
3092
+ }
3093
+ public function getLocation()
3094
+ {
3095
+ return $this->location;
3096
+ }
3097
+ public function setSiteLanguage($siteLanguage)
3098
+ {
3099
+ $this->siteLanguage = $siteLanguage;
3100
+ }
3101
+ public function getSiteLanguage()
3102
+ {
3103
+ return $this->siteLanguage;
3104
+ }
3105
+ }
3106
+
3107
+ class Google_Service_AdSense_CustomChannels extends Google_Collection
3108
+ {
3109
+ protected $collection_key = 'items';
3110
+ protected $internal_gapi_mappings = array(
3111
+ );
3112
+ public $etag;
3113
+ protected $itemsType = 'Google_Service_AdSense_CustomChannel';
3114
+ protected $itemsDataType = 'array';
3115
+ public $kind;
3116
+ public $nextPageToken;
3117
+
3118
+
3119
+ public function setEtag($etag)
3120
+ {
3121
+ $this->etag = $etag;
3122
+ }
3123
+ public function getEtag()
3124
+ {
3125
+ return $this->etag;
3126
+ }
3127
+ public function setItems($items)
3128
+ {
3129
+ $this->items = $items;
3130
+ }
3131
+ public function getItems()
3132
+ {
3133
+ return $this->items;
3134
+ }
3135
+ public function setKind($kind)
3136
+ {
3137
+ $this->kind = $kind;
3138
+ }
3139
+ public function getKind()
3140
+ {
3141
+ return $this->kind;
3142
+ }
3143
+ public function setNextPageToken($nextPageToken)
3144
+ {
3145
+ $this->nextPageToken = $nextPageToken;
3146
+ }
3147
+ public function getNextPageToken()
3148
+ {
3149
+ return $this->nextPageToken;
3150
+ }
3151
+ }
3152
+
3153
+ class Google_Service_AdSense_Metadata extends Google_Collection
3154
+ {
3155
+ protected $collection_key = 'items';
3156
+ protected $internal_gapi_mappings = array(
3157
+ );
3158
+ protected $itemsType = 'Google_Service_AdSense_ReportingMetadataEntry';
3159
+ protected $itemsDataType = 'array';
3160
+ public $kind;
3161
+
3162
+
3163
+ public function setItems($items)
3164
+ {
3165
+ $this->items = $items;
3166
+ }
3167
+ public function getItems()
3168
+ {
3169
+ return $this->items;
3170
+ }
3171
+ public function setKind($kind)
3172
+ {
3173
+ $this->kind = $kind;
3174
+ }
3175
+ public function getKind()
3176
+ {
3177
+ return $this->kind;
3178
+ }
3179
+ }
3180
+
3181
+ class Google_Service_AdSense_Payment extends Google_Model
3182
+ {
3183
+ protected $internal_gapi_mappings = array(
3184
+ );
3185
+ public $id;
3186
+ public $kind;
3187
+ public $paymentAmount;
3188
+ public $paymentAmountCurrencyCode;
3189
+ public $paymentDate;
3190
+
3191
+
3192
+ public function setId($id)
3193
+ {
3194
+ $this->id = $id;
3195
+ }
3196
+ public function getId()
3197
+ {
3198
+ return $this->id;
3199
+ }
3200
+ public function setKind($kind)
3201
+ {
3202
+ $this->kind = $kind;
3203
+ }
3204
+ public function getKind()
3205
+ {
3206
+ return $this->kind;
3207
+ }
3208
+ public function setPaymentAmount($paymentAmount)
3209
+ {
3210
+ $this->paymentAmount = $paymentAmount;
3211
+ }
3212
+ public function getPaymentAmount()
3213
+ {
3214
+ return $this->paymentAmount;
3215
+ }
3216
+ public function setPaymentAmountCurrencyCode($paymentAmountCurrencyCode)
3217
+ {
3218
+ $this->paymentAmountCurrencyCode = $paymentAmountCurrencyCode;
3219
+ }
3220
+ public function getPaymentAmountCurrencyCode()
3221
+ {
3222
+ return $this->paymentAmountCurrencyCode;
3223
+ }
3224
+ public function setPaymentDate($paymentDate)
3225
+ {
3226
+ $this->paymentDate = $paymentDate;
3227
+ }
3228
+ public function getPaymentDate()
3229
+ {
3230
+ return $this->paymentDate;
3231
+ }
3232
+ }
3233
+
3234
+ class Google_Service_AdSense_Payments extends Google_Collection
3235
+ {
3236
+ protected $collection_key = 'items';
3237
+ protected $internal_gapi_mappings = array(
3238
+ );
3239
+ protected $itemsType = 'Google_Service_AdSense_Payment';
3240
+ protected $itemsDataType = 'array';
3241
+ public $kind;
3242
+
3243
+
3244
+ public function setItems($items)
3245
+ {
3246
+ $this->items = $items;
3247
+ }
3248
+ public function getItems()
3249
+ {
3250
+ return $this->items;
3251
+ }
3252
+ public function setKind($kind)
3253
+ {
3254
+ $this->kind = $kind;
3255
+ }
3256
+ public function getKind()
3257
+ {
3258
+ return $this->kind;
3259
+ }
3260
+ }
3261
+
3262
+ class Google_Service_AdSense_ReportingMetadataEntry extends Google_Collection
3263
+ {
3264
+ protected $collection_key = 'supportedProducts';
3265
+ protected $internal_gapi_mappings = array(
3266
+ );
3267
+ public $compatibleDimensions;
3268
+ public $compatibleMetrics;
3269
+ public $id;
3270
+ public $kind;
3271
+ public $requiredDimensions;
3272
+ public $requiredMetrics;
3273
+ public $supportedProducts;
3274
+
3275
+
3276
+ public function setCompatibleDimensions($compatibleDimensions)
3277
+ {
3278
+ $this->compatibleDimensions = $compatibleDimensions;
3279
+ }
3280
+ public function getCompatibleDimensions()
3281
+ {
3282
+ return $this->compatibleDimensions;
3283
+ }
3284
+ public function setCompatibleMetrics($compatibleMetrics)
3285
+ {
3286
+ $this->compatibleMetrics = $compatibleMetrics;
3287
+ }
3288
+ public function getCompatibleMetrics()
3289
+ {
3290
+ return $this->compatibleMetrics;
3291
+ }
3292
+ public function setId($id)
3293
+ {
3294
+ $this->id = $id;
3295
+ }
3296
+ public function getId()
3297
+ {
3298
+ return $this->id;
3299
+ }
3300
+ public function setKind($kind)
3301
+ {
3302
+ $this->kind = $kind;
3303
+ }
3304
+ public function getKind()
3305
+ {
3306
+ return $this->kind;
3307
+ }
3308
+ public function setRequiredDimensions($requiredDimensions)
3309
+ {
3310
+ $this->requiredDimensions = $requiredDimensions;
3311
+ }
3312
+ public function getRequiredDimensions()
3313
+ {
3314
+ return $this->requiredDimensions;
3315
+ }
3316
+ public function setRequiredMetrics($requiredMetrics)
3317
+ {
3318
+ $this->requiredMetrics = $requiredMetrics;
3319
+ }
3320
+ public function getRequiredMetrics()
3321
+ {
3322
+ return $this->requiredMetrics;
3323
+ }
3324
+ public function setSupportedProducts($supportedProducts)
3325
+ {
3326
+ $this->supportedProducts = $supportedProducts;
3327
+ }
3328
+ public function getSupportedProducts()
3329
+ {
3330
+ return $this->supportedProducts;
3331
+ }
3332
+ }
3333
+
3334
+ class Google_Service_AdSense_SavedAdStyle extends Google_Model
3335
+ {
3336
+ protected $internal_gapi_mappings = array(
3337
+ );
3338
+ protected $adStyleType = 'Google_Service_AdSense_AdStyle';
3339
+ protected $adStyleDataType = '';
3340
+ public $id;
3341
+ public $kind;
3342
+ public $name;
3343
+
3344
+
3345
+ public function setAdStyle(Google_Service_AdSense_AdStyle $adStyle)
3346
+ {
3347
+ $this->adStyle = $adStyle;
3348
+ }
3349
+ public function getAdStyle()
3350
+ {
3351
+ return $this->adStyle;
3352
+ }
3353
+ public function setId($id)
3354
+ {
3355
+ $this->id = $id;
3356
+ }
3357
+ public function getId()
3358
+ {
3359
+ return $this->id;
3360
+ }
3361
+ public function setKind($kind)
3362
+ {
3363
+ $this->kind = $kind;
3364
+ }
3365
+ public function getKind()
3366
+ {
3367
+ return $this->kind;
3368
+ }
3369
+ public function setName($name)
3370
+ {
3371
+ $this->name = $name;
3372
+ }
3373
+ public function getName()
3374
+ {
3375
+ return $this->name;
3376
+ }
3377
+ }
3378
+
3379
+ class Google_Service_AdSense_SavedAdStyles extends Google_Collection
3380
+ {
3381
+ protected $collection_key = 'items';
3382
+ protected $internal_gapi_mappings = array(
3383
+ );
3384
+ public $etag;
3385
+ protected $itemsType = 'Google_Service_AdSense_SavedAdStyle';
3386
+ protected $itemsDataType = 'array';
3387
+ public $kind;
3388
+ public $nextPageToken;
3389
+
3390
+
3391
+ public function setEtag($etag)
3392
+ {
3393
+ $this->etag = $etag;
3394
+ }
3395
+ public function getEtag()
3396
+ {
3397
+ return $this->etag;
3398
+ }
3399
+ public function setItems($items)
3400
+ {
3401
+ $this->items = $items;
3402
+ }
3403
+ public function getItems()
3404
+ {
3405
+ return $this->items;
3406
+ }
3407
+ public function setKind($kind)
3408
+ {
3409
+ $this->kind = $kind;
3410
+ }
3411
+ public function getKind()
3412
+ {
3413
+ return $this->kind;
3414
+ }
3415
+ public function setNextPageToken($nextPageToken)
3416
+ {
3417
+ $this->nextPageToken = $nextPageToken;
3418
+ }
3419
+ public function getNextPageToken()
3420
+ {
3421
+ return $this->nextPageToken;
3422
+ }
3423
+ }
3424
+
3425
+ class Google_Service_AdSense_SavedReport extends Google_Model
3426
+ {
3427
+ protected $internal_gapi_mappings = array(
3428
+ );
3429
+ public $id;
3430
+ public $kind;
3431
+ public $name;
3432
+
3433
+
3434
+ public function setId($id)
3435
+ {
3436
+ $this->id = $id;
3437
+ }
3438
+ public function getId()
3439
+ {
3440
+ return $this->id;
3441
+ }
3442
+ public function setKind($kind)
3443
+ {
3444
+ $this->kind = $kind;
3445
+ }
3446
+ public function getKind()
3447
+ {
3448
+ return $this->kind;
3449
+ }
3450
+ public function setName($name)
3451
+ {
3452
+ $this->name = $name;
3453
+ }
3454
+ public function getName()
3455
+ {
3456
+ return $this->name;
3457
+ }
3458
+ }
3459
+
3460
+ class Google_Service_AdSense_SavedReports extends Google_Collection
3461
+ {
3462
+ protected $collection_key = 'items';
3463
+ protected $internal_gapi_mappings = array(
3464
+ );
3465
+ public $etag;
3466
+ protected $itemsType = 'Google_Service_AdSense_SavedReport';
3467
+ protected $itemsDataType = 'array';
3468
+ public $kind;
3469
+ public $nextPageToken;
3470
+
3471
+
3472
+ public function setEtag($etag)
3473
+ {
3474
+ $this->etag = $etag;
3475
+ }
3476
+ public function getEtag()
3477
+ {
3478
+ return $this->etag;
3479
+ }
3480
+ public function setItems($items)
3481
+ {
3482
+ $this->items = $items;
3483
+ }
3484
+ public function getItems()
3485
+ {
3486
+ return $this->items;
3487
+ }
3488
+ public function setKind($kind)
3489
+ {
3490
+ $this->kind = $kind;
3491
+ }
3492
+ public function getKind()
3493
+ {
3494
+ return $this->kind;
3495
+ }
3496
+ public function setNextPageToken($nextPageToken)
3497
+ {
3498
+ $this->nextPageToken = $nextPageToken;
3499
+ }
3500
+ public function getNextPageToken()
3501
+ {
3502
+ return $this->nextPageToken;
3503
+ }
3504
+ }
3505
+
3506
+ class Google_Service_AdSense_UrlChannel extends Google_Model
3507
+ {
3508
+ protected $internal_gapi_mappings = array(
3509
+ );
3510
+ public $id;
3511
+ public $kind;
3512
+ public $urlPattern;
3513
+
3514
+
3515
+ public function setId($id)
3516
+ {
3517
+ $this->id = $id;
3518
+ }
3519
+ public function getId()
3520
+ {
3521
+ return $this->id;
3522
+ }
3523
+ public function setKind($kind)
3524
+ {
3525
+ $this->kind = $kind;
3526
+ }
3527
+ public function getKind()
3528
+ {
3529
+ return $this->kind;
3530
+ }
3531
+ public function setUrlPattern($urlPattern)
3532
+ {
3533
+ $this->urlPattern = $urlPattern;
3534
+ }
3535
+ public function getUrlPattern()
3536
+ {
3537
+ return $this->urlPattern;
3538
+ }
3539
+ }
3540
+
3541
+ class Google_Service_AdSense_UrlChannels extends Google_Collection
3542
+ {
3543
+ protected $collection_key = 'items';
3544
+ protected $internal_gapi_mappings = array(
3545
+ );
3546
+ public $etag;
3547
+ protected $itemsType = 'Google_Service_AdSense_UrlChannel';
3548
+ protected $itemsDataType = 'array';
3549
+ public $kind;
3550
+ public $nextPageToken;
3551
+
3552
+
3553
+ public function setEtag($etag)
3554
+ {
3555
+ $this->etag = $etag;
3556
+ }
3557
+ public function getEtag()
3558
+ {
3559
+ return $this->etag;
3560
+ }
3561
+ public function setItems($items)
3562
+ {
3563
+ $this->items = $items;
3564
+ }
3565
+ public function getItems()
3566
+ {
3567
+ return $this->items;
3568
+ }
3569
+ public function setKind($kind)
3570
+ {
3571
+ $this->kind = $kind;
3572
+ }
3573
+ public function getKind()
3574
+ {
3575
+ return $this->kind;
3576
+ }
3577
+ public function setNextPageToken($nextPageToken)
3578
+ {
3579
+ $this->nextPageToken = $nextPageToken;
3580
+ }
3581
+ public function getNextPageToken()
3582
+ {
3583
+ return $this->nextPageToken;
3584
+ }
3585
+ }
tools/src/Google/Service/Analytics.php ADDED
@@ -0,0 +1,9447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Copyright 2010 Google Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+
18
+ /**
19
+ * Service definition for Analytics (v3).
20
+ *
21
+ * <p>
22
+ * View and manage your Google Analytics data</p>
23
+ *
24
+ * <p>
25
+ * For more information about this service, see the API
26
+ * <a href="https://developers.google.com/analytics/" target="_blank">Documentation</a>
27
+ * </p>
28
+ *
29
+ * @author Google, Inc.
30
+ */
31
+ class Google_Service_Analytics extends Google_Service
32
+ {
33
+ /** View and manage your Google Analytics data. */
34
+ const ANALYTICS =
35
+ "https://www.googleapis.com/auth/analytics";
36
+ /** Edit Google Analytics management entities. */
37
+ const ANALYTICS_EDIT =
38
+ "https://www.googleapis.com/auth/analytics.edit";
39
+ /** Manage Google Analytics Account users by email address. */
40
+ const ANALYTICS_MANAGE_USERS =
41
+ "https://www.googleapis.com/auth/analytics.manage.users";
42
+ /** View Google Analytics user permissions. */
43
+ const ANALYTICS_MANAGE_USERS_READONLY =
44
+ "https://www.googleapis.com/auth/analytics.manage.users.readonly";
45
+ /** Create a new Google Analytics account along with its default property and view. */
46
+ const ANALYTICS_PROVISION =
47
+ "https://www.googleapis.com/auth/analytics.provision";
48
+ /** View your Google Analytics data. */
49
+ const ANALYTICS_READONLY =
50
+ "https://www.googleapis.com/auth/analytics.readonly";
51
+
52
+ public $data_ga;
53
+ public $data_mcf;
54
+ public $data_realtime;
55
+ public $management_accountSummaries;
56
+ public $management_accountUserLinks;
57
+ public $management_accounts;
58
+ public $management_customDataSources;
59
+ public $management_dailyUploads;
60
+ public $management_experiments;
61
+ public $management_filters;
62
+ public $management_goals;
63
+ public $management_profileFilterLinks;
64
+ public $management_profileUserLinks;
65
+ public $management_profiles;
66
+ public $management_segments;
67
+ public $management_unsampledReports;
68
+ public $management_uploads;
69
+ public $management_webPropertyAdWordsLinks;
70
+ public $management_webproperties;
71
+ public $management_webpropertyUserLinks;
72
+ public $metadata_columns;
73
+ public $provisioning;
74
+
75
+
76
+ /**
77
+ * Constructs the internal representation of the Analytics service.
78
+ *
79
+ * @param Google_Client $client
80
+ */
81
+ public function __construct(Google_Client $client)
82
+ {
83
+ parent::__construct($client);
84
+ $this->servicePath = 'analytics/v3/';
85
+ $this->version = 'v3';
86
+ $this->serviceName = 'analytics';
87
+
88
+ $this->data_ga = new Google_Service_Analytics_DataGa_Resource(
89
+ $this,
90
+ $this->serviceName,
91
+ 'ga',
92
+ array(
93
+ 'methods' => array(
94
+ 'get' => array(
95
+ 'path' => 'data/ga',
96
+ 'httpMethod' => 'GET',
97
+ 'parameters' => array(
98
+ 'ids' => array(
99
+ 'location' => 'query',
100
+ 'type' => 'string',
101
+ 'required' => true,
102
+ ),
103
+ 'start-date' => array(
104
+ 'location' => 'query',
105
+ 'type' => 'string',
106
+ 'required' => true,
107
+ ),
108
+ 'end-date' => array(
109
+ 'location' => 'query',
110
+ 'type' => 'string',
111
+ 'required' => true,
112
+ ),
113
+ 'metrics' => array(
114
+ 'location' => 'query',
115
+ 'type' => 'string',
116
+ 'required' => true,
117
+ ),
118
+ 'max-results' => array(
119
+ 'location' => 'query',
120
+ 'type' => 'integer',
121
+ ),
122
+ 'sort' => array(
123
+ 'location' => 'query',
124
+ 'type' => 'string',
125
+ ),
126
+ 'dimensions' => array(
127
+ 'location' => 'query',
128
+ 'type' => 'string',
129
+ ),
130
+ 'start-index' => array(
131
+ 'location' => 'query',
132
+ 'type' => 'integer',
133
+ ),
134
+ 'segment' => array(
135
+ 'location' => 'query',
136
+ 'type' => 'string',
137
+ ),
138
+ 'samplingLevel' => array(
139
+ 'location' => 'query',
140
+ 'type' => 'string',
141
+ ),
142
+ 'filters' => array(
143
+ 'location' => 'query',
144
+ 'type' => 'string',
145
+ ),
146
+ 'output' => array(
147
+ 'location' => 'query',
148
+ 'type' => 'string',
149
+ ),
150
+ ),
151
+ ),
152
+ )
153
+ )
154
+ );
155
+ $this->data_mcf = new Google_Service_Analytics_DataMcf_Resource(
156
+ $this,
157
+ $this->serviceName,
158
+ 'mcf',
159
+ array(
160
+ 'methods' => array(
161
+ 'get' => array(
162
+ 'path' => 'data/mcf',
163
+ 'httpMethod' => 'GET',
164
+ 'parameters' => array(
165
+ 'ids' => array(
166
+ 'location' => 'query',
167
+ 'type' => 'string',
168
+ 'required' => true,
169
+ ),
170
+ 'start-date' => array(
171
+ 'location' => 'query',
172
+ 'type' => 'string',
173
+ 'required' => true,
174
+ ),
175
+ 'end-date' => array(
176
+ 'location' => 'query',
177
+ 'type' => 'string',
178
+ 'required' => true,
179
+ ),
180
+ 'metrics' => array(
181
+ 'location' => 'query',
182
+ 'type' => 'string',
183
+ 'required' => true,
184
+ ),
185
+ 'max-results' => array(
186
+ 'location' => 'query',
187
+ 'type' => 'integer',
188
+ ),
189
+ 'sort' => array(
190
+ 'location' => 'query',
191
+ 'type' => 'string',
192
+ ),
193
+ 'dimensions' => array(
194
+ 'location' => 'query',
195
+ 'type' => 'string',
196
+ ),
197
+ 'start-index' => array(
198
+ 'location' => 'query',
199
+ 'type' => 'integer',
200
+ ),
201
+ 'samplingLevel' => array(
202
+ 'location' => 'query',
203
+ 'type' => 'string',
204
+ ),
205
+ 'filters' => array(
206
+ 'location' => 'query',
207
+ 'type' => 'string',
208
+ ),
209
+ ),
210
+ ),
211
+ )
212
+ )
213
+ );
214
+ $this->data_realtime = new Google_Service_Analytics_DataRealtime_Resource(
215
+ $this,
216
+ $this->serviceName,
217
+ 'realtime',
218
+ array(
219
+ 'methods' => array(
220
+ 'get' => array(
221
+ 'path' => 'data/realtime',
222
+ 'httpMethod' => 'GET',
223
+ 'parameters' => array(
224
+ 'ids' => array(
225
+ 'location' => 'query',
226
+ 'type' => 'string',
227
+ 'required' => true,
228
+ ),
229
+ 'metrics' => array(
230
+ 'location' => 'query',
231
+ 'type' => 'string',
232
+ 'required' => true,
233
+ ),
234
+ 'max-results' => array(
235
+ 'location' => 'query',
236
+ 'type' => 'integer',
237
+ ),
238
+ 'sort' => array(
239
+ 'location' => 'query',
240
+ 'type' => 'string',
241
+ ),
242
+ 'dimensions' => array(
243
+ 'location' => 'query',
244
+ 'type' => 'string',
245
+ ),
246
+ 'filters' => array(
247
+ 'location' => 'query',
248
+ 'type' => 'string',
249
+ ),
250
+ ),
251
+ ),
252
+ )
253
+ )
254
+ );
255
+ $this->management_accountSummaries = new Google_Service_Analytics_ManagementAccountSummaries_Resource(
256
+ $this,
257
+ $this->serviceName,
258
+ 'accountSummaries',
259
+ array(
260
+ 'methods' => array(
261
+ 'list' => array(
262
+ 'path' => 'management/accountSummaries',
263
+ 'httpMethod' => 'GET',
264
+ 'parameters' => array(
265
+ 'max-results' => array(
266
+ 'location' => 'query',
267
+ 'type' => 'integer',
268
+ ),
269
+ 'start-index' => array(
270
+ 'location' => 'query',
271
+ 'type' => 'integer',
272
+ ),
273
+ ),
274
+ ),
275
+ )
276
+ )
277
+ );
278
+ $this->management_accountUserLinks = new Google_Service_Analytics_ManagementAccountUserLinks_Resource(
279
+ $this,
280
+ $this->serviceName,
281
+ 'accountUserLinks',
282
+ array(
283
+ 'methods' => array(
284
+ 'delete' => array(
285
+ 'path' => 'management/accounts/{accountId}/entityUserLinks/{linkId}',
286
+ 'httpMethod' => 'DELETE',
287
+ 'parameters' => array(
288
+ 'accountId' => array(
289
+ 'location' => 'path',
290
+ 'type' => 'string',
291
+ 'required' => true,
292
+ ),
293
+ 'linkId' => array(
294
+ 'location' => 'path',
295
+ 'type' => 'string',
296
+ 'required' => true,
297
+ ),
298
+ ),
299
+ ),'insert' => array(
300
+ 'path' => 'management/accounts/{accountId}/entityUserLinks',
301
+ 'httpMethod' => 'POST',
302
+ 'parameters' => array(
303
+ 'accountId' => array(
304
+ 'location' => 'path',
305
+ 'type' => 'string',
306
+ 'required' => true,
307
+ ),
308
+ ),
309
+ ),'list' => array(
310
+ 'path' => 'management/accounts/{accountId}/entityUserLinks',
311
+ 'httpMethod' => 'GET',
312
+ 'parameters' => array(
313
+ 'accountId' => array(
314
+ 'location' => 'path',
315
+ 'type' => 'string',
316
+ 'required' => true,
317
+ ),
318
+ 'max-results' => array(
319
+ 'location' => 'query',
320
+ 'type' => 'integer',
321
+ ),
322
+ 'start-index' => array(
323
+ 'location' => 'query',
324
+ 'type' => 'integer',
325
+ ),
326
+ ),
327
+ ),'update' => array(
328
+ 'path' => 'management/accounts/{accountId}/entityUserLinks/{linkId}',
329
+ 'httpMethod' => 'PUT',
330
+ 'parameters' => array(
331
+ 'accountId' => array(
332
+ 'location' => 'path',
333
+ 'type' => 'string',
334
+ 'required' => true,
335
+ ),
336
+ 'linkId' => array(
337
+ 'location' => 'path',
338
+ 'type' => 'string',
339
+ 'required' => true,
340
+ ),
341
+ ),
342
+ ),
343
+ )
344
+ )
345
+ );
346
+ $this->management_accounts = new Google_Service_Analytics_ManagementAccounts_Resource(
347
+ $this,
348
+ $this->serviceName,
349
+ 'accounts',
350
+ array(
351
+ 'methods' => array(
352
+ 'list' => array(
353
+ 'path' => 'management/accounts',
354
+ 'httpMethod' => 'GET',
355
+ 'parameters' => array(
356
+ 'max-results' => array(
357
+ 'location' => 'query',
358
+ 'type' => 'integer',
359
+ ),
360
+ 'start-index' => array(
361
+ 'location' => 'query',
362
+ 'type' => 'integer',
363
+ ),
364
+ ),
365
+ ),
366
+ )
367
+ )
368
+ );
369
+ $this->management_customDataSources = new Google_Service_Analytics_ManagementCustomDataSources_Resource(
370
+ $this,
371
+ $this->serviceName,
372
+ 'customDataSources',
373
+ array(
374
+ 'methods' => array(
375
+ 'list' => array(
376
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources',
377
+ 'httpMethod' => 'GET',
378
+ 'parameters' => array(
379
+ 'accountId' => array(
380
+ 'location' => 'path',
381
+ 'type' => 'string',
382
+ 'required' => true,
383
+ ),
384
+ 'webPropertyId' => array(
385
+ 'location' => 'path',
386
+ 'type' => 'string',
387
+ 'required' => true,
388
+ ),
389
+ 'max-results' => array(
390
+ 'location' => 'query',
391
+ 'type' => 'integer',
392
+ ),
393
+ 'start-index' => array(
394
+ 'location' => 'query',
395
+ 'type' => 'integer',
396
+ ),
397
+ ),
398
+ ),
399
+ )
400
+ )
401
+ );
402
+ $this->management_dailyUploads = new Google_Service_Analytics_ManagementDailyUploads_Resource(
403
+ $this,
404
+ $this->serviceName,
405
+ 'dailyUploads',
406
+ array(
407
+ 'methods' => array(
408
+ 'delete' => array(
409
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}',
410
+ 'httpMethod' => 'DELETE',
411
+ 'parameters' => array(
412
+ 'accountId' => array(
413
+ 'location' => 'path',
414
+ 'type' => 'string',
415
+ 'required' => true,
416
+ ),
417
+ 'webPropertyId' => array(
418
+ 'location' => 'path',
419
+ 'type' => 'string',
420
+ 'required' => true,
421
+ ),
422
+ 'customDataSourceId' => array(
423
+ 'location' => 'path',
424
+ 'type' => 'string',
425
+ 'required' => true,
426
+ ),
427
+ 'date' => array(
428
+ 'location' => 'path',
429
+ 'type' => 'string',
430
+ 'required' => true,
431
+ ),
432
+ 'type' => array(
433
+ 'location' => 'query',
434
+ 'type' => 'string',
435
+ 'required' => true,
436
+ ),
437
+ ),
438
+ ),'list' => array(
439
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads',
440
+ 'httpMethod' => 'GET',
441
+ 'parameters' => array(
442
+ 'accountId' => array(
443
+ 'location' => 'path',
444
+ 'type' => 'string',
445
+ 'required' => true,
446
+ ),
447
+ 'webPropertyId' => array(
448
+ 'location' => 'path',
449
+ 'type' => 'string',
450
+ 'required' => true,
451
+ ),
452
+ 'customDataSourceId' => array(
453
+ 'location' => 'path',
454
+ 'type' => 'string',
455
+ 'required' => true,
456
+ ),
457
+ 'start-date' => array(
458
+ 'location' => 'query',
459
+ 'type' => 'string',
460
+ 'required' => true,
461
+ ),
462
+ 'end-date' => array(
463
+ 'location' => 'query',
464
+ 'type' => 'string',
465
+ 'required' => true,
466
+ ),
467
+ 'max-results' => array(
468
+ 'location' => 'query',
469
+ 'type' => 'integer',
470
+ ),
471
+ 'start-index' => array(
472
+ 'location' => 'query',
473
+ 'type' => 'integer',
474
+ ),
475
+ ),
476
+ ),'upload' => array(
477
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads',
478
+ 'httpMethod' => 'POST',
479
+ 'parameters' => array(
480
+ 'accountId' => array(
481
+ 'location' => 'path',
482
+ 'type' => 'string',
483
+ 'required' => true,
484
+ ),
485
+ 'webPropertyId' => array(
486
+ 'location' => 'path',
487
+ 'type' => 'string',
488
+ 'required' => true,
489
+ ),
490
+ 'customDataSourceId' => array(
491
+ 'location' => 'path',
492
+ 'type' => 'string',
493
+ 'required' => true,
494
+ ),
495
+ 'date' => array(
496
+ 'location' => 'path',
497
+ 'type' => 'string',
498
+ 'required' => true,
499
+ ),
500
+ 'appendNumber' => array(
501
+ 'location' => 'query',
502
+ 'type' => 'integer',
503
+ 'required' => true,
504
+ ),
505
+ 'type' => array(
506
+ 'location' => 'query',
507
+ 'type' => 'string',
508
+ 'required' => true,
509
+ ),
510
+ 'reset' => array(
511
+ 'location' => 'query',
512
+ 'type' => 'boolean',
513
+ ),
514
+ ),
515
+ ),
516
+ )
517
+ )
518
+ );
519
+ $this->management_experiments = new Google_Service_Analytics_ManagementExperiments_Resource(
520
+ $this,
521
+ $this->serviceName,
522
+ 'experiments',
523
+ array(
524
+ 'methods' => array(
525
+ 'delete' => array(
526
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}',
527
+ 'httpMethod' => 'DELETE',
528
+ 'parameters' => array(
529
+ 'accountId' => array(
530
+ 'location' => 'path',
531
+ 'type' => 'string',
532
+ 'required' => true,
533
+ ),
534
+ 'webPropertyId' => array(
535
+ 'location' => 'path',
536
+ 'type' => 'string',
537
+ 'required' => true,
538
+ ),
539
+ 'profileId' => array(
540
+ 'location' => 'path',
541
+ 'type' => 'string',
542
+ 'required' => true,
543
+ ),
544
+ 'experimentId' => array(
545
+ 'location' => 'path',
546
+ 'type' => 'string',
547
+ 'required' => true,
548
+ ),
549
+ ),
550
+ ),'get' => array(
551
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}',
552
+ 'httpMethod' => 'GET',
553
+ 'parameters' => array(
554
+ 'accountId' => array(
555
+ 'location' => 'path',
556
+ 'type' => 'string',
557
+ 'required' => true,
558
+ ),
559
+ 'webPropertyId' => array(
560
+ 'location' => 'path',
561
+ 'type' => 'string',
562
+ 'required' => true,
563
+ ),
564
+ 'profileId' => array(
565
+ 'location' => 'path',
566
+ 'type' => 'string',
567
+ 'required' => true,
568
+ ),
569
+ 'experimentId' => array(
570
+ 'location' => 'path',
571
+ 'type' => 'string',
572
+ 'required' => true,
573
+ ),
574
+ ),
575
+ ),'insert' => array(
576
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments',
577
+ 'httpMethod' => 'POST',
578
+ 'parameters' => array(
579
+ 'accountId' => array(
580
+ 'location' => 'path',
581
+ 'type' => 'string',
582
+ 'required' => true,
583
+ ),
584
+ 'webPropertyId' => array(
585
+ 'location' => 'path',
586
+ 'type' => 'string',
587
+ 'required' => true,
588
+ ),
589
+ 'profileId' => array(
590
+ 'location' => 'path',
591
+ 'type' => 'string',
592
+ 'required' => true,
593
+ ),
594
+ ),
595
+ ),'list' => array(
596
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments',
597
+ 'httpMethod' => 'GET',
598
+ 'parameters' => array(
599
+ 'accountId' => array(
600
+ 'location' => 'path',
601
+ 'type' => 'string',
602
+ 'required' => true,
603
+ ),
604
+ 'webPropertyId' => array(
605
+ 'location' => 'path',
606
+ 'type' => 'string',
607
+ 'required' => true,
608
+ ),
609
+ 'profileId' => array(
610
+ 'location' => 'path',
611
+ 'type' => 'string',
612
+ 'required' => true,
613
+ ),
614
+ 'max-results' => array(
615
+ 'location' => 'query',
616
+ 'type' => 'integer',
617
+ ),
618
+ 'start-index' => array(
619
+ 'location' => 'query',
620
+ 'type' => 'integer',
621
+ ),
622
+ ),
623
+ ),'patch' => array(
624
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}',
625
+ 'httpMethod' => 'PATCH',
626
+ 'parameters' => array(
627
+ 'accountId' => array(
628
+ 'location' => 'path',
629
+ 'type' => 'string',
630
+ 'required' => true,
631
+ ),
632
+ 'webPropertyId' => array(
633
+ 'location' => 'path',
634
+ 'type' => 'string',
635
+ 'required' => true,
636
+ ),
637
+ 'profileId' => array(
638
+ 'location' => 'path',
639
+ 'type' => 'string',
640
+ 'required' => true,
641
+ ),
642
+ 'experimentId' => array(
643
+ 'location' => 'path',
644
+ 'type' => 'string',
645
+ 'required' => true,
646
+ ),
647
+ ),
648
+ ),'update' => array(
649
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}',
650
+ 'httpMethod' => 'PUT',
651
+ 'parameters' => array(
652
+ 'accountId' => array(
653
+ 'location' => 'path',
654
+ 'type' => 'string',
655
+ 'required' => true,
656
+ ),
657
+ 'webPropertyId' => array(
658
+ 'location' => 'path',
659
+ 'type' => 'string',
660
+ 'required' => true,
661
+ ),
662
+ 'profileId' => array(
663
+ 'location' => 'path',
664
+ 'type' => 'string',
665
+ 'required' => true,
666
+ ),
667
+ 'experimentId' => array(
668
+ 'location' => 'path',
669
+ 'type' => 'string',
670
+ 'required' => true,
671
+ ),
672
+ ),
673
+ ),
674
+ )
675
+ )
676
+ );
677
+ $this->management_filters = new Google_Service_Analytics_ManagementFilters_Resource(
678
+ $this,
679
+ $this->serviceName,
680
+ 'filters',
681
+ array(
682
+ 'methods' => array(
683
+ 'delete' => array(
684
+ 'path' => 'management/accounts/{accountId}/filters/{filterId}',
685
+ 'httpMethod' => 'DELETE',
686
+ 'parameters' => array(
687
+ 'accountId' => array(
688
+ 'location' => 'path',
689
+ 'type' => 'string',
690
+ 'required' => true,
691
+ ),
692
+ 'filterId' => array(
693
+ 'location' => 'path',
694
+ 'type' => 'string',
695
+ 'required' => true,
696
+ ),
697
+ ),
698
+ ),'get' => array(
699
+ 'path' => 'management/accounts/{accountId}/filters/{filterId}',
700
+ 'httpMethod' => 'GET',
701
+ 'parameters' => array(
702
+ 'accountId' => array(
703
+ 'location' => 'path',
704
+ 'type' => 'string',
705
+ 'required' => true,
706
+ ),
707
+ 'filterId' => array(
708
+ 'location' => 'path',
709
+ 'type' => 'string',
710
+ 'required' => true,
711
+ ),
712
+ ),
713
+ ),'insert' => array(
714
+ 'path' => 'management/accounts/{accountId}/filters',
715
+ 'httpMethod' => 'POST',
716
+ 'parameters' => array(
717
+ 'accountId' => array(
718
+ 'location' => 'path',
719
+ 'type' => 'string',
720
+ 'required' => true,
721
+ ),
722
+ ),
723
+ ),'list' => array(
724
+ 'path' => 'management/accounts/{accountId}/filters',
725
+ 'httpMethod' => 'GET',
726
+ 'parameters' => array(
727
+ 'accountId' => array(
728
+ 'location' => 'path',
729
+ 'type' => 'string',
730
+ 'required' => true,
731
+ ),
732
+ 'max-results' => array(
733
+ 'location' => 'query',
734
+ 'type' => 'integer',
735
+ ),
736
+ 'start-index' => array(
737
+ 'location' => 'query',
738
+ 'type' => 'integer',
739
+ ),
740
+ ),
741
+ ),'patch' => array(
742
+ 'path' => 'management/accounts/{accountId}/filters/{filterId}',
743
+ 'httpMethod' => 'PATCH',
744
+ 'parameters' => array(
745
+ 'accountId' => array(
746
+ 'location' => 'path',
747
+ 'type' => 'string',
748
+ 'required' => true,
749
+ ),
750
+ 'filterId' => array(
751
+ 'location' => 'path',
752
+ 'type' => 'string',
753
+ 'required' => true,
754
+ ),
755
+ ),
756
+ ),'update' => array(
757
+ 'path' => 'management/accounts/{accountId}/filters/{filterId}',
758
+ 'httpMethod' => 'PUT',
759
+ 'parameters' => array(
760
+ 'accountId' => array(
761
+ 'location' => 'path',
762
+ 'type' => 'string',
763
+ 'required' => true,
764
+ ),
765
+ 'filterId' => array(
766
+ 'location' => 'path',
767
+ 'type' => 'string',
768
+ 'required' => true,
769
+ ),
770
+ ),
771
+ ),
772
+ )
773
+ )
774
+ );
775
+ $this->management_goals = new Google_Service_Analytics_ManagementGoals_Resource(
776
+ $this,
777
+ $this->serviceName,
778
+ 'goals',
779
+ array(
780
+ 'methods' => array(
781
+ 'get' => array(
782
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}',
783
+ 'httpMethod' => 'GET',
784
+ 'parameters' => array(
785
+ 'accountId' => array(
786
+ 'location' => 'path',
787
+ 'type' => 'string',
788
+ 'required' => true,
789
+ ),
790
+ 'webPropertyId' => array(
791
+ 'location' => 'path',
792
+ 'type' => 'string',
793
+ 'required' => true,
794
+ ),
795
+ 'profileId' => array(
796
+ 'location' => 'path',
797
+ 'type' => 'string',
798
+ 'required' => true,
799
+ ),
800
+ 'goalId' => array(
801
+ 'location' => 'path',
802
+ 'type' => 'string',
803
+ 'required' => true,
804
+ ),
805
+ ),
806
+ ),'insert' => array(
807
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals',
808
+ 'httpMethod' => 'POST',
809
+ 'parameters' => array(
810
+ 'accountId' => array(
811
+ 'location' => 'path',
812
+ 'type' => 'string',
813
+ 'required' => true,
814
+ ),
815
+ 'webPropertyId' => array(
816
+ 'location' => 'path',
817
+ 'type' => 'string',
818
+ 'required' => true,
819
+ ),
820
+ 'profileId' => array(
821
+ 'location' => 'path',
822
+ 'type' => 'string',
823
+ 'required' => true,
824
+ ),
825
+ ),
826
+ ),'list' => array(
827
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals',
828
+ 'httpMethod' => 'GET',
829
+ 'parameters' => array(
830
+ 'accountId' => array(
831
+ 'location' => 'path',
832
+ 'type' => 'string',
833
+ 'required' => true,
834
+ ),
835
+ 'webPropertyId' => array(
836
+ 'location' => 'path',
837
+ 'type' => 'string',
838
+ 'required' => true,
839
+ ),
840
+ 'profileId' => array(
841
+ 'location' => 'path',
842
+ 'type' => 'string',
843
+ 'required' => true,
844
+ ),
845
+ 'max-results' => array(
846
+ 'location' => 'query',
847
+ 'type' => 'integer',
848
+ ),
849
+ 'start-index' => array(
850
+ 'location' => 'query',
851
+ 'type' => 'integer',
852
+ ),
853
+ ),
854
+ ),'patch' => array(
855
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}',
856
+ 'httpMethod' => 'PATCH',
857
+ 'parameters' => array(
858
+ 'accountId' => array(
859
+ 'location' => 'path',
860
+ 'type' => 'string',
861
+ 'required' => true,
862
+ ),
863
+ 'webPropertyId' => array(
864
+ 'location' => 'path',
865
+ 'type' => 'string',
866
+ 'required' => true,
867
+ ),
868
+ 'profileId' => array(
869
+ 'location' => 'path',
870
+ 'type' => 'string',
871
+ 'required' => true,
872
+ ),
873
+ 'goalId' => array(
874
+ 'location' => 'path',
875
+ 'type' => 'string',
876
+ 'required' => true,
877
+ ),
878
+ ),
879
+ ),'update' => array(
880
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}',
881
+ 'httpMethod' => 'PUT',
882
+ 'parameters' => array(
883
+ 'accountId' => array(
884
+ 'location' => 'path',
885
+ 'type' => 'string',
886
+ 'required' => true,
887
+ ),
888
+ 'webPropertyId' => array(
889
+ 'location' => 'path',
890
+ 'type' => 'string',
891
+ 'required' => true,
892
+ ),
893
+ 'profileId' => array(
894
+ 'location' => 'path',
895
+ 'type' => 'string',
896
+ 'required' => true,
897
+ ),
898
+ 'goalId' => array(
899
+ 'location' => 'path',
900
+ 'type' => 'string',
901
+ 'required' => true,
902
+ ),
903
+ ),
904
+ ),
905
+ )
906
+ )
907
+ );
908
+ $this->management_profileFilterLinks = new Google_Service_Analytics_ManagementProfileFilterLinks_Resource(
909
+ $this,
910
+ $this->serviceName,
911
+ 'profileFilterLinks',
912
+ array(
913
+ 'methods' => array(
914
+ 'delete' => array(
915
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}',
916
+ 'httpMethod' => 'DELETE',
917
+ 'parameters' => array(
918
+ 'accountId' => array(
919
+ 'location' => 'path',
920
+ 'type' => 'string',
921
+ 'required' => true,
922
+ ),
923
+ 'webPropertyId' => array(
924
+ 'location' => 'path',
925
+ 'type' => 'string',
926
+ 'required' => true,
927
+ ),
928
+ 'profileId' => array(
929
+ 'location' => 'path',
930
+ 'type' => 'string',
931
+ 'required' => true,
932
+ ),
933
+ 'linkId' => array(
934
+ 'location' => 'path',
935
+ 'type' => 'string',
936
+ 'required' => true,
937
+ ),
938
+ ),
939
+ ),'get' => array(
940
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}',
941
+ 'httpMethod' => 'GET',
942
+ 'parameters' => array(
943
+ 'accountId' => array(
944
+ 'location' => 'path',
945
+ 'type' => 'string',
946
+ 'required' => true,
947
+ ),
948
+ 'webPropertyId' => array(
949
+ 'location' => 'path',
950
+ 'type' => 'string',
951
+ 'required' => true,
952
+ ),
953
+ 'profileId' => array(
954
+ 'location' => 'path',
955
+ 'type' => 'string',
956
+ 'required' => true,
957
+ ),
958
+ 'linkId' => array(
959
+ 'location' => 'path',
960
+ 'type' => 'string',
961
+ 'required' => true,
962
+ ),
963
+ ),
964
+ ),'insert' => array(
965
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks',
966
+ 'httpMethod' => 'POST',
967
+ 'parameters' => array(
968
+ 'accountId' => array(
969
+ 'location' => 'path',
970
+ 'type' => 'string',
971
+ 'required' => true,
972
+ ),
973
+ 'webPropertyId' => array(
974
+ 'location' => 'path',
975
+ 'type' => 'string',
976
+ 'required' => true,
977
+ ),
978
+ 'profileId' => array(
979
+ 'location' => 'path',
980
+ 'type' => 'string',
981
+ 'required' => true,
982
+ ),
983
+ ),
984
+ ),'list' => array(
985
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks',
986
+ 'httpMethod' => 'GET',
987
+ 'parameters' => array(
988
+ 'accountId' => array(
989
+ 'location' => 'path',
990
+ 'type' => 'string',
991
+ 'required' => true,
992
+ ),
993
+ 'webPropertyId' => array(
994
+ 'location' => 'path',
995
+ 'type' => 'string',
996
+ 'required' => true,
997
+ ),
998
+ 'profileId' => array(
999
+ 'location' => 'path',
1000
+ 'type' => 'string',
1001
+ 'required' => true,
1002
+ ),
1003
+ 'max-results' => array(
1004
+ 'location' => 'query',
1005
+ 'type' => 'integer',
1006
+ ),
1007
+ 'start-index' => array(
1008
+ 'location' => 'query',
1009
+ 'type' => 'integer',
1010
+ ),
1011
+ ),
1012
+ ),'patch' => array(
1013
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}',
1014
+ 'httpMethod' => 'PATCH',
1015
+ 'parameters' => array(
1016
+ 'accountId' => array(
1017
+ 'location' => 'path',
1018
+ 'type' => 'string',
1019
+ 'required' => true,
1020
+ ),
1021
+ 'webPropertyId' => array(
1022
+ 'location' => 'path',
1023
+ 'type' => 'string',
1024
+ 'required' => true,
1025
+ ),
1026
+ 'profileId' => array(
1027
+ 'location' => 'path',
1028
+ 'type' => 'string',
1029
+ 'required' => true,
1030
+ ),
1031
+ 'linkId' => array(
1032
+ 'location' => 'path',
1033
+ 'type' => 'string',
1034
+ 'required' => true,
1035
+ ),
1036
+ ),
1037
+ ),'update' => array(
1038
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}',
1039
+ 'httpMethod' => 'PUT',
1040
+ 'parameters' => array(
1041
+ 'accountId' => array(
1042
+ 'location' => 'path',
1043
+ 'type' => 'string',
1044
+ 'required' => true,
1045
+ ),
1046
+ 'webPropertyId' => array(
1047
+ 'location' => 'path',
1048
+ 'type' => 'string',
1049
+ 'required' => true,
1050
+ ),
1051
+ 'profileId' => array(
1052
+ 'location' => 'path',
1053
+ 'type' => 'string',
1054
+ 'required' => true,
1055
+ ),
1056
+ 'linkId' => array(
1057
+ 'location' => 'path',
1058
+ 'type' => 'string',
1059
+ 'required' => true,
1060
+ ),
1061
+ ),
1062
+ ),
1063
+ )
1064
+ )
1065
+ );
1066
+ $this->management_profileUserLinks = new Google_Service_Analytics_ManagementProfileUserLinks_Resource(
1067
+ $this,
1068
+ $this->serviceName,
1069
+ 'profileUserLinks',
1070
+ array(
1071
+ 'methods' => array(
1072
+ 'delete' => array(
1073
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}',
1074
+ 'httpMethod' => 'DELETE',
1075
+ 'parameters' => array(
1076
+ 'accountId' => array(
1077
+ 'location' => 'path',
1078
+ 'type' => 'string',
1079
+ 'required' => true,
1080
+ ),
1081
+ 'webPropertyId' => array(
1082
+ 'location' => 'path',
1083
+ 'type' => 'string',
1084
+ 'required' => true,
1085
+ ),
1086
+ 'profileId' => array(
1087
+ 'location' => 'path',
1088
+ 'type' => 'string',
1089
+ 'required' => true,
1090
+ ),
1091
+ 'linkId' => array(
1092
+ 'location' => 'path',
1093
+ 'type' => 'string',
1094
+ 'required' => true,
1095
+ ),
1096
+ ),
1097
+ ),'insert' => array(
1098
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks',
1099
+ 'httpMethod' => 'POST',
1100
+ 'parameters' => array(
1101
+ 'accountId' => array(
1102
+ 'location' => 'path',
1103
+ 'type' => 'string',
1104
+ 'required' => true,
1105
+ ),
1106
+ 'webPropertyId' => array(
1107
+ 'location' => 'path',
1108
+ 'type' => 'string',
1109
+ 'required' => true,
1110
+ ),
1111
+ 'profileId' => array(
1112
+ 'location' => 'path',
1113
+ 'type' => 'string',
1114
+ 'required' => true,
1115
+ ),
1116
+ ),
1117
+ ),'list' => array(
1118
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks',
1119
+ 'httpMethod' => 'GET',
1120
+ 'parameters' => array(
1121
+ 'accountId' => array(
1122
+ 'location' => 'path',
1123
+ 'type' => 'string',
1124
+ 'required' => true,
1125
+ ),
1126
+ 'webPropertyId' => array(
1127
+ 'location' => 'path',
1128
+ 'type' => 'string',
1129
+ 'required' => true,
1130
+ ),
1131
+ 'profileId' => array(
1132
+ 'location' => 'path',
1133
+ 'type' => 'string',
1134
+ 'required' => true,
1135
+ ),
1136
+ 'max-results' => array(
1137
+ 'location' => 'query',
1138
+ 'type' => 'integer',
1139
+ ),
1140
+ 'start-index' => array(
1141
+ 'location' => 'query',
1142
+ 'type' => 'integer',
1143
+ ),
1144
+ ),
1145
+ ),'update' => array(
1146
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}',
1147
+ 'httpMethod' => 'PUT',
1148
+ 'parameters' => array(
1149
+ 'accountId' => array(
1150
+ 'location' => 'path',
1151
+ 'type' => 'string',
1152
+ 'required' => true,
1153
+ ),
1154
+ 'webPropertyId' => array(
1155
+ 'location' => 'path',
1156
+ 'type' => 'string',
1157
+ 'required' => true,
1158
+ ),
1159
+ 'profileId' => array(
1160
+ 'location' => 'path',
1161
+ 'type' => 'string',
1162
+ 'required' => true,
1163
+ ),
1164
+ 'linkId' => array(
1165
+ 'location' => 'path',
1166
+ 'type' => 'string',
1167
+ 'required' => true,
1168
+ ),
1169
+ ),
1170
+ ),
1171
+ )
1172
+ )
1173
+ );
1174
+ $this->management_profiles = new Google_Service_Analytics_ManagementProfiles_Resource(
1175
+ $this,
1176
+ $this->serviceName,
1177
+ 'profiles',
1178
+ array(
1179
+ 'methods' => array(
1180
+ 'delete' => array(
1181
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}',
1182
+ 'httpMethod' => 'DELETE',
1183
+ 'parameters' => array(
1184
+ 'accountId' => array(
1185
+ 'location' => 'path',
1186
+ 'type' => 'string',
1187
+ 'required' => true,
1188
+ ),
1189
+ 'webPropertyId' => array(
1190
+ 'location' => 'path',
1191
+ 'type' => 'string',
1192
+ 'required' => true,
1193
+ ),
1194
+ 'profileId' => array(
1195
+ 'location' => 'path',
1196
+ 'type' => 'string',
1197
+ 'required' => true,
1198
+ ),
1199
+ ),
1200
+ ),'get' => array(
1201
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}',
1202
+ 'httpMethod' => 'GET',
1203
+ 'parameters' => array(
1204
+ 'accountId' => array(
1205
+ 'location' => 'path',
1206
+ 'type' => 'string',
1207
+ 'required' => true,
1208
+ ),
1209
+ 'webPropertyId' => array(
1210
+ 'location' => 'path',
1211
+ 'type' => 'string',
1212
+ 'required' => true,
1213
+ ),
1214
+ 'profileId' => array(
1215
+ 'location' => 'path',
1216
+ 'type' => 'string',
1217
+ 'required' => true,
1218
+ ),
1219
+ ),
1220
+ ),'insert' => array(
1221
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles',
1222
+ 'httpMethod' => 'POST',
1223
+ 'parameters' => array(
1224
+ 'accountId' => array(
1225
+ 'location' => 'path',
1226
+ 'type' => 'string',
1227
+ 'required' => true,
1228
+ ),
1229
+ 'webPropertyId' => array(
1230
+ 'location' => 'path',
1231
+ 'type' => 'string',
1232
+ 'required' => true,
1233
+ ),
1234
+ ),
1235
+ ),'list' => array(
1236
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles',
1237
+ 'httpMethod' => 'GET',
1238
+ 'parameters' => array(
1239
+ 'accountId' => array(
1240
+ 'location' => 'path',
1241
+ 'type' => 'string',
1242
+ 'required' => true,
1243
+ ),
1244
+ 'webPropertyId' => array(
1245
+ 'location' => 'path',
1246
+ 'type' => 'string',
1247
+ 'required' => true,
1248
+ ),
1249
+ 'max-results' => array(
1250
+ 'location' => 'query',
1251
+ 'type' => 'integer',
1252
+ ),
1253
+ 'start-index' => array(
1254
+ 'location' => 'query',
1255
+ 'type' => 'integer',
1256
+ ),
1257
+ ),
1258
+ ),'patch' => array(
1259
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}',
1260
+ 'httpMethod' => 'PATCH',
1261
+ 'parameters' => array(
1262
+ 'accountId' => array(
1263
+ 'location' => 'path',
1264
+ 'type' => 'string',
1265
+ 'required' => true,
1266
+ ),
1267
+ 'webPropertyId' => array(
1268
+ 'location' => 'path',
1269
+ 'type' => 'string',
1270
+ 'required' => true,
1271
+ ),
1272
+ 'profileId' => array(
1273
+ 'location' => 'path',
1274
+ 'type' => 'string',
1275
+ 'required' => true,
1276
+ ),
1277
+ ),
1278
+ ),'update' => array(
1279
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}',
1280
+ 'httpMethod' => 'PUT',
1281
+ 'parameters' => array(
1282
+ 'accountId' => array(
1283
+ 'location' => 'path',
1284
+ 'type' => 'string',
1285
+ 'required' => true,
1286
+ ),
1287
+ 'webPropertyId' => array(
1288
+ 'location' => 'path',
1289
+ 'type' => 'string',
1290
+ 'required' => true,
1291
+ ),
1292
+ 'profileId' => array(
1293
+ 'location' => 'path',
1294
+ 'type' => 'string',
1295
+ 'required' => true,
1296
+ ),
1297
+ ),
1298
+ ),
1299
+ )
1300
+ )
1301
+ );
1302
+ $this->management_segments = new Google_Service_Analytics_ManagementSegments_Resource(
1303
+ $this,
1304
+ $this->serviceName,
1305
+ 'segments',
1306
+ array(
1307
+ 'methods' => array(
1308
+ 'list' => array(
1309
+ 'path' => 'management/segments',
1310
+ 'httpMethod' => 'GET',
1311
+ 'parameters' => array(
1312
+ 'max-results' => array(
1313
+ 'location' => 'query',
1314
+ 'type' => 'integer',
1315
+ ),
1316
+ 'start-index' => array(
1317
+ 'location' => 'query',
1318
+ 'type' => 'integer',
1319
+ ),
1320
+ ),
1321
+ ),
1322
+ )
1323
+ )
1324
+ );
1325
+ $this->management_unsampledReports = new Google_Service_Analytics_ManagementUnsampledReports_Resource(
1326
+ $this,
1327
+ $this->serviceName,
1328
+ 'unsampledReports',
1329
+ array(
1330
+ 'methods' => array(
1331
+ 'get' => array(
1332
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}',
1333
+ 'httpMethod' => 'GET',
1334
+ 'parameters' => array(
1335
+ 'accountId' => array(
1336
+ 'location' => 'path',
1337
+ 'type' => 'string',
1338
+ 'required' => true,
1339
+ ),
1340
+ 'webPropertyId' => array(
1341
+ 'location' => 'path',
1342
+ 'type' => 'string',
1343
+ 'required' => true,
1344
+ ),
1345
+ 'profileId' => array(
1346
+ 'location' => 'path',
1347
+ 'type' => 'string',
1348
+ 'required' => true,
1349
+ ),
1350
+ 'unsampledReportId' => array(
1351
+ 'location' => 'path',
1352
+ 'type' => 'string',
1353
+ 'required' => true,
1354
+ ),
1355
+ ),
1356
+ ),'insert' => array(
1357
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports',
1358
+ 'httpMethod' => 'POST',
1359
+ 'parameters' => array(
1360
+ 'accountId' => array(
1361
+ 'location' => 'path',
1362
+ 'type' => 'string',
1363
+ 'required' => true,
1364
+ ),
1365
+ 'webPropertyId' => array(
1366
+ 'location' => 'path',
1367
+ 'type' => 'string',
1368
+ 'required' => true,
1369
+ ),
1370
+ 'profileId' => array(
1371
+ 'location' => 'path',
1372
+ 'type' => 'string',
1373
+ 'required' => true,
1374
+ ),
1375
+ ),
1376
+ ),'list' => array(
1377
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports',
1378
+ 'httpMethod' => 'GET',
1379
+ 'parameters' => array(
1380
+ 'accountId' => array(
1381
+ 'location' => 'path',
1382
+ 'type' => 'string',
1383
+ 'required' => true,
1384
+ ),
1385
+ 'webPropertyId' => array(
1386
+ 'location' => 'path',
1387
+ 'type' => 'string',
1388
+ 'required' => true,
1389
+ ),
1390
+ 'profileId' => array(
1391
+ 'location' => 'path',
1392
+ 'type' => 'string',
1393
+ 'required' => true,
1394
+ ),
1395
+ 'max-results' => array(
1396
+ 'location' => 'query',
1397
+ 'type' => 'integer',
1398
+ ),
1399
+ 'start-index' => array(
1400
+ 'location' => 'query',
1401
+ 'type' => 'integer',
1402
+ ),
1403
+ ),
1404
+ ),
1405
+ )
1406
+ )
1407
+ );
1408
+ $this->management_uploads = new Google_Service_Analytics_ManagementUploads_Resource(
1409
+ $this,
1410
+ $this->serviceName,
1411
+ 'uploads',
1412
+ array(
1413
+ 'methods' => array(
1414
+ 'deleteUploadData' => array(
1415
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData',
1416
+ 'httpMethod' => 'POST',
1417
+ 'parameters' => array(
1418
+ 'accountId' => array(
1419
+ 'location' => 'path',
1420
+ 'type' => 'string',
1421
+ 'required' => true,
1422
+ ),
1423
+ 'webPropertyId' => array(
1424
+ 'location' => 'path',
1425
+ 'type' => 'string',
1426
+ 'required' => true,
1427
+ ),
1428
+ 'customDataSourceId' => array(
1429
+ 'location' => 'path',
1430
+ 'type' => 'string',
1431
+ 'required' => true,
1432
+ ),
1433
+ ),
1434
+ ),'get' => array(
1435
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}',
1436
+ 'httpMethod' => 'GET',
1437
+ 'parameters' => array(
1438
+ 'accountId' => array(
1439
+ 'location' => 'path',
1440
+ 'type' => 'string',
1441
+ 'required' => true,
1442
+ ),
1443
+ 'webPropertyId' => array(
1444
+ 'location' => 'path',
1445
+ 'type' => 'string',
1446
+ 'required' => true,
1447
+ ),
1448
+ 'customDataSourceId' => array(
1449
+ 'location' => 'path',
1450
+ 'type' => 'string',
1451
+ 'required' => true,
1452
+ ),
1453
+ 'uploadId' => array(
1454
+ 'location' => 'path',
1455
+ 'type' => 'string',
1456
+ 'required' => true,
1457
+ ),
1458
+ ),
1459
+ ),'list' => array(
1460
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads',
1461
+ 'httpMethod' => 'GET',
1462
+ 'parameters' => array(
1463
+ 'accountId' => array(
1464
+ 'location' => 'path',
1465
+ 'type' => 'string',
1466
+ 'required' => true,
1467
+ ),
1468
+ 'webPropertyId' => array(
1469
+ 'location' => 'path',
1470
+ 'type' => 'string',
1471
+ 'required' => true,
1472
+ ),
1473
+ 'customDataSourceId' => array(
1474
+ 'location' => 'path',
1475
+ 'type' => 'string',
1476
+ 'required' => true,
1477
+ ),
1478
+ 'max-results' => array(
1479
+ 'location' => 'query',
1480
+ 'type' => 'integer',
1481
+ ),
1482
+ 'start-index' => array(
1483
+ 'location' => 'query',
1484
+ 'type' => 'integer',
1485
+ ),
1486
+ ),
1487
+ ),'migrateDataImport' => array(
1488
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/migrateDataImport',
1489
+ 'httpMethod' => 'POST',
1490
+ 'parameters' => array(
1491
+ 'accountId' => array(
1492
+ 'location' => 'path',
1493
+ 'type' => 'string',
1494
+ 'required' => true,
1495
+ ),
1496
+ 'webPropertyId' => array(
1497
+ 'location' => 'path',
1498
+ 'type' => 'string',
1499
+ 'required' => true,
1500
+ ),
1501
+ 'customDataSourceId' => array(
1502
+ 'location' => 'path',
1503
+ 'type' => 'string',
1504
+ 'required' => true,
1505
+ ),
1506
+ ),
1507
+ ),'uploadData' => array(
1508
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads',
1509
+ 'httpMethod' => 'POST',
1510
+ 'parameters' => array(
1511
+ 'accountId' => array(
1512
+ 'location' => 'path',
1513
+ 'type' => 'string',
1514
+ 'required' => true,
1515
+ ),
1516
+ 'webPropertyId' => array(
1517
+ 'location' => 'path',
1518
+ 'type' => 'string',
1519
+ 'required' => true,
1520
+ ),
1521
+ 'customDataSourceId' => array(
1522
+ 'location' => 'path',
1523
+ 'type' => 'string',
1524
+ 'required' => true,
1525
+ ),
1526
+ ),
1527
+ ),
1528
+ )
1529
+ )
1530
+ );
1531
+ $this->management_webPropertyAdWordsLinks = new Google_Service_Analytics_ManagementWebPropertyAdWordsLinks_Resource(
1532
+ $this,
1533
+ $this->serviceName,
1534
+ 'webPropertyAdWordsLinks',
1535
+ array(
1536
+ 'methods' => array(
1537
+ 'delete' => array(
1538
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}',
1539
+ 'httpMethod' => 'DELETE',
1540
+ 'parameters' => array(
1541
+ 'accountId' => array(
1542
+ 'location' => 'path',
1543
+ 'type' => 'string',
1544
+ 'required' => true,
1545
+ ),
1546
+ 'webPropertyId' => array(
1547
+ 'location' => 'path',
1548
+ 'type' => 'string',
1549
+ 'required' => true,
1550
+ ),
1551
+ 'webPropertyAdWordsLinkId' => array(
1552
+ 'location' => 'path',
1553
+ 'type' => 'string',
1554
+ 'required' => true,
1555
+ ),
1556
+ ),
1557
+ ),'get' => array(
1558
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}',
1559
+ 'httpMethod' => 'GET',
1560
+ 'parameters' => array(
1561
+ 'accountId' => array(
1562
+ 'location' => 'path',
1563
+ 'type' => 'string',
1564
+ 'required' => true,
1565
+ ),
1566
+ 'webPropertyId' => array(
1567
+ 'location' => 'path',
1568
+ 'type' => 'string',
1569
+ 'required' => true,
1570
+ ),
1571
+ 'webPropertyAdWordsLinkId' => array(
1572
+ 'location' => 'path',
1573
+ 'type' => 'string',
1574
+ 'required' => true,
1575
+ ),
1576
+ ),
1577
+ ),'insert' => array(
1578
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks',
1579
+ 'httpMethod' => 'POST',
1580
+ 'parameters' => array(
1581
+ 'accountId' => array(
1582
+ 'location' => 'path',
1583
+ 'type' => 'string',
1584
+ 'required' => true,
1585
+ ),
1586
+ 'webPropertyId' => array(
1587
+ 'location' => 'path',
1588
+ 'type' => 'string',
1589
+ 'required' => true,
1590
+ ),
1591
+ ),
1592
+ ),'list' => array(
1593
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks',
1594
+ 'httpMethod' => 'GET',
1595
+ 'parameters' => array(
1596
+ 'accountId' => array(
1597
+ 'location' => 'path',
1598
+ 'type' => 'string',
1599
+ 'required' => true,
1600
+ ),
1601
+ 'webPropertyId' => array(
1602
+ 'location' => 'path',
1603
+ 'type' => 'string',
1604
+ 'required' => true,
1605
+ ),
1606
+ 'max-results' => array(
1607
+ 'location' => 'query',
1608
+ 'type' => 'integer',
1609
+ ),
1610
+ 'start-index' => array(
1611
+ 'location' => 'query',
1612
+ 'type' => 'integer',
1613
+ ),
1614
+ ),
1615
+ ),'patch' => array(
1616
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}',
1617
+ 'httpMethod' => 'PATCH',
1618
+ 'parameters' => array(
1619
+ 'accountId' => array(
1620
+ 'location' => 'path',
1621
+ 'type' => 'string',
1622
+ 'required' => true,
1623
+ ),
1624
+ 'webPropertyId' => array(
1625
+ 'location' => 'path',
1626
+ 'type' => 'string',
1627
+ 'required' => true,
1628
+ ),
1629
+ 'webPropertyAdWordsLinkId' => array(
1630
+ 'location' => 'path',
1631
+ 'type' => 'string',
1632
+ 'required' => true,
1633
+ ),
1634
+ ),
1635
+ ),'update' => array(
1636
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}',
1637
+ 'httpMethod' => 'PUT',
1638
+ 'parameters' => array(
1639
+ 'accountId' => array(
1640
+ 'location' => 'path',
1641
+ 'type' => 'string',
1642
+ 'required' => true,
1643
+ ),
1644
+ 'webPropertyId' => array(
1645
+ 'location' => 'path',
1646
+ 'type' => 'string',
1647
+ 'required' => true,
1648
+ ),
1649
+ 'webPropertyAdWordsLinkId' => array(
1650
+ 'location' => 'path',
1651
+ 'type' => 'string',
1652
+ 'required' => true,
1653
+ ),
1654
+ ),
1655
+ ),
1656
+ )
1657
+ )
1658
+ );
1659
+ $this->management_webproperties = new Google_Service_Analytics_ManagementWebproperties_Resource(
1660
+ $this,
1661
+ $this->serviceName,
1662
+ 'webproperties',
1663
+ array(
1664
+ 'methods' => array(
1665
+ 'get' => array(
1666
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}',
1667
+ 'httpMethod' => 'GET',
1668
+ 'parameters' => array(
1669
+ 'accountId' => array(
1670
+ 'location' => 'path',
1671
+ 'type' => 'string',
1672
+ 'required' => true,
1673
+ ),
1674
+ 'webPropertyId' => array(
1675
+ 'location' => 'path',
1676
+ 'type' => 'string',
1677
+ 'required' => true,
1678
+ ),
1679
+ ),
1680
+ ),'insert' => array(
1681
+ 'path' => 'management/accounts/{accountId}/webproperties',
1682
+ 'httpMethod' => 'POST',
1683
+ 'parameters' => array(
1684
+ 'accountId' => array(
1685
+ 'location' => 'path',
1686
+ 'type' => 'string',
1687
+ 'required' => true,
1688
+ ),
1689
+ ),
1690
+ ),'list' => array(
1691
+ 'path' => 'management/accounts/{accountId}/webproperties',
1692
+ 'httpMethod' => 'GET',
1693
+ 'parameters' => array(
1694
+ 'accountId' => array(
1695
+ 'location' => 'path',
1696
+ 'type' => 'string',
1697
+ 'required' => true,
1698
+ ),
1699
+ 'max-results' => array(
1700
+ 'location' => 'query',
1701
+ 'type' => 'integer',
1702
+ ),
1703
+ 'start-index' => array(
1704
+ 'location' => 'query',
1705
+ 'type' => 'integer',
1706
+ ),
1707
+ ),
1708
+ ),'patch' => array(
1709
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}',
1710
+ 'httpMethod' => 'PATCH',
1711
+ 'parameters' => array(
1712
+ 'accountId' => array(
1713
+ 'location' => 'path',
1714
+ 'type' => 'string',
1715
+ 'required' => true,
1716
+ ),
1717
+ 'webPropertyId' => array(
1718
+ 'location' => 'path',
1719
+ 'type' => 'string',
1720
+ 'required' => true,
1721
+ ),
1722
+ ),
1723
+ ),'update' => array(
1724
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}',
1725
+ 'httpMethod' => 'PUT',
1726
+ 'parameters' => array(
1727
+ 'accountId' => array(
1728
+ 'location' => 'path',
1729
+ 'type' => 'string',
1730
+ 'required' => true,
1731
+ ),
1732
+ 'webPropertyId' => array(
1733
+ 'location' => 'path',
1734
+ 'type' => 'string',
1735
+ 'required' => true,
1736
+ ),
1737
+ ),
1738
+ ),
1739
+ )
1740
+ )
1741
+ );
1742
+ $this->management_webpropertyUserLinks = new Google_Service_Analytics_ManagementWebpropertyUserLinks_Resource(
1743
+ $this,
1744
+ $this->serviceName,
1745
+ 'webpropertyUserLinks',
1746
+ array(
1747
+ 'methods' => array(
1748
+ 'delete' => array(
1749
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}',
1750
+ 'httpMethod' => 'DELETE',
1751
+ 'parameters' => array(
1752
+ 'accountId' => array(
1753
+ 'location' => 'path',
1754
+ 'type' => 'string',
1755
+ 'required' => true,
1756
+ ),
1757
+ 'webPropertyId' => array(
1758
+ 'location' => 'path',
1759
+ 'type' => 'string',
1760
+ 'required' => true,
1761
+ ),
1762
+ 'linkId' => array(
1763
+ 'location' => 'path',
1764
+ 'type' => 'string',
1765
+ 'required' => true,
1766
+ ),
1767
+ ),
1768
+ ),'insert' => array(
1769
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks',
1770
+ 'httpMethod' => 'POST',
1771
+ 'parameters' => array(
1772
+ 'accountId' => array(
1773
+ 'location' => 'path',
1774
+ 'type' => 'string',
1775
+ 'required' => true,
1776
+ ),
1777
+ 'webPropertyId' => array(
1778
+ 'location' => 'path',
1779
+ 'type' => 'string',
1780
+ 'required' => true,
1781
+ ),
1782
+ ),
1783
+ ),'list' => array(
1784
+ 'path' => 'management/accounts/{accountId}/webproperties/{webPropertyId}