mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +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)
|
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 = '';
|
$content = '';
|
||||||
$attrs = array();
|
$attrs = array();
|
||||||
$this->get_portlet($id, $context, $content, $attrs);
|
$this->get_portlet($id, $context, $content, $attrs);
|
||||||
$portlets[$id] = $content;
|
$portlets[$id] = $content;
|
||||||
$attributes[$id] = $attrs;
|
$attributes[$id] = $attrs;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add in legacy HTML home bits
|
||||||
|
$this->get_legacy_portlets($template, $portlets, $attributes);
|
||||||
|
|
||||||
foreach($portlets as $index => $portlet)
|
foreach($portlets as $index => $portlet)
|
||||||
{
|
{
|
||||||
$template->setElementAttribute('portlets', $index, (array)$attributes[$index]);
|
$template->setElementAttribute('portlets', $index, (array)$attributes[$index]);
|
||||||
@ -181,6 +187,50 @@ class home_ui
|
|||||||
return $portlet;
|
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
|
* Get a list of all available portlets for add menu
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user