[Fusionforge-commits] r16121 - trunk/src/plugins/foafprofiles/include

Olivier Berger olberger at fusionforge.org
Tue Aug 21 16:50:08 CEST 2012


Author: olberger
Date: 2012-08-21 16:50:07 +0200 (Tue, 21 Aug 2012)
New Revision: 16121

Modified:
   trunk/src/plugins/foafprofiles/include/foafprofilesPlugin.class.php
Log:
Use ARC2 to construct RDF instead of home made templating

Modified: trunk/src/plugins/foafprofiles/include/foafprofilesPlugin.class.php
===================================================================
--- trunk/src/plugins/foafprofiles/include/foafprofilesPlugin.class.php	2012-08-21 14:49:39 UTC (rev 16120)
+++ trunk/src/plugins/foafprofiles/include/foafprofilesPlugin.class.php	2012-08-21 14:50:07 UTC (rev 16121)
@@ -25,6 +25,8 @@
  * 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) ;
@@ -69,92 +71,122 @@
 				$roles = RBACEngine::getInstance()->getAvailableRolesForUser($user_obj) ;
 				sortRoleList($roles) ;
 				
-				$member_of_xml='';
+				// Construct an ARC2_Resource containing the project's RDF (DOAP) description
+				$ns = array(
+						'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
+						'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#',
+						'dcterms' => 'http://purl.org/dc/terms/',
+						'planetforge' => 'http://coclico-project.org/ontology/planetforge#'
+				);
+				 
+				$conf = array(
+						'ns' => $ns
+				);
+				
+				// 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,'/');
+				$person_uri = $account_uri . '#person';
+				
+				$account_res->setURI( $account_uri );
+				// $account_res->setRel('rdf:type', 'foaf:OnlineAccount');
+				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_xml='';
+				$groups_index = array();
+				$projects_index = array();
+				$roles_index = array();
 				
-				$projects_xml ='';
-				
-				// 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 = '';
+				$usergroups_uris = array();
+				// 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/';
+
+							$role_names = array();
 							
-							$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 .'" />';
-								}
+							$usergroups_uris[] = $usergroup_uri;
+							
+							$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);
+
+							$roles_uris = 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();
+									
+									$roles_uris[] = $role_uri;
+								}
 							}
+							rdfutils_setPropToUri($usergroup_res, 'planetforge:group_has_function', $roles_uris);
+
+							$project_res = ARC2::getResource($conf);
+							$project_res->setURI( $project_uri );
+							rdfutils_setPropToUri($project_res, 'rdf:type', 'planetforge:ForgeProject');
+							$project_res->setProp('doap:name', $p->getUnixName());
 							
-							$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 .'"/>';
-							
-							$groups_xml .= $group_roles_xml;
-							
-	      					$groups_xml .= '</sioc:UserGroup>';
-							$projects_xml .= '<planetforge:ForgeProject rdf:about="'. $project_uri .'">
-	      						<doap:name>'. $p->getUnixName() .'</doap:name>
-	      						</planetforge:ForgeProject>';
-							
+							$projects_index = ARC2::getMergedIndex($projects_index, $project_res->index);
+							
+							
 							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);
+								$role_res->setURI( $project_uri .'roles/'.$id );
+								rdfutils_setPropToUri($role_res, 'rdf:type', 'sioc:Role');
+								$role_res->setProp('sioc:name', $name);
+								
+								$roles_index = ARC2::getMergedIndex($roles_index, $role_res->index);
 							}
-						}	
-					}
-				} // 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);
+															
+						}
+					}
+				} // end if groups
+				rdfutils_setPropToUri($account_res, 'sioc:member_of', $usergroups_uris);
 				
-      			$xml_content .= $member_of_xml;
-
-      			$xml_content .= '</foaf:OnlineAccount>
+				// next, deal with the person
+				$person_res = ARC2::getResource($conf);
+				
+				$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
+				$merged_index = ARC2::getMergedIndex($account_res->index, $person_res->index);
+				$merged_index = ARC2::getMergedIndex($merged_index, $groups_index);
+				$merged_index = ARC2::getMergedIndex($merged_index, $projects_index);
+				$merged_index = ARC2::getMergedIndex($merged_index, $roles_index);
+      			
+    			$conf = array(
+    					'ns' => $ns,
+    					'serializer_type_nodes' => true
+    			);
+    				
+    			$ser = ARC2::getRDFXMLSerializer($conf);
+    				
+    			/* Serialize a resource index */
+    			$doc = $ser->getSerializedIndex($merged_index);
+    			
+    			$params['content'] = $doc . "\n";
 		}
 	}
 }




More information about the Fusionforge-commits mailing list