<?php
/**
- * Laconica, the distributed open-source microblogging tool
+ * StatusNet, the distributed open-source microblogging tool
*
* widget for displaying a list of notices
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Search
- * @package Laconica
- * @author Zach Copley <zach@controlyourself.ca>
- * @copyright 2008-2009 Control Yourself, Inc.
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
*/
-if (!defined('LACONICA')) {
+if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
* widget-like class for showing JSON search results
*
* @category Search
- * @package Laconica
- * @author Zach Copley <zach@controlyourself.ca>
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
*
*/
/**
* constructor
*
- * @param Notice $notice stream of notices from DB_DataObject
+ * @param Notice $notice stream of notices from DB_DataObject
+ * @param string $query the original search query
+ * @param int $rpp the number of results to display per page
+ * @param int $page a page offset
+ * @param int $since_id only display notices newer than this
*/
function __construct($notice, $query, $rpp, $page, $since_id = 0)
{
$this->notice = $notice;
$this->query = urlencode($query);
- $this->results_per_page = $this->rpp = $rpp;
+ $this->results_per_page = $rpp;
+ $this->rpp = $rpp;
$this->page = $page;
$this->since_id = $since_id;
$this->results = array();
/**
* show the list of search results
*
- * @return int count of the search results listed.
+ * @return int $count of the search results listed.
*/
function show()
{
$cnt = 0;
+ $this->max_id = 0;
$time_start = microtime(true);
$this->max_id = (int)$this->notice->id;
}
+ if ($this->since_id && $this->notice->id <= $this->since_id) {
+ break;
+ }
+
if ($cnt > $this->rpp) {
break;
}
- $item = new ResultItem($this->notice);
- array_push($this->results, $item);
+ $profile = $this->notice->getProfile();
+
+ // Don't show notices from deleted users
+
+ if (!empty($profile)) {
+ $item = new ResultItem($this->notice);
+ array_push($this->results, $item);
+ }
}
- $time_end = microtime(true);
+ $time_end = microtime(true);
$this->completed_in = $time_end - $time_start;
// Set other attrs
* widget for displaying a single JSON search result
*
* @category UI
- * @package Laconica
- * @author Zach Copley <zach@controlyourself.ca>
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link http://laconi.ca/
+ * @link http://status.net/
* @see JSONSearchResultsList
*/
var $id;
var $from_user_id;
var $iso_language_code;
- var $source;
+ var $source = null;
+ var $source_link = null;
var $profile_image_url;
var $created_at;
function buildResult()
{
- $this->text = $this->notice->content;
+ $this->text = $this->notice->content;
$replier_profile = null;
if ($this->notice->reply_to) {
- $reply = Notice::staticGet(intval($notice->reply_to));
+ $reply = Notice::getKV(intval($this->notice->reply_to));
if ($reply) {
$replier_profile = $reply->getProfile();
}
$this->to_user_id = ($replier_profile) ?
intval($replier_profile->id) : null;
- $this->to_user = ($replier_profile) ?
+ $this->to_user = ($replier_profile) ?
$replier_profile->nickname : null;
- $this->from_user = $this->profile->nickname;
- $this->id = $this->notice->id;
- $this->from_user_id = $this->profile->id;
- $user = User::staticGet('id', $this->profile->id);
- $this->iso_language_code = $this->user->language;
+ $this->from_user = $this->profile->nickname;
+ $this->id = $this->notice->id;
+ $this->from_user_id = $this->profile->id;
- $this->source = $this->getSourceLink($this->notice->source);
+ $this->iso_language_code = Profile_prefs::getConfigData($this->profile, 'site', 'language');
+
+ // set source and source_link
+ $this->setSourceData();
- $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
- $this->profile_image_url = ($avatar) ?
- $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
+ $this->profile_image_url = $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
- $this->created_at = date('r', $this->notice->created);
+ $this->created_at = common_date_rfc2822($this->notice->created);
}
/**
- * Show the source of the notice
+ * Set the notice's source data (api/app name and URL)
*
* Either the name (and link) of the API client that posted the notice,
- * or one of other other channels.
+ * or one of other other channels. Uses the local notice object.
*
- * @return string the source of the Notice
+ * @return void
*/
+ function setSourceData()
+ {
+ $source = null;
+ $source_link = null;
+
+ switch ($source) {
+ case 'web':
+ case 'xmpp':
+ case 'mail':
+ case 'omb':
+ case 'api':
+ // Gettext translations for the below source types are available.
+ $source = _($this->notice->source);
+ break;
+
+ default:
+ $ns = Notice_source::getKV($this->notice->source);
+ if ($ns instanceof Notice_source) {
+ $source = $ns->code;
+ if (!empty($ns->url)) {
+ $source_link = $ns->url;
+ if (!empty($ns->name)) {
+ $source = $ns->name;
+ }
+ }
+ }
+ break;
+ }
- function getSourceLink($source)
- {
- $source_name = _($source);
- switch ($source) {
- case 'web':
- case 'xmpp':
- case 'mail':
- case 'omb':
- case 'api':
- break;
- default:
- $ns = Notice_source::staticGet($source);
- if ($ns) {
- $source_name = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
- }
- break;
- }
- return $source_name;
- }
-
+ $this->source = $source;
+ $this->source_link = $source_link;
+ }
}