Ticket #1120: #1120-#v2-1.patch
| File #1120-#v2-1.patch, 25.8 KB (added by peterb, 22 months ago) |
|---|
-
plugins/Live/API.php
### Eclipse Workspace Patch 1.0 #P trunk
33 33 } 34 34 return self::$instance; 35 35 } 36 36 37 37 const TYPE_FETCH_VISITS = 1; 38 38 const TYPE_FETCH_PAGEVIEWS = 2; 39 39 … … 51 51 public function getLastVisitsForVisitor( $visitorId, $idSite, $limit = 10 ) 52 52 { 53 53 Piwik::checkUserHasViewAccess($idSite); 54 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $ visitorId, $limit);54 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit, $offset = null, $minIdVisit = null, $visitorId); 55 55 $table = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 56 56 return $table; 57 57 } … … 62 62 public function getLastVisits( $idSite, $limit = 10, $minIdVisit = false ) 63 63 { 64 64 Piwik::checkUserHasViewAccess($idSite); 65 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $ visitorId = null, $limit, $minIdVisit);65 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit, $offset = null, $minIdVisit, $visitorId = null); 66 66 $table = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 67 67 return $table; 68 68 } … … 70 70 /* 71 71 * @return Piwik_DataTable 72 72 */ 73 public function getLastVisitsDetails( $idSite, $ limit = 1000, $minIdVisit = false )73 public function getLastVisitsDetails( $idSite, $period = null, $date = null, $limit = 25, $filter_offset = 0, $minIdVisit = false ) 74 74 { 75 75 Piwik::checkUserHasViewAccess($idSite); 76 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $ visitorId = null, $limit, $minIdVisit);76 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period, $date, $limit, $filter_offset, $minIdVisit); 77 77 $dataTable = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 78 78 return $dataTable; 79 79 } … … 118 118 $visitorData = $this->loadLastVisitorInLastXTimeFromDatabase($idSite, $minutes, $days = 0, self::TYPE_FETCH_PAGEVIEWS); 119 119 return $visitorData; 120 120 } 121 121 122 122 /* 123 123 * @return Piwik_DataTable 124 124 */ … … 144 144 $sql = " 145 145 SELECT DISTINCT " .Piwik_Common::prefixTable('log_action').".name AS pageUrl 146 146 FROM " .Piwik_Common::prefixTable('log_link_visit_action')." 147 INNER JOIN " .Piwik_Common::prefixTable('log_action')." 147 INNER JOIN " .Piwik_Common::prefixTable('log_action')." 148 148 ON " .Piwik_Common::prefixTable('log_link_visit_action').".idaction_url = " .Piwik_Common::prefixTable('log_action').".idaction 149 149 WHERE " .Piwik_Common::prefixTable('log_link_visit_action').".idvisit = $idvisit; 150 150 "; … … 154 154 $sql = " 155 155 SELECT DISTINCT " .Piwik_Common::prefixTable('log_action').".name AS pageUrl 156 156 FROM " .Piwik_Common::prefixTable('log_link_visit_action')." 157 INNER JOIN " .Piwik_Common::prefixTable('log_action')." 157 INNER JOIN " .Piwik_Common::prefixTable('log_action')." 158 158 ON " .Piwik_Common::prefixTable('log_link_visit_action').".idaction_name = " .Piwik_Common::prefixTable('log_action').".idaction 159 159 WHERE " .Piwik_Common::prefixTable('log_link_visit_action').".idvisit = $idvisit; 160 160 "; … … 169 169 /* 170 170 * @return array 171 171 */ 172 private function loadLastVisitorDetailsFromDatabase($idSite, $ visitorId = null, $limit = null, $minIdVisit = false)172 private function loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit = null, $offset = null, $minIdVisit = false, $visitorId = null) 173 173 { 174 174 $where = $whereBind = array(); 175 175 176 176 $where[] = Piwik_Common::prefixTable('log_visit') . ".idsite = ? "; 177 177 $whereBind[] = $idSite; 178 178 179 179 if(!empty($visitorId)) 180 180 { 181 181 $where[] = Piwik_Common::prefixTable('log_visit') . ".visitor_idcookie = ? "; … … 188 188 $whereBind[] = $minIdVisit; 189 189 } 190 190 191 //increse limit by offset when visitor paginates 192 if(isset($offset)) { 193 $limit += $offset; 194 } 195 196 // SQL Filter with provided period 197 if (!empty($period) && !empty($date)) { 198 199 $currentSite = new Piwik_Site($idSite); 200 $currentTimezone = $currentSite->getTimezone(); 201 $processedDate = Piwik_Date::factory($date, $currentTimezone); 202 $processedPeriod = Piwik_Period::factory($period, $processedDate); 203 204 array_push( $where, Piwik_Common::prefixTable('log_visit') . ".visit_first_action_time BETWEEN ? AND ?"); 205 array_push( $whereBind, 206 $processedPeriod->getDateStart()->toString(), 207 $processedPeriod->getDateEnd()->addDay(1)->toString()); 208 } 209 191 210 $sqlWhere = ""; 192 211 if(count($where) > 0) 193 212 { 194 213 $sqlWhere = " WHERE " . join(' AND ', $where); 195 214 } 196 215 197 $sql = "SELECT " . Piwik_Common::prefixTable('log_visit') . ".* , 216 $sql = "SELECT " . Piwik_Common::prefixTable('log_visit') . ".* , 198 217 " . Piwik_Common::prefixTable ( 'goal' ) . ".match_attribute 199 218 FROM " . Piwik_Common::prefixTable('log_visit') . " 200 LEFT JOIN ".Piwik_Common::prefixTable('log_conversion')." 219 LEFT JOIN ".Piwik_Common::prefixTable('log_conversion')." 201 220 ON " . Piwik_Common::prefixTable('log_visit') . ".idvisit = " . Piwik_Common::prefixTable('log_conversion') . ".idvisit 202 LEFT JOIN ".Piwik_Common::prefixTable('goal')." 221 LEFT JOIN ".Piwik_Common::prefixTable('goal')." 203 222 ON (" . Piwik_Common::prefixTable('goal') . ".idsite = " . Piwik_Common::prefixTable('log_visit') . ".idsite 204 223 AND " . Piwik_Common::prefixTable('goal') . ".idgoal = " . Piwik_Common::prefixTable('log_conversion') . ".idgoal) 205 224 AND " . Piwik_Common::prefixTable('goal') . ".deleted = 0 206 $sqlWhere207 ORDER BY id site,idvisit DESC225 $sqlWhere 226 ORDER BY idvisit DESC 208 227 LIMIT $limit"; 209 228 210 229 return Piwik_FetchAll($sql, $whereBind); … … 235 254 236 255 if($days != 0) 237 256 { 238 $timeLimit = mktime(0, 0, 0, date("m"), date("d") - $days + 1, date("Y")); 239 $where[] = " visit_last_action_time > '".date('Y-m-d H:i:s', $timeLimit)."'"; 257 $oSite = new Piwik_Site($idSite); 258 $sTimezone = $oSite->getTimezone(); 259 260 $oDate = Piwik_Date::factory("now"); 261 $oDate = $oDate->setTimezone($sTimezone); 262 263 $where[] = " visit_last_action_time > '".$oDate->getDateStartUTC()."'"; 264 240 265 } 241 266 242 267 $sqlWhere = ""; … … 252 277 FROM " . Piwik_Common::prefixTable('log_visit') . " 253 278 $sqlWhere 254 279 ORDER BY idsite,idvisit DESC"; 255 }256 // Pages257 elseif($type == self::TYPE_FETCH_PAGEVIEWS)258 {280 } 281 // Pages 282 elseif($type == self::TYPE_FETCH_PAGEVIEWS) 283 { 259 284 $sql = "SELECT " . Piwik_Common::prefixTable('log_link_visit_action') . ".idaction_url 260 285 FROM " . Piwik_Common::prefixTable('log_link_visit_action') . " 261 INNER JOIN " . Piwik_Common::prefixTable('log_visit') . " 286 INNER JOIN " . Piwik_Common::prefixTable('log_visit') . " 262 287 ON " . Piwik_Common::prefixTable('log_visit') . ".idvisit = " . Piwik_Common::prefixTable('log_link_visit_action') . ".idvisit 263 $sqlWhere";264 }265 else266 {267 // no $type is set --> ERROR268 throw new Exception("type parameter is not properly set.");269 }288 $sqlWhere"; 289 } 290 else 291 { 292 // no $type is set --> ERROR 293 throw new Exception("type parameter is not properly set."); 294 } 270 295 271 296 // return $sql by fetching 272 297 return Piwik_FetchAll($sql, $whereBind); 273 298 } 274 275 299 300 276 301 /** 277 302 * Removes fields that are not meant to be displayed (md5 config hash) 278 303 * Or that the user should only access if he is super user (cookie, IP) 279 * 304 * 280 305 * @return void 281 306 */ 282 307 private function cleanVisitorDetails( &$visitorDetails ) … … 295 320 } 296 321 } 297 322 } 298 323 299 324 } -
plugins/Live/templates/index.tpl
61 61 $("#visitsTotal").load("index.php?module=Live&idSite={/literal}{$idSite}{literal}&action=ajaxTotalVisitors"); 62 62 } 63 63 64 // updates the visit table, to refresh the already presented vis otors pages64 // updates the visit table, to refresh the already presented visitors pages 65 65 function updateVisitBox() 66 66 { 67 67 $("#visitsLive").load("index.php?module=Live&idSite={/literal}{$idSite}{literal}&action=getLastVisitsStart"); … … 79 79 </script> 80 80 81 81 <style> 82 #visitsLive { 83 text-align:left; 84 font-size:90%; 82 #visitsLive { 83 text-align:left; 84 font-size:90%; 85 color:#444444; 86 } 87 #visitsLive .datetime, #visitsLive .country, #visitsLive .referer, #visitsLive .settings, #visitsLive .returning , #visitsLive .countActions{ 88 border-bottom: 1px solid #d3d1c5; 89 border-right:1px solid #d3d1c5; 90 padding:5px 5px 5px 12px; 85 91 } 86 #visitsLive .datetime, #visitsLive .country, #visitsLive .referer, #visitsLive .settings, #visitsLive .returning , #visitsLive .countActions{87 border-bottom:1px solid #C1DAD7;88 border-right:1px solid #C1DAD7;89 padding:5px 5px 5px 12px;90 }91 92 92 #visitsLive .datetime { 93 background:#D4E3ED url(plugins/CoreHome/templates/images/bg_header.jpg) repeat-x scroll 0 0; 94 border-top:1px solid #C1DAD7; 95 color:#6D929B; 96 margin:0; 97 text-align:left; 93 #visitsLive .datetime { 94 background:#E4E2D7; 95 border-top:1px solid #d3d1c5; 96 margin:0; 97 text-align:left; 98 98 } 99 99 100 #visitsLive .country { 101 color:#4F6B72; 102 background:#FFFFFF url(plugins/CoreHome/templates/images/bullet1.gif) no-repeat scroll 0 0; 100 #visitsLive .country { 101 background:#FFFFFF url(plugins/CoreHome/templates/images/bullet1.gif) no-repeat scroll 0 0; 103 102 } 104 103 105 #visitsLive .referer { 106 background:#F9FAFA none repeat scroll 0 0; 107 color:#797268; 104 #visitsLive .referer { 105 background:#F9FAFA none repeat scroll 0 0; 108 106 } 109 107 110 #visitsLive .pagesTitle { 111 display:block; 112 float:left; 113 padding-top: 3px; 108 #visitsLive .referer:hover { 109 background:#FFFFF7; 114 110 } 115 111 116 #visitsLive .countActions{117 background:#FFFFFF none repeat scroll 0 0;118 color:#4F6B72;112 #visitsLive .pagesTitle { 113 display:block; 114 float:left; 119 115 } 120 116 121 #visitsLive .settings { 122 background:#FFFFFF none repeat scroll 0 0; 123 color:#4F6B72; 124 } 117 #visitsLive .countActions { 118 background:#FFFFFF none repeat scroll 0 0; 119 } 125 120 126 #visitsLive .returning { 127 background:#F9FAFA none repeat scroll 0 0; 128 color:#797268; 129 } 121 #visitsLive .settings { 122 background:#FFFFFF none repeat scroll 0 0; 123 } 130 124 131 #visitsLive .visit { 132 } 125 #visitsLive .returning { 126 background:#F9FAFA none repeat scroll 0 0; 127 } 133 128 134 #visitsLive .alt { 135 } 129 .visitsLiveFooter a.rightLink{ 130 float:right; 131 padding-right:20px; 132 } 136 133 137 #visitsLive .actions {138 background:#F9FAFA none repeat scroll 0 0;139 color:#797268;140 padding:0px 5px 0px 12px;141 }142 143 134 </style> 144 135 {/literal} 145 136 … … 175 166 {$visitors} 176 167 </div> 177 168 178 <div >169 <div class="visitsLiveFooter"> 179 170 <a href="javascript:void(0);" onclick="onClickPause();"><img id="pauseImage" border="0" src="plugins/Live/templates/images/pause_disabled.gif" /></a> 180 171 <a href="javascript:void(0);" onclick="onClickPlay();"><img id="playImage" border="0" src="plugins/Live/templates/images/play.gif" /></a> 172 <a class="rightLink" href="javascript:broadcast.propagateAjax('module=Live&action=getLastVisitsDetails')">{'Live_LinkVisitorLog'|translate}</a> 181 173 </div> -
plugins/Live/templates/visitorLog.tpl
1 <div class="home" id="content" style="display: block;"><a graphid="VisitsSummarygetEvolutionGraph" name="evolutionGraph"></a> 2 <h2>Besucherverlauf</h2> 3 4 <div id="{$properties.uniqueId}"> 5 6 {if isset($arrayDataTable.result) and $arrayDataTable.result == 'error'} 7 {$arrayDataTable.message} 8 {else} 9 {if count($arrayDataTable) == 0} 10 <a name="{$properties.uniqueId}"></a> 11 <div class="pk-emptyDataTable">{'CoreHome_ThereIsNoDataForThisReport'|translate}</div> 12 {else} 13 <a name="{$properties.uniqueId}"></a> 14 15 <table class="dataTable" cellspacing="0" width="100%" style="width:100%;"> 16 <thead> 17 <tr> 18 <th style="display:none"></th> 19 <th id="label" class="sortable label" style="cursor: auto;width:12%" width="12%"> 20 <div id="thDIV">{'Live_Date'|translate}<div></th> 21 <th id="label" class="sortable label" style="cursor: auto;width:13%" width="13%"> 22 <div id="thDIV">{'General_Visitors'|translate}<div></th> 23 <th id="label" class="sortable label" style="cursor: auto;width:15%" width="15%"> 24 <div id="thDIV">{'Live_Referrer_URL'|translate}<div></th> 25 <th id="label" class="sortable label" style="cursor: auto;width:62%" width="62%"> 26 <div id="thDIV">{'General_ColumnNbActions'|translate}<div></th> 27 </tr> 28 </thead> 29 <tbody> 30 31 {foreach from=$arrayDataTable item=visitor} 32 <tr class="label{cycle values='odd,even'}"> 33 <td style="display:none;"></td> 34 <td class="label" style="width:12%" width="12%"> 35 36 {$visitor.columns.serverDatePretty} - {$visitor.columns.serverTimePretty} 37 {if isset($visitor.columns.ip)} <br/>IP: {$visitor.columns.ip}{/if} 38 {if (isset($visitor.columns.provider)&&$visitor.columns.provider!='IP')} 39 <br /> 40 {'Provider_ColumnProvider'|translate}: 41 <a href="{$visitor.columns.providerUrl}" target="_blank" title="{$visitor.columns.providerUrl}" style="text-decoration:underline;"> 42 {$visitor.columns.provider} 43 </a> 44 {/if} 45 46 </td> 47 <td class="label" style="width:13%" width="13%"> 48 <img src="{$visitor.columns.countryFlag}" title="{$visitor.columns.country}, Provider {$visitor.columns.provider}" /> 49 <img src="{$visitor.columns.browserIcon}" title="{$visitor.columns.browser} with plugins {$visitor.columns.plugins} enabled" /> 50 <img src="{$visitor.columns.operatingSystemIcon}" title="{$visitor.columns.operatingSystem}, {$visitor.columns.resolution} ({$visitor.columns.screen})" /> 51 {if $visitor.columns.isVisitorGoalConverted}<img src="{$visitor.columns.goalIcon}" title="{$visitor.columns.goalType}" />{/if} 52 {if $visitor.columns.isVisitorReturning} 53 <img src="plugins/Live/templates/images/returningVisitor.gif" title="Returning Visitor" /> 54 {/if} 55 <br/> 56 {if count($visitor.columns.pluginIcons) > 0} 57 <hr /> 58 {'UserSettings_Plugins'|translate}: 59 {foreach from=$visitor.columns.pluginIcons item=pluginIcon} 60 <img src="{$pluginIcon.pluginIcon}" title="{$pluginIcon.pluginName|capitalize:true}" alt="{$pluginIcon.pluginName|capitalize:true}" /> 61 {/foreach} 62 {/if} 63 </td> 64 65 <td class="column" style="width:20%" width="20%"> 66 <div class="referer"> 67 {if $visitor.columns.refererType == 'website'} 68 {'Referers_ColumnWebsite'|translate}: 69 <a href="{$visitor.columns.refererUrl}" target="_blank" title="{$visitor.columns.refererUrl}" style="text-decoration:underline;"> 70 {$visitor.columns.refererName} 71 </a> 72 {/if} 73 {if $visitor.columns.refererType == 'campaign'} 74 {'Referers_Campaigns'|translate} 75 <br /> 76 <a href="{$visitor.columns.refererUrl}" target="_blank" title="{$visitor.columns.refererUrl}" style="text-decoration:underline;"> 77 {$visitor.columns.refererName} 78 </a> 79 {/if} 80 {if $visitor.columns.refererType == 'searchEngine'} 81 {if !empty($visitor.columns.searchEngineIcon)} 82 <img src="{$visitor.columns.searchEngineIcon}" alt="{$visitor.columns.refererName}" /> 83 {/if} 84 {$visitor.columns.refererName} 85 <br /> 86 {if !empty($visitor.columns.keywords)}{'Referers_Keywords'|translate}:{/if} 87 <a href="{$visitor.columns.refererUrl}" target="_blank" style="text-decoration:underline;"> 88 {if !empty($visitor.columns.keywords)} 89 "{$visitor.columns.keywords}" 90 {/if} 91 </a> 92 {/if} 93 {if $visitor.columns.refererType == 'directEntry'}{'Referers_DirectEntry'|translate}{/if} 94 </div> 95 </td> 96 <td class="column" style="width:55%" width="55%"> 97 <strong>{$visitor.columns.actionDetails|@count} {'Actions_Actions'|translate} - {$visitor.columns.visitLengthPretty}</strong> 98 <br /><br /> 99 <ol style="list-style:decimal inside none;"> 100 {foreach from=$visitor.columns.actionDetails item=action} 101 <li> 102 <a href="{$action.pageUrl}" target="_blank" style="text-decoration:underline;" title="{$action.pageUrl}"> 103 {$action.pageUrl|truncate:80:"...":true} 104 </a> 105 </li> 106 {/foreach} 107 </ol> 108 </td> 109 </tr> 110 {/foreach} 111 </tbody> 112 </table> 113 114 {/if} 115 {if $properties.show_footer} 116 {include file="CoreHome/templates/datatable_footer.tpl"} 117 {/if} 118 {include file="CoreHome/templates/datatable_js.tpl"} 119 {/if} 120 </div> 121 122 {literal} 123 <style> 124 hr { 125 background:none repeat scroll 0 0 transparent; 126 border-color:-moz-use-text-color -moz-use-text-color #EEEEEE; 127 border-style:none none solid; 128 border-width:0 0 1px; 129 color:#CCCCCC; 130 margin:0 2em 0.5em; 131 padding:0 0 0.5em; 132 } 133 134 </style> 135 {/literal} 136 </div> 137 No newline at end of file -
lang/en.php
577 577 'LanguagesManager_PluginDescription' => 'This plugin will display a list of the available languages for the Piwik interface. The language selected will be saved in the preferences for each user.', 578 578 'LanguagesManager_AboutPiwikTranslations' => 'About Piwik translations', 579 579 'Live_PluginDescription' => 'Spy on your visitors, live, in real-time!', 580 'Live_LinkVisitorLog' => 'View detailed visitor log', 580 581 'Live_VisitorLog' => 'Visitor Log', 581 582 'Live_Date' => 'Date', 582 583 'Live_Time' => 'Time', -
plugins/Live/Controller.php
30 30 public function widget($fetch = false) 31 31 { 32 32 $view = Piwik_View::factory('index'); 33 $view->idSite = Piwik_Common::getRequestVar('idSite'); 33 $view->idSite = Piwik_Common::getRequestVar('idSite'); 34 34 $view->visitorsCountHalfHour = $this->getUsersInLastXMin(30); 35 35 $view->visitorsCountToday = $this->getUsersInLastXDays(1); 36 36 $view->pisHalfhour = $this->getPageImpressionsInLastXMin(30); … … 42 42 43 43 public function getLastVisitsDetails($fetch = false) 44 44 { 45 $view = Piwik_ViewDataTable::factory( '');45 $view = Piwik_ViewDataTable::factory(); 46 46 $view->init( $this->pluginName, 47 47 __FUNCTION__, 48 'Live.getLastVisitsDetails', 49 'getPagesFromVisitId'); 50 // All colomns in DB which could be shown 51 //'ip', 'idVisit', 'countActions', 'isVisitorReturning', 'country', 'countryFlag', 'continent', 'provider', 'providerUrl', 'idSite', 52 //'serverDate', 'visitLength', 'visitLengthPretty', 'firstActionTimestamp', 'lastActionTimestamp', 'refererType', 'refererName', 53 //'keywords', 'refererUrl', 'searchEngineUrl', 'searchEngineIcon', 'operatingSystem', 'operatingSystemShortName', 'operatingSystemIcon', 54 //'browserFamily', 'browserFamilyDescription', 'browser', 'browserIcon', 'screen', 'resolution', 'screenIcon', 'plugins', 'lastActionDateTime', 55 //'serverDatePretty', 'serverTimePretty', 'actionDetails' 48 'Live.getLastVisitsDetails'); 56 49 57 $view->setColumnsToDisplay(array( 58 'idVisit', 59 'serverDatePretty', 60 'serverTimePretty', 61 'ip', 62 'countActions', 63 'visitLengthPretty', 64 'keywords', 65 'refererUrl', 66 'operatingSystemShortName', 67 'browser', 68 'screen', 69 'resolution', 70 'plugins', 71 )); 50 // All colomns in DB which could be shown 51 //'ip', 'idVisit', 'countActions', 'isVisitorReturning', 'country', 'countryFlag', 'continent', 'provider', 'providerUrl', 'idSite', 52 //'serverDate', 'visitLength', 'visitLengthPretty', 'firstActionTimestamp', 'lastActionTimestamp', 'refererType', 'refererName', 53 //'keywords', 'refererUrl', 'searchEngineUrl', 'searchEngineIcon', 'operatingSystem', 'operatingSystemShortName', 'operatingSystemIcon', 54 //'browserFamily', 'browserFamilyDescription', 'browser', 'browserIcon', 'screen', 'resolution', 'screenIcon', 'plugins', 'lastActionDateTime', 55 //'serverDatePretty', 'serverTimePretty', 'actionDetails' 72 56 73 $view->setColumnsTranslations(array(74 'idVisit' => Piwik_Translate(''),75 'serverDatePretty' => Piwik_Translate('Live_Date'),76 'serverTimePretty' => Piwik_Translate('Live_Time'),77 'ip' => 'IP',78 'countActions' => Piwik_Translate('VisitorInterest_ColumnPagesPerVisit'),79 'visitLengthPretty' => Piwik_Translate('VisitorInterest_ColumnVisitDuration'),80 'keywords' => Piwik_Translate('Referers_ColumnKeyword'),81 'refererUrl' => Piwik_Translate('Live_Referrer_URL'),82 'operatingSystemShortName' => Piwik_Translate('UserSettings_ColumnOperatingSystem'),83 'browser' => Piwik_Translate('UserSettings_ColumnBrowser'),84 'screen' => Piwik_Translate('UserSettings_ColumnTypeOfScreen'),85 'resolution' => Piwik_Translate('UserSettings_ColumnResolution'),86 'plugins' => Piwik_Translate('UserSettings_ColumnPlugin'),87 ));88 89 57 $view->disableSort(); 90 $view->setLimit( 10);91 $view-> disableExcludeLowPopulation();58 $view->setLimit(20); 59 $view->setTemplate("Live/templates/visitorLog.tpl"); 92 60 $view->setSortedColumn('idVisit', 'ASC'); 93 61 $view->disableSearchBox(); 62 $view->disableOffsetInformation(); 94 63 // "Include low population" link won't be displayed under this table 95 64 $view->disableExcludeLowPopulation(); 96 65 // disable the tag cloud, pie charts, bar chart icons … … 101 70 return $this->renderView($view, $fetch); 102 71 } 103 72 104 function getPagesFromVisitId( $fetch = false)105 {106 $view = Piwik_ViewDataTable::factory('');107 $view->init( $this->pluginName,108 __FUNCTION__,109 'Live.getLastVisitsForVisitor',110 'getPagesFromVisitId');111 112 return $this->renderView($view, $fetch);113 }114 115 73 public function getLastVisitsStart($fetch = false) 116 74 { 117 75 $view = Piwik_View::factory('lastVisits'); 118 $view->idSite = Piwik_Common::getRequestVar('idSite'); 119 76 $view->idSite = Piwik_Common::getRequestVar('idSite'); 77 120 78 $view->visitors = $this->getLastVisits(10); 121 79 122 80 $rendered = $view->render($fetch); … … 167 125 public function ajaxTotalVisitors($fetch = false) 168 126 { 169 127 $view = Piwik_View::factory('totalVisits'); 170 $view->idSite = Piwik_Common::getRequestVar('idSite'); 128 $view->idSite = Piwik_Common::getRequestVar('idSite'); 171 129 $view->visitorsCountHalfHour = $this->getUsersInLastXMin(30); 172 130 $view->visitorsCountToday = $this->getUsersInLastXDays(1); 173 131 $view->pisHalfhour = $this->getPageImpressionsInLastXMin(30); … … 179 137 { 180 138 return $rendered; 181 139 } 182 echo $rendered; 140 echo $rendered; 183 141 } 184 142 } -
plugins/Live/Visitor.php
28 28 */ 29 29 class Piwik_Live_Visitor 30 30 { 31 const DELIMITER_PLUGIN_NAME = ", "; 32 31 33 function __construct($visitorRawData) 32 34 { 33 35 $this->details = $visitorRawData; … … 71 73 'resolution' => $this->getResolution(), 72 74 'screenIcon' => $this->getScreenTypeIcon(), 73 75 'plugins' => $this->getPlugins(), 76 'pluginIcons' => $this->getPluginIcons(), 74 77 'lastActionDateTime' => $this->getDateTimeLastAction(), 75 78 'isVisitorGoalConverted' => $this->isVisitorGoalConverted(), 76 79 'goalIcon' => $this->getGoalIcon(), … … 80 83 81 84 function getServerDate() 82 85 { 83 return date('Y-m-d', strtotime($this->details['visit_last_action_time'])); 86 return date('Y-m-d', strtotime($this->details['visit_last_action_time'])); 84 87 } 85 88 86 89 function getIp() … … 150 153 function getRefererType() 151 154 { 152 155 $map = array( 153 Piwik_Common::REFERER_TYPE_SEARCH_ENGINE => 'searchEngine',154 Piwik_Common::REFERER_TYPE_WEBSITE => 'website',155 Piwik_Common::REFERER_TYPE_DIRECT_ENTRY => 'directEntry',156 Piwik_Common::REFERER_TYPE_CAMPAIGN => 'campaign',156 Piwik_Common::REFERER_TYPE_SEARCH_ENGINE => 'searchEngine', 157 Piwik_Common::REFERER_TYPE_WEBSITE => 'website', 158 Piwik_Common::REFERER_TYPE_DIRECT_ENTRY => 'directEntry', 159 Piwik_Common::REFERER_TYPE_CAMPAIGN => 'campaign', 157 160 ); 158 161 if(isset($map[$this->details['referer_type']])) 159 162 { … … 185 188 function getSearchEngineUrl() 186 189 { 187 190 if($this->getRefererType() == 'searchEngine' 188 && !empty($this->details['referer_name']))191 && !empty($this->details['referer_name'])) 189 192 { 190 193 return Piwik_getSearchEngineUrlFromName($this->details['referer_name']); 191 194 } … … 215 218 'config_gears', 216 219 'config_silverlight', 217 220 ); 218 $ return= array();221 $pluginShortNames = array(); 219 222 foreach($plugins as $plugin) 220 223 { 221 224 if($this->details[$plugin] == 1) 222 225 { 223 226 $pluginShortName = substr($plugin, 7); 224 $ return[] = $pluginShortName;227 $pluginShortNames[] = $pluginShortName; 225 228 } 226 229 } 227 return implode( ", ", $return);230 return implode(self::DELIMITER_PLUGIN_NAME, $pluginShortNames); 228 231 } 229 232 233 function getPluginIcons() 234 { 235 $pluginNames = $this->getPlugins(); 236 if( !empty($pluginNames) ) 237 { 238 $pluginNames = explode(self::DELIMITER_PLUGIN_NAME, $pluginNames); 239 $pluginIcons = array(); 240 241 foreach($pluginNames as $plugin) { 242 $pluginIcons[] = array("pluginIcon" =>Piwik_getPluginsLogo($plugin), "pluginName" =>$plugin); 243 } 244 return $pluginIcons; 245 } 246 return null; 247 } 248 230 249 function getOperatingSystem() 231 250 { 232 251 return Piwik_getOSLabel($this->details['config_os']); … … 310 329 if(isset($this->details['match_attribute'])){ 311 330 $goalicon = ""; 312 331 switch ($this->details['match_attribute']) { 313 case "url":314 $goalicon = "plugins/Live/templates/images/goal.png";315 break;316 case "file":317 $goalicon = "plugins/Live/templates/images/download.png";318 break;319 case "external_website":320 $goalicon = "plugins/Live/templates/images/outboundlink.png";321 break;332 case "url": 333 $goalicon = "plugins/Live/templates/images/goal.png"; 334 break; 335 case "file": 336 $goalicon = "plugins/Live/templates/images/download.png"; 337 break; 338 case "external_website": 339 $goalicon = "plugins/Live/templates/images/outboundlink.png"; 340 break; 322 341 } 323 342 return $goalicon; 324 343 }
