/**
  * redirectToResult - redirect the user  directly to the result when there is only one matching result
  */
 function redirectToResult()
 {
     global $sys_use_fti;
     $project_name = $this->getResultId('unix_group_name');
     $project_id = $this->getResultId('group_id');
     if ($sys_use_fti) {
         // If FTI is being used, the project name returned by the query will be "<b>projectname</b>", so
         // we remove the HTML code (otherwise we'd get an error)
         $project_name = str_replace('<b>', '', $project_name);
         $project_name = str_replace('</b>', '', $project_name);
     }
     if ($this->getResultId('type') == 2) {
         header('Location: /foundry/' . $project_name . '/');
     } else {
         header('Location: ' . util_make_url_g($project_name, $project_id));
     }
     exit;
 }
Example #2
0
function util_make_link_g($groupame, $group_id, $text)
{
    return '<a href="' . util_make_url_g($groupame, $group_id) . '">' . $text . '</a>';
}
Example #3
0
    function quickNav()
    {
        if (!session_loggedin()) {
            return '';
        } else {
            $res = db_query("SELECT * FROM groups NATURAL JOIN user_group WHERE user_id='" . user_getid() . "' ORDER BY group_name");
            echo db_error();
            if (!$res || db_numrows($res) < 1) {
                return '';
            } else {
                $ret = '
		<form name="quicknavform">
			<select name="quicknav" onChange="location.href=document.quicknavform.quicknav.value">';
                $ret .= '
				<option value="">' . _('Quick Jump To...') . '</option>';
                for ($i = 0; $i < db_numrows($res); $i++) {
                    $ret .= '
				<option value="' . util_make_url_g(db_result($res, $i, 'unix_group_name'), db_result($res, $i, 'group_id')) . '">' . db_result($res, $i, 'group_name') . '</option>';
                    if (trim(db_result($res, $i, 'admin_flags')) == 'A') {
                        $ret .= '
				<option value="' . util_make_url('/project/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                    }
                    //tracker
                    if (db_result($res, $i, 'use_tracker')) {
                        $ret .= '
				<option value="' . util_make_url('/tracker/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tracker</option>';
                        if (db_result($res, $i, 'admin_flags') || db_result($res, $i, 'artifact_flags')) {
                            $ret .= '
				<option value="' . util_make_url('/tracker/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //task mgr
                    if (db_result($res, $i, 'use_pm')) {
                        $ret .= '
				<option value="' . util_make_url('/pm/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task Manager</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A' || db_result($res, $i, 'project_flags')) {
                            $ret .= '
				<option value="' . util_make_url('/pm/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //FRS
                    if (db_result($res, $i, 'use_frs')) {
                        $ret .= '
				<option value="' . util_make_url('/frs/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Files</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A' || db_result($res, $i, 'release_flags')) {
                            $ret .= '
				<option value="' . util_make_url('/frs/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //SCM
                    if (db_result($res, $i, 'use_scm')) {
                        $ret .= '
				<option value="' . util_make_url('/scm/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCM</option>';
                        /*if (db_result($res,$i,'admin_flags') || db_result($res,$i,'project_flags')) {
                        			$ret .= '
                        		<option value="'.util_make_url('/pm/admin/?group_id='.db_result($res,$i,'group_id')).'">&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        				} */
                    }
                    //forum
                    if (db_result($res, $i, 'use_forum')) {
                        $ret .= '
				<option value="' . util_make_url('/forum/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Forum</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A' || db_result($res, $i, 'forum_flags')) {
                            $ret .= '
				<option value="' . util_make_url('/forum/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //mail
                    if (db_result($res, $i, 'use_mail')) {
                        $ret .= '
				<option value="' . util_make_url('/mail/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lists</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A') {
                            $ret .= '
				<option value="' . util_make_url('/mail/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //doc
                    if (db_result($res, $i, 'use_docman')) {
                        $ret .= '
				<option value="' . util_make_url('/docman/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Docs</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A' || db_result($res, $i, 'doc_flags')) {
                            $ret .= '
				<option value="' . util_make_url('/docman/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //news
                    if (db_result($res, $i, 'use_news')) {
                        $ret .= '
				<option value="' . util_make_url('/news/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;News</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A') {
                            $ret .= '
				<option value="' . util_make_url('/news/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                    //survey
                    if (db_result($res, $i, 'use_survey')) {
                        $ret .= '
				<option value="' . util_make_url('/survey/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Surveys</option>';
                        if (trim(db_result($res, $i, 'admin_flags')) == 'A') {
                            $ret .= '
				<option value="' . util_make_url('/survey/admin/?group_id=' . db_result($res, $i, 'group_id')) . '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Admin</option>';
                        }
                    }
                }
                $ret .= '
			</select>
		</form>';
            }
        }
        return $ret;
    }
Example #4
0
 function outerTabs($params)
 {
     global $sys_use_trove, $sys_use_snippet, $sys_use_people;
     $selected = 0;
     $TABS_DIRS[] = '/';
     $TABS_IDS[] = 'home';
     $TABS_TITLES[] = _('Home');
     $TABS_IDS[] = 'my';
     $TABS_DIRS[] = '/my/';
     $TABS_TITLES[] = _('My&nbsp;Page');
     if (strstr(getStringFromServer('REQUEST_URI'), '/my/') || strstr(getStringFromServer('REQUEST_URI'), '/account/')) {
         $selected = count($TABS_DIRS) - 1;
     }
     if ($sys_use_trove) {
         $thistab = 'softwaremap';
         $TABS_IDS[] = 'softwaremap';
         $TABS_DIRS[] = '/' . $thistab . '/';
         $TABS_TITLES[] = _('Project&nbsp;Tree');
         if (strstr(getStringFromServer('REQUEST_URI'), $thistab)) {
             $selected = count($TABS_DIRS) - 1;
         }
     }
     if ($sys_use_snippet) {
         $thistab = 'snippet';
         $TABS_IDS[] = $thistab;
         $TABS_DIRS[] = '/' . $thistab . '/';
         $TABS_TITLES[] = _('Code&nbsp;Snippets');
         if (strstr(getStringFromServer('REQUEST_URI'), $thistab)) {
             $selected = count($TABS_DIRS) - 1;
         }
     }
     if ($sys_use_people) {
         $thistab = 'people';
         $TABS_IDS[] = $thistab;
         $TABS_DIRS[] = '/' . $thistab . '/';
         $TABS_TITLES[] = _('Project&nbsp;Openings');
         if (strstr(getStringFromServer('REQUEST_URI'), $thistab)) {
             $selected = count($TABS_DIRS) - 1;
         }
     }
     // outermenu hook
     $PLUGIN_TABS_DIRS = array();
     $hookParams['DIRS'] =& $PLUGIN_TABS_DIRS;
     $hookParams['TITLES'] =& $TABS_TITLES;
     plugin_hook("outermenu", $hookParams);
     $TABS_DIRS = array_merge($TABS_DIRS, $PLUGIN_TABS_DIRS);
     if (user_ismember(1, 'A')) {
         $thistab = 'admin';
         $TABS_IDS[] = $thistab;
         $TABS_DIRS[] = '/' . $thistab . '/';
         $TABS_TITLES[] = _('Admin');
         if (strstr(getStringFromServer('REQUEST_URI'), $thistab)) {
             $selected = count($TABS_DIRS) - 1;
         }
     }
     if (user_ismember($GLOBALS['sys_stats_group'])) {
         $thistab = 'reporting';
         $TABS_IDS[] = $thistab;
         $TABS_DIRS[] = '/' . $thistab . '/';
         $TABS_TITLES[] = _('Reporting');
         if (strstr(getStringFromServer('REQUEST_URI'), $thistab)) {
             $selected = count($TABS_DIRS) - 1;
         }
     }
     if (isset($params['group']) && $params['group']) {
         // get group info using the common result set
         $project =& group_get_object($params['group']);
         if ($project && is_object($project)) {
             if ($project->isError()) {
             } elseif (!$project->isProject()) {
             } else {
                 $TABS_DIRS[] = util_make_url_g($project->getUnixName(), $params['group']);
                 $TABS_TITLES[] = $project->getPublicName();
                 $selected = count($TABS_DIRS) - 1;
             }
         }
     } elseif (count($PLUGIN_TABS_DIRS) > 0) {
         foreach ($PLUGIN_TABS_DIRS as $PLUGIN_TABS_DIRS_VALUE) {
             if (strstr($GLOBALS['REQUEST_URI'], $PLUGIN_TABS_DIRS_VALUE)) {
                 $selected = array_search($PLUGIN_TABS_DIRS_VALUE, $TABS_DIRS);
                 break;
             }
         }
     }
     $c = count($TABS_TITLES) - 1;
     if (isset($params['group']) && $params['group']) {
         /* project is selected */
         $c--;
     }
     for ($i = 0; $i <= $c; $i++) {
         if ($selected == $i) {
             $this->selected_title = $TABS_TITLES[$i];
             $this->selected_dir = $TABS_DIRS[$i];
             $this->selected_id = $TABS_IDS[$i];
             @($return .= util_make_link($TABS_DIRS[$i], $TABS_TITLES[$i], array('id' => 'gforge-selected', 'title' => $TABS_TITLES[$i])));
         } else {
             @($return .= util_make_link($TABS_DIRS[$i], $TABS_TITLES[$i], array('id' => 'gforge-' . $TABS_IDS[$i], 'title' => $TABS_TITLES[$i])));
         }
     }
     if (isset($params['group']) && $params['group']) {
         $return .= util_make_link($TABS_DIRS[$i], $TABS_TITLES[$i], array('id' => 'gforge-selected', 'title' => $TABS_TITLES[$i]));
         $this->selected_title = $TABS_TITLES[$i];
     }
     return $return;
 }
 /**
  * Outputs the public projects list as ADMS.SW for /projects
  * @param unknown_type $params
  */
 function content_negociated_projects_list(&$params)
 {
     $accept = $params['accept'];
     if ($accept == 'application/rdf+xml') {
         // We will return RDF+XML
         $params['content_type'] = 'application/rdf+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#', 'doap' => 'http://usefulinc.com/ns/doap#', 'dcterms' => 'http://purl.org/dc/terms/', 'admssw' => 'http://purl.org/adms/sw/', 'adms' => 'http://www.w3.org/ns/adms#');
         $conf = array('ns' => $ns);
         $res = ARC2::getResource($conf);
         $res->setURI(util_make_url("/projects"));
         // $res->setRel('rdf:type', 'doap:Project');
         rdfutils_setPropToUri($res, 'rdf:type', 'admssw:SoftwareRepository');
         //$res->setProp('doap:name', $projectname);
         $res->setProp('adms:accessURL', util_make_url("/softwaremap/"));
         $forge_name = forge_get_config('forge_name');
         $ff = new FusionForge();
         $res->setProp('dcterms:description', 'Public projects in the ' . $ff->software_name . ' Software Map on ' . $forge_name);
         $res->setProp('rdfs:label', $forge_name . ' public projects');
         $res->setProp('adms:supportedSchema', 'ADMS.SW v1.0');
         // same as for trove's full list
         $projects = get_public_active_projects_asc();
         $proj_uris = array();
         foreach ($projects as $row_grp) {
             $proj_uri = util_make_url_g(strtolower($row_grp['unix_group_name']), $row_grp['group_id']);
             $proj_uris[] = $proj_uri;
         }
         if (count($proj_uris)) {
             rdfutils_setPropToUri($res, 'dcterms:hasPart', $proj_uris);
         }
         $conf = array('ns' => $ns, 'serializer_type_nodes' => true);
         $ser = ARC2::getRDFXMLSerializer($conf);
         /* Serialize a resource index */
         $doc = $ser->getSerializedIndex($res->index);
         $params['content'] = $doc . "\n";
     }
 }
Example #6
0
/**
 * Create a HTML link to a project's page
 * @param string $groupame
 * @param int $group_id
 * @param string $text
 * @return string
 */
function util_make_link_g($groupname, $group_id, $text)
{
    $hook_params = array();
    $hook_params['resource_type'] = 'group';
    $hook_params['group_name'] = $groupname;
    $hook_params['group_id'] = $group_id;
    $hook_params['link_text'] = $text;
    $hook_params['group_link'] = '';
    plugin_hook_by_reference('project_link_with_tooltip', $hook_params);
    if ($hook_params['group_link'] != '') {
        return $hook_params['group_link'];
    }
    return '<a href="' . util_make_url_g($groupname, $group_id) . '">' . $text . '</a>';
}
 /**
  * Outputs user's FOAF profile
  * @param unknown_type $params
  */
 function content_negociated_user_home(&$params)
 {
     $username = $params['username'];
     $accept = $params['accept'];
     if ($accept == 'application/rdf+xml') {
         $params['content_type'] = 'application/rdf+xml';
         $user_obj = user_get_object_by_name($username);
         $user_real_name = $user_obj->getRealName();
         $user_email = $user_obj->getEmail();
         $mbox = 'mailto:' . $user_email;
         $mbox_sha1sum = sha1($mbox);
         $projects = $user_obj->getGroups();
         sortProjectList($projects);
         $roles = RBACEngine::getInstance()->getAvailableRolesForUser($user_obj);
         sortRoleList($roles);
         // 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_index = array();
         $projects_index = array();
         $roles_index = array();
         $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();
                     $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());
                     $projects_index = ARC2::getMergedIndex($projects_index, $project_res->index);
                     foreach ($role_names as $id => $name) {
                         $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);
                     }
                     $groups_index = ARC2::getMergedIndex($groups_index, $usergroup_res->index);
                 }
             }
         }
         // end if groups
         rdfutils_setPropToUri($account_res, 'sioc:member_of', $usergroups_uris);
         // 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);
         // 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";
     }
 }
 /**
  * Outputs project's DOAP profile
  * @param unknown_type $params
  */
 function content_negociated_project_home(&$params)
 {
     $projectname = $params['groupname'];
     $accept = $params['accept'];
     $group_id = $params['group_id'];
     if ($accept == 'application/rdf+xml') {
         // connect to FusionForge internals
         $pm = ProjectManager::instance();
         $project = $pm->getProject($group_id);
         $project_shortdesc = $project->getPublicName();
         $project_description = $project->getDescription();
         $tags_list = NULL;
         if (forge_get_config('use_project_tags')) {
             $group = group_get_object($group_id);
             $tags_list = $group->getTags();
         }
         // We will return RDF+XML
         $params['content_type'] = 'application/rdf+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#', 'doap' => 'http://usefulinc.com/ns/doap#', 'dcterms' => 'http://purl.org/dc/terms/', 'schema' => 'http://schema.org/');
         $conf = array('ns' => $ns);
         $res = ARC2::getResource($conf);
         $res->setURI(util_make_url_g($projectname, $group_id));
         // $res->setRel('rdf:type', 'doap:Project');
         rdfutils_setPropToUri($res, 'rdf:type', 'doap:Project');
         $res->setProp('doap:name', $projectname);
         $res->setProp('doap:shortdesc', $project_shortdesc);
         if ($project_description) {
             $res->setProp('doap:description', $project_description);
         }
         $res->setProp('doap:homepage', $project->getHomePage());
         $tags = array();
         if ($tags_list) {
             $tags = split(', ', $tags_list);
             $res->setProp('dcterms:subject', $tags);
         }
         // Now, we need to collect complementary RDF descriptiosn of the project via other plugins
         // invoke the 'project_rdf_metadata' hook so as to complement the RDF description
         $hook_params = array();
         $hook_params['prefixes'] = array();
         foreach ($ns as $prefix => $url) {
             $hook_params['prefixes'][$url] = $prefix;
         }
         $hook_params['group'] = $group_id;
         // pass the resource in case it could be useful (read-only in principle)
         $hook_params['in_Resource'] = $res;
         $hook_params['out_Resources'] = array();
         plugin_hook_by_reference('project_rdf_metadata', $hook_params);
         // add new prefixes to the list
         foreach ($hook_params['prefixes'] as $url => $prefix) {
             if (!isset($ns[$prefix])) {
                 $ns[$prefix] = $url;
             }
         }
         // merge the two sets of triples
         $merged_index = $res->index;
         foreach ($hook_params['out_Resources'] as $out_res) {
             $merged_index = ARC2::getMergedIndex($merged_index, $out_res->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";
     }
 }