diff --git a/core/Db/Schema/Mysql.php b/core/Db/Schema/Mysql.php index ef7d87b4dd62539534d537e5b0b4e69b5e726c79..7d1645ca2fa1e3d9057bc173f1d97ce0df83b5dc 100644 --- a/core/Db/Schema/Mysql.php +++ b/core/Db/Schema/Mysql.php @@ -148,22 +148,12 @@ class Mysql implements SchemaInterface idvisit INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, idsite INTEGER(10) UNSIGNED NOT NULL, idvisitor BINARY(8) NOT NULL, - visitor_localtime TIME NOT NULL, visitor_returning TINYINT(1) NOT NULL, - visitor_count_visits SMALLINT(5) UNSIGNED NOT NULL, - visitor_days_since_last SMALLINT(5) UNSIGNED NOT NULL, - visitor_days_since_order SMALLINT(5) UNSIGNED NOT NULL, - visitor_days_since_first SMALLINT(5) UNSIGNED NOT NULL, - visit_first_action_time DATETIME NOT NULL, - visit_last_action_time DATETIME NOT NULL, - visit_total_actions SMALLINT(5) UNSIGNED NOT NULL, - visit_total_searches SMALLINT(5) UNSIGNED NOT NULL, - visit_total_events SMALLINT(5) UNSIGNED NOT NULL, visit_total_time SMALLINT(5) UNSIGNED NOT NULL, visit_goal_converted TINYINT(1) NOT NULL, visit_goal_buyer TINYINT(1) NOT NULL, + visit_last_action_time DATETIME NOT NULL, config_id BINARY(8) NOT NULL, - config_resolution VARCHAR(9) NOT NULL, config_pdf TINYINT(1) NOT NULL, config_flash TINYINT(1) NOT NULL, config_java TINYINT(1) NOT NULL, @@ -175,7 +165,6 @@ class Mysql implements SchemaInterface config_silverlight TINYINT(1) NOT NULL, config_cookie TINYINT(1) NOT NULL, location_ip VARBINARY(16) NOT NULL, - location_browser_lang VARCHAR(20) NOT NULL, location_country CHAR(3) NOT NULL, location_region char(2) DEFAULT NULL, location_city varchar(255) DEFAULT NULL, diff --git a/core/Plugin/Segment.php b/core/Plugin/Segment.php index 52c2b04b8f74e78c2990d3bb53b557e73364c0f1..ea507f33afaea7a98463ad22dd3e7ed14f850331 100644 --- a/core/Plugin/Segment.php +++ b/core/Plugin/Segment.php @@ -108,6 +108,14 @@ class Segment $this->type = $type; } + /** + * @return string + */ + public function getType() + { + return $this->type; + } + /** * @param bool $permission */ diff --git a/core/Plugin/VisitDimension.php b/core/Plugin/VisitDimension.php index b7b3778a9e1f6cbe87aa8f17e8edbbe4d4704a92..def111f489ceab1d5fb2133a2099f98d0dd08b89 100644 --- a/core/Plugin/VisitDimension.php +++ b/core/Plugin/VisitDimension.php @@ -59,7 +59,11 @@ abstract class VisitDimension $segment->setSqlSegment('log_visit.' . $this->fieldName); } - $segment->setType(Segment::TYPE_DIMENSION); + $type = $segment->getType(); + + if (empty($type)) { + $segment->setType(Segment::TYPE_DIMENSION); + } $this->segments[] = $segment; } diff --git a/core/Tracker/Settings.php b/core/Tracker/Settings.php index c40df487b384ed38eca3f063df05d4bc4eb94ca9..341eb6d69b9b6b5dcaacf137fc8f3145a38f6f2a 100644 --- a/core/Tracker/Settings.php +++ b/core/Tracker/Settings.php @@ -33,7 +33,6 @@ class Settings list($plugin_Flash, $plugin_Java, $plugin_Director, $plugin_Quicktime, $plugin_RealPlayer, $plugin_PDF, $plugin_WindowsMedia, $plugin_Gears, $plugin_Silverlight, $plugin_Cookie) = $this->request->getPlugins(); - $resolution = $this->request->getParam('res'); $userAgent = $this->request->getUserAgent(); $deviceDetector = new \DeviceDetector($userAgent); @@ -67,7 +66,6 @@ class Settings $this->params = array( 'config_id' => $configurationHash, - 'config_resolution' => $resolution, 'config_pdf' => $plugin_PDF, 'config_flash' => $plugin_Flash, 'config_java' => $plugin_Java, @@ -77,8 +75,7 @@ class Settings 'config_windowsmedia' => $plugin_WindowsMedia, 'config_gears' => $plugin_Gears, 'config_silverlight' => $plugin_Silverlight, - 'config_cookie' => $plugin_Cookie, - 'location_browser_lang' => $browserLang, + 'config_cookie' => $plugin_Cookie ); } diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index aaba4b4fa4f81a89760c142f99b7a3cb4e500abd..da374d4dabab697effcd17d857d8639618ce57ee 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -300,7 +300,6 @@ class Visit implements VisitInterface $this->visitorInfo = array_merge($this->visitorInfo, $this->visitorCustomVariables); $this->visitorInfo['visit_goal_converted'] = $visitIsConverted ? 1 : 0; - $this->visitorInfo['config_resolution'] = substr($this->visitorInfo['config_resolution'], 0, 9); $dimensions = VisitDimension::getAllDimensions(); foreach ($dimensions as $dimension) { @@ -505,22 +504,12 @@ class Visit implements VisitInterface protected function getNewVisitorInformation($action) { - $actionType = false; - if($action) { - $actionType = $action->getActionType(); - } - - $daysSinceFirstVisit = $this->request->getDaysSinceFirstVisit(); $visitCount = $this->request->getVisitCount(); $daysSinceLastVisit = $this->request->getDaysSinceLastVisit(); $daysSinceLastOrder = $this->request->getDaysSinceLastOrder(); $isReturningCustomer = ($daysSinceLastOrder !== false); - if ($daysSinceLastOrder === false) { - $daysSinceLastOrder = 0; - } - // User settings $userInfo = $this->getSettingsObject(); $userInfo = $userInfo->getInfo(); @@ -534,28 +523,11 @@ class Visit implements VisitInterface return array( 'idsite' => $this->request->getIdSite(), - 'visitor_localtime' => $this->request->getLocalTime(), 'idvisitor' => $this->getVisitorIdcookie(), 'visitor_returning' => $visitorReturning, - 'visitor_count_visits' => $visitCount, - 'visitor_days_since_last' => $daysSinceLastVisit, - 'visitor_days_since_order' => $daysSinceLastOrder, - 'visitor_days_since_first' => $daysSinceFirstVisit, - 'visit_first_action_time' => Tracker::getDatetimeFromTimestamp($this->request->getCurrentTimestamp()), - 'visit_last_action_time' => Tracker::getDatetimeFromTimestamp($this->request->getCurrentTimestamp()), - 'visit_total_actions' => in_array($actionType, - array(Action::TYPE_PAGE_URL, - Action::TYPE_DOWNLOAD, - Action::TYPE_OUTLINK, - Action::TYPE_SITE_SEARCH, - Action::TYPE_EVENT)) - ? 1 : 0, // if visit starts with something else (e.g. ecommerce order), don't record as an action - 'visit_total_searches' => $actionType == Action::TYPE_SITE_SEARCH ? 1 : 0, - 'visit_total_events' => $actionType == Action::TYPE_EVENT ? 1 : 0, 'visit_total_time' => self::cleanupVisitTotalTime($defaultTimeOnePageVisit), 'visit_goal_buyer' => $this->goalManager->getBuyerType(), 'config_id' => $userInfo['config_id'], - 'config_resolution' => $userInfo['config_resolution'], 'config_pdf' => $userInfo['config_pdf'], 'config_flash' => $userInfo['config_flash'], 'config_java' => $userInfo['config_java'], @@ -567,7 +539,6 @@ class Visit implements VisitInterface 'config_silverlight' => $userInfo['config_silverlight'], 'config_cookie' => $userInfo['config_cookie'], 'location_ip' => $this->getVisitorIp(), - 'location_browser_lang' => $userInfo['location_browser_lang'], ); } @@ -582,32 +553,6 @@ class Visit implements VisitInterface { $valuesToUpdate = array(); - if ($action) { - $actionType = $action->getActionType(); - $idActionUrl = $action->getIdActionUrlForEntryAndExitIds(); - - $incrementActions = false; - - if ($idActionUrl !== false) { - $incrementActions = true; - } - - if ($actionType == Action::TYPE_SITE_SEARCH) { - $valuesToUpdate['visit_total_searches'] = 'visit_total_searches + 1'; - $incrementActions = true; - } else if ($actionType == Action::TYPE_EVENT) { - $valuesToUpdate['visit_total_events'] = 'visit_total_events + 1'; - $incrementActions = true; - } - - if ($incrementActions) { - $valuesToUpdate['visit_total_actions'] = 'visit_total_actions + 1'; - } - } - - $datetimeServer = Tracker::getDatetimeFromTimestamp($this->request->getCurrentTimestamp()); - $valuesToUpdate['visit_last_action_time'] = $datetimeServer; - // Add 1 so it's always > 0 $visitTotalTime = 1 + $this->request->getCurrentTimestamp() - $this->visitorInfo['visit_first_action_time']; $valuesToUpdate['visit_total_time'] = self::cleanupVisitTotalTime($visitTotalTime); diff --git a/plugins/API/API.php b/plugins/API/API.php index 61818abf69799a389070f27ddb0415be8e459a74..8af6471353dbbc3261be5719608cdcae0804b879 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -180,21 +180,6 @@ class API extends \Piwik\Plugin\API 'sqlFilterValue' => array('Piwik\IP', 'P2N'), 'permission' => $isAuthenticatedWithViewAccess, ); - $segments[] = array( - 'type' => 'metric', - 'category' => Piwik::translate('General_Visit'), - 'name' => 'General_NbActions', - 'segment' => 'actions', - 'sqlSegment' => 'log_visit.visit_total_actions', - ); - $segments[] = array( - 'type' => 'metric', - 'category' => Piwik::translate('General_Visit'), - 'name' => 'General_NbSearches', - 'segment' => 'searches', - 'sqlSegment' => 'log_visit.visit_total_searches', - 'acceptedValues' => 'To select all visits who used internal Site Search, use: &segment=searches>0', - ); $segments[] = array( 'type' => 'metric', 'category' => Piwik::translate('General_Visit'), @@ -220,21 +205,6 @@ class API extends \Piwik\Plugin\API 'segment' => 'daysSinceLastVisit', 'sqlSegment' => 'log_visit.visitor_days_since_last', ); - $segments[] = array( - 'type' => 'metric', - 'category' => Piwik::translate('General_Visit'), - 'name' => 'General_DaysSinceFirstVisit', - 'segment' => 'daysSinceFirstVisit', - 'sqlSegment' => 'log_visit.visitor_days_since_first', - ); - $segments[] = array( - 'type' => 'metric', - 'category' => Piwik::translate('General_Visit'), - 'name' => 'General_NumberOfVisits', - 'segment' => 'visitCount', - 'sqlSegment' => 'log_visit.visitor_count_visits', - ); - $segments[] = array( 'type' => 'dimension', 'category' => Piwik::translate('General_Visit'), diff --git a/plugins/Actions/Columns/EntryPageTitle.php b/plugins/Actions/Columns/EntryPageTitle.php index 5df614f9e13be14529714f882e4d2a0db6154167..5664ea7c2170458e34dad1c53f606235c1aceed2 100644 --- a/plugins/Actions/Columns/EntryPageTitle.php +++ b/plugins/Actions/Columns/EntryPageTitle.php @@ -29,9 +29,9 @@ class EntryPageTitle extends VisitDimension /** * @param Request $request - * @param $visit + * @param array $visit * @param Action|null $action - * @return bool + * @return int */ public function onNewVisit(Request $request, $visit, $action) { diff --git a/plugins/Actions/Columns/EntryPageUrl.php b/plugins/Actions/Columns/EntryPageUrl.php index b2b9ea0c5cec33bb296458c53a7909c7f0937c67..760f4b635a9db1823f3c3112037493656504d996 100644 --- a/plugins/Actions/Columns/EntryPageUrl.php +++ b/plugins/Actions/Columns/EntryPageUrl.php @@ -29,9 +29,9 @@ class EntryPageUrl extends VisitDimension /** * @param Request $request - * @param $visit + * @param array $visit * @param Action|null $action - * @return bool + * @return int */ public function onNewVisit(Request $request, $visit, $action) { diff --git a/plugins/Actions/Columns/ExitPageTitle.php b/plugins/Actions/Columns/ExitPageTitle.php index ed2d7821dd08738c19388d6e64332a9bbb994b9b..2f2054ac6084a386d848551f08f31fa13064d7c2 100644 --- a/plugins/Actions/Columns/ExitPageTitle.php +++ b/plugins/Actions/Columns/ExitPageTitle.php @@ -29,9 +29,9 @@ class ExitPageTitle extends VisitDimension /** * @param Request $request - * @param $visit + * @param array $visit * @param Action|null $action - * @return bool + * @return int|bool */ public function onNewVisit(Request $request, $visit, $action) { @@ -44,19 +44,19 @@ class ExitPageTitle extends VisitDimension return (int) $idActionName; } + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int|bool + */ public function onExistingVisit(Request $request, $visit, $action) { if (empty($action)) { return false; } - $id = $action->getIdActionNameForEntryAndExitIds(); - - if (!empty($id)) { - $id = (int) $id; - } - - return $id; + return $action->getIdActionNameForEntryAndExitIds(); } public function getName() diff --git a/plugins/Actions/Columns/ExitPageUrl.php b/plugins/Actions/Columns/ExitPageUrl.php index ad3c21ec429cb53fe0f24e0a951818c394bc2394..82ad5c598aef7b27d845cc61ff5a1f13ef129978 100644 --- a/plugins/Actions/Columns/ExitPageUrl.php +++ b/plugins/Actions/Columns/ExitPageUrl.php @@ -29,9 +29,9 @@ class ExitPageUrl extends VisitDimension /** * @param Request $request - * @param $visit + * @param array $visit * @param Action|null $action - * @return bool + * @return int|bool */ public function onNewVisit(Request $request, $visit, $action) { diff --git a/plugins/Actions/Columns/VisitTotalActions.php b/plugins/Actions/Columns/VisitTotalActions.php new file mode 100644 index 0000000000000000000000000000000000000000..49177a3143bc21aab81a35487a2da9ea9bdaacd0 --- /dev/null +++ b/plugins/Actions/Columns/VisitTotalActions.php @@ -0,0 +1,94 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Actions\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Plugins\CoreHome\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; +use Piwik\Tracker; + +class VisitTotalActions extends VisitDimension +{ + protected $fieldName = 'visit_total_actions'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + + protected function init() + { + $segment = new Segment(); + $segment->setType(Segment::TYPE_METRIC); + $segment->setSegment('actions'); + $segment->setName('General_NbActions'); + $this->addSegment($segment); + } + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + $actionType = false; + if ($action) { + $actionType = $action->getActionType(); + } + + $actions = array( + Action::TYPE_PAGE_URL, + Action::TYPE_DOWNLOAD, + Action::TYPE_OUTLINK, + Action::TYPE_SITE_SEARCH, + Action::TYPE_EVENT + ); + + // if visit starts with something else (e.g. ecommerce order), don't record as an action + if (in_array($actionType, $actions)) { + return 1; + } + + return 0; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onExistingVisit(Request $request, $visit, $action) + { + if (!$action) { + return false; + } + + $increment = 'visit_total_actions + 1'; + + $idActionUrl = $action->getIdActionUrlForEntryAndExitIds(); + + if ($idActionUrl !== false) { + return $increment; + } + + $actionType = $action->getActionType(); + + if (in_array($actionType, array(Action::TYPE_SITE_SEARCH, Action::TYPE_EVENT))) { + return $increment; + } + + return false; + } + +} \ No newline at end of file diff --git a/plugins/Actions/Columns/VisitTotalSearches.php b/plugins/Actions/Columns/VisitTotalSearches.php new file mode 100644 index 0000000000000000000000000000000000000000..42a9ac8b14f4e209fbb44eb3dee1654203143afa --- /dev/null +++ b/plugins/Actions/Columns/VisitTotalSearches.php @@ -0,0 +1,76 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Actions\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Plugins\CoreHome\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; +use Piwik\Tracker; + +class VisitTotalSearches extends VisitDimension +{ + protected $fieldName = 'visit_total_searches'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + + protected function init() + { + $segment = new Segment(); + $segment->setType(Segment::TYPE_METRIC); + $segment->setSegment('searches'); + $segment->setName('General_NbSearches'); + $segment->setAcceptValues('To select all visits who used internal Site Search, use: &segment=searches>0'); + $this->addSegment($segment); + } + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + if ($this->isSiteSearchAction($action)) { + return 1; + } + + return 0; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onExistingVisit(Request $request, $visit, $action) + { + if ($this->isSiteSearchAction($action)) { + return 'visit_total_searches + 1'; + } + + return false; + } + + /** + * @param Action|null $action + * @return bool + */ + private function isSiteSearchAction($action) + { + return ($action && $action->getActionType() == Action::TYPE_SITE_SEARCH); + } + +} \ No newline at end of file diff --git a/plugins/CoreHome/Columns/VisitFirstActionTime.php b/plugins/CoreHome/Columns/VisitFirstActionTime.php new file mode 100644 index 0000000000000000000000000000000000000000..e0b7078fb8faa94bf43687d591e811004a238933 --- /dev/null +++ b/plugins/CoreHome/Columns/VisitFirstActionTime.php @@ -0,0 +1,36 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; +use Piwik\Tracker; + +class VisitFirstActionTime extends VisitDimension +{ + protected $fieldName = 'visit_first_action_time'; + protected $fieldType = 'DATETIME NOT NULL'; + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return Tracker::getDatetimeFromTimestamp($request->getCurrentTimestamp()); + } +} \ No newline at end of file diff --git a/plugins/CoreHome/Columns/VisitLastActionTime.php b/plugins/CoreHome/Columns/VisitLastActionTime.php new file mode 100644 index 0000000000000000000000000000000000000000..5c45cb31a556f0077601030bbd34066b57529b67 --- /dev/null +++ b/plugins/CoreHome/Columns/VisitLastActionTime.php @@ -0,0 +1,53 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; +use Piwik\Tracker; + +class VisitLastActionTime extends VisitDimension +{ + protected $fieldName = 'visit_last_action_time'; + // we do not install or define column definition here as we need to create this column when installing as there is + // an index on it. Currently we do not define the index here... although we could overwrite the install() method + // and add column 'visit_last_action_time' and add index. Problem is there is also an index + // INDEX(idsite, config_id, visit_last_action_time) and we maybe not be sure whether config_id already exists at + // installing point (in case config_id is installed via dimension as well we do not know which column will be added + // first). + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return Tracker::getDatetimeFromTimestamp($request->getCurrentTimestamp()); + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onExistingVisit(Request $request, $visit, $action) + { + return $this->onNewVisit($request, $visit, $action); + } + +} \ No newline at end of file diff --git a/plugins/CoreHome/Columns/VisitorDaysSinceFirst.php b/plugins/CoreHome/Columns/VisitorDaysSinceFirst.php new file mode 100644 index 0000000000000000000000000000000000000000..c418e6e76490a39e7d3115059764dd235c0525ae --- /dev/null +++ b/plugins/CoreHome/Columns/VisitorDaysSinceFirst.php @@ -0,0 +1,45 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Plugins\CoreHome\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; + +class VisitorDaysSinceFirst extends VisitDimension +{ + protected $fieldName = 'visitor_days_since_first'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + + protected function init() + { + $segment = new Segment(); + $segment->setType(Segment::TYPE_METRIC); + $segment->setSegment('daysSinceFirstVisit'); + $segment->setName('General_DaysSinceFirstVisit'); + $this->addSegment($segment); + } + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return $request->getDaysSinceFirstVisit(); + } +} \ No newline at end of file diff --git a/plugins/CoreHome/Columns/VisitorDaysSinceOrder.php b/plugins/CoreHome/Columns/VisitorDaysSinceOrder.php new file mode 100644 index 0000000000000000000000000000000000000000..5597a426f777539f79a242a1b82bda74d957b949 --- /dev/null +++ b/plugins/CoreHome/Columns/VisitorDaysSinceOrder.php @@ -0,0 +1,41 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; + +class VisitorDaysSinceOrder extends VisitDimension +{ + protected $fieldName = 'visitor_days_since_order'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + + public function getName() + { + return ''; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + $daysSinceLastOrder = $request->getDaysSinceLastOrder(); + + if ($daysSinceLastOrder === false) { + $daysSinceLastOrder = 0; + } + + return $daysSinceLastOrder; + } +} \ No newline at end of file diff --git a/plugins/CoreHome/Columns/VisitsCount.php b/plugins/CoreHome/Columns/VisitsCount.php new file mode 100644 index 0000000000000000000000000000000000000000..6b900eefef7730dc95701c47b4faf6afd5689230 --- /dev/null +++ b/plugins/CoreHome/Columns/VisitsCount.php @@ -0,0 +1,45 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome\Columns; + +use Piwik\Plugin\VisitDimension; +use Piwik\Plugins\CoreHome\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; + +class VisitsCount extends VisitDimension +{ + protected $fieldName = 'visitor_count_visits'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + + public function getName() + { + return ''; + } + + protected function init() + { + $segment = new Segment(); + $segment->setType(Segment::TYPE_METRIC); + $segment->setSegment('visitCount'); + $segment->setName('General_NumberOfVisits'); + $this->addSegment($segment); + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return $request->getVisitCount(); + } +} \ No newline at end of file diff --git a/plugins/CoreHome/Segment.php b/plugins/CoreHome/Segment.php new file mode 100644 index 0000000000000000000000000000000000000000..7b6f2fbf57dd1eebadc616875a16f567c6c34d9a --- /dev/null +++ b/plugins/CoreHome/Segment.php @@ -0,0 +1,21 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\CoreHome; + +/** + * CoreHome segment base class + */ +class Segment extends \Piwik\Plugin\Segment +{ + protected function init() + { + $this->setCategory('General_Visit'); + } +} + diff --git a/plugins/Events/Columns/TotalEvents.php b/plugins/Events/Columns/TotalEvents.php index 67ed9d7ae66380e129ce345590fdad42d21ce294..3d6ac9f33b630f8e59b803ee4c47d567813ad364 100644 --- a/plugins/Events/Columns/TotalEvents.php +++ b/plugins/Events/Columns/TotalEvents.php @@ -11,10 +11,13 @@ namespace Piwik\Plugins\Events\Columns; use Piwik\Piwik; use Piwik\Plugin\VisitDimension; use Piwik\Plugin\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; class TotalEvents extends VisitDimension -{ +{ protected $fieldName = 'visit_total_events'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; protected function init() { @@ -31,4 +34,43 @@ class TotalEvents extends VisitDimension { return Piwik::translate('Events_EventName'); } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + if ($this->isEventAction($action)) { + return 1; + } + + return 0; + } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onExistingVisit(Request $request, $visit, $action) + { + if ($this->isEventAction($action)) { + return 'visit_total_events + 1'; + } + + return false; + } + + /** + * @param Action|null $action + * @return bool + */ + private function isEventAction($action) + { + return ($action && $action->getActionType() == Action::TYPE_EVENT); + } } \ No newline at end of file diff --git a/plugins/UserSettings/Columns/Language.php b/plugins/UserSettings/Columns/Language.php index 120178ffb53de1231e3a531928c060ae4253dc05..0345975639884aed30d26c59f4cf5b258c4329f0 100644 --- a/plugins/UserSettings/Columns/Language.php +++ b/plugins/UserSettings/Columns/Language.php @@ -10,11 +10,27 @@ namespace Piwik\Plugins\UserSettings\Columns; use Piwik\Piwik; use Piwik\Plugin\VisitDimension; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; class Language extends VisitDimension -{ +{ + protected $fieldName = 'location_browser_lang'; + protected $fieldType = 'VARCHAR(20) NOT NULL'; + public function getName() { return Piwik::translate('General_Language'); } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return substr($request->getBrowserLanguage(), 0, 20); + } } \ No newline at end of file diff --git a/plugins/UserSettings/Columns/Resolution.php b/plugins/UserSettings/Columns/Resolution.php index f9a5e1ee628e6b3011894b47315d231a9b28187d..407daf7db42c59cfcbdf49bd3f22eb4e698fd04a 100644 --- a/plugins/UserSettings/Columns/Resolution.php +++ b/plugins/UserSettings/Columns/Resolution.php @@ -11,10 +11,13 @@ namespace Piwik\Plugins\UserSettings\Columns; use Piwik\Piwik; use Piwik\Plugin\VisitDimension; use Piwik\Plugins\UserSettings\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; class Resolution extends VisitDimension { protected $fieldName = 'config_resolution'; + protected $fieldType = 'VARCHAR(9) NOT NULL'; protected function init() { @@ -25,6 +28,23 @@ class Resolution extends VisitDimension $this->addSegment($segment); } + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + $resolution = $request->getParam('res'); + + if (!empty($resolution)) { + return substr($resolution, 0, 9); + } + + return $resolution; + } + public function getName() { return Piwik::translate('UserSettings_ColumnResolution'); diff --git a/plugins/VisitTime/Columns/Localtime.php b/plugins/VisitTime/Columns/Localtime.php index f20dde3fedc3f0b540f93f8c2325e2545252f061..6f0cc5f7272dba48e4303366ca6532cae46c87bb 100644 --- a/plugins/VisitTime/Columns/Localtime.php +++ b/plugins/VisitTime/Columns/Localtime.php @@ -11,10 +11,13 @@ namespace Piwik\Plugins\VisitTime\Columns; use Piwik\Piwik; use Piwik\Plugin\VisitDimension; use Piwik\Plugins\VisitTime\Segment; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; class Localtime extends VisitDimension { protected $fieldName = 'visitor_localtime'; + protected $fieldType = 'TIME NOT NULL'; protected function init() { @@ -30,4 +33,15 @@ class Localtime extends VisitDimension { return Piwik::translate('VisitTime_ColumnLocalTime'); } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return $request->getLocalTime(); + } } \ No newline at end of file diff --git a/plugins/VisitorInterest/Columns/Visitsbydayssincelastvisit.php b/plugins/VisitorInterest/Columns/Visitsbydayssincelastvisit.php index a114bf54769a3a1e3871b2984d3b50f2d689a2fc..075c6e7aaeae560e248dd81b2883f075a4ce3136 100644 --- a/plugins/VisitorInterest/Columns/Visitsbydayssincelastvisit.php +++ b/plugins/VisitorInterest/Columns/Visitsbydayssincelastvisit.php @@ -10,11 +10,28 @@ namespace Piwik\Plugins\VisitorInterest\Columns; use Piwik\Piwik; use Piwik\Plugin\VisitDimension; +use Piwik\Tracker\Action; +use Piwik\Tracker\Request; class Visitsbydayssincelastvisit extends VisitDimension -{ +{ + protected $fieldName = 'visitor_days_since_last'; + protected $fieldType = 'SMALLINT(5) UNSIGNED NOT NULL'; + public function getName() { return Piwik::translate('VisitorInterest_VisitsByDaysSinceLast'); } + + /** + * @param Request $request + * @param array $visit + * @param Action|null $action + * @return int + */ + public function onNewVisit(Request $request, $visit, $action) + { + return $request->getDaysSinceLastVisit(); + } + } \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml index 6d10c939426009862d00a87dc2c5712ac0f40487..19aefaace8f0f09044510d4f299fa93f7eb36429 100644 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml @@ -37,6 +37,13 @@ <name>Number of visits</name> <segment>visitCount</segment> </row> + <row> + <type>metric</type> + <category>Visit</category> + <name>Total events</name> + <segment>events</segment> + <acceptedValues>To select all visits who triggered an Event, use: &segment=events>0</acceptedValues> + </row> <row> <type>metric</type> <category>Visit</category> @@ -149,13 +156,6 @@ <segment>visitServerHour</segment> <acceptedValues>0, 1, 2, 3, ..., 20, 21, 22, 23</acceptedValues> </row> - <row> - <type>dimension</type> - <category>Visit</category> - <name>Total events</name> - <segment>events</segment> - <acceptedValues>To select all visits who triggered an Event, use: &segment=events>0</acceptedValues> - </row> <row> <type>dimension</type> <category>Visit</category> diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI index b4ab7e0e73efc617156824cdeac0b9930a7f3e4e..06b7215cfeda6fabd3acee2db22dd7805e14ad52 160000 --- a/tests/PHPUnit/UI +++ b/tests/PHPUnit/UI @@ -1 +1 @@ -Subproject commit b4ab7e0e73efc617156824cdeac0b9930a7f3e4e +Subproject commit 06b7215cfeda6fabd3acee2db22dd7805e14ad52