mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 06:30:59 +01:00
Attempt to show legacy home content in new portlets
This commit is contained in:
parent
d5d977d60b
commit
8d5c4138bc
118
home/inc/class.home_legacy_portlet.inc.php
Normal file
118
home/inc/class.home_legacy_portlet.inc.php
Normal file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
/**
|
||||
* EGroupware - Home - A simple portlet for displaying legacy home content
|
||||
*
|
||||
* @link www.egroupware.org
|
||||
* @author Nathan Gray
|
||||
* @copyright (c) 2013 by Nathan Gray
|
||||
* @package home
|
||||
* @subpackage portlet
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
class home_legacy_portlet extends home_portlet
|
||||
{
|
||||
|
||||
/**
|
||||
* Context for this portlet
|
||||
*/
|
||||
protected $context = array();
|
||||
|
||||
/**
|
||||
* Custom title from hook
|
||||
*/
|
||||
protected $title = 'Legacy';
|
||||
|
||||
/**
|
||||
* @var String Content generated by hook
|
||||
*/
|
||||
protected $content = '';
|
||||
|
||||
public function __construct(array &$context = array())
|
||||
{
|
||||
$this->context = $context;
|
||||
|
||||
// Try to load content here, so all needed info is available
|
||||
$appname = $this->context['app'];
|
||||
if(!$appname || !$GLOBALS['egw']->hooks->hook_exists('home', $appname))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Set a fallback title for if we can't extract it
|
||||
$this->title = lang($this->context['app']);
|
||||
|
||||
// Execute hook to get content
|
||||
ob_start();
|
||||
$_content = $GLOBALS['egw']->hooks->single('home',$appname);
|
||||
if (!$_content || $_content == 1) // content has been echoed and not returned
|
||||
{
|
||||
$_content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
}
|
||||
if($_content)
|
||||
{
|
||||
// Now we have to extract the actual content
|
||||
$dom = new DOMDocument();
|
||||
libxml_use_internal_errors(true);
|
||||
$dom->loadHTML($_content,LIBXML_NOWARNING + LIBXML_NOERROR);
|
||||
$finder = new DOMXPath($dom);
|
||||
|
||||
// Find header for title
|
||||
$title = $finder->query("//div[contains(@class,'divSideboxHeader')]/descendant::strong");
|
||||
if($title->length)
|
||||
{
|
||||
$this->title = $title->item(0)->textContent;
|
||||
}
|
||||
|
||||
// Remove header
|
||||
$content = $finder->query("//div[contains(@class,'divSideboxHeader')]/descendant::strong/ancestor::tr");
|
||||
for($i = 0; $i < $content->length; $i++)
|
||||
{
|
||||
$content->item($i)->parentNode->removeChild($content->item($i));
|
||||
}
|
||||
|
||||
// Content remains
|
||||
$content = $dom->saveHTML();
|
||||
$this->content = $content;
|
||||
}
|
||||
}
|
||||
|
||||
public function get_actions()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a fragment of HTML for display
|
||||
*
|
||||
* @param id String unique ID, provided to the portlet so it can make sure content is
|
||||
* unique, if needed.
|
||||
* @return string HTML fragment for display
|
||||
*/
|
||||
public function get_content($id = null)
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Some descriptive information about the portlet, so that users can decide if
|
||||
* they want it or not, and for inclusion in lists, hover text, etc.
|
||||
*
|
||||
* These should be already translated, no further translation will be done.
|
||||
*
|
||||
* @return Array with keys
|
||||
* - displayName: Used in lists
|
||||
* - title: Put in the portlet header
|
||||
* - description: A short description of what this portlet does or displays
|
||||
*/
|
||||
public function get_description()
|
||||
{
|
||||
return array(
|
||||
'displayName'=> 'Legacy portlet',
|
||||
'title'=> $this->title,
|
||||
'description'=> 'Egroupware <= v1.9'
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
@ -119,13 +119,19 @@ class home_ui
|
||||
|
||||
foreach((array)$GLOBALS['egw_info']['user']['preferences']['home']['portlets'] as $id => $context)
|
||||
{
|
||||
error_log("Portlet: $id");
|
||||
error_log(array2string($context));
|
||||
if(!$id || in_array($id, array_keys($GLOBALS['egw_info']['user']['apps']))) continue;
|
||||
$content = '';
|
||||
$attrs = array();
|
||||
$this->get_portlet($id, $context, $content, $attrs);
|
||||
$portlets[$id] = $content;
|
||||
$attributes[$id] = $attrs;
|
||||
|
||||
}
|
||||
|
||||
// Add in legacy HTML home bits
|
||||
$this->get_legacy_portlets($template, $portlets, $attributes);
|
||||
|
||||
foreach($portlets as $index => $portlet)
|
||||
{
|
||||
$template->setElementAttribute('portlets', $index, (array)$attributes[$index]);
|
||||
@ -180,6 +186,50 @@ class home_ui
|
||||
}
|
||||
return $portlet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of pre-etemplate2 home hook content according to the individual
|
||||
* application preferences. If we find a preference that indicates the user
|
||||
* wants some content, we make a portlet for that app using the home_legacy_portlet,
|
||||
* which fetches content from the home hook.
|
||||
*/
|
||||
protected function get_legacy_portlets(&$etemplate, &$content, &$attributes)
|
||||
{
|
||||
$sorted_apps = array_keys($GLOBALS['egw_info']['user']['apps']);
|
||||
$portal_oldvarnames = array('mainscreen_showevents', 'homeShowEvents','homeShowLatest','mainscreen_showmail','mainscreen_showbirthdays','mainscreen_show_new_updated', 'homepage_display');
|
||||
|
||||
foreach($sorted_apps as $appname)
|
||||
{
|
||||
// If there's already [new] settings, or no preference, skip it
|
||||
if($content[$appname]) continue;
|
||||
$no_pref = true;
|
||||
foreach($portal_oldvarnames as $varcheck)
|
||||
{
|
||||
$thisd = $GLOBALS['egw_info']['user']['preferences'][$appname][$varcheck];
|
||||
if(!(int)$thisd && $thisd)
|
||||
{
|
||||
$no_pref = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if($no_pref || !$GLOBALS['egw']->hooks->hook_exists('home', $appname))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$context = array(
|
||||
'class' => 'home_legacy_portlet', 'app' => $appname,
|
||||
'width' => 8, 'height' => 3
|
||||
);
|
||||
$_content = '';
|
||||
$_attributes = array();
|
||||
$this->get_portlet($appname, $context, $_content, $_attributes);
|
||||
if(trim($_content))
|
||||
{
|
||||
$content[$appname] = $_content;
|
||||
$attributes[$appname] = $_attributes;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all available portlets for add menu
|
||||
@ -211,7 +261,7 @@ class home_ui
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!$classes[$appname]) continue;
|
||||
|
||||
// Build 'Add' actions for each discovered portlet.
|
||||
|
Loading…
Reference in New Issue
Block a user