ConversationTree is now a plugin (not oldschool setting)

Conversation trees works pretty bad with the current layout, javascript
etc. So it's best if we separate it and work on it as a side-project. The
oldschool settings are currently being deprecated (or broken out like this).

I'll wait with removing User preferences for oldschool conversation tree,
since that might be reusable data. But I guess it will go in the near future.
This commit is contained in:
Mikael Nordfeldth 2014-05-12 11:41:51 +02:00
parent d59b39275b
commit cd3cff451f
6 changed files with 148 additions and 93 deletions

View File

@ -110,7 +110,6 @@ class OldschoolsettingsAction extends SettingsAction
} }
$osp->stream_mode_only = $this->boolean('stream_mode_only'); $osp->stream_mode_only = $this->boolean('stream_mode_only');
$osp->conversation_tree = $this->boolean('conversation_tree');
$osp->stream_nicknames = $this->boolean('stream_nicknames'); $osp->stream_nicknames = $this->boolean('stream_nicknames');
$osp->modified = common_sql_now(); $osp->modified = common_sql_now();
@ -162,10 +161,6 @@ class OldSchoolForm extends Form
$this->user->streamModeOnly()); $this->user->streamModeOnly());
$this->elementEnd('li'); $this->elementEnd('li');
$this->elementStart('li'); $this->elementStart('li');
$this->checkbox('conversation_tree', _('Show conversation page as hierarchical trees'),
$this->user->conversationTree());
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('stream_nicknames', _('Show nicknames (not full names) in timelines'), $this->checkbox('stream_nicknames', _('Show nicknames (not full names) in timelines'),
$this->user->streamNicknames()); $this->user->streamNicknames());
$this->elementEnd('li'); $this->elementEnd('li');

View File

@ -981,18 +981,6 @@ class User extends Managed_DataObject
return false; return false;
} }
function conversationTree()
{
if (common_config('oldschool', 'enabled')) {
$osp = Old_school_prefs::getKV('user_id', $this->id);
if (!empty($osp)) {
return $osp->conversation_tree;
}
}
return false;
}
function streamNicknames() function streamNicknames()
{ {
if (common_config('oldschool', 'enabled')) { if (common_config('oldschool', 'enabled')) {

View File

@ -76,12 +76,8 @@ class RawConversationNoticeStream extends NoticeStream
$this->id = $id; $this->id = $id;
} }
function getNoticeIds($offset, $limit, $since_id, $max_id) function getNoticeIds($offset, $limit, $since_id=null, $max_id=null)
{ {
$conv = Conversation::getKV('id', $this->id);
if (!$conv instanceof Conversation) {
throw new ServerException('Could not find conversation');
}
$notice = new Notice(); $notice = new Notice();
// SELECT // SELECT
$notice->selectAdd(); $notice->selectAdd();
@ -95,11 +91,14 @@ class RawConversationNoticeStream extends NoticeStream
if (!empty($max_id)) { if (!empty($max_id)) {
$notice->whereAdd(sprintf('notice.id <= %d', $max_id)); $notice->whereAdd(sprintf('notice.id <= %d', $max_id));
} }
$notice->limit($offset, $limit); if (!is_null($offset)) {
$notice->limit($offset, $limit);
}
// ORDER BY // ORDER BY
// currently imitates the previously used "_reverseChron" sorting // currently imitates the previously used "_reverseChron" sorting
$notice->orderBy('notice.created DESC'); $notice->orderBy('notice.created DESC');
$notice->find();
return $notice->fetchAll('id'); return $notice->fetchAll('id');
} }
} }

View File

@ -0,0 +1,46 @@
<?php
/*
* GNU Social - a federating social network
* Copyright (C) 2014, Free Software Foundation, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('GNUSOCIAL')) { exit(1); }
/**
* @package UI
* @maintainer Mikael Nordfeldth <mmn@hethane.se>
*/
class ConversationTreePlugin extends Plugin
{
public function onStartShowConversation(Action $action, Conversation $conv, Profile $scoped=null) {
$nl = new ConversationTree($conv->getNotices(), $action);
$cnt = $nl->show();
return false;
}
public function onPluginVersion(array &$versions)
{
$versions[] = array('name' => 'ConversationTree',
'version' => GNUSOCIAL_VERSION,
'author' => 'Mikael Nordfeldth',
'homepage' => 'http://gnu.io/',
'rawdescription' =>
// TRANS: Plugin description.
_m('Enables conversation tree view.'));
return true;
}
}

View File

@ -28,11 +28,7 @@
* @link http://status.net/ * @link http://status.net/
*/ */
if (!defined('STATUSNET')) { if (!defined('GNUSOCIAL')) { exit(1); }
// This check helps protect against security problems;
// your code file can't be executed directly from the web.
exit(1);
}
/** /**
* Conversation tree * Conversation tree
@ -123,7 +119,7 @@ class ConversationTree extends NoticeList
if (array_key_exists($id, $this->tree)) { if (array_key_exists($id, $this->tree)) {
$children = $this->tree[$id]; $children = $this->tree[$id];
$this->out->elementStart('ol', array('class' => 'notices')); $this->out->elementStart('ol', array('class' => 'notices threaded-replies xoxo'));
sort($children); sort($children);
@ -149,67 +145,3 @@ class ConversationTree extends NoticeList
return new ConversationTreeItem($notice, $this->out); return new ConversationTreeItem($notice, $this->out);
} }
} }
/**
* Conversation tree list item
*
* Special class of NoticeListItem for use inside conversation trees.
*
* @category Widget
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class ConversationTreeItem extends NoticeListItem
{
/**
* start a single notice.
*
* The default creates the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showStart()
{
return;
}
/**
* finish the notice
*
* The default closes the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showEnd()
{
return;
}
/**
* show link to notice conversation page
*
* Since we're only used on the conversation page, we skip this
*
* @return void
*/
function showContext()
{
return;
}
/**
* show people this notice is in reply to
*
* Tree context shows this, so we skip it.
*
* @return void
*/
function showAddressees()
{
return;
}
}

View File

@ -0,0 +1,95 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
* Conversation tree widget for oooooold school playas
*
* PHP version 5
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Widget
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Conversation tree list item
*
* Special class of NoticeListItem for use inside conversation trees.
*
* @category Widget
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class ConversationTreeItem extends NoticeListItem
{
/**
* start a single notice.
*
* The default creates the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showStart()
{
return;
}
/**
* finish the notice
*
* The default closes the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showEnd()
{
return;
}
/**
* show link to notice conversation page
*
* Since we're only used on the conversation page, we skip this
*
* @return void
*/
function showContext()
{
return;
}
/**
* show people this notice is in reply to
*
* Tree context shows this, so we skip it.
*
* @return void
*/
function showAddressees()
{
return;
}
}