6 * Copyright 2011, Olivier Berger & Institut Telecom
8 * This program was developped in the frame of the COCLICO project
9 * (http://www.coclico-project.org/) with financial support of the Paris
12 * This file is part of FusionForge. FusionForge is free software;
13 * you can redistribute it and/or modify it under the terms of the
14 * GNU General Public License as published by the Free Software
15 * Foundation; either version 2 of the Licence, or (at your option)
18 * FusionForge is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License along
24 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29 require_once('common/include/ProjectManager.class.php');
30 require_once('common/include/rdfutils.php');
\r
32 class doaprdfPlugin extends Plugin {
33 public function __construct($id=0) {
35 $this->name = "doaprdf";
36 $this->text = "DoaPRDF!"; // To show in the tabs, use...
37 $this->_addHook("script_accepted_types");
38 $this->_addHook("content_negociated_project_home");
43 * Declares itself as accepting RDF XML on /users
44 * @param unknown_type $params
46 function script_accepted_types (&$params) {
47 $script = $params['script'];
48 if ($script == 'project_home') {
49 $params['accepted_types'][] = 'application/rdf+xml';
54 * Outputs user's FOAF profile
55 * @param unknown_type $params
57 function content_negociated_project_home (&$params) {
58 $projectname = $params['groupname'];
59 $accept = $params['accept'];
60 $group_id = $params['group_id'];
62 if($accept == 'application/rdf+xml') {
64 // connect to FusionForge internals
65 $pm = ProjectManager::instance();
66 $project = $pm->getProject($group_id);
67 $project_shortdesc = $project->getPublicName();
68 $project_description = $project->getDescription();
70 if (forge_get_config('use_project_tags')) {
71 $group = group_get_object($group_id);
72 $tags_list = $group->getTags();
75 // We will return RDF+XML
76 $params['content_type'] = 'application/rdf+xml';
78 // Construct an ARC2_Resource containing the project's RDF (DOAP) description
80 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
\r
81 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#',
\r
82 'doap' => 'http://usefulinc.com/ns/doap#',
\r
83 'dcterms' => 'http://purl.org/dc/terms/' /*,
\r
84 'oslc' => 'http://open-services.net/ns/core#' */
\r
90 'serializer_type_nodes' => true*/
\r
93 $res = ARC2::getResource($conf);
\r
96 //$res->setRel('rdf:type', 'doap:Project');
\r
97 rdfutils_setPropToUri($res, 'rdf:type', 'doap:Project');
\r
99 $res->setProp('doap:name', $projectname);
\r
100 $res->setProp('doap:shortdesc', $project_shortdesc);
\r
101 if($project_description) {
\r
102 $res->setProp('doap:description', $project_description);
\r
105 $tags = split(', ',$tags_list);
\r
106 $res->setProp('dcterms:subject', $tags);
\r
109 // Now, we need to collect complementary RDF descriptiosn of the project via other plugins
\r
110 // invoke the 'project_rdf_metadata' hook so as to complement the RDF description
\r
111 $hook_params = array();
113 $hook_params['prefixes'] = array();
114 foreach($ns as $prefix => $url) {
115 $hook_params['prefixes'][$url] = $prefix;
118 $hook_params['prefixes'] = array(
\r
119 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' => 'rdf',
\r
120 'http://www.w3.org/2000/01/rdf-schema#' => 'rdfs',
\r
121 'http://usefulinc.com/ns/doap#' => 'doap',
\r
122 'http://purl.org/dc/terms/' => 'dcterms'
\r
125 $hook_params['group'] = $group_id;
\r
127 // pass the resource in case it could be useful (read-only in principle)
\r
128 $hook_params['in_Resource'] = $res;
\r
130 $hook_params['out_Resources'] = array();
\r
132 plugin_hook_by_reference('project_rdf_metadata', $hook_params);
\r
134 // add new prefixes to the list
135 foreach($hook_params['prefixes'] as $url => $prefix) {
136 if (!isset($ns[$prefix])) {
\r
141 $merged_index = $res->index;
\r
142 foreach($hook_params['out_Resources'] as $out_res) {
143 $merged_index = ARC2::getMergedIndex($merged_index, $out_res->index);
148 'serializer_type_nodes' => true
\r
151 $ser = ARC2::getRDFXMLSerializer($conf);
\r
153 /* Serialize a resource index */
\r
154 $doc = $ser->getSerializedIndex($merged_index);
\r
156 $params['content'] = $doc;
163 // c-file-style: "bsd"