*/
class CompactPreviewPlugin extends Plugin {
+
public function __construct($id=0) {
$this->Plugin($id) ;
$this->name = "compactpreview";
// hook methods
+ /**
+ * override util_display_user() with modified version to display compact preview popup on user links
+ * @param array $params hook params (return in $params['user_link'])
+ */
function user_link_with_tooltip (&$params) {
- // override util_display_user() with modified version to display compact preview popup on user links
+ //
require_once dirname( __FILE__ ) . '/CompactResource.class.php';
$cR = CompactResource::createCompactResource($params);
$params['user_link'] = $cR->getResourceLink();
}
+
+ /**
+ * override util_make_link_g() with modified version to display compact preview popup on project links
+ * @param array $params hook params (return in $params['user_link'])
+ */
function project_link_with_tooltip (&$params) {
require_once dirname( __FILE__ ) . '/CompactResource.class.php';
$cR = CompactResource::createCompactResource($params);
$params['group_link'] = $cR->getResourceLink();
}
+
function javascript_file (&$params) {
// The userTooltip.js script is used by the compact preview feature (see content_negociated_user_home)
use_javascript('/scripts/jquery/jquery.js');
function cssfile (&$params) {
use_stylesheet('/plugins/'.$this->name.'/css/oslcTooltipStyle.css');
}
+
+ /**
+ * Declaration of which content-negociation alternatives are provided by this plugin
+ * @param unknown_type $params
+ */
function script_accepted_types (&$params) {
$script = $params['script'];
if ($script == 'user_home' || $script == 'project_home') {
+ // we do support content-negociation on /users and /project with the following accept header values
+ // for OSLC compact-preview
$params['accepted_types'][] = 'application/x-oslc-compact+xml';
+ // for fusionforge compact preview
+ $params['accepted_types'][] = 'application/x-fusionforge-compact+html';
}
}
+
+ function display_user_html_compact_preview($username) {
+
+ require_once $gfwww.'include/user_profile.php';
+
+ $user_obj = user_get_object_by_name($user);
+
+
+ $user_real_name = $user_obj->getRealName();
+ $user_id = $user_obj->getID();
+
+ $html = '<html>
+ <head>
+ <title>User: '. $user_real_name .' (Identifier: '. $user_id .')</title>
+ </head>
+ <body>';
+ $compact = true;
+ $html .= user_personal_information($user_obj, $compact);
+ $html .= '</body>
+ </html>';
+
+ return $html;
+
+ }
+
function content_negociated_user_home (&$params) {
$username = $params['username'];
$accept = $params['accept'];
- if($accept == 'application/x-oslc-compact+xml') {
- $params['content_type'] = 'application/x-oslc-compact+xml';
- $params['content'] = '<?xml version="1.0"?>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:oslc="http://open-services.net/ns/core#">
- <oslc:Compact rdf:about="/plugins/oslc/compact/user/'. $username .'">
- <dcterms:title>'. $username . '</dcterms:title>
- <oslc:shortTitle>'. $username . '</oslc:shortTitle>
- <oslc:smallPreview>
- <oslc:Preview>
- <oslc:document rdf:ressource="/plugins/'.$this->name.'/user.php?user='. $username .'"/>
- <oslc:hintWidth>500px</oslc:hintWidth>
- <oslc:hintHeight>150px</oslc:hintHeight>
- </oslc:Preview>
- </oslc:smallPreview>
- </oslc:Compact>
-</rdf:RDF>';
+ $param['content'] = false;
+
+ switch ($accept) {
+ // if want some OSLC compact-preview, provide the document pointing to the compact-preview
+ case 'application/x-oslc-compact+xml' : {
+ $params['content_type'] = 'application/x-oslc-compact+xml';
+ $params['content'] = '<?xml version="1.0"?>
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:oslc="http://open-services.net/ns/core#">
+ <oslc:Compact rdf:about="/plugins/oslc/compact/user/'. $username .'">
+ <dcterms:title>'. $username . '</dcterms:title>
+ <oslc:shortTitle>'. $username . '</oslc:shortTitle>
+ <oslc:smallPreview>
+ <oslc:Preview>
+ <oslc:document rdf:ressource="/plugins/'.$this->name.'/user.php?user='. $username .'"/>
+ <oslc:hintWidth>500px</oslc:hintWidth>
+ <oslc:hintHeight>150px</oslc:hintHeight>
+ </oslc:Preview>
+ </oslc:smallPreview>
+ </oslc:Compact>
+ </rdf:RDF>';
+ break;
+ }
+ // if want direct compact-preview rendering
+ case 'application/x-fusionforge-compact+html' : {
+ $params['content_type'] = 'text/html';
+ $params['content'] = display_user_html_compact_preview($username);
+ break;
+ }
}
}
+
function content_negociated_project_home (&$params) {
$projectname = $params['groupname'];
public static function createCompactResource($params) {
switch ($params['resource_type']) {
case 'user' :
- return new UserCompactResource($params);
+ return new LocalUserCompactResource($params);
break;
case 'group' :
return new GroupCompactResource($params);
*/
class UserCompactResource extends CompactResource {
+ protected function getCssClass() {
+ // TBD
+ }
+
public function getResourceLink() {
$username = $this->params['username'];
$user_id = $this->params['user_id'];
//$url = '<a class="resourcePopupTrigger" href="'. util_make_url_u ($username, $user_id) .
// '" rel="user,' . $username . '">'. $username . '</a>';
$resource_url = util_make_url_u ($username, $user_id);
- $url = '<a class="resourcePopupTrigger" href="'. $resource_url .
- '" rel="'. $resource_url .'">'. $username . '</a>';
+
+ //$url = '<a class="resourcePopupTrigger" href="'. $resource_url .
+ // '" rel="'. $resource_url .'">'. $username . '</a>';
+ $css_class = $this->getCssClass();
+
+ $url = '<a class="'. $css_class .'" href="'. $resource_url .
+ '">'. $username . '</a>';
if ($logo_params['content']) {
$html = $logo_params['content'] . $url .'<div class="new_line"></div>';
}
}
+class LocalUserCompactResource extends UserCompactResource {
+ protected function getCssClass() {
+ return 'resourceLocalPopupTrigger';
+ }
+}
+
+class OslcUserCompactResource extends UserCompactResource {
+ protected function getCssClass() {
+ return 'resourceOslcPopupTrigger';
+ }
+}
+
+
/**
* Enter description here ...
* @author olivier
*
*/
class GroupCompactResource extends CompactResource {
-
+
+ protected function getCssClass() {
+ // TBD
+ }
+
+
public function getResourceLink() {
$group_name = $this->params['group_name'];
$group_id = $this->params['group_id'];
$link_text = $this->params['link_text'];
$resource_url = util_make_url_g ($group_name, $group_id);
- return '<a class="resourcePopupTrigger" href="'. $resource_url .
+ $css_class = $this->getCssClass();
+ return '<a class="'.$css_class .'" href="'. $resource_url .
'" rel="' . $resource_url . '">'. $link_text . '</a>';
}
}
+class LocalGroupCompactResource extends GroupCompactResource {
+ protected function getCssClass() {
+ return 'resourceLocalPopupTrigger';
+ }
+}
+
+class OslcGroupCompactResource extends GroupCompactResource {
+ protected function getCssClass() {
+ return 'resourceOslcPopupTrigger';
+ }
+}
+
?>
jQuery('body').append(container);
- jQuery('.resourcePopupTrigger').live('mouseover', function() {
-// var params = jQuery(this).attr('rel').split(',');
-// var resourceType = params[0];
-// var resourceId = params[1];
-//
-// if(resourceType == 'user') {
-// resource = 'users';
-// }
-// if(resourceType == 'project'){
-// resource = 'projects';
-// }
- var url = jQuery(this).attr('rel');
+ jQuery('.resourceLocalPopupTrigger').live('mouseover', function() {
+ var url = jQuery(this).attr('href');
if (hideTimer) {
clearTimeout(hideTimer);
top: pos.top - 5 + 'px'
});
- jQuery('#resourcePopupContent').html('<i>...loading compact preview...</i>');
+ jQuery.ajax({
+ type: 'GET',
+ url: url,
+ dataType: 'html',
+ beforeSend: function(xhr) {
+ xhr.setRequestHeader("Accept","application/x-fusionforge-compact+html");
+ },
+
+ success: function(data) {
+ jQuery('#resourcePopupContent').html(data);
+ }
+ }
+ );
+
+ container.css('display', 'block');
+ });
+ jQuery('.resourceOslcPopupTrigger').live('mouseover', function() {
+ var url = jQuery(this).attr('href');
+
+ if (hideTimer) {
+ clearTimeout(hideTimer);
+ }
+ var pos = jQuery(this).offset();
+ var width = jQuery(this).width();
+ container.css({
+ left: (pos.left + width) + 'px',
+ top: pos.top - 5 + 'px'
+ });
+
+ // if remote URL, do some OSLC compact-preview fetching
+ jQuery('#resourcePopupContent').html('<i>...loading compact preview...</i>');
+
// Fetch the OSLC compact preview representation of the resource
//url: '/'+ resource +'/' + resourceId + '/',
jQuery.ajax({
}
}
}
- }
+ }
});
container.css('display', 'block');
});
- jQuery('.resourcePopupTrigger').live('mouseout', function() {
+ jQuery('.resourceLocalPopupTrigger').live('mouseout', function() {
if (hideTimer) {
clearTimeout(hideTimer);
}
);
});
+ jQuery('.resourceOslcPopupTrigger').live('mouseout', function() {
+ if (hideTimer) {
+ clearTimeout(hideTimer);
+ }
+ hideTimer = setTimeout(function() {
+ container.css('display', 'none');
+ },
+ hideDelay
+ );
+ });
+
+ // Allow mouse over of details without hiding details
+ jQuery('#resourceLocalPopupContainer').mouseover(function() {
+ if (hideTimer) {
+ clearTimeout(hideTimer);
+ }
+ });
+
// Allow mouse over of details without hiding details
- jQuery('#resourcePopupContainer').mouseover(function() {
+ jQuery('#resourceOslcPopupContainer').mouseover(function() {
if (hideTimer) {
clearTimeout(hideTimer);
}
});
// Hide after mouseout
- jQuery('#resourcePopupContainer').mouseout(function() {
+ jQuery('#resourceLocalPopupContainer').mouseout(function() {
+ if (hideTimer){
+ clearTimeout(hideTimer);
+ }
+ hideTimer = setTimeout(function() {
+ container.css('display', 'none');
+ },
+ hideDelay
+ );
+ });
+ // Hide after mouseout
+ jQuery('#resourceOslcPopupContainer').mouseout(function() {
if (hideTimer){
clearTimeout(hideTimer);
}
require_once('../../env.inc.php');
require_once $gfwww.'include/pre.php';
-$user = getStringFromRequest('user');
+global $pluginCompatPreview;
+$pluginCompactPreview = plugin_get_object('compactpreview');
-$user_obj = user_get_object_by_name($user);
+$username = getStringFromRequest('user');
-require_once $gfwww.'include/user_profile.php';
-
-$user_real_name = $user_obj->getRealName();
-$user_id = $user_obj->getID();
-
-?>
-<html>
-<head>
-<title>User: <?php echo $user_real_name;?> (Identifier: <?php echo $user_id;?>)</title>
-</head>
-<body>
-
-
-<?php
-$compact = true;
-echo user_personal_information($user_obj, $compact);
-?>
-
-</body>
-</html>
-
-<?php
+echo $pluginCompatPreview->display_user_html_compact_preview($username);
// Local Variables:
// mode: php