Ticket #1120: #1120-#v2.patch

File #1120-#v2.patch, 25.4 KB (added by peterb, 22 months ago)

1st review worked into

  • plugins/Live/API.php

    ### Eclipse Workspace Patch 1.0
    #P trunk
     
    3333                } 
    3434                return self::$instance; 
    3535        } 
    36          
     36 
    3737        const TYPE_FETCH_VISITS = 1; 
    3838        const TYPE_FETCH_PAGEVIEWS = 2; 
    3939 
     
    5151        public function getLastVisitsForVisitor( $visitorId, $idSite, $limit = 10 ) 
    5252        { 
    5353                Piwik::checkUserHasViewAccess($idSite); 
    54                 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $visitorId, $limit); 
     54                var_dump($visitorId); 
     55                $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit, $offset = null, $minIdVisit = null, $visitorId); 
    5556                $table = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 
    5657                return $table; 
    5758        } 
     
    6263        public function getLastVisits( $idSite, $limit = 10, $minIdVisit = false ) 
    6364        { 
    6465                Piwik::checkUserHasViewAccess($idSite); 
    65                 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $visitorId = null, $limit, $minIdVisit); 
     66                $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit, $offset = null, $minIdVisit, $visitorId = null); 
    6667                $table = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 
    6768                return $table; 
    6869        } 
     
    7071        /* 
    7172         * @return Piwik_DataTable 
    7273         */ 
    73         public function getLastVisitsDetails( $idSite, $limit = 1000, $minIdVisit = false ) 
     74        public function getLastVisitsDetails( $idSite, $period = null, $date = null, $limit = 25, $filter_offset = 0, $minIdVisit = false ) 
    7475        { 
    7576                Piwik::checkUserHasViewAccess($idSite); 
    76                 $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $visitorId = null, $limit, $minIdVisit); 
     77                $visitorDetails = $this->loadLastVisitorDetailsFromDatabase($idSite, $period, $date, $limit, $filter_offset, $minIdVisit);  
    7778                $dataTable = $this->getCleanedVisitorsFromDetails($visitorDetails, $idSite); 
    7879                return $dataTable; 
    7980        } 
     
    118119                $visitorData = $this->loadLastVisitorInLastXTimeFromDatabase($idSite, $minutes, $days = 0, self::TYPE_FETCH_PAGEVIEWS); 
    119120                return $visitorData; 
    120121        } 
    121          
     122 
    122123        /* 
    123124         * @return Piwik_DataTable 
    124125         */ 
     
    144145                        $sql = " 
    145146                                SELECT DISTINCT " .Piwik_Common::prefixTable('log_action').".name AS pageUrl 
    146147                                FROM " .Piwik_Common::prefixTable('log_link_visit_action')." 
    147                                         INNER JOIN " .Piwik_Common::prefixTable('log_action')."  
     148                                        INNER JOIN " .Piwik_Common::prefixTable('log_action')." 
    148149                                        ON  " .Piwik_Common::prefixTable('log_link_visit_action').".idaction_url = " .Piwik_Common::prefixTable('log_action').".idaction 
    149150                                WHERE " .Piwik_Common::prefixTable('log_link_visit_action').".idvisit = $idvisit; 
    150151                                 "; 
     
    154155                        $sql = " 
    155156                                SELECT DISTINCT " .Piwik_Common::prefixTable('log_action').".name AS pageUrl 
    156157                                FROM " .Piwik_Common::prefixTable('log_link_visit_action')." 
    157                                         INNER JOIN " .Piwik_Common::prefixTable('log_action')."  
     158                                        INNER JOIN " .Piwik_Common::prefixTable('log_action')." 
    158159                                        ON  " .Piwik_Common::prefixTable('log_link_visit_action').".idaction_name = " .Piwik_Common::prefixTable('log_action').".idaction 
    159160                                WHERE " .Piwik_Common::prefixTable('log_link_visit_action').".idvisit = $idvisit; 
    160161                                 "; 
     
    169170        /* 
    170171         * @return array 
    171172         */ 
    172         private function loadLastVisitorDetailsFromDatabase($idSite, $visitorId = null, $limit = null, $minIdVisit = false ) 
     173        private function loadLastVisitorDetailsFromDatabase($idSite, $period = null, $date = null, $limit = null, $offset = null, $minIdVisit = false, $visitorId = null) 
    173174        { 
    174175                $where = $whereBind = array(); 
    175176 
    176177                $where[] = Piwik_Common::prefixTable('log_visit') . ".idsite = ? "; 
    177178                $whereBind[] = $idSite; 
    178  
     179                 
    179180                if(!empty($visitorId)) 
    180181                { 
    181182                        $where[] = Piwik_Common::prefixTable('log_visit') . ".visitor_idcookie = ? "; 
     
    188189                        $whereBind[] = $minIdVisit; 
    189190                } 
    190191 
     192                //increse limit by offset when visitor paginates 
     193                if(isset($offset)) { 
     194                        $limit += $offset; 
     195                } 
     196                 
     197                // SQL Filter with provided period 
     198                if (!empty($period) && !empty($date)) { 
     199 
     200                        $currentSite = new Piwik_Site($idSite); 
     201                        $currentTimezone = $currentSite->getTimezone(); 
     202                        $processedDate = Piwik_Date::factory($date, $currentTimezone); 
     203                        $processedPeriod = Piwik_Period::factory($period, $processedDate); 
     204 
     205                        array_push(     $where, Piwik_Common::prefixTable('log_visit') . ".visit_first_action_time BETWEEN ? AND ?"); 
     206                        array_push(     $whereBind, 
     207                        $processedPeriod->getDateStart()->toString(), 
     208                        $processedPeriod->getDateEnd()->addDay(1)->toString()); 
     209                } 
     210 
    191211                $sqlWhere = ""; 
    192212                if(count($where) > 0) 
    193213                { 
    194214                        $sqlWhere = " WHERE " . join(' AND ', $where); 
    195215                } 
    196216 
    197                 $sql = "SELECT  " . Piwik_Common::prefixTable('log_visit') . ".* ,  
     217                $sql = "SELECT  " . Piwik_Common::prefixTable('log_visit') . ".* , 
    198218                                                " . Piwik_Common::prefixTable ( 'goal' ) . ".match_attribute 
    199219                                FROM " . Piwik_Common::prefixTable('log_visit') . " 
    200                                         LEFT JOIN ".Piwik_Common::prefixTable('log_conversion')."  
     220                                        LEFT JOIN ".Piwik_Common::prefixTable('log_conversion')." 
    201221                                        ON " . Piwik_Common::prefixTable('log_visit') . ".idvisit = " . Piwik_Common::prefixTable('log_conversion') . ".idvisit 
    202                                         LEFT JOIN ".Piwik_Common::prefixTable('goal')."  
     222                                        LEFT JOIN ".Piwik_Common::prefixTable('goal')." 
    203223                                        ON (" . Piwik_Common::prefixTable('goal') . ".idsite = " . Piwik_Common::prefixTable('log_visit') . ".idsite 
    204224                                                AND  " . Piwik_Common::prefixTable('goal') . ".idgoal = " . Piwik_Common::prefixTable('log_conversion') . ".idgoal) 
    205225                                        AND " . Piwik_Common::prefixTable('goal') . ".deleted = 0 
    206                                 $sqlWhere 
    207                                 ORDER BY idsite,idvisit DESC 
     226                                        $sqlWhere 
     227                                ORDER BY idvisit DESC 
    208228                                LIMIT $limit"; 
    209229 
    210230                return Piwik_FetchAll($sql, $whereBind); 
     
    235255 
    236256                if($days != 0) 
    237257                { 
    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)."'"; 
     258                        $oSite = new Piwik_Site($idSite); 
     259                        $sTimezone = $oSite->getTimezone(); 
     260                         
     261                        $oDate = Piwik_Date::factory("now"); 
     262                        $oDate = $oDate->setTimezone($sTimezone); 
     263                         
     264                        $where[] = " visit_last_action_time > '".$oDate->getDateStartUTC()."'"; 
     265 
    240266                } 
    241267 
    242268                $sqlWhere = ""; 
     
    252278                                FROM " . Piwik_Common::prefixTable('log_visit') . " 
    253279                                $sqlWhere 
    254280                                ORDER BY idsite,idvisit DESC"; 
    255                  } 
    256                  // Pages 
    257                  elseif($type == self::TYPE_FETCH_PAGEVIEWS) 
    258                  { 
     281                } 
     282                // Pages 
     283                elseif($type == self::TYPE_FETCH_PAGEVIEWS) 
     284                { 
    259285                        $sql = "SELECT " . Piwik_Common::prefixTable('log_link_visit_action') . ".idaction_url 
    260286                                        FROM " . Piwik_Common::prefixTable('log_link_visit_action') . " 
    261                                         INNER JOIN " . Piwik_Common::prefixTable('log_visit') . "  
     287                                        INNER JOIN " . Piwik_Common::prefixTable('log_visit') . " 
    262288                                        ON " . Piwik_Common::prefixTable('log_visit') . ".idvisit = " . Piwik_Common::prefixTable('log_link_visit_action') . ".idvisit 
    263                                 $sqlWhere"; 
    264                  } 
    265                  else 
    266                  { 
    267                         // no $type is set --> ERROR 
    268                         throw new Exception("type parameter is not properly set."); 
    269                  } 
     289                                        $sqlWhere"; 
     290                } 
     291                else 
     292                { 
     293                        // no $type is set --> ERROR 
     294                        throw new Exception("type parameter is not properly set."); 
     295                } 
    270296 
    271297                // return $sql by fetching 
    272298                return Piwik_FetchAll($sql, $whereBind); 
    273299        } 
    274          
    275          
     300 
     301 
    276302        /** 
    277303         * Removes fields that are not meant to be displayed (md5 config hash) 
    278304         * Or that the user should only access if he is super user (cookie, IP) 
    279          *  
     305         * 
    280306         * @return void 
    281307         */ 
    282308        private function cleanVisitorDetails( &$visitorDetails ) 
     
    295321                        } 
    296322                } 
    297323        } 
    298          
     324 
    299325} 
  • plugins/Live/templates/index.tpl

     
    6161                $("#visitsTotal").load("index.php?module=Live&idSite={/literal}{$idSite}{literal}&action=ajaxTotalVisitors"); 
    6262        } 
    6363 
    64         // updates the visit table, to refresh the already presented visotors pages 
     64        // updates the visit table, to refresh the already presented visitors pages 
    6565        function updateVisitBox() 
    6666        { 
    6767                $("#visitsLive").load("index.php?module=Live&idSite={/literal}{$idSite}{literal}&action=getLastVisitsStart"); 
     
    7979</script> 
    8080 
    8181<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; 
    8591} 
    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 } 
    9192 
    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; 
    9898} 
    9999 
    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; 
    103102} 
    104103 
    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; 
    108106} 
    109107 
    110 #visitsLive .pagesTitle { 
    111         display:block; 
    112         float:left; 
    113         padding-top: 3px; 
     108#visitsLive .referer:hover { 
     109        background:#FFFFF7; 
    114110} 
    115111 
    116 #visitsLive .countActions { 
    117         background:#FFFFFF none repeat scroll 0 0; 
    118         color:#4F6B72; 
     112 #visitsLive .pagesTitle { 
     113         display:block; 
     114         float:left; 
    119115} 
    120116 
    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 } 
    125120 
    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 } 
    130124 
    131 #visitsLive .visit { 
    132 } 
     125 #visitsLive .returning { 
     126         background:#F9FAFA none repeat scroll 0 0; 
     127 } 
    133128 
    134 #visitsLive .alt { 
    135 } 
     129 .visitsLiveFooter a.rightLink{ 
     130         float:right; 
     131         padding-right:20px; 
     132 } 
    136133 
    137 #visitsLive .actions { 
    138         background:#F9FAFA none repeat scroll 0 0; 
    139         color:#797268; 
    140         padding:0px 5px 0px 12px; 
    141 } 
    142  
    143134</style> 
    144135{/literal} 
    145136 
     
    175166{$visitors} 
    176167</div> 
    177168 
    178 <div> 
     169<div class="visitsLiveFooter"> 
    179170        <a href="javascript:void(0);" onclick="onClickPause();"><img id="pauseImage" border="0" src="plugins/Live/templates/images/pause_disabled.gif" /></a> 
    180171        <a href="javascript:void(0);" onclick="onClickPlay();"><img id="playImage" border="0" src="plugins/Live/templates/images/play.gif" /></a> 
     172        &nbsp; <a class="rightLink" href="javascript:broadcast.propagateAjax('module=Live&action=getLastVisitsDetails')">{'View detailed visitor log'|translate}</a> 
    181173</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{php} $col = 0; {/php} 
     31 
     32{foreach from=$arrayDataTable item=visitor} 
     33        <tr> 
     34 
     35{php} 
     36$col++; 
     37if ($col % 2 ) 
     38                { 
     39                $label = "odd"; 
     40                 } else { 
     41                $label = "even"; 
     42                 } 
     43{/php} 
     44 
     45        <td style="display:none;"></td> 
     46        <td class="label label{php} echo $label; {/php}" style="width:12%" width="12%"> 
     47 
     48                                {$visitor.columns.serverDatePretty} - {$visitor.columns.serverTimePretty} 
     49                                {if isset($visitor.columns.ip)} <br/>IP: {$visitor.columns.ip}{/if} 
     50                                {if (isset($visitor.columns.provider)&&$visitor.columns.provider!='IP')}  
     51                                        <br /> 
     52                                        {'Provider_ColumnProvider'|translate}:  
     53                                        <a href="{$visitor.columns.providerUrl}" target="_blank" title="{$visitor.columns.providerUrl}" style="text-decoration:underline;"> 
     54                                                {$visitor.columns.provider} 
     55                                        </a> 
     56                                {/if} 
     57                                 
     58        </td> 
     59        <td class="label label{php} echo $label; {/php}" style="width:13%" width="13%"> 
     60                &nbsp;<img src="{$visitor.columns.countryFlag}" title="{$visitor.columns.country}, Provider {$visitor.columns.provider}" /> 
     61                &nbsp;<img src="{$visitor.columns.browserIcon}" title="{$visitor.columns.browser} with plugins {$visitor.columns.plugins} enabled" /> 
     62                &nbsp;<img src="{$visitor.columns.operatingSystemIcon}" title="{$visitor.columns.operatingSystem}, {$visitor.columns.resolution} ({$visitor.columns.screen})" /> 
     63                &nbsp;{if $visitor.columns.isVisitorGoalConverted}<img src="{$visitor.columns.goalIcon}" title="{$visitor.columns.goalType}" />{/if} 
     64                {if $visitor.columns.isVisitorReturning} 
     65                        &nbsp;<img src="plugins/Live/templates/images/returningVisitor.gif" title="Returning Visitor" /> 
     66                {/if} 
     67                <br/> 
     68                {if count($visitor.columns.pluginIcons) > 0} 
     69                        <hr /> 
     70                        {'UserSettings_Plugins'|translate}: 
     71                                {foreach from=$visitor.columns.pluginIcons item=pluginIcon} 
     72                                        <img src="{$pluginIcon.pluginIcon}" title="{$pluginIcon.pluginName|capitalize:true}" alt="{$pluginIcon.pluginName|capitalize:true}" /> 
     73                                {/foreach} 
     74                {/if} 
     75        </td> 
     76 
     77        <td class="column{php} echo $label; {/php}" style="width:20%" width="20%"> 
     78                <div class="referer"> 
     79                        {if $visitor.columns.refererType == 'website'} 
     80                                {'Referers_ColumnWebsite'|translate}: 
     81                                <a href="{$visitor.columns.refererUrl}" target="_blank" title="{$visitor.columns.refererUrl}" style="text-decoration:underline;"> 
     82                                        {$visitor.columns.refererName} 
     83                                </a> 
     84                        {/if} 
     85                        {if $visitor.columns.refererType == 'campaign'} 
     86                                {'Referers_Campaigns'|translate} 
     87                                <br /> 
     88                                <a href="{$visitor.columns.refererUrl}" target="_blank" title="{$visitor.columns.refererUrl}" style="text-decoration:underline;"> 
     89                                        {$visitor.columns.refererName} 
     90                                </a> 
     91                        {/if} 
     92                        {if $visitor.columns.refererType == 'searchEngine'} 
     93                                {if !empty($visitor.columns.searchEngineIcon)} 
     94                                        <img src="{$visitor.columns.searchEngineIcon}" alt="{$visitor.columns.refererName}" />  
     95                                {/if} 
     96                                {$visitor.columns.refererName} 
     97                                <br /> 
     98                                {if !empty($visitor.columns.keywords)}{'Referers_Keywords'|translate}:{/if} 
     99                                <a href="{$visitor.columns.refererUrl}" target="_blank" style="text-decoration:underline;"> 
     100                                        {if !empty($visitor.columns.keywords)} 
     101                                                "{$visitor.columns.keywords}" 
     102                                        {/if} 
     103                                </a> 
     104                        {/if} 
     105                        {if $visitor.columns.refererType == 'directEntry'}{'Referers_DirectEntry'|translate}{/if} 
     106                </div> 
     107        </td> 
     108        <td class="column{php} echo $label; {/php}" style="width:55%" width="55%"> 
     109                        <strong>{$visitor.columns.actionDetails|@count} {'Actions_Actions'|translate} - {$visitor.columns.visitLengthPretty}</strong> 
     110                        <br /><br /> 
     111                        <ol style="list-style:decimal inside none;"> 
     112                        {foreach from=$visitor.columns.actionDetails item=action} 
     113                                <li> 
     114                                        <a href="{$action.pageUrl}" target="_blank" style="text-decoration:underline;" title="{$action.pageUrl}"> 
     115                                                {$action.pageUrl|truncate:80:"...":true} 
     116                                        </a> 
     117                                </li> 
     118                        {/foreach} 
     119                        </ol> 
     120        </td> 
     121        </tr> 
     122{/foreach} 
     123        </tbody> 
     124        </table> 
     125 
     126                {/if} 
     127                {if $properties.show_footer} 
     128                        {include file="CoreHome/templates/datatable_footer.tpl"} 
     129                {/if} 
     130                {include file="CoreHome/templates/datatable_js.tpl"} 
     131        {/if} 
     132</div> 
     133 
     134{literal} 
     135<style> 
     136 hr { 
     137        background:none repeat scroll 0 0 transparent; 
     138        border-color:-moz-use-text-color -moz-use-text-color #EEEEEE; 
     139        border-style:none none solid; 
     140        border-width:0 0 1px; 
     141        color:#CCCCCC; 
     142        margin:0 2em 0.5em; 
     143        padding:0 0 0.5em; 
     144 } 
     145 
     146</style> 
     147{/literal} 
     148</div> 
     149 No newline at end of file 
  • plugins/Live/Controller.php

     
    3030        public function widget($fetch = false) 
    3131        { 
    3232                $view = Piwik_View::factory('index'); 
    33                 $view->idSite = Piwik_Common::getRequestVar('idSite');           
     33                $view->idSite = Piwik_Common::getRequestVar('idSite'); 
    3434                $view->visitorsCountHalfHour = $this->getUsersInLastXMin(30); 
    3535                $view->visitorsCountToday = $this->getUsersInLastXDays(1); 
    3636                $view->pisHalfhour = $this->getPageImpressionsInLastXMin(30); 
     
    4242 
    4343        public function getLastVisitsDetails($fetch = false) 
    4444        { 
    45                 $view = Piwik_ViewDataTable::factory(''); 
     45                $view = Piwik_ViewDataTable::factory(); 
    4646                $view->init( $this->pluginName, 
    4747                                                        __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'); 
    5649 
    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' 
    7256 
    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  
    8957                $view->disableSort(); 
    90                 $view->setLimit(10); 
    91                 $view->disableExcludeLowPopulation(); 
     58                $view->setLimit(20); 
     59                $view->setTemplate("Live/templates/visitorLog.tpl"); 
    9260                $view->setSortedColumn('idVisit', 'ASC'); 
    9361                $view->disableSearchBox(); 
     62                $view->disableOffsetInformation(); 
    9463                // "Include low population" link won't be displayed under this table 
    9564                $view->disableExcludeLowPopulation(); 
    9665                // disable the tag cloud,  pie charts, bar chart icons 
     
    10170                return $this->renderView($view, $fetch); 
    10271        } 
    10372 
    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  
    11573        public function getLastVisitsStart($fetch = false) 
    11674        { 
    11775                $view = Piwik_View::factory('lastVisits'); 
    118                 $view->idSite = Piwik_Common::getRequestVar('idSite');           
    119                  
     76                $view->idSite = Piwik_Common::getRequestVar('idSite'); 
     77 
    12078                $view->visitors = $this->getLastVisits(10); 
    12179 
    12280                $rendered = $view->render($fetch); 
     
    167125        public function ajaxTotalVisitors($fetch = false) 
    168126        { 
    169127                $view = Piwik_View::factory('totalVisits'); 
    170                 $view->idSite = Piwik_Common::getRequestVar('idSite');           
     128                $view->idSite = Piwik_Common::getRequestVar('idSite'); 
    171129                $view->visitorsCountHalfHour = $this->getUsersInLastXMin(30); 
    172130                $view->visitorsCountToday = $this->getUsersInLastXDays(1); 
    173131                $view->pisHalfhour = $this->getPageImpressionsInLastXMin(30); 
     
    179137                { 
    180138                        return $rendered; 
    181139                } 
    182                 echo $rendered;  
     140                echo $rendered; 
    183141        } 
    184142} 
  • plugins/Live/Visitor.php

     
    2828 */ 
    2929class Piwik_Live_Visitor 
    3030{ 
     31        const cPluginNameDelimiter = ", "; 
     32         
    3133        function __construct($visitorRawData) 
    3234        { 
    3335                $this->details = $visitorRawData; 
     
    7173                        'resolution' => $this->getResolution(), 
    7274                        'screenIcon' => $this->getScreenTypeIcon(), 
    7375                        'plugins' => $this->getPlugins(), 
     76                        'pluginIcons' => $this->getPluginIcons(), 
    7477                        'lastActionDateTime' => $this->getDateTimeLastAction(), 
    7578                        'isVisitorGoalConverted' => $this->isVisitorGoalConverted(), 
    7679                        'goalIcon' => $this->getGoalIcon(), 
     
    8083 
    8184        function getServerDate() 
    8285        { 
    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'])); 
    8487        } 
    8588 
    8689        function getIp() 
     
    150153        function getRefererType() 
    151154        { 
    152155                $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', 
    157160                ); 
    158161                if(isset($map[$this->details['referer_type']])) 
    159162                { 
     
    185188        function getSearchEngineUrl() 
    186189        { 
    187190                if($this->getRefererType() == 'searchEngine' 
    188                         && !empty($this->details['referer_name'])) 
     191                && !empty($this->details['referer_name'])) 
    189192                { 
    190193                        return Piwik_getSearchEngineUrlFromName($this->details['referer_name']); 
    191194                } 
     
    215218                        'config_gears', 
    216219                        'config_silverlight', 
    217220                ); 
    218                 $return = array(); 
     221                $aPluginShortNames = array(); 
    219222                foreach($plugins as $plugin) 
    220223                { 
    221224                        if($this->details[$plugin] == 1) 
    222225                        { 
    223226                                $pluginShortName = substr($plugin, 7); 
    224                                 $return[] = $pluginShortName; 
     227                                $aPluginShortNames[] = $pluginShortName; 
    225228                        } 
    226229                } 
    227                 return implode(", ", $return); 
     230                return implode(self::cPluginNameDelimiter, $aPluginShortNames); 
    228231        } 
    229232 
     233        function getPluginIcons() 
     234        { 
     235                $sPluginNames = $this->getPlugins(); 
     236                if( !empty($sPluginNames) ) 
     237                { 
     238                        $aPluginNames = explode(self::cPluginNameDelimiter, $sPluginNames); 
     239                        $aPluginIcons = array(); 
     240 
     241                        foreach($aPluginNames as $sPlugin) { 
     242                                $aPluginIcons[] = array("pluginIcon" =>Piwik_getPluginsLogo($sPlugin), "pluginName" =>$sPlugin); 
     243                        } 
     244                        return $aPluginIcons; 
     245                } 
     246                return null; 
     247        } 
     248 
    230249        function getOperatingSystem() 
    231250        { 
    232251                return Piwik_getOSLabel($this->details['config_os']); 
     
    310329                if(isset($this->details['match_attribute'])){ 
    311330                        $goalicon = ""; 
    312331                        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; 
    322341                        } 
    323342                        return $goalicon; 
    324343                }