示例#1
0
 /**
  * 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;
 }