PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.9.2
Independent Analytics – WordPress Analytics Plugin v2.9.2
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Click_Tracking / Click_Processing_Job.php
independent-analytics / IAWP / Click_Tracking Last commit date
Click.php 1 year ago Click_Processing_Job.php 1 year ago Config_File_Manager.php 1 year ago Link_Rule.php 1 year ago Link_Rule_Finder.php 1 year ago
Click_Processing_Job.php
58 lines
1 <?php
2
3 namespace IAWP\Click_Tracking;
4
5 use IAWP\Cron_Job;
6 use IAWP\Models\Visitor;
7 use IAWP\Payload_Validator;
8 use IAWP\Utils\Security;
9 /** @internal */
10 class Click_Processing_Job extends Cron_Job
11 {
12 protected $name = 'iawp_click_processing';
13 protected $interval = 'every_minute';
14 public function handle() : void
15 {
16 // Periodically recreate the config file
17 \IAWP\Click_Tracking\Config_File_Manager::recreate();
18 if (\IAWPSCOPED\iawp_is_free()) {
19 self::unschedule();
20 return;
21 }
22 $job_id = \rand();
23 $original_file = \IAWPSCOPED\iawp_path_to('iawp-click-data.php');
24 $job_file = \IAWPSCOPED\iawp_path_to("iawp-click-data-{$job_id}.php");
25 if (!\is_file($original_file)) {
26 return;
27 }
28 $original_handle = \fopen($original_file, 'r');
29 if ($original_handle === \false) {
30 return;
31 }
32 \fclose($original_handle);
33 \rename($original_file, $job_file);
34 $job_handle = \fopen($job_file, 'r');
35 if ($job_handle === \false) {
36 return;
37 }
38 // Skip the first line which is just a php exit; statement
39 \fgets($job_handle);
40 while (($json = \fgets($job_handle)) !== \false) {
41 $event = \json_decode($json, \true);
42 $event['href'] = Security::string($event['href']);
43 $event['classes'] = Security::string($event['classes']);
44 if (\is_null($event)) {
45 continue;
46 }
47 $payload_validator = Payload_Validator::new($event['payload'], $event['signature']);
48 if (!$payload_validator->is_valid() || \is_null($payload_validator->resource())) {
49 continue;
50 }
51 $click = \IAWP\Click_Tracking\Click::new(['href' => $event['href'], 'classes' => $event['classes'], 'resource_id' => $payload_validator->resource()['id'], 'visitor_id' => Visitor::fetch_visitor_id_by_hash($event['visitor_token']), 'created_at' => \DateTime::createFromFormat('U', $event['created_at'])]);
52 $click->track();
53 }
54 \fclose($job_handle);
55 \unlink($job_file);
56 }
57 }
58