* @category Data
* @package StatusNet
* @author Zach Copley <zach@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @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'),
*
* @return Conversation the new conversation DO
*/
- static function create()
+ static function create(Notice $notice)
{
+ 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();
- $id = $conv->insert();
+ $conv->id = $notice->id;
+ $conv->uri = common_local_url('conversation', array('id' => $notice->id), null, null, false);
+ $result = $conv->insert();
- if (empty($id)) {
+ if ($result === false) {
common_log_db_error($conv, 'INSERT', __FILE__);
- return null;
- }
-
- $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;
+ throw new ServerException(_('Failed to create conversation for notice'));
}
return $conv;
// 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.'));
}
}
- 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');
$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));
}