Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - tattersoftware/codeigniter4-visits: Lightweight traffic tracking for CodeIgniter 4 · GitHub
Skip to content

Repository files navigation

Tatter\Visits

Lightweight traffic tracking for CodeIgniter 4

Coverage Status

Quick Start

  1. Install with Composer: > composer require tatter/visits
  2. Update the database: > php spark migrate --all
  3. Apply the visits filter in app/Config/Filters.php:
class Filters extends BaseConfig
{
public$globals = [
'after' => ['visits'],
];
...

Features

Provides automated traffic tracking for CodeIgniter 4

Installation

Install easily via Composer to take advantage of CodeIgniter 4's autoloading capabilities and always be up-to-date:

> composer require tatter/visits

Or, install manually by downloading the source files and adding the directory to app/Config/Autoload.php.

Once the files are downloaded and included in the autoload, run any library migrations to ensure the database is set up correctly:

> php spark migrate --all

Configuration (optional)

The library's default behavior can be altered by extending its config file. Copy examples/Visits.php to app/Config/ and follow the instructions in the comments. If no config file is found in app/Config/ the library will use its own.

Customization

The config file allows for some basic control over what gets counted as a "hit".

  • $ignoreAjax: Whether to ignore AJAX requests when recording

Filtering by AJAX requests is not a guaranteed business; read more in the User Guide.

If you are using the after filter method it is also possible to adjust some behaviors based on the application's Response instance:

  • $ignoreRedirects: Whether to ignore requests that result in a redirect response
  • $requireBody: Whether to ignore requests that result in an empty body
  • $requireHtml: Whether to ignore requests with Content Types other than HTML

Usage

The main function of this library is applied through a Controller Filter. The VisitsFilter is pre-aliased for you as visits but needs to be applied to whichever routes you would like to track. Read the User Guide for more details, but in most cases applying the filter globally will be the best fit:

// app/Config/Filters.phpclass Filters extends BaseConfig
{
public$globals = [
'before' => [
'csrf',
],
'after' => [
'visits',
],
];
// ...
}

The filter can be applied to either before or after methods, with the following expectations:

  • before filtering is likely to record more nuances in traffic (such as page loads before an error occurs) but they are less customizable
  • after filtering allows for finer control over what counts as a "hit" but may miss some instances captured by before

Applying both before and after will duplicate your traffic information and should not be done.

Accessing data

This library provides a VisitModel and a Visit entity for convenient access to recorded entries. Feel free to extend these classes for any additional functionality.

Transformers

Before a visit is assessed for similar and recorded it may be passed through any number of transformations. A transformer is a class that implements Tatter\Visits\Interfaces\Transformer and has the single static method for applying a transformation:

publicstaticfunction transform(Visit$visit, IncomingRequest$request): ?Visit;

Transformers work on the Visit class they are passed, and return either the modified Visit instance or null to indicate "don't record this visit" and halt operation. If a modified Visit is returned it will be passed into the next Transformer and so on.

To active Transformers and set their order simply add them to the $transformers property of the config file:

useApp\Transformers\AnonymousTransformer;
class Visits extends BaseConfig
{
publicarray$transformers = [
AnonymousTransformer::class,
];
}

User tracking

Visits will use any Composer package that provides codeigniter4/authentication-implementation to identify an active user. It is not legal nor advisable to track user traffic in all cases, so make sure you are configuring your project appropriately for local laws and regulations. Filtering and anonymizing data to meet tighter specifications can be accomplished with Transformers.

About

Lightweight traffic tracking for CodeIgniter 4

Resources

Security policy

Stars

30 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages