{"id":13669494,"url":"https://github.com/ipunkt/laravel-analytics","last_synced_at":"2025-12-30T04:05:50.942Z","repository":{"id":14792181,"uuid":"17514217","full_name":"ipunkt/laravel-analytics","owner":"ipunkt","description":"Analytics tracking package for Laravel","archived":true,"fork":false,"pushed_at":"2021-06-06T14:33:29.000Z","size":131,"stargazers_count":265,"open_issues_count":4,"forks_count":55,"subscribers_count":20,"default_branch":"master","last_synced_at":"2024-04-20T02:22:24.032Z","etag":null,"topics":["analytics-tracking","google-analytics"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipunkt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-07T13:05:24.000Z","updated_at":"2024-01-04T15:45:21.000Z","dependencies_parsed_at":"2022-08-19T16:20:17.311Z","dependency_job_id":null,"html_url":"https://github.com/ipunkt/laravel-analytics","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipunkt%2Flaravel-analytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipunkt%2Flaravel-analytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipunkt%2Flaravel-analytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipunkt%2Flaravel-analytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipunkt","download_url":"https://codeload.github.com/ipunkt/laravel-analytics/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224060342,"owners_count":17249002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics-tracking","google-analytics"],"created_at":"2024-08-02T08:01:15.507Z","updated_at":"2025-12-18T00:12:19.478Z","avatar_url":"https://github.com/ipunkt.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# Analytics tracking package for Laravel\n\n[![Latest Stable Version](https://poser.pugx.org/ipunkt/laravel-analytics/v/stable.svg)](https://packagist.org/packages/ipunkt/laravel-analytics) [![Latest Unstable Version](https://poser.pugx.org/ipunkt/laravel-analytics/v/unstable.svg)](https://packagist.org/packages/ipunkt/laravel-analytics) [![License](https://poser.pugx.org/ipunkt/laravel-analytics/license.svg)](https://packagist.org/packages/ipunkt/laravel-analytics) [![Total Downloads](https://poser.pugx.org/ipunkt/laravel-analytics/downloads.svg)](https://packagist.org/packages/ipunkt/laravel-analytics) [![Building](https://api.travis-ci.org/ipunkt/laravel-analytics.svg?branch=master)](https://travis-ci.org/ipunkt/laravel-analytics)\n\n## Quickstart\n\n```\ncomposer require ipunkt/laravel-analytics\n```\n\nYou can use the facade `Analytics`.\n\nTo your `.env` add these variables and set them to your liking:\n\n```\nANALYTICS_PROVIDER=GoogleAnalytics\nANALYTICS_TRACKING_ID=your-tracking-id\n```\nWe support the whole configuration as  environment variables. Please see Configuration section.\n\nFinally, just above your `\u003c/head\u003e` closing tag place, this code:\n\n```\n{!! Analytics::render() !!}\n```\n\n**You now have Google Analytics working. Enjoy!**\n\n\n## Installation\n\nAdd to your composer.json following lines\n\n\t\"require\": {\n\t\t\"ipunkt/laravel-analytics\": \"~3.0\"\n\t}\n\nAdd `Ipunkt\\LaravelAnalytics\\AnalyticsServiceProvider::class,` to `providers` in `app/config/app.php`.\n\nOptional: Add `'Analytics' =\u003e Ipunkt\\LaravelAnalytics\\AnalyticsFacade::class,` to `aliases` in `app/config/app.php`.\n\nRun `php artisan vendor:publish --provider=\"Ipunkt\\LaravelAnalytics\\AnalyticsServiceProvider\"`\n\nThen edit `analytics.php` in `config` to your needs. We do config merge in the service provider, so your local settings \n will stay the same.\n\nFor laravel 7.x please use the 3.x release.\n\n\t\"require\": {\n\t\t\"ipunkt/laravel-analytics\": \"~3.0\"\n\t}\n\nFor laravel 6.x please use the 2.x release.\n\n\t\"require\": {\n\t\t\"ipunkt/laravel-analytics\": \"~2.0\"\n\t}\n\nFor php \u003c 7.2 or laravel \u003c 6.0 please use the 1.x release.\n\n\t\"require\": {\n\t\t\"ipunkt/laravel-analytics\": \"~1.0\"\n\t}\n\n## Configuration\n\n\u003cdl\u003e\n\u003cdt\u003eprovider\u003c/dt\u003e\u003cdd\u003eProvider to use, possible Providers are: \u003ccode\u003eGoogleAnalytics\u003c/code\u003e, \u003ccode\u003eNoAnalytics\u003c/code\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\n### Google Analytics\n\n\u003cdl\u003e\n\u003cdt\u003etracking_id\u003c/dt\u003e\u003cdd\u003eTracking ID, Your tracking id for Google Analytics\u003c/dd\u003e\n\u003cdt\u003etracking_domain\u003c/dt\u003e\u003cdd\u003eTracking domain, unset or set to \"\u003ccode\u003eauto\u003c/code\u003e\" for automatic fallback\u003c/dd\u003e\n\u003cdt\u003etracker_name\u003c/dt\u003e\u003cdd\u003eTracker name\u003c/dd\u003e\n\u003cdt\u003edisplay_features\u003c/dt\u003e\u003cdd\u003eenabling the display features plugin, possible values: \u003ccode\u003e(true|false)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003eanonymize_ip\u003c/dt\u003e\u003cdd\u003eanonymize users ip, possible values: \u003ccode\u003e(true|false)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003eauto_track\u003c/dt\u003e\u003cdd\u003eauto tracking current pageview, possible values: \u003ccode\u003e(true|false)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003edebug\u003c/dt\u003e\u003cdd\u003eenabling the debug mode, possible values: \u003ccode\u003e(true|false)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003eoptimize_id\u003c/dt\u003e\u003cdd\u003eenabling the optimze feature of [Google Analytics](https://support.google.com/optimize/answer/6262084)\u003c/dd\u003e\n\u003c/dl\u003e\n\n### Environment-based Configuration\n\nYou can configure the whole settings by changing/setting environment variables in your .env file. (Or .env.dusk file if you use Laravel Dusk).\n\nHere is the mapping of configuration value and the environment-based names:\n\u003cdl\u003e\n\u003cdt\u003etracking_id\u003c/dt\u003e\u003cdd\u003eANALYTICS_TRACKING_ID\u003c/dd\u003e\n\u003cdt\u003etracking_domain\u003c/dt\u003e\u003cdd\u003eANALYTICS_TRACKING_DOMAIN (auto)\u003c/dd\u003e\n\u003cdt\u003etracker_name\u003c/dt\u003e\u003cdd\u003eANALYTICS_TRACKER_NAME (t0)\u003c/dd\u003e\n\u003cdt\u003edisplay_features\u003c/dt\u003e\u003cdd\u003eANALYTICS_DISPLAY_FEATURES (false)\u003c/dd\u003e\n\u003cdt\u003eanonymize_ip\u003c/dt\u003e\u003cdd\u003eANALYTICS_ANONYMIZE_IP (true)\u003c/dd\u003e\n\u003cdt\u003eauto_track\u003c/dt\u003e\u003cdd\u003eANALYTICS_AUTO_TRACK (true)\u003c/dd\u003e\n\u003cdt\u003edebug\u003c/dt\u003e\u003cdd\u003eANALYTICS_DEBUG (true on local environment)\u003c/dd\u003e\n\u003cdt\u003eoptimize_id\u003c/dt\u003e\u003cdd\u003eANALYTICS_OPTIMIZE_ID\u003c/dd\u003e\n\u003c/dl\u003e\n\nThis behaviour was integrated with version 1.3.2.\n\n### Other\n\n\u003cdl\u003e\n\u003cdt\u003edisable_script_block\u003c/dt\u003e\u003cdd\u003eYou can disable script block generation by configuration value, possible values: \u003ccode\u003e(true|false)\u003c/code\u003e, false by default.\u003c/dd\u003e\n\u003c/dl\u003e\n\n## Usage\n\nIn controller action (or anywhere else) use following statement to track an event or page view:\n\n\t//\ttracking the current page view\n\tAnalytics::trackPage();\t// only necessary if `auto_track` is false or Analytics::disableAutoTracking() was called before\n\n\t//\ttracking an event\n\tAnalytics::trackEvent('category', 'action');\n\n\t//\ttracking a custom line\n\tAnalytics::trackCustom(\"ga('send', ......\"); // this line will be added within the tracking script\n\nYou can set an optional campaign for the tracking:\n\n\t// creating a campaign\n\t$campaign = new \\Ipunkt\\LaravelAnalytics\\Data\\Campaign('Sales2016');\n\t$campaign-\u003esetMedium('web')-\u003esetSource('IT Magazine')-\u003esetKeyword('Hot stuff');\n\tAnalytics::setCampaign($campaign);\n\nYou can set an user id for the tracking:\n\n\t// creating a campaign\n\tAnalytics::setUserId($userIdentificationHash);\n\nIn your view or layout template (e.g. a blade template) use the following statement:\n\n\t{!! Analytics::render() !!}\n\nFor Google Analytics you should place the statement right below the `body` tag\n\n\t\u003cbody\u003e{!! Analytics::render() !!}\n\n### Dependency Injection\n\nYou can inject the analytics provider by referencing the interface:\n\n\tclass PageController extends Controller\n\t{\n\t\tpublic function show(\\Ipunkt\\LaravelAnalytics\\Contracts\\AnalyticsProviderInterface $analytics)\n\t\t{\n\t\t\t$analytics-\u003esetUserId(md5(\\Auth::user()-\u003eid)); // identical to Analytics::setUserId(md5(\\Auth::user()-\u003eid));\n\t\t\treturn view('welcome');\n\t\t}\n\t}\n\n## How to use\n\nThe `GoogleAnalytics` Provider automatically controls the [local environment](https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#localhost) behaviour for testing purposes.\n\nThere is a builtin provider called `NoAnalytics`. This is for testing environments and tracks nothing. So you do\nnot have to rewrite your code, simple select this `provider` in `analytics` configuration for your special environment\nconfigurations.\n\n### Track a measurement without having javascript\n\n1. Log in to Google Analytics and create custom definition. There you create a custom metrics.\n   For example: Email opens, Integer type, min: 0 and max: 1\n   This will be available as `metric1`.\n\n2. Within your mail template (or page template) you have to create a tracking image\n\n\t`\u003cimg src=\"{!! Analytics::trackMeasurementUrl('metric1', '1', new Event, new Campaign, md5($user)) !!}\" width=\"1\" height=\"1\" style=\"background-color: transparent; border: 0 none;\" /\u003e`\n\n3. That's it\n\n## Content Security Policy\n\nSince version 1.3 is a support for Content Security Policy integrated.\n\nPlease call the `withCSP()` on the provider interface instance.\n\nThen use an additional package (or implement on your own) `martijnc/php-csp` and use the following code in your middleware or your javascript sending controller:\n```php\nuse Phpcsp\\Security\\ContentSecurityPolicyHeaderBuilder;\n\n$policy = new ContentSecurityPolicyHeaderBuilder();\n\n// Set the default-src directive to 'none'\n$policy-\u003eaddSourceExpression(ContentSecurityPolicyHeaderBuilder::DIRECTIVE_DEFAULT_SRC, 'none');\n\n// Add the nonce to the script-src directive\n$policy-\u003eaddNonce(ContentSecurityPolicyHeaderBuilder::DIRECTIVE_SCRIPT_SRC, $analytics-\u003ewithCSP()-\u003ecspNonce());\n\nforeach ($policy-\u003egetHeaders(true) as $header) {\n    header(sprintf('%s: %s', $header['name'], $header['value']));\n}\n```\n\nThe result looks like this:\n```php\narray (size=1)\n  0 =\u003e \n    array (size=2)\n      'name' =\u003e string 'Content-Security-Policy' (length=23)\n      'value' =\u003e string 'default-src 'none'; script-src 'nonce-RandomNonceStringFromAnalyticsProvider';' (length=58)\n```\n\nOn rendering your analytics script the `nonce` attribute will be automatically added on your script tag.\n\n## API Documentation\n\nFor the correct usage methods look at the `Ipunkt\\LaravelAnalytics\\Contracts\\AnalyticsProviderInterface.php`\n\n### Analytics::render()\n\nContext: Blade Templates, View\n\nFor rendering the correct javascript code. It is necessary to have it in all layout files to track your actions and page calls.\n\n\t/**\n\t * returns the javascript code for embedding the analytics stuff\n\t *\n\t * @return string\n\t */\n\tpublic function render();\n\n\n### Analytics::trackPage()\n\nContext: Controller, Action code\n\nFor tracking a page view.\n\n\t/**\n\t * track an page view\n\t *\n\t * @param null|string $page\n\t * @param null|string $title\n\t * @param null|string $hittype\n\t * @return void\n\t */\n\tpublic function trackPage($page, $title, $hittype);\n\n\n### Analytics::trackEvent()\n\nContext: Controller, Action code\n\nFor tracking an event\n\n\t/**\n\t * track an event\n\t *\n\t * @param string $category\n\t * @param string $action\n\t * @param null|string $label\n\t * @param null|int $value\n\t * @return void\n\t */\n\tpublic function trackEvent($category, $action, $label, $value);\n\n\n### Analytics::trackCustom()\n\nContext: Controller, Action code\n\nFor tracking a custom script line within the embedded analytics code.\n\n\t/**\n\t * track any custom code\n\t *\n\t * @param string $customCode\n\t * @return void\n\t */\n\tpublic function trackCustom($customCode);\n\n\n### Analytics::enableDisplayFeatures()\n\nContext: Controller, Action code\n\nEnabling display features, overriding the configuration setting `display_features`.\n\n\t/**\n\t * enable display features\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function enableDisplayFeatures();\n\n\n### Analytics::disableDisplayFeatures()\n\nContext: Controller, Action code\n\nDisabling display features, overriding the configuration setting `display_features`.\n\n\t/**\n\t * disable display features\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function disableDisplayFeatures();\n\n### Analytics::enableAutoTracking()\n\nContext: Controller, Action code\n\nEnabling the auto tracking, overriding the configuration setting `auto_track`.\n\n\t/**\n\t * enable auto tracking\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function enableAutoTracking();\n\n\n### Analytics::disableAutoTracking()\n\nContext: Controller, Action code\n\nDisabling the auto tracking, overriding the configuration setting `auto_track`.\n\n\t/**\n\t * disable auto tracking\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function disableAutoTracking();\n\n### Analytics::trackMeasurementUrl()\n\nContext: Blade Template, View\n\nSometimes you have to track measurements, e.g. opening an email newsletter. There you have no javascript at all.\n\n\t/**\n\t * assembles an url for tracking measurement without javascript\n\t *\n\t * e.g. for tracking email open events within a newsletter\n\t *\n\t * @param string $metricName\n\t * @param mixed $metricValue\n\t * @param \\Ipunkt\\LaravelAnalytics\\Data\\Event $event\n\t * @param \\Ipunkt\\LaravelAnalytics\\Data\\Campaign $campaign\n\t * @param string|null $clientId\n\t * @param array $params\n\t * @return string\n\t */\n\tpublic function trackMeasurementUrl($metricName, $metricValue, Event $event, Campaign $campaign, $clientId = null, array $params = array());\n\n### Analytics::setUserId($userId)\n\nContext: Controller, Action code\n\nAdding an user id to analytics tracking. This user id is a user-dependent unique id. But be careful, you should have no\n direct relation to the special user itself - it should be unique per user for analyzing.\n\nThis user tracking is implemented at [Google Analytics](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id).\n\n\t/**\n\t * sets an user id for user tracking\n\t *\n\t * @param string $userId\n\t * @return AnalyticsProviderInterface\n\t */\n\tpublic function setUserId($userId);\n\n### Analytics::unsetUserId()\n\nContext: Controller, Action code\n\nRemoving of an user id is also possible.\n\n\t/**\n\t * unset an user id\n\t *\n\t * @return AnalyticsProviderInterface\n\t */\n\tpublic function unsetUserId(); \n\n### Analytics::setCampaign($campaign)\n\nContext: Controller, Action code\n\nAdding a campaign to the current tracking.\n\nThis campaign tracking is documented for [Google Analytics](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#campaignName).\n\n    /**\n     * sets a campaign\n     *\n     * @param Campaign $campaign\n     * @return AnalyticsProviderInterface\n     */\n    public function setCampaign(Campaign $campaign);\n\n### Analytics::unsetCampaign()\n\nContext: Controller, Action code\n\nRemoving of a campaign is also possible.\n\n    /**\n     * unset a possible given campaign\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function unsetCampaign();\n\n### Analytics::enableScriptBlock()\n\nContext: Controller, Action code\n\nEnabling the rendering of the `\u003cscript\u003e...\u003c/script\u003e` block tags. Is enabled by default, so you do not have to call this.\n\n\t/**\n\t * render script block\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function enableScriptBlock();\n\n### Analytics::disableScriptBlock()\n\nContext: Controller, Action code\n\nDisabling the rendering of the `\u003cscript\u003e...\u003c/script\u003e` block tags.\n\n\t/**\n\t * do not render script block\n\t *\n\t * @return GoogleAnalytics\n\t */\n\tpublic function disableScriptBlock();\n\n### Analytics::enableEcommerceTracking()\n\nContext: Controller, Action code\n\nEnabling ecommerce tracking.\n\n    /**\n     * enable ecommerce tracking\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function enableEcommerceTracking();\n\n### Analytics::disableEcommerceTracking()\n\nContext: Controller, Action code\n\nDisabling ecommerce tracking.\n\n    /**\n     * disable ecommerce tracking\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function disableEcommerceTracking();\n\n### Analytics::ecommerceAddTransaction()\n\nContext: Controller, Action code\n\nAdd ecommerce transaction to tracking code.\n\n    /**\n     * ecommerce tracking - add transaction\n     *\n     * @param string $id\n     * @param null|string $affiliation\n     * @param null|float $revenue\n     * @param null|float $shipping\n     * @param null|float $tax\n     * @param null|string $currency\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function ecommerceAddTransaction($id, $affiliation = null, $revenue = null, $shipping = null, $tax = null, $currency = null);\n\nThe [multi currency](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#multicurrency) tracking is supported with currency values defined [here](https://support.google.com/analytics/answer/6205902#supported-currencies).\n\n### Analytics::ecommerceAddItem()\n\nContext: Controller, Action code\n\nAdd ecommerce item to tracking code.\n\n    /**\n     * ecommerce tracking - add item\n     *\n     * @param string $id\n     * @param string $name\n     * @param null|string $sku\n     * @param null|string $category\n     * @param null|float $price\n     * @param null|int $quantity\n     * @param null|string $currency\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function ecommerceAddItem($id, $name, $sku = null, $category = null, $price = null, $quantity = null, $currency = null);\n\nThe [multi currency](https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#multicurrency) tracking is supported with currency values defined [here](https://support.google.com/analytics/answer/6205902#supported-currencies).\n\n### Analytics::setCustom()\n\nContext: Controller, Action code\n\nAdds custom settings.\n\n    /**\n     * sets custom dimensions\n     *\n     * @param string|array $dimension\n     * @param null|string $value\n     * @return AnalyticsProviderInterface\n     */\n    public function setCustom($dimension, $value = null)\n\n### Analytics::withCSP()\n\nContext: Controller, Action code\n\nEnabling the Content Security Policy feature.\n\n    /**\n     * enables Content Security Polity and sets nonce\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function withCSP();\n\n### Analytics::withoutCSP()\n\nContext: Controller, Action code\n\nDisabling the Content Security Policy feature.\n\n    /**\n     * disables Content Security Polity\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function withoutCSP();\n\n### Analytics::cspNonce()\n\nContext: Controller, Action code\n\nReturns the nonce generated for the Content Security Policy Header.\n\n    /**\n     * returns the current Content Security Policy nonce\n     *\n     * @return string|null\n     */\n    public function cspNonce();\n\n### Analytics::setOptimizeId()\n\n    /**\n     * set a custom optimize ID (the GTM-XXXXXX code)\n     *\n     * @param string $optimizeId\n     *\n     * @return AnalyticsProviderInterface\n     */\n    public function setOptimizeId($optimizeId);\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipunkt%2Flaravel-analytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipunkt%2Flaravel-analytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipunkt%2Flaravel-analytics/lists"}