/** * Set triggers if empty and returns the triggers * @return array */ protected function _triggers() { if (empty(self::$_triggers)) { $triggers = array("1" => array("title" => "PageView", "detect" => function ($opts) { return true; }), "2" => array("title" => "Location", "detect" => function ($opts) { $saved = strtolower($opts['saved']); $current = strtolower($opts['user']['location']); return $saved == $current; }), "3" => array("title" => "Landing Page", "detect" => function ($opts) { $stored = strtolower($opts['saved']); $current = strtolower($opts['server']['landingPage']); return $current == $stored; }), "4" => array("title" => "Time of Visit", "detect" => function ($opts) { $range = explode("-", $opts['saved']); $start = $range[0]; $current = date('G:i'); $end = $range[1]; $start_time = strtotime($start); $current_time = strtotime($current); $end_time = strtotime($end); return $current_time > $start_time && $current_time < $end_time; }), "5" => array("title" => "Bots", "detect" => function ($opts) { $bots = explode(",", $opts['saved']); $response = false; foreach ($bots as $b) { if ($opts['user']['ua'] == trim($b)) { $response = true; break; } } if (strtolower($opts['saved']) == 'crawler' && $opts['user']['ua_info']->device->family == "Spider") { $response = true; } return $response; }), "6" => array("title" => "IP Range", "detect" => function ($opts) { if (strpos($opts['saved'], '/') == false) { $range .= '/32'; } // $range is in IP/CIDR format eg 127.0.0.1/24 list($opts['saved'], $netmask) = explode('/', $opts['saved'], 2); $range_decimal = ip2long($opts['saved']); $ip_decimal = ip2long($opts['user']['ip']); $wildcard_decimal = pow(2, 32 - $netmask) - 1; $netmask_decimal = ~$wildcard_decimal; return ($ip_decimal & $netmask_decimal) == ($range_decimal & $netmask_decimal); }), "7" => array("title" => "User-Agent", "verify" => function ($inputs) { }, "detect" => function ($opts) { return $opts['user']['ua'] == $opts['saved']; }), "8" => array("title" => "Browser", "detect" => function ($opts) { $current = $opts['user']['ua_info']->ua->family; $saved = $opts['saved']; return stristr($current, $saved); }), "9" => array("title" => "Operating System", "detect" => function ($opts) { $current = $opts['user']['ua_info']->os->family; $saved = $opts['saved']; return stristr($current, $saved); }), "10" => array("title" => "Device Type", "detect" => function ($opts) { $saved = strtolower($opts['saved']); $check = strtolower($opts['user']['ua_info']->device->family); switch ($check) { case 'other': $result = 'desktop'; break; case 'android': $result = 'mobile'; break; default: if (stristr($check, "Smartphone")) { $result = 'mobile'; } elseif (stristr($opts['user']['ua_info']->os->family, "Android")) { $result = "mobile"; } else { $result = false; } break; } if (!$result) { if (stristr($opts['user']['ua_info']->ua->family, "Mobile")) { $result = 'mobile'; } else { $result = 'desktop'; } } return $saved == $result; }), "11" => array("title" => "Referrer", "detect" => function ($opts) { if (empty($opts['server']['referer']) && empty($opts['saved'])) { return true; } else { if (empty($opts['server']['referer']) || empty($opts['saved'])) { return false; } } $response = stristr($opts['server']['referer'], $opts['saved']); return $response !== FALSE ? true : false; }), "12" => array("title" => "Active Login", "detect" => function ($opts) { return false; }), "13" => array("title" => "Repeat Visitor", "detect" => function ($opts) { $cookie = $opts["cookies"]; return isset($cookie["__trafficMonitor"]) ? true : false; })); self::$_triggers = $triggers; } return self::$_triggers; }