Files
server/usr/share/psa-horde/lib/Block/FbStream.php
2026-01-07 20:52:11 +01:00

158 lines
5.2 KiB
PHP

<?php
/**
* Block for displaying the current user's Facebook stream, with the ability to
* filter it using the same Facebook filters available on facebook.com. Also
* provides ability to update the current user's status.
*
* Copyright 2009-2017 Horde LLC (http://www.horde.org/)
*
* @author Michael J. Rubinsky <mrubinsk@horde.org>
* @package Horde
*/
class Horde_Block_FbStream extends Horde_Core_Block
{
/**
* @var Horde_Service_Facebook
*/
protected $_facebook;
/**
* Cache the uid/sid
*
* @var string
*/
protected $_fbp = array();
/**
*/
public function __construct($app, $params = array())
{
try {
$this->_facebook = $GLOBALS['injector']
->getInstance('Horde_Service_Facebook');
} catch (Horde_Exception $e) {
$this->enabled = false;
return;
}
parent::__construct($app, $params);
$this->_name = _("My Facebook Stream");
$this->_fbp = unserialize($GLOBALS['prefs']->getValue('facebook'));
}
/**
*/
protected function _params()
{
$filters = array();
if (!empty($this->_fbp['sid'])) {
try {
$stream_filters = $this->_facebook->streams->getFilters($this->_fbp['uid']);
foreach ($stream_filters as $filter) {
$filters[$filter['filter_key']] = $filter['name'];
}
} catch (Horde_Service_Facebook_Exception $e) {
}
}
return array(
'filter' => array(
'type' => 'enum',
'name' => _("Filter"),
'default' => 'nf',
'values' => $filters
),
'count' => array(
'type' => 'int',
'name' => _("Maximum number of entries to display"),
'default' => '20'
),
'height' => array(
'name' => _("Height of stream content (width automatically adjusts to block)"),
'type' => 'int',
'default' => 250
),
);
}
/**
*/
protected function _title()
{
return Horde::externalUrl('http://facebook.com', true) . $this->getName() . '</a>';
}
/**
* The content to go in this block.
*
* @return string The content.
*/
protected function _content()
{
global $page_output;
$instance = hash('md5', mt_rand());
$endpoint = Horde::url('services/facebook/', true);
$html = '';
// Init facebook driver, exit early if no prefs exist
$facebook = $this->_facebook;
if (!($facebook->auth->getSessionKey())) {
return sprintf(
_("You are not connected to your Facebook account. You should check your Facebook settings in your %s."),
$GLOBALS['registry']->getServiceLink('prefs', 'horde')->add('group', 'facebook')->link() . _("preferences") . '</a>'
);
}
// Add the client javascript / initialize it
$page_output->addThemeStylesheet('facebook.css');
$page_output->addScriptFile('facebookclient.js');
$script = <<<EOT
var Horde = window.Horde || {};
Horde['{$instance}_facebook'] = new Horde_Facebook({
spinner: '{$instance}_loading',
endpoint: '{$endpoint}',
content: '{$instance}_fbcontent',
status: '{$instance}_currentStatus',
getmore: '{$instance}_getmore',
'input': '{$instance}_newStatus',
'button': '{$instance}_button',
instance: '{$instance}',
'filter': '{$this->_params['filter']}',
'count': '{$this->_params['count']}'
});
EOT;
$page_output->addInlineScript($script);
// Start building the block UI.
$html .= '<div style="padding: 8px 8px 0 8px">';
try {
$html .= Horde_Themes_Image::tag(
'loading.gif',
array(
'attr' => array(
'id' => $instance. '_loading',
'style' => 'display:none;'
)
)
);
} catch (Horde_Service_Facebook_Exception $e) {
$prefs = $GLOBALS['registry']->getServiceLink('prefs');
$html .= sprintf(_("There was an error making the request: %s"), $e->getMessage());
$html .= sprintf(_("You can also check your Facebook settings in your %s."), $prefs->add('group', 'facebook')->link() . _("preferences") . '</a>');
return $html;
}
$html .= '</div>'; // Close the node that wraps the status
// Build the stream feed.
$html .= '<br /><div id="' . $instance . '_fbcontent" style="height:' . (empty($this->_params['height']) ? 300 : $this->_params['height']) . 'px;overflow-y:auto;overflow-x:hidden;"></div><br />';
$html .= '<div class="hordeSmGetmore"><input type="button" id="' . $instance . '_getmore" class="horde-default" value="' . _("Get More") . '"></div>';
$html .= '</div>';
return $html;
}
}