diff --git a/classes/Conversation.php b/classes/Conversation.php index 23f8dada0b..9be6113fb8 100755 --- a/classes/Conversation.php +++ b/classes/Conversation.php @@ -22,32 +22,28 @@ * @category Data * @package StatusNet * @author Zach Copley + * @author Mikael Nordfeldth * @copyright 2010 StatusNet Inc. + * @copyright 2009-2014 Free Software Foundation, Inc http://www.fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; +if (!defined('GNUSOCIAL')) { exit(1); } class Conversation extends Managed_DataObject { - ###START_AUTOCODE - /* the code below is auto generated do not remove the above tag */ - - public $__table = 'conversation'; // table name + public $__table = 'conversation'; // table name public $id; // int(4) primary_key not_null public $uri; // varchar(255) unique_key public $created; // datetime not_null public $modified; // timestamp not_null default_CURRENT_TIMESTAMP - /* the code above is auto generated do not remove the tag below */ - ###END_AUTOCODE - public static function schemaDef() { return array( 'fields' => array( - 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'), + 'id' => array('type' => 'int', 'not null' => true, 'description' => 'should be set from root notice id (since 2014-03-01 commit)'), 'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'URI of the conversation'), 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), @@ -64,25 +60,21 @@ class Conversation extends Managed_DataObject * * @return Conversation the new conversation DO */ - static function create() + static function create(Notice $notice) { - $conv = new Conversation(); - $conv->created = common_sql_now(); - $id = $conv->insert(); - - if (empty($id)) { - common_log_db_error($conv, 'INSERT', __FILE__); + if (empty($notice->id)) { + common_debug('Tried to create conversation for not yet inserted notice'); return null; } + $conv = new Conversation(); + $conv->created = common_sql_now(); + $conv->id = $notice->id; + $conv->uri = common_local_url('conversation', array('id' => $notice->id), null, null, false); + $result = $conv->insert(); - $orig = clone($conv); - $orig->uri = common_local_url('conversation', array('id' => $id), - null, null, false); - $result = $orig->update($conv); - - if (empty($result)) { - common_log_db_error($conv, 'UPDATE', __FILE__); - return null; + if ($result === false) { + common_log_db_error($conv, 'INSERT', __FILE__); + throw new ServerException(_('Failed to create conversation for notice')); } return $conv; diff --git a/classes/Notice.php b/classes/Notice.php index 6ed4b34afa..2cebc47574 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -587,13 +587,13 @@ class Notice extends Managed_DataObject // the beginning of a new conversation. if (empty($notice->conversation)) { - $conv = Conversation::create(); + $conv = Conversation::create($notice); $notice->conversation = $conv->id; $changed = true; } if ($changed) { - if (!$notice->update($orig)) { + if ($notice->update($orig) === false) { common_log_db_error($notice, 'UPDATE', __FILE__); // TRANS: Server exception thrown when a notice cannot be updated. throw new ServerException(_('Problem saving notice.')); diff --git a/plugins/TwitterBridge/lib/twitterimport.php b/plugins/TwitterBridge/lib/twitterimport.php index 5cb2259b92..124d9e2cfa 100644 --- a/plugins/TwitterBridge/lib/twitterimport.php +++ b/plugins/TwitterBridge/lib/twitterimport.php @@ -165,12 +165,6 @@ class TwitterImport } } - if (empty($notice->conversation)) { - $conv = Conversation::create(); - $notice->conversation = $conv->id; - common_log(LOG_INFO, "No known conversation for status {$statusId} so making a new one {$conv->id}."); - } - $notice->is_local = Notice::GATEWAY; $notice->content = html_entity_decode($this->linkify($status, FALSE), ENT_QUOTES, 'UTF-8'); @@ -180,11 +174,19 @@ class TwitterImport $id = $notice->insert(); - if (!$id) { + if ($id === false) { common_log_db_error($notice, 'INSERT', __FILE__); common_log(LOG_ERR, __METHOD__ . ' - Problem saving notice.'); } + if (empty($notice->conversation)) { + $orig = clone($notice); + $conv = Conversation::create($notice); + common_log(LOG_INFO, "No known conversation for status {$statusId} so a new one ({$conv->id}) was created."); + $notice->conversation = $conv->id; + $notice->update($orig); + } + Event::handle('EndNoticeSave', array($notice)); }