/** * 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; }
function util_make_link_g($groupame, $group_id, $text) { return '<a href="' . util_make_url_g($groupame, $group_id) . '">' . $text . '</a>'; }
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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')).'"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> 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')) . '"> Admin</option>'; } } } $ret .= ' </select> </form>'; } } return $ret; }
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 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 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 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 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"; } }
/** * 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"; } }