예제 #1
0
 /**
  * Determines whether or not this condition passes
  *
  * @param string $route
  * @param unknown $options
  */
 public function passes(\Modules\Models\Modules $module, $route = null, $options = array())
 {
     // if this ruleset is ignored, return null
     if (!in_array($module->{'assignment.activity-visits.method'}, array('include'))) {
         return null;
     }
     $actor = \Activity\Models\Actors::fetch();
     if (empty($actor->id)) {
         return null;
     }
     $visits = \Activity\Models\Actions::collection()->count(array('actor_id' => $actor->id, 'action' => 'Visited Site'));
     $return = null;
     switch ($module->{'assignment.activity-visits.has_visited'}) {
         case "1":
             if ($visits > 1) {
                 $return = true;
             } else {
                 $return = false;
             }
             break;
         case "0":
             if ($visits > 1) {
                 $return = false;
             } else {
                 $return = true;
             }
             break;
     }
     return $return;
 }
예제 #2
0
 public function track()
 {
     $action = $this->input->get('action', null, 'string');
     $properties = $this->input->get('properties', null, 'string');
     if (!empty($properties) && is_string($properties)) {
         $properties = json_decode($properties);
     }
     if (!empty($action)) {
         \Activity\Models\Actions::track($action, $properties);
     }
 }
예제 #3
0
 public static function trackActor($email, $action, $properties = array())
 {
     if (class_exists('\\Activity\\Models\\Actions')) {
         \Activity\Models\Actions::trackActor($email, $action, $properties);
     }
     if (class_exists('\\Admin\\Models\\Settings') && class_exists('\\KM')) {
         $settings = \Admin\Models\Settings::fetch();
         if ($settings->enabledIntegration('kissmetrics') && $settings->{'integration.kissmetrics.key'}) {
             \KM::init($settings->{'integration.kissmetrics.key'});
             \KM::identify($email);
             \KM::record($action, $properties);
         }
     }
     return null;
 }
예제 #4
0
 public function identified()
 {
     $time = time();
     $filename = \Base::instance()->get('PATH_ROOT') . 'tmp/' . $time . '.csv';
     $writer = (new \Ddeboer\DataImport\Writer\CsvWriter(","))->setStream(fopen($filename, 'w'));
     // Write column headers:
     $writer->writeItem(array('created', 'actor_name', 'action', 'properties'));
     $key = new \MongoRegex('/@/i');
     // write items
     $cursor = (new \Activity\Models\Actions())->collection()->find(array('actor_name' => $key), array('_id' => 0, 'created' => 1, 'actor_name' => 1, 'action' => 1, 'properties' => 1))->sort(array('created' => -1));
     foreach ($cursor as $doc) {
         $writer->writeItem(array(date('Y-m-d H:i:s', $doc['created']), $doc['actor_name'], $doc['action'], \Activity\Models\Actions::displayValue($doc['properties'], 'raw')));
     }
     \Web::instance()->send($filename, null, 0, true);
 }
예제 #5
0
 protected function postSite()
 {
     parent::postSite();
     if (!\Audit::instance()->isbot()) {
         $actor = \Activity\Models\Actors::fetch();
         $app = \Base::instance();
         // Track the site visit if it hasn't been done today for this actor
         if (empty($actor->last_visit) || $actor->last_visit < date('Y-m-d', strtotime('today'))) {
             \Activity\Models\Actions::track('Visited Site');
             $actor->set('last_visit', date('Y-m-d', strtotime('today')))->set('visited', time())->save();
         }
         if ($this->input->get('ping', null, 'int') != 1) {
             $actor->markActive(!empty($this->auth->getIdentity()->id));
         }
     }
 }
예제 #6
0
 /**
  * Actually returns total visitors.  
  * TODO Rename function
  * 
  * @param string $start
  * @param string $end
  * @return multitype:number
  */
 public function fetchTotal($start = null, $end = null)
 {
     $conditions = array('action' => 'Visited Site');
     if (!empty($start)) {
         $conditions['created'] = array('$gte' => strtotime($start));
     }
     if (!empty($end)) {
         if (empty($conditions['created'])) {
             $conditions['created'] = array('$lt' => strtotime($end));
         } else {
             $conditions['created']['$lt'] = strtotime($end);
         }
     }
     $return = \Activity\Models\Actions::collection()->count($conditions);
     return $return;
 }
예제 #7
0
 /**
  * 
  */
 public function actionCount()
 {
     if (empty($this->action_count) || empty($this->action_count_last_checked) || $this->action_count_last_checked < time() - 15 * 60) {
         $this->action_count = \Activity\Models\Actions::collection()->count(array('actor_id' => $this->id));
         if (!empty($this->id)) {
             $this->action_count_last_checked = time();
             $this->store();
         }
     }
     return $this->action_count;
 }