public function load_by_facebook_id($facebook_id, $message_data, $type, $debug = false) { $access_token = $this->facebook_page ? $this->facebook_page->get('facebook_token') : ''; // get the machine id from the parent facebook_account $machine_id = $this->facebook_account ? $this->facebook_account->get('machine_id') : ''; if (!$message_data) { $facebook_api = new ucm_facebook(); $data = $facebook_api->graph($facebook_id, array('access_token' => $access_token, 'machine_id' => $machine_id)); if ($data && isset($data['id'])) { $message_data = $data; } else { return false; } } // check if exists already $existing = get_single('social_facebook_message', 'facebook_id', $facebook_id); if ($existing) { // load it up. $this->load($existing['social_facebook_message_id']); } else { // ignore if status and feeds match a user if (isset($message_data['type']) && $message_data['type'] == 'status' && $message_data['from']['id'] == $this->facebook_page->get('page_id') && isset($message_data['story_tags']) && $message_data['story_tags']) { $tags = current($message_data['story_tags']); if ($tags[0]['type'] == 'user') { return false; } } // create $this->create_new(); } // wack out message data into the database. if ($type == 'conversation') { $message_time = strtotime(isset($message_data['updated_time']) && strlen($message_data['updated_time']) ? $message_data['updated_time'] : $message_data['created_time']); $this->update('last_active', $message_time); $this->update('facebook_id', $message_data['id']); $this->update('summary', $message_data['snippet']); $this->update('comments', isset($message_data['messages']) ? json_encode($message_data['messages']) : ''); if (isset($message_data['messages']['data'][0]['from']['id']) && $this->facebook_page && $message_data['messages']['data'][0]['from']['id'] == $this->facebook_page->get('page_id')) { // was the last comment from us? $this->update('status', _SOCIAL_MESSAGE_STATUS_ANSWERED); } else { $this->update('status', _SOCIAL_MESSAGE_STATUS_UNANSWERED); } $this->update('data', json_encode($message_data)); $this->update('type', isset($message_data['type']) ? $message_data['type'] : $type); if ($this->facebook_page) { $this->update('social_facebook_page_id', $this->facebook_page->get('social_facebook_page_id')); } if ($this->facebook_account) { $this->update('social_facebook_id', $this->facebook_account->get('social_facebook_id')); } } else { $message_time = strtotime(isset($message_data['updated_time']) && strlen($message_data['updated_time']) ? $message_data['updated_time'] : $message_data['created_time']); $this->update('last_active', $message_time); $this->update('facebook_id', $message_data['id']); $this->update('summary', isset($message_data['message']) ? $message_data['message'] : (isset($message_data['story']) ? $message_data['story'] : 'N/A')); // grab the comments rom the api again. $facebook_api = new ucm_facebook(); $data = $facebook_api->graph($message_data['id'] . '/comments', array('fields' => 'from,message,id,attachment,created_time,comments.fields(from,message,id,attachment,created_time)', 'access_token' => $access_token, 'machine_id' => $machine_id)); $comments = isset($data) ? $data : (isset($message_data['comments']) ? $message_data['comments'] : false); $this->update('comments', json_encode($comments)); if (isset($message_data['comments']['data'][0]['from']['id']) && $this->facebook_page && $message_data['comments']['data'][0]['from']['id'] == $this->facebook_page->get('page_id')) { // was the last comment from us? $this->update('status', _SOCIAL_MESSAGE_STATUS_ANSWERED); } else { $this->update('status', _SOCIAL_MESSAGE_STATUS_UNANSWERED); } if (isset($message_data['messages']['data'][0]['from']['id']) && $this->facebook_page && $message_data['messages']['data'][0]['from']['id'] == $this->facebook_page->get('page_id')) { // was the last comment from us? $this->update('status', _SOCIAL_MESSAGE_STATUS_ANSWERED); } else { $this->update('status', _SOCIAL_MESSAGE_STATUS_UNANSWERED); } $this->update('data', json_encode($message_data)); $this->update('type', isset($message_data['type']) ? $message_data['type'] : $type); if ($this->facebook_page) { $this->update('social_facebook_page_id', $this->facebook_page->get('social_facebook_page_id')); } if ($this->facebook_account) { $this->update('social_facebook_id', $this->facebook_account->get('social_facebook_id')); } } // work out if this message is answered or not. return $this->social_facebook_message_id; }