Ejemplo n.º 1
0
 /**
  * Adds tweets in JSON format to the database and saves the sender as a new
  * Reporter if they don't already exist unless the message is a TWitter Search result
  * @param string $data - Twitter JSON results
  */
 private function add_json_tweets($data)
 {
     $services = new Service_Model();
     $service = $services->where('service_name', 'Twitter')->find();
     if (!$service) {
         return false;
     }
     $tweets = json_decode($data, false);
     if (!$tweets) {
         return false;
     }
     if (array_key_exists('results', $tweets)) {
         $tweets = $tweets->{'results'};
     }
     foreach ($tweets as $tweet) {
         $tweet_user = null;
         if (array_key_exists('user', $tweet)) {
             $tweet_user = $tweet->{'user'};
         }
         //XXX For Twitter Search, should we curl Twitter for a full tweet?
         $reporter = null;
         if ($tweet_user) {
             $reporter_model = new Reporter_Model();
             $reporters = $reporter_model->where('service_id', $service->id)->where('service_userid', $tweet_user->{'id'})->find_all();
             if (count($reporters) < 1) {
                 // Add new reporter
                 $names = explode(' ', $tweet_user->{'name'}, 2);
                 $last_name = '';
                 if (count($names) == 2) {
                     $last_name = $names[1];
                 }
                 // get default reporter level (Untrusted)
                 $levels = new Level_Model();
                 $default_level = $levels->where('level_weight', 0)->find();
                 $reporter = new Reporter_Model();
                 $reporter->service_id = $service->id;
                 $reporter->service_userid = $tweet_user->{'id'};
                 $reporter->service_account = $tweet_user->{'screen_name'};
                 $reporter->reporter_level = $default_level;
                 $reporter->reporter_first = $names[0];
                 $reporter->reporter_last = $last_name;
                 $reporter->reporter_email = null;
                 $reporter->reporter_phone = null;
                 $reporter->reporter_ip = null;
                 $reporter->reporter_date = date('Y-m-d');
                 $reporter->save();
             } else {
                 // reporter already exists
                 $reporter = $reporters[0];
             }
         }
         if (count(ORM::factory('message')->where('service_messageid', $tweet->{'id'})->find_all()) == 0) {
             // Save Tweet as Message
             $message = new Message_Model();
             $message->parent_id = 0;
             $message->incident_id = 0;
             $message->user_id = 0;
             if ($reporter) {
                 $message->reporter_id = $reporter->id;
             } else {
                 $message->reporter_id = 0;
             }
             if ($tweet_user) {
                 $message->message_from = $tweet_user->{'screen_name'};
             } elseif (array_key_exists('from_user', $tweet)) {
                 // Twitter Search tweets
                 $message->message_from = $tweet->{'from_user'};
             }
             $message->message_to = null;
             $message->message = $tweet->{'text'};
             $message->message_detail = null;
             $message->message_type = 1;
             // Inbox
             $tweet_date = date("Y-m-d H:i:s", strtotime($tweet->{'created_at'}));
             $message->message_date = $tweet_date;
             $message->service_messageid = $tweet->{'id'};
             $message->save();
         }
     }
     return true;
 }