* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+require_once('common/include/rdfutils.php');
+
class foafprofilesPlugin extends Plugin {
public function __construct($id=0) {
$this->Plugin($id) ;
$roles = RBACEngine::getInstance()->getAvailableRolesForUser($user_obj) ;
sortRoleList($roles) ;
- $member_of_xml='';
-
- $groups_xml='';
+ // Construct an ARC2_Resource containing the project's RDF (DOAP) description\r
+ $ns = array(\r
+ 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\r
+ 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#',
+ 'foaf' => 'http://xmlns.com/foaf/0.1/',
+ 'sioc' => 'http://rdfs.org/sioc/ns#',
+ 'doap' => 'http://usefulinc.com/ns/doap#',\r
+ 'dcterms' => 'http://purl.org/dc/terms/',
+ 'planetforge' => 'http://coclico-project.org/ontology/planetforge#'\r
+ );\r
+ \r
+ $conf = array(\r
+ 'ns' => $ns\r
+ );
- $projects_xml ='';
+ // First, let's deal with the account
+ $account_res = ARC2::getResource($conf);
+ $account_uri = util_make_url_u($username, $user_obj->getID());
+ $account_uri = rtrim($account_uri,'/');\r
+ $person_uri = $account_uri . '#person';
- // see if there were any groups
- if (count($projects) >= 1) {
- foreach ($projects as $p) {
- // TODO : report also private projects if authenticated, for instance through OAuth
- if($p->isPublic()) {
- $project_link = util_make_link_g ($p->getUnixName(),$p->getID(),$p->getPublicName());
- $project_uri = util_make_url_g ($p->getUnixName(),$p->getID());
- // sioc:UserGroups for all members of a project are named after /projects/A_PROJECT/members/
- $usergroup_uri = $project_uri .'members/';
-
- $group_roles_xml = '';
-
- $role_names = array () ;
- foreach ($roles as $r) {
- if ($r instanceof RoleExplicit
- && $r->getHomeProject() != NULL
- && $r->getHomeProject()->getID() == $p->getID()) {
- $role_names[$r->getID()] = $r->getName() ;
- $role_uri = $project_uri .'roles/'.$r->getID();
- $group_roles_xml .= '<planetforge:group_has_function rdf:resource="'. $role_uri .'" />';
- }
- }
-
- $member_of_xml .= '<sioc:member_of rdf:resource="'. $usergroup_uri .'" />';
- $groups_xml .= '<sioc:UserGroup rdf:about="'. $usergroup_uri .'">
- <sioc:usergroup_of rdf:resource="'. $project_uri .'"/>';
+ $account_res->setURI( $account_uri );
+ // $account_res->setRel('rdf:type', 'foaf:OnlineAccount');\r
+ rdfutils_setPropToUri($account_res, 'rdf:type', 'foaf:OnlineAccount');
+ rdfutils_setPropToUri($account_res, 'foaf:accountServiceHomepage', $account_uri . '/');
+ $account_res->setProp('foaf:accountName', $username);
+ rdfutils_setPropToUri($account_res, 'sioc:account_of', $person_uri);
+ rdfutils_setPropToUri($account_res, 'foaf:accountProfilePage', $account_uri);
+
+ $groups_index = array();
+ $projects_index = array();\r
+ $roles_index = array();
+
+ $usergroups_uris = array();\r
+ // see if there were any groups\r
+ if (count($projects) >= 1) {\r
+ foreach ($projects as $p) {\r
+ // TODO : report also private projects if authenticated, for instance through OAuth\r
+ if($p->isPublic()) {\r
+ $project_link = util_make_link_g ($p->getUnixName(),$p->getID(),$p->getPublicName());\r
+ $project_uri = util_make_url_g ($p->getUnixName(),$p->getID());\r
+ // sioc:UserGroups for all members of a project are named after /projects/A_PROJECT/members/\r
+ $usergroup_uri = $project_uri .'members/';\r
+\r
+ $role_names = array();\r
- $groups_xml .= $group_roles_xml;
+ $usergroups_uris[] = $usergroup_uri;
- $groups_xml .= '</sioc:UserGroup>';
- $projects_xml .= '<planetforge:ForgeProject rdf:about="'. $project_uri .'">
- <doap:name>'. $p->getUnixName() .'</doap:name>
- </planetforge:ForgeProject>';
+ $usergroup_res = ARC2::getResource($conf);
+ $usergroup_res->setURI( $usergroup_uri );
+ rdfutils_setPropToUri($usergroup_res, 'rdf:type', 'sioc:UserGroup');
+ rdfutils_setPropToUri($usergroup_res, 'sioc:usergroup_of', $project_uri);\r
+
+ $roles_uris = array();\r
+ foreach ($roles as $r) {\r
+ if ($r instanceof RoleExplicit\r
+ && $r->getHomeProject() != NULL\r
+ && $r->getHomeProject()->getID() == $p->getID()) {\r
+ $role_names[$r->getID()] = $r->getName() ;\r
+ $role_uri = $project_uri .'roles/'.$r->getID();\r
+
+ $roles_uris[] = $role_uri;\r
+ }\r
+ }
+ rdfutils_setPropToUri($usergroup_res, 'planetforge:group_has_function', $roles_uris);\r
+
+ $project_res = ARC2::getResource($conf);\r
+ $project_res->setURI( $project_uri );\r
+ rdfutils_setPropToUri($project_res, 'rdf:type', 'planetforge:ForgeProject');\r
+ $project_res->setProp('doap:name', $p->getUnixName());
+ $projects_index = ARC2::getMergedIndex($projects_index, $project_res->index);
+ \r
+ \r
foreach ($role_names as $id => $name) {
- $projects_xml .= '<sioc:Role rdf:about="'. $project_uri .'roles/'.$id .'">
- <sioc:name>'. $name .'</sioc:name>
- </sioc:Role>';
+ $role_res = ARC2::getResource($conf);\r
+ $role_res->setURI( $project_uri .'roles/'.$id );\r
+ rdfutils_setPropToUri($role_res, 'rdf:type', 'sioc:Role');\r
+ $role_res->setProp('sioc:name', $name);
+ \r
+ $roles_index = ARC2::getMergedIndex($roles_index, $role_res->index);\r
}
- }
- }
- } // end if groups
-
- $xml_content = '<?xml version="1.0"?>
- <rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
- xmlns:foaf="http://xmlns.com/foaf/0.1/"
- xmlns:sioc="http://rdfs.org/sioc/ns#"
- xmlns:doap="http://usefulinc.com/ns/doap#"
- xmlns:planetforge="http://coclico-project.org/ontology/planetforge#">
-
- <foaf:OnlineAccount rdf:about="">
- <foaf:accountServiceHomepage rdf:resource="/"/>
- <foaf:accountName>'. $username .'</foaf:accountName>
- <sioc:account_of rdf:resource="#person" />
- <foaf:accountProfilePage rdf:resource="" />';
+
+ $groups_index = ARC2::getMergedIndex($groups_index, $usergroup_res->index);
+ \r
+ }\r
+ }\r
+ } // end if groups\r
+ rdfutils_setPropToUri($account_res, 'sioc:member_of', $usergroups_uris);\r
- $xml_content .= $member_of_xml;
-
- $xml_content .= '</foaf:OnlineAccount>
+ // next, deal with the person
+ $person_res = ARC2::getResource($conf);\r
+ \r
+ $person_res->setURI( $person_uri );
+ rdfutils_setPropToUri($person_res, 'rdf:type', 'foaf:Person');
+ $person_res->setProp('foaf:name', $user_real_name);
+ rdfutils_setPropToUri($person_res, 'foaf:holdsAccount', $account_uri);
+ $person_res->setProp('foaf:mbox_sha1sum', $mbox_sha1sum);
- <foaf:Person rdf:ID="person">
- <foaf:name>'. $user_real_name .'</foaf:name>
- <foaf:holdsAccount rdf:resource="" />
- <foaf:mbox_sha1sum>'. $mbox_sha1sum .'</foaf:mbox_sha1sum>
- </foaf:Person>';
-
- $xml_content .= $groups_xml;
-
- $xml_content .= $projects_xml;
-
- $xml_content .= '</rdf:RDF>';
-
- $doc = new DOMDocument();
- $doc->preserveWhiteSpace = false;
- $doc->formatOutput = true;
- $doc->loadXML($xml_content);
-
- $params['content'] = $doc->saveXML();
+ // merge the two sets of triples\r
+ $merged_index = ARC2::getMergedIndex($account_res->index, $person_res->index);\r
+ $merged_index = ARC2::getMergedIndex($merged_index, $groups_index);
+ $merged_index = ARC2::getMergedIndex($merged_index, $projects_index);
+ $merged_index = ARC2::getMergedIndex($merged_index, $roles_index);
+ \r
+ $conf = array(\r
+ 'ns' => $ns,\r
+ 'serializer_type_nodes' => true\r
+ );\r
+ \r
+ $ser = ARC2::getRDFXMLSerializer($conf);\r
+ \r
+ /* Serialize a resource index */\r
+ $doc = $ser->getSerializedIndex($merged_index);\r
+ \r
+ $params['content'] = $doc . "\n";
}
}
}