| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\AIAgents; |
|
|
| use Piwik\API\Request; |
| use Piwik\DataTable; |
| use Piwik\DataTable\DataTableInterface; |
| use Piwik\Period; |
| use Piwik\Piwik; |
| use Piwik\Plugin\API as PluginAPI; |
| use Piwik\Plugins\API\DataTable\MergeDataTables; |
| use Piwik\Segment; |
| use Piwik\Segment\SegmentExpression; |
| use Piwik\Site; |
|
|
| |
| |
| |
| |
| |
| class API extends PluginAPI |
| { |
| public const AI_AGENT_SEGMENT = 'aiAgentName!='; |
| public const AI_AGENT_COLUMN_SUFFIX = '_ai_agent'; |
|
|
| public const HUMAN_SEGMENT = 'aiAgentName=='; |
| public const HUMAN_COLUMN_SUFFIX = '_human'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function get( |
| $idSite, |
| string $period, |
| string $date, |
| string $segment = '', |
| $columns = '' |
| ): DataTableInterface { |
| Piwik::checkUserHasViewAccess($idSite); |
|
|
| $columns = Piwik::getArrayFromApiParameter($columns); |
|
|
| if ($idSite === 'all' || count(Site::getIdSitesFromIdSitesString($idSite, false, true)) > 1) { |
| $resultSet = new DataTable\Map(); |
| $resultSet->setKeyName('idSite'); |
| } elseif (Period::isMultiplePeriod($date, $period)) { |
| $resultSet = new DataTable\Map(); |
| $resultSet->setKeyName('period'); |
| } else { |
| $resultSet = new DataTable\Simple(); |
| } |
|
|
| $clientTypes = [ |
| self::AI_AGENT_COLUMN_SUFFIX => self::AI_AGENT_SEGMENT, |
| self::HUMAN_COLUMN_SUFFIX => self::HUMAN_SEGMENT, |
| ]; |
|
|
| foreach ($clientTypes as $columnSuffix => $clientTypeSegment) { |
| $modifiedSegment = Segment::combine($segment, SegmentExpression::AND_DELIMITER, $clientTypeSegment); |
| $columnsForClientType = empty($columns) ? [] : $this->filterColumnsBySuffix($columns, $columnSuffix); |
|
|
| |
| |
| if (!empty($columns) && empty($columnsForClientType)) { |
| continue; |
| } |
|
|
| $params = [ |
| 'idSite' => $idSite, |
| 'period' => $period, |
| 'date' => $date, |
| 'segment' => $modifiedSegment, |
| 'columns' => implode(',', $columnsForClientType), |
| 'format' => 'original', |
| 'format_metrics' => 0, |
| ]; |
|
|
| |
| $response = Request::processRequest('VisitsSummary.get', $params); |
|
|
| $this->addSuffixToTableColumns($response, $columnSuffix); |
|
|
| $merger = new MergeDataTables(); |
| $merger->mergeDataTables($resultSet, $response); |
| } |
|
|
| return $resultSet; |
| } |
|
|
| |
| |
| |
| |
| |
| protected function filterColumnsBySuffix(array $requestedColumns, string $suffix): array |
| { |
| $columns = []; |
|
|
| foreach ($requestedColumns as $column) { |
| if (!str_ends_with($column, $suffix)) { |
| continue; |
| } |
|
|
| $columns[] = str_replace($suffix, '', $column); |
| } |
|
|
| return $columns; |
| } |
|
|
| protected function addSuffixToTableColumns(DataTableInterface $table, string $suffix): void |
| { |
| $renames = []; |
|
|
| foreach ($table->getColumns() as $oldColumn) { |
| $renames[$oldColumn] = $oldColumn . $suffix; |
| } |
|
|
| $table->filter('ReplaceColumnNames', [$renames]); |
| } |
| } |
|
|