This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "FusionForge".

The branch, feature/twig-template-engine has been updated
       via  de2febc46f53dc62c71cc599b4cd42f15b0a6a65 (commit)
       via  76f619a0c95e3d3986a4ba2e048b2e4b37a17fdb (commit)
       via  183661e4a8c7f7f45cb73cc34e305bc8fa63af5e (commit)
       via  1aba55b62b82a2d487ece51f7f0192d97e979788 (commit)
       via  484c35dd0f727ec2aca0cedf56e447c7604aa63a (commit)
       via  385f53806060dfc82b90e1efb08c092e4b1fe11f (commit)
       via  547a4a04fc64ab7df68e4fc6168d90b5b01b8424 (commit)
       via  7e8189ee4935d660b974c7fdb0341f52cfe139e7 (commit)
       via  d85b7495b80c496c986d8ebb47195a58678fdc7d (commit)
      from  87a909275fa230e35e779512ff0f2c91dc6a579b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit de2febc46f53dc62c71cc599b4cd42f15b0a6a65
Author: Roland Mas <[email protected]>
Date:   Sat Jun 6 22:10:39 2015 +0200

    Implement headerStart in Twig

diff --git a/src/docs/README.Plugins b/src/docs/README.Plugins
index bca282a..5ad8b41 100644
--- a/src/docs/README.Plugins
+++ b/src/docs/README.Plugins
@@ -325,8 +325,6 @@ had been written.
   Description: Provides a place to add inline Javascript into the page.
                The output (in $params['return']) of the hook should be pure 
Javascript, as it will
                be placed within an existing <script> block.
-  [TODO: The output of the hook appears after the closing SGML comment marker
-   and before the closing </script> element. Is this what is really indended?]
 
   Hook Name  : javascript_file
   Locations  : www/include/Layout.class.php (function headerJS)
@@ -535,7 +533,7 @@ TODO : document Auth plugins :
 
   Hook Name  : alt_representations
   Parameters : $params['script_name'] contains the SCRIPT_NAME (filtered to 
work only on /projects or /users for the moment)
-  Description: returns alternate representations for a particular page in 
$params['results'] which is populated by the hook users 
+  Description: returns alternate representations for a particular page in 
$params['results'] which is populated by the hook users (in an array of arrays 
with rel/type/title/href keys)
 
   Hook Name  : content_negociated_projects_list
   Parameters : $params['accept'] provides the content-type to be rendered
diff --git a/src/plugins/admssw/include/admsswPlugin.class.php 
b/src/plugins/admssw/include/admsswPlugin.class.php
index 9b77fae..789c483 100644
--- a/src/plugins/admssw/include/admsswPlugin.class.php
+++ b/src/plugins/admssw/include/admsswPlugin.class.php
@@ -126,16 +126,34 @@ projects on /projects URLs with content-negotiation
                $script_name = $params['script_name'];
                $php_self = $params['php_self'];
                if ($php_self == '/softwaremap/trove_list.php') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
("/plugins/admssw/trove.php") .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url 
("/plugins/admssw/trove.php") .'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/plugins/admssw/trove.php"));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/plugins/admssw/trove.php"));
                }
                elseif ($script_name == '/softwaremap') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
("/projects") .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url 
("/projects") .'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/projects"));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/projects"));
                }
                else if($script_name == '/projects') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
($php_self) .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url ($php_self) 
.'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
                }
        }
 
diff --git a/src/plugins/doaprdf/include/doaprdfPlugin.class.php 
b/src/plugins/doaprdf/include/doaprdfPlugin.class.php
index 87ed23a..c4a14e3 100644
--- a/src/plugins/doaprdf/include/doaprdfPlugin.class.php
+++ b/src/plugins/doaprdf/include/doaprdfPlugin.class.php
@@ -187,8 +187,14 @@ with content-negotiation (application/rdf+xml).");
                $php_self = $params['php_self'];
                // really trigger only for real projects descriptions, not for 
the projects index
                if ( ($script_name == '/projects') && (($php_self != 
'/projects') && ($php_self != '/projects/')) ) {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="DOAP RDF Data" href=""/>';
-                       $params['return'][] = '<link rel="alternate" 
type="test/turtle" title="DOAP RDF Data" href=""/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"DOAP RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"DOAP RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
                }
        }
 
diff --git a/src/plugins/forumml/include/forummlPlugin.class.php 
b/src/plugins/forumml/include/forummlPlugin.class.php
index bd6070f..b60d1db 100644
--- a/src/plugins/forumml/include/forummlPlugin.class.php
+++ b/src/plugins/forumml/include/forummlPlugin.class.php
@@ -183,7 +183,7 @@ class ForumMLPlugin extends Plugin {
                //$request =& HTTPRequest::instance();
                if (strpos($_SERVER['REQUEST_URI'], $this->getPluginPath()) === 
0) {
                        //echo '<link rel="stylesheet" type="text/css" 
href="'.$this->getThemePath().'/css/style.css" />'."\n";
-                       echo '<script type="text/javascript" 
src="'.$this->getPluginPath().'/scripts/forumml.js"></script>'."\n";
+                       
use_javascript($this->getPluginPath().'/scripts/forumml.js');
                }
        }
 
diff --git a/src/plugins/hudson/include/hudsonPlugin.class.php 
b/src/plugins/hudson/include/hudsonPlugin.class.php
index 69def0e..5d40613 100644
--- a/src/plugins/hudson/include/hudsonPlugin.class.php
+++ b/src/plugins/hudson/include/hudsonPlugin.class.php
@@ -43,7 +43,6 @@ control over it to the project administrator.");
                //$this->_addHook("userisactivecheckbox") ; // The "use ..." 
checkbox in user account
                //$this->_addHook("userisactivecheckboxpost") ; //
                $this->_addHook("project_admin_plugins"); // to show up in the 
admin page fro group
-               $this->_addHook('javascript',  false);
                $this->_addHook('cssfile', 'cssFile', false);
                $this->_addHook('group_delete', 'projectIsDeleted', false);
                $this->_addHook('widget_instance', 'myPageBox', false);
diff --git a/src/www/include/Layout.class.php b/src/www/include/Layout.class.php
index abd34e5..4a204b8 100644
--- a/src/www/include/Layout.class.php
+++ b/src/www/include/Layout.class.php
@@ -177,7 +177,7 @@ class Layout extends Error {
                        if (file_exists($filename)) {
                                $js .= '?'.date ("U", filemtime($filename));
                        } else {
-                               $filename = str_replace('/scripts/', 
$GLOBALS['fusionforge_basedir'].'/vendor/', $js);
+                               $filename = preg_replace(',^/scripts/', 
$GLOBALS['fusionforge_basedir'].'/vendor/', $js);
                                if (file_exists($filename)) {
                                        $js .= '?'.date ("U", 
filemtime($filename));
                                }
@@ -341,23 +341,25 @@ class Layout extends Error {
         */
        function headerJS() {
                echo html_e('script', array('type' => 'text/javascript', 'src' 
=> util_make_uri('/js/common.js')), '', false);
-               echo '  <script type="text/javascript">/* <![CDATA[ */';
-               plugin_hook ("javascript");
-               echo '
-                       /* ]]> */</script>';
-               plugin_hook ("javascript_file");
-               echo $this->getJavascripts();
-
                // invoke the 'javascript' hook for custom javascript addition
                $params = array('return' => false);
                plugin_hook("javascript",$params);
                $javascript = $params['return'];
                if($javascript) {
-                       echo '<script type="text/javascript">';
+                       echo '  <script type="text/javascript">/* <![CDATA[ */';
                        echo $javascript;
                        echo '
-                       </script>';
+                       /* ]]> */</script>';
                }
+
+               $params = array('return' => array());
+               plugin_hook("javascript_file",$params);
+               $javascript = $params['return'];
+               plugin_hook ("javascript_file");
+               foreach ($params['return'] as $js) {
+                       $this->javascripts[] = $js;
+               }
+               echo $this->getJavascripts();
        }
 
        /**
@@ -387,7 +389,8 @@ class Layout extends Error {
                        plugin_hook_by_reference('alt_representations', 
$params);
 
                        foreach($params['return'] as $link) {
-                               echo "                        $link"."\n";
+                               printf('<link rel="%s" type="%s" title="%s" 
href="%s" />',
+                                          
$link['rel'],$link['type'],$link['title'],$link['href']);
                        }
                }
        }
diff --git a/src/www/themes/funky-twig/Theme.class.php 
b/src/www/themes/funky-twig/Theme.class.php
index 8752fef..ea8e21e 100644
--- a/src/www/themes/funky-twig/Theme.class.php
+++ b/src/www/themes/funky-twig/Theme.class.php
@@ -169,12 +169,91 @@ class Theme extends Layout {
                return $template->render($vars);
        }
        function header($params) {
-               // TODO
-               return parent::header($params);
+               $this->headerStart($params);
+               $this->bodyHeader($params);
        }
        function headerStart($params) {
-               // TODO
-               return parent::headerStart($params);
+               $this->headerHTMLDeclaration();
+
+               $template = $this->twig->loadTemplate('headerStart.html');
+
+               $vars = array();
+
+               $vars['forge_name'] = forge_get_config('forge_name');
+               if (isset($params['title'])) {
+                       $vars['title'] = $params['title'];
+               }
+               if (isset($params['meta-description'])) {
+                       $vars['meta_description'] = $params['meta-description'];
+               }
+               if (isset($params['meta-keywords'])) {
+                       $vars['meta keywords'] = $params['meta-keywords'];
+               }
+               $vars['favicon_url'] = util_make_uri('/images/icon.png');
+               $vars['search_url'] = 
util_make_uri('/export/search_plugin.php');
+
+               $vars['rssfeeds'] = array(
+                       array('title' => forge_get_config ('forge_name').' - 
Project News Highlights RSS',
+                                 'url' => 
util_make_uri('/export/rss_sfnews.php')),
+                       array('title' => forge_get_config ('forge_name').' - 
Project News Highlights RSS 2.0',
+                                 'url' => 
util_make_uri('/export/rss20_news.php')),
+                       array('title' => forge_get_config ('forge_name').' - 
New Projects RSS',
+                                 'url' => 
util_make_uri('/export/rss_sfprojects.php')),
+                       );
+               if (isset($GLOBALS['group_id'])) {
+                       $vars['rssfeeds'][] = array('title' => forge_get_config 
('forge_name') . ' - New Activity RSS',
+                                                                               
'url' => 
util_make_uri('/export/rss20_activity.php?group_id='.$GLOBALS['group_id']));
+               }
+
+               plugin_hook("javascript_file");
+               plugin_hook("css_file");
+               $vars['javascripts'] = array();
+               foreach ($this->javascripts as $js) {
+                       $vars['javascripts'][] = util_make_uri($js);
+               }
+
+               $sheets = array();
+               foreach ($this->stylesheets as $c) {
+                       $sheet = array('url' => util_make_uri($c['css']));
+                       if ($c['media']) {
+                               $sheet['media'] = $c['media'];
+                       } else {
+                               $sheet['media'] = '';
+                       }
+                       $sheets[] = $sheet;
+               }
+               $vars['stylesheets'] = $sheets;
+
+               $ff = new FusionForge();
+               $vars['software_name'] = $ff->software_name;
+               $vars['software_version'] = $ff->software_version;
+
+
+
+               $script_name = getStringFromServer('SCRIPT_NAME');
+               $end = strpos($script_name,'/',1);
+               if($end) {
+                       $script_name = substr($script_name,0,$end);
+               }
+
+               // Only activated for /projects, /users or /softwaremap for the 
moment
+               $vars['alt_representations'] = array();
+               if ($script_name == '/projects' || $script_name == '/users' || 
$script_name == '/softwaremap') {
+
+                       $php_self = getStringFromServer('PHP_SELF');
+
+                       // invoke the 'alt_representations' hook to add 
potential 'alternate' links (useful for Linked Data)
+                       // cf. http://www.w3.org/TR/cooluris/#linking
+                       $params = array('script_name' => $script_name,
+                                                       'php_self' => $php_self,
+                                                       'return' => array());
+
+                       plugin_hook_by_reference('alt_representations', 
$params);
+
+                       $vars['alt_representations'] = $params['return'];
+               }
+               
+               print $template->render($vars);
        }
        function headerHTMLDeclaration() {
                global $sysDTDs, $sysXMLNSs;
@@ -192,38 +271,6 @@ class Theme extends Layout {
 
                print $template->render($vars);
        }
-       function headerTitle($params) {
-               // TODO
-               return parent::headerTitle($params);
-       }
-       function headerFavIcon() {
-               // TODO
-               return parent::headerFavIcon();
-       }
-       function headerRSS() {
-               // TODO
-               return parent::headerRSS();
-       }
-       function headerSearch() {
-               // TODO
-               return parent::headerSearch();
-       }
-       function headerCSS() {
-               // TODO
-               return parent::headerCSS();
-       }
-       function headerJS() {
-               // TODO
-               return parent::headerJS();
-       }
-       function headerLinkedDataAutodiscovery() {
-               // TODO
-               return parent::headerLinkedDataAutodiscovery();
-       }
-       function headerForgepluckerMeta() {
-               // TODO
-               return parent::headerForgepluckerMeta();
-       }
        function bodyHeader($params){
                // TODO
                return parent::bodyHeader($params);
diff --git a/src/www/themes/funky-twig/templates/ListTableTop.html 
b/src/www/themes/funky-twig/templates/ListTableTop.html
index b534a80..f22b875 100644
--- a/src/www/themes/funky-twig/templates/ListTableTop.html
+++ b/src/www/themes/funky-twig/templates/ListTableTop.html
@@ -1,5 +1,5 @@
 <table class="listing {% if class %}{{ class }}{% else %}full{% endif %}" 
id="{{id}}">
-  {% if data|count %}
+  {% if data|length %}
   <thead>
        <tr>
          {% for item in data %}
diff --git a/src/www/themes/funky-twig/templates/headerStart.html 
b/src/www/themes/funky-twig/templates/headerStart.html
new file mode 100644
index 0000000..58b3f37
--- /dev/null
+++ b/src/www/themes/funky-twig/templates/headerStart.html
@@ -0,0 +1,38 @@
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    {% if meta_description %}
+    <meta name="description" content="{{ meta_description }}" />
+    {% endif %}
+    {% if meta_keywords %}
+    <meta name="keywords" content="{{ meta_keywords }}" />
+    {% endif %}
+    {% if title %}
+    <title>{{ forge_name }}: {{ title }}</title>
+    {% else %}
+    <title>{{ forge_name }}</title>
+    {% endif %}
+    <link rel="icon" type="image/png" href="{{ favicon_url }}" />
+    <link rel="shortcut icon" type="image/png" href="{{ favicon_url }}" />
+
+    {% for f in rssfeeds %}
+    <link rel="alternate" title="{{ f.title }}" href="{{ f.url }}" 
type="application/rss+xml" />
+    {% endfor %}
+
+    <link rel="search" title="{{ forge_name }}" href="{{ search_url }}" 
type="application/opensearchdescription+xml" />
+
+    {% for s in javascripts %}
+    <script type="text/javascript" src="{{ s }}"></script>
+    {% endfor %}
+
+    {% for s in stylesheets %}
+    <link type="text/css" href="{{ s.url }}" {% if m %} media="{{ s.media }}" 
{% endif %} />
+    {% endfor %}
+
+    <meta name="Forge-Identification" content="{{ software_name }}:{{ 
software_version }}" />
+
+    {% for a in alt_representations %}
+    <link type="{{ a.type }}" href="{{ a.href }}" rel="{{ a.rel }}" title="{{ 
a.title }}" />
+    {% endfor %}
+
+  </head>
+  <body>
diff --git a/src/www/themes/funky-wOw/Theme.class.php 
b/src/www/themes/funky-wOw/Theme.class.php
index d4618e4..786d938 100644
--- a/src/www/themes/funky-wOw/Theme.class.php
+++ b/src/www/themes/funky-wOw/Theme.class.php
@@ -374,6 +374,8 @@ class Theme extends Layout {
                        echo "\n".'//]]'."\n";
                        echo html_ac(html_ap() -1);
                }
+               // invoke the 'javascript_file' hook for custom javascript 
addition
+               plugin_hook("javascript_file",$params);
                html_use_storage();
                html_use_coolfieldset();
                html_use_jqueryui();
diff --git a/src/www/themes/funky/Theme.class.php 
b/src/www/themes/funky/Theme.class.php
index e86fd77..86460d1 100644
--- a/src/www/themes/funky/Theme.class.php
+++ b/src/www/themes/funky/Theme.class.php
@@ -373,6 +373,15 @@ class Theme extends Layout {
                        echo "\n".'//]]'."\n";
                        echo html_ac(html_ap() -1);
                }
+
+               // invoke the 'javascript_file' hook for custom javascript 
addition
+               $params = array('return' => array());
+               plugin_hook("javascript_file",$params);
+               $javascript = $params['return'];
+               plugin_hook ("javascript_file");
+               foreach ($params['return'] as $js) {
+                       $this->javascripts[] = $js;
+               }
                html_use_storage();
                html_use_coolfieldset();
                html_use_jqueryui();

commit 76f619a0c95e3d3986a4ba2e048b2e4b37a17fdb
Merge: 87a9092 183661e
Author: Roland Mas <[email protected]>
Date:   Sat Jun 6 22:09:18 2015 +0200

    Merge branch 'master' into feature/twig-template-engine


-----------------------------------------------------------------------

Summary of changes:
 autoinstall/common-backports                       |   3 +
 src/CHANGES                                        |   1 +
 src/common/tracker/Artifact.class.php              |   2 +-
 src/docs/README.Plugins                            |   4 +-
 src/plugins/admssw/include/admsswPlugin.class.php  |  30 ++++--
 .../doaprdf/include/doaprdfPlugin.class.php        |  10 +-
 .../forumml/include/forummlPlugin.class.php        |   2 +-
 src/plugins/hudson/include/hudsonPlugin.class.php  |   1 -
 src/plugins/scmgit/common/GitPlugin.class.php      |  10 +-
 .../common/scmgit_Widget_MyRepositories.class.php  |   2 +-
 src/plugins/scmsvn/common/SVNPlugin.class.php      |   6 +-
 src/www/include/Layout.class.php                   |  25 +++--
 src/www/themes/funky-twig/Theme.class.php          | 119 ++++++++++++++-------
 .../themes/funky-twig/templates/ListTableTop.html  |   2 +-
 .../themes/funky-twig/templates/headerStart.html   |  38 +++++++
 src/www/themes/funky-wOw/Theme.class.php           |   2 +
 src/www/themes/funky/Theme.class.php               |   9 ++
 tests/buildbot/push-packages-to-repositories.sh    |   2 +-
 18 files changed, 196 insertions(+), 72 deletions(-)
 create mode 100644 src/www/themes/funky-twig/templates/headerStart.html

diff --git a/autoinstall/common-backports b/autoinstall/common-backports
index 68d13b7..efddd0d 100644
--- a/autoinstall/common-backports
+++ b/autoinstall/common-backports
@@ -265,6 +265,9 @@ EOF
     REMOVEDEPS=$DEPS
     backport_rpm_from_fedora php-htmlpurifier-htmlpurifier
 
+    mkdir -p /usr/src/fusionforge/build/RPMS/
+    cp -r ~/rpmbuild/RPMS/* /usr/src/fusionforge/build/RPMS/
+
     # TODO: postfix: rebuild from RHEL/CentOS sources with pgsql enabled,
     # so we can test mta-postfix
 }
diff --git a/src/CHANGES b/src/CHANGES
index de52f65..3f27b5f 100644
--- a/src/CHANGES
+++ b/src/CHANGES
@@ -4,6 +4,7 @@ FusionForge 6.0.1:
 * SCM: fix commit privileges (*_scmro group membership) (Inria)
 * FRS: display new releases first (Roland Mas, for Inria)
 * Tracker: fix description re-html-ization when editing item (Inria)
+* Tracker: fix HTML entities in mail notifications (Inria)
 * Widgets: MyProjects: only display active projects (Inria)
 * SCM SVN: fix double-compression in ViewVC (Inria)
 * Plugin scmhook: git commitemail: fix subject, handle special chars (Roland 
Mas, for Inria)
diff --git a/src/common/tracker/Artifact.class.php 
b/src/common/tracker/Artifact.class.php
index 6f0eaa9..e9a86ae 100644
--- a/src/common/tracker/Artifact.class.php
+++ b/src/common/tracker/Artifact.class.php
@@ -1607,7 +1607,7 @@ class Artifact extends Error {
                $efd = $this->getExtraFieldDataText();
                foreach ($efd as $efid => $ef) {
                        $body .= $this->marker('extra_fields', $changes, $efid);
-                       $body .= $ef["name"].": ".$ef["value"]."\n";
+                       $body .= $ef["name"].": 
".htmlspecialchars_decode($ef["value"])."\n";
                }
 
                $subject='['. $this->ArtifactType->Group->getUnixName() . '-' . 
$name . ']' . $this->getStringID() .' '. util_unconvert_htmlspecialchars( 
$this->getSummary() );
diff --git a/src/docs/README.Plugins b/src/docs/README.Plugins
index bca282a..5ad8b41 100644
--- a/src/docs/README.Plugins
+++ b/src/docs/README.Plugins
@@ -325,8 +325,6 @@ had been written.
   Description: Provides a place to add inline Javascript into the page.
                The output (in $params['return']) of the hook should be pure 
Javascript, as it will
                be placed within an existing <script> block.
-  [TODO: The output of the hook appears after the closing SGML comment marker
-   and before the closing </script> element. Is this what is really indended?]
 
   Hook Name  : javascript_file
   Locations  : www/include/Layout.class.php (function headerJS)
@@ -535,7 +533,7 @@ TODO : document Auth plugins :
 
   Hook Name  : alt_representations
   Parameters : $params['script_name'] contains the SCRIPT_NAME (filtered to 
work only on /projects or /users for the moment)
-  Description: returns alternate representations for a particular page in 
$params['results'] which is populated by the hook users 
+  Description: returns alternate representations for a particular page in 
$params['results'] which is populated by the hook users (in an array of arrays 
with rel/type/title/href keys)
 
   Hook Name  : content_negociated_projects_list
   Parameters : $params['accept'] provides the content-type to be rendered
diff --git a/src/plugins/admssw/include/admsswPlugin.class.php 
b/src/plugins/admssw/include/admsswPlugin.class.php
index 9b77fae..789c483 100644
--- a/src/plugins/admssw/include/admsswPlugin.class.php
+++ b/src/plugins/admssw/include/admsswPlugin.class.php
@@ -126,16 +126,34 @@ projects on /projects URLs with content-negotiation
                $script_name = $params['script_name'];
                $php_self = $params['php_self'];
                if ($php_self == '/softwaremap/trove_list.php') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
("/plugins/admssw/trove.php") .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url 
("/plugins/admssw/trove.php") .'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/plugins/admssw/trove.php"));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/plugins/admssw/trove.php"));
                }
                elseif ($script_name == '/softwaremap') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
("/projects") .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url 
("/projects") .'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/projects"));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ("/projects"));
                }
                else if($script_name == '/projects') {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="ADMS.SW RDF Data" href="'. util_make_url 
($php_self) .'"/>';
-                       $params['return'][] = '<link rel="alternate" 
type="text/turtle" title="ADMS.SW RDF Data" href="'. util_make_url ($php_self) 
.'"/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"ADMS.SW RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
                }
        }
 
diff --git a/src/plugins/doaprdf/include/doaprdfPlugin.class.php 
b/src/plugins/doaprdf/include/doaprdfPlugin.class.php
index 87ed23a..c4a14e3 100644
--- a/src/plugins/doaprdf/include/doaprdfPlugin.class.php
+++ b/src/plugins/doaprdf/include/doaprdfPlugin.class.php
@@ -187,8 +187,14 @@ with content-negotiation (application/rdf+xml).");
                $php_self = $params['php_self'];
                // really trigger only for real projects descriptions, not for 
the projects index
                if ( ($script_name == '/projects') && (($php_self != 
'/projects') && ($php_self != '/projects/')) ) {
-                       $params['return'][] = '<link rel="alternate" 
type="application/rdf+xml" title="DOAP RDF Data" href=""/>';
-                       $params['return'][] = '<link rel="alternate" 
type="test/turtle" title="DOAP RDF Data" href=""/>';
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"application/rdf+xml",
+                                                                               
"title"=>"DOAP RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
+                       $params['return'][] = array("rel"=>"alternate",
+                                                                               
"type"=>"text/turtle",
+                                                                               
"title"=>"DOAP RDF Data",
+                                                                               
"href"=>util_make_url ($php_self));
                }
        }
 
diff --git a/src/plugins/forumml/include/forummlPlugin.class.php 
b/src/plugins/forumml/include/forummlPlugin.class.php
index bd6070f..b60d1db 100644
--- a/src/plugins/forumml/include/forummlPlugin.class.php
+++ b/src/plugins/forumml/include/forummlPlugin.class.php
@@ -183,7 +183,7 @@ class ForumMLPlugin extends Plugin {
                //$request =& HTTPRequest::instance();
                if (strpos($_SERVER['REQUEST_URI'], $this->getPluginPath()) === 
0) {
                        //echo '<link rel="stylesheet" type="text/css" 
href="'.$this->getThemePath().'/css/style.css" />'."\n";
-                       echo '<script type="text/javascript" 
src="'.$this->getPluginPath().'/scripts/forumml.js"></script>'."\n";
+                       
use_javascript($this->getPluginPath().'/scripts/forumml.js');
                }
        }
 
diff --git a/src/plugins/hudson/include/hudsonPlugin.class.php 
b/src/plugins/hudson/include/hudsonPlugin.class.php
index 69def0e..5d40613 100644
--- a/src/plugins/hudson/include/hudsonPlugin.class.php
+++ b/src/plugins/hudson/include/hudsonPlugin.class.php
@@ -43,7 +43,6 @@ control over it to the project administrator.");
                //$this->_addHook("userisactivecheckbox") ; // The "use ..." 
checkbox in user account
                //$this->_addHook("userisactivecheckboxpost") ; //
                $this->_addHook("project_admin_plugins"); // to show up in the 
admin page fro group
-               $this->_addHook('javascript',  false);
                $this->_addHook('cssfile', 'cssFile', false);
                $this->_addHook('group_delete', 'projectIsDeleted', false);
                $this->_addHook('widget_instance', 'myPageBox', false);
diff --git a/src/plugins/scmgit/common/GitPlugin.class.php 
b/src/plugins/scmgit/common/GitPlugin.class.php
index e5cece1..878e705 100644
--- a/src/plugins/scmgit/common/GitPlugin.class.php
+++ b/src/plugins/scmgit/common/GitPlugin.class.php
@@ -106,7 +106,7 @@ control over it to the project's administrator.");
                foreach ($repo_list as $repo_name) {
                        if (forge_get_config('use_smarthttp', 'scmgit')) {
                                $protocol = forge_get_config('use_ssl', 
'scmgit')? 'https' : 'http';
-                               $clone_commands[] = 'git clone 
'.$protocol.'://'.$this->getBoxForProject($project).'/anonscm/git/'.$project->getUnixName().'/'.$repo_name.'.git';
+                               $clone_commands[] = 'git clone 
'.$protocol.'://'.forge_get_config('scm_host').'/anonscm/git/'.$project->getUnixName().'/'.$repo_name.'.git';
                        }
                }
 
@@ -143,7 +143,7 @@ control over it to the project's administrator.");
                                $user_id = db_result($result,$i,'user_id');
                                $user_name = db_result($result,$i,'user_name');
                                $real_name = db_result($result,$i,'realname');
-                               $htmlRepo .= html_e('tt', array(), 'git clone 
'.$protocol.'://'.$this->getBoxForProject($project).'/anonscm/git/'.$project->getUnixName().'/users/'.$user_name.'.git')
+                               $htmlRepo .= html_e('tt', array(), 'git clone 
'.$protocol.'://'.forge_get_config('scm_host').'/anonscm/git/'.$project->getUnixName().'/users/'.$user_name.'.git')
                                        . ' ('.util_make_link_u($user_name, 
$user_id, $real_name).')'
                                        . html_e('br');
                        }
@@ -180,7 +180,7 @@ control over it to the project's administrator.");
                                        ' '. _('SSH must be installed on your 
client machine.'));
                                $htmlRepo = '';
                                foreach ($repo_list as $repo_name) {
-                                               $htmlRepo .= html_e('tt', 
array(), 'git clone git+ssh://'.$d.'@' . $this->getBoxForProject($project) . 
forge_get_config('repos_path', 'scmgit') .'/'. $project->getUnixName() .'/'. 
$repo_name .'.git').html_e('br');
+                                               $htmlRepo .= html_e('tt', 
array(), 'git clone git+ssh://'.$d.'@' . forge_get_config('scm_host') . 
forge_get_config('repos_path', 'scmgit') .'/'. $project->getUnixName() .'/'. 
$repo_name .'.git').html_e('br');
                                }
                                $b .= html_e('p', array(), $htmlRepo);
                        }
@@ -210,7 +210,7 @@ control over it to the project's administrator.");
                                        ' '. _('Substitute 
<em>developername</em> with the proper value.'));
                                $htmlRepo = '';
                                foreach ($repo_list as $repo_name) {
-                                       $htmlRepo .= html_e('tt', array(), 'git 
clone git+ssh://'.html_e('i', array(), _('developername'), true, false).'@' . 
$this->getBoxForProject($project) . forge_get_config('repos_path', 'scmgit') 
.'/'. $project->getUnixName() .'/'. $repo_name .'.git').html_e('br');
+                                       $htmlRepo .= html_e('tt', array(), 'git 
clone git+ssh://'.html_e('i', array(), _('developername'), true, false).'@' . 
forge_get_config('scm_host') . forge_get_config('repos_path', 'scmgit') .'/'. 
$project->getUnixName() .'/'. $repo_name .'.git').html_e('br');
                                }
                                $b .= html_e('p', array(), $htmlRepo);
                        }
@@ -244,7 +244,7 @@ control over it to the project's administrator.");
                                        $b .= html_e('h3', array(), _('Access 
to your personal repository'));
                                        $b .= html_e('p', array(), _('You have 
a personal repository for this project, accessible through the following 
methods. Enter your site password when prompted.'));
                                        if (forge_get_config('use_ssh', 
'scmgit')) {
-                                               $b .= html_e('tt', array(), 
'git clone git+ssh://'.$u->getUnixName().'@' . 
$this->getBoxForProject($project) . forge_get_config('repos_path', 'scmgit') 
.'/'. $project->getUnixName() .'/users/'. $u->getUnixName() 
.'.git').html_e('br');
+                                               $b .= html_e('tt', array(), 
'git clone git+ssh://'.$u->getUnixName().'@' . forge_get_config('scm_host') . 
forge_get_config('repos_path', 'scmgit') .'/'. $project->getUnixName() 
.'/users/'. $u->getUnixName() .'.git').html_e('br');
                                        }
                                        if (forge_get_config('use_smarthttp', 
'scmgit')) {
                                                $b .= html_e('tt', array(), 
'git clone '.$protocol.'://'.$u->getUnixName().'@' . 
forge_get_config('scm_host').'/authscm/'.$u->getUnixName().'/git/'.$project->getUnixName()
 .'/users/'. $u->getUnixName() .'.git').html_e('br');
diff --git a/src/plugins/scmgit/common/scmgit_Widget_MyRepositories.class.php 
b/src/plugins/scmgit/common/scmgit_Widget_MyRepositories.class.php
index f42caa8..a15c060 100644
--- a/src/plugins/scmgit/common/scmgit_Widget_MyRepositories.class.php
+++ b/src/plugins/scmgit/common/scmgit_Widget_MyRepositories.class.php
@@ -50,7 +50,7 @@ class scmgit_Widget_MyRepositories extends Widget {
                        foreach ($GitRepositories as $GitRepository) {
                                $project = group_get_object($GitRepository);
                                $cells = array();
-                               $cells[][] = '<tt>git clone 
git+ssh://'.$user->getUnixName().'@' . 
$scmgitplugin->getBoxForProject($project) .'/'. forge_get_config('scm_root', 
'scmgit') .'/'. $project->getUnixName() .'/users/'. $user->getUnixName() 
.'.git</tt>';
+                               $cells[][] = '<tt>git clone 
git+ssh://'.$user->getUnixName().'@' . forge_get_config('scm_host') .'/'. 
forge_get_config('scm_root', 'scmgit') .'/'. $project->getUnixName() 
.'/users/'. $user->getUnixName() .'.git</tt>';
                                $cells[][] = 
util_make_link('/scm/browser.php?group_id='.$project->getID().'&user_id='.$user->getID(),
 _('Browse Git Repository'));
                                $returnhtml .= $HTML->multiTableRow(array(), 
$cells);
                        }
diff --git a/src/plugins/scmsvn/common/SVNPlugin.class.php 
b/src/plugins/scmsvn/common/SVNPlugin.class.php
index b908dc7..84789c2 100644
--- a/src/plugins/scmsvn/common/SVNPlugin.class.php
+++ b/src/plugins/scmsvn/common/SVNPlugin.class.php
@@ -120,7 +120,7 @@ some control over it to the project's administrator.");
                $b .= '<p>' ;
                $module = $this->topModule($project);
                if (forge_get_config('use_ssh', 'scmsvn')) {
-                       $b .= '<tt>svn checkout 
svn://'.$this->getBoxForProject($project).$this->svn_root_fs.'/'.$project->getUnixName().$module.'</tt><br
 />';
+                       $b .= '<tt>svn checkout 
svn://'.forge_get_config('scm_host').$this->svn_root_fs.'/'.$project->getUnixName().$module.'</tt><br
 />';
                }
                if (forge_get_config('use_dav', 'scmsvn')) {
                                $b .= '<p><tt>svn checkout 
http'.((forge_get_config('use_ssl', 'scmsvn')) ? 's' : '').'://'. 
forge_get_config('scm_host'). 
'/anonscm/svn/'.$project->getUnixName().$module.'</tt></p>' ;
@@ -148,7 +148,7 @@ some control over it to the project's administrator.");
                                $b .= ' ';
                                $b .= _('Enter your site password when 
prompted.');
                                $b .= '</p>';
-                               $b .= '<p><tt>svn checkout svn+ssh://'.$d.'@' . 
$this->getBoxForProject($project) . $this->svn_root_fs .'/'. 
$project->getUnixName().$module.'</tt></p>' ;
+                               $b .= '<p><tt>svn checkout svn+ssh://'.$d.'@' . 
forge_get_config('scm_host') . $this->svn_root_fs .'/'. 
$project->getUnixName().$module.'</tt></p>' ;
                        }
                        if (forge_get_config('use_dav', 'scmsvn')) {
                                $b .= '<h2>';
@@ -175,7 +175,7 @@ some control over it to the project's administrator.");
                                $b .= ' ';
                                $b .= _('Enter your site password when 
prompted.');
                                $b .= '</p>';
-                               $b .= '<p><tt>svn checkout 
svn+ssh://<i>'._('developername').'</i>@' . $this->getBoxForProject($project) . 
$this->svn_root_fs .'/'. $project->getUnixName().$module.'</tt></p>' ;
+                               $b .= '<p><tt>svn checkout 
svn+ssh://<i>'._('developername').'</i>@' . forge_get_config('scm_host') . 
$this->svn_root_fs .'/'. $project->getUnixName().$module.'</tt></p>' ;
                        }
                        if (forge_get_config('use_dav', 'scmsvn')) {
                                $b .= '<h2>';
diff --git a/src/www/include/Layout.class.php b/src/www/include/Layout.class.php
index abd34e5..4a204b8 100644
--- a/src/www/include/Layout.class.php
+++ b/src/www/include/Layout.class.php
@@ -177,7 +177,7 @@ class Layout extends Error {
                        if (file_exists($filename)) {
                                $js .= '?'.date ("U", filemtime($filename));
                        } else {
-                               $filename = str_replace('/scripts/', 
$GLOBALS['fusionforge_basedir'].'/vendor/', $js);
+                               $filename = preg_replace(',^/scripts/', 
$GLOBALS['fusionforge_basedir'].'/vendor/', $js);
                                if (file_exists($filename)) {
                                        $js .= '?'.date ("U", 
filemtime($filename));
                                }
@@ -341,23 +341,25 @@ class Layout extends Error {
         */
        function headerJS() {
                echo html_e('script', array('type' => 'text/javascript', 'src' 
=> util_make_uri('/js/common.js')), '', false);
-               echo '  <script type="text/javascript">/* <![CDATA[ */';
-               plugin_hook ("javascript");
-               echo '
-                       /* ]]> */</script>';
-               plugin_hook ("javascript_file");
-               echo $this->getJavascripts();
-
                // invoke the 'javascript' hook for custom javascript addition
                $params = array('return' => false);
                plugin_hook("javascript",$params);
                $javascript = $params['return'];
                if($javascript) {
-                       echo '<script type="text/javascript">';
+                       echo '  <script type="text/javascript">/* <![CDATA[ */';
                        echo $javascript;
                        echo '
-                       </script>';
+                       /* ]]> */</script>';
                }
+
+               $params = array('return' => array());
+               plugin_hook("javascript_file",$params);
+               $javascript = $params['return'];
+               plugin_hook ("javascript_file");
+               foreach ($params['return'] as $js) {
+                       $this->javascripts[] = $js;
+               }
+               echo $this->getJavascripts();
        }
 
        /**
@@ -387,7 +389,8 @@ class Layout extends Error {
                        plugin_hook_by_reference('alt_representations', 
$params);
 
                        foreach($params['return'] as $link) {
-                               echo "                        $link"."\n";
+                               printf('<link rel="%s" type="%s" title="%s" 
href="%s" />',
+                                          
$link['rel'],$link['type'],$link['title'],$link['href']);
                        }
                }
        }
diff --git a/src/www/themes/funky-twig/Theme.class.php 
b/src/www/themes/funky-twig/Theme.class.php
index 8752fef..ea8e21e 100644
--- a/src/www/themes/funky-twig/Theme.class.php
+++ b/src/www/themes/funky-twig/Theme.class.php
@@ -169,12 +169,91 @@ class Theme extends Layout {
                return $template->render($vars);
        }
        function header($params) {
-               // TODO
-               return parent::header($params);
+               $this->headerStart($params);
+               $this->bodyHeader($params);
        }
        function headerStart($params) {
-               // TODO
-               return parent::headerStart($params);
+               $this->headerHTMLDeclaration();
+
+               $template = $this->twig->loadTemplate('headerStart.html');
+
+               $vars = array();
+
+               $vars['forge_name'] = forge_get_config('forge_name');
+               if (isset($params['title'])) {
+                       $vars['title'] = $params['title'];
+               }
+               if (isset($params['meta-description'])) {
+                       $vars['meta_description'] = $params['meta-description'];
+               }
+               if (isset($params['meta-keywords'])) {
+                       $vars['meta keywords'] = $params['meta-keywords'];
+               }
+               $vars['favicon_url'] = util_make_uri('/images/icon.png');
+               $vars['search_url'] = 
util_make_uri('/export/search_plugin.php');
+
+               $vars['rssfeeds'] = array(
+                       array('title' => forge_get_config ('forge_name').' - 
Project News Highlights RSS',
+                                 'url' => 
util_make_uri('/export/rss_sfnews.php')),
+                       array('title' => forge_get_config ('forge_name').' - 
Project News Highlights RSS 2.0',
+                                 'url' => 
util_make_uri('/export/rss20_news.php')),
+                       array('title' => forge_get_config ('forge_name').' - 
New Projects RSS',
+                                 'url' => 
util_make_uri('/export/rss_sfprojects.php')),
+                       );
+               if (isset($GLOBALS['group_id'])) {
+                       $vars['rssfeeds'][] = array('title' => forge_get_config 
('forge_name') . ' - New Activity RSS',
+                                                                               
'url' => 
util_make_uri('/export/rss20_activity.php?group_id='.$GLOBALS['group_id']));
+               }
+
+               plugin_hook("javascript_file");
+               plugin_hook("css_file");
+               $vars['javascripts'] = array();
+               foreach ($this->javascripts as $js) {
+                       $vars['javascripts'][] = util_make_uri($js);
+               }
+
+               $sheets = array();
+               foreach ($this->stylesheets as $c) {
+                       $sheet = array('url' => util_make_uri($c['css']));
+                       if ($c['media']) {
+                               $sheet['media'] = $c['media'];
+                       } else {
+                               $sheet['media'] = '';
+                       }
+                       $sheets[] = $sheet;
+               }
+               $vars['stylesheets'] = $sheets;
+
+               $ff = new FusionForge();
+               $vars['software_name'] = $ff->software_name;
+               $vars['software_version'] = $ff->software_version;
+
+
+
+               $script_name = getStringFromServer('SCRIPT_NAME');
+               $end = strpos($script_name,'/',1);
+               if($end) {
+                       $script_name = substr($script_name,0,$end);
+               }
+
+               // Only activated for /projects, /users or /softwaremap for the 
moment
+               $vars['alt_representations'] = array();
+               if ($script_name == '/projects' || $script_name == '/users' || 
$script_name == '/softwaremap') {
+
+                       $php_self = getStringFromServer('PHP_SELF');
+
+                       // invoke the 'alt_representations' hook to add 
potential 'alternate' links (useful for Linked Data)
+                       // cf. http://www.w3.org/TR/cooluris/#linking
+                       $params = array('script_name' => $script_name,
+                                                       'php_self' => $php_self,
+                                                       'return' => array());
+
+                       plugin_hook_by_reference('alt_representations', 
$params);
+
+                       $vars['alt_representations'] = $params['return'];
+               }
+               
+               print $template->render($vars);
        }
        function headerHTMLDeclaration() {
                global $sysDTDs, $sysXMLNSs;
@@ -192,38 +271,6 @@ class Theme extends Layout {
 
                print $template->render($vars);
        }
-       function headerTitle($params) {
-               // TODO
-               return parent::headerTitle($params);
-       }
-       function headerFavIcon() {
-               // TODO
-               return parent::headerFavIcon();
-       }
-       function headerRSS() {
-               // TODO
-               return parent::headerRSS();
-       }
-       function headerSearch() {
-               // TODO
-               return parent::headerSearch();
-       }
-       function headerCSS() {
-               // TODO
-               return parent::headerCSS();
-       }
-       function headerJS() {
-               // TODO
-               return parent::headerJS();
-       }
-       function headerLinkedDataAutodiscovery() {
-               // TODO
-               return parent::headerLinkedDataAutodiscovery();
-       }
-       function headerForgepluckerMeta() {
-               // TODO
-               return parent::headerForgepluckerMeta();
-       }
        function bodyHeader($params){
                // TODO
                return parent::bodyHeader($params);
diff --git a/src/www/themes/funky-twig/templates/ListTableTop.html 
b/src/www/themes/funky-twig/templates/ListTableTop.html
index b534a80..f22b875 100644
--- a/src/www/themes/funky-twig/templates/ListTableTop.html
+++ b/src/www/themes/funky-twig/templates/ListTableTop.html
@@ -1,5 +1,5 @@
 <table class="listing {% if class %}{{ class }}{% else %}full{% endif %}" 
id="{{id}}">
-  {% if data|count %}
+  {% if data|length %}
   <thead>
        <tr>
          {% for item in data %}
diff --git a/src/www/themes/funky-twig/templates/headerStart.html 
b/src/www/themes/funky-twig/templates/headerStart.html
new file mode 100644
index 0000000..58b3f37
--- /dev/null
+++ b/src/www/themes/funky-twig/templates/headerStart.html
@@ -0,0 +1,38 @@
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    {% if meta_description %}
+    <meta name="description" content="{{ meta_description }}" />
+    {% endif %}
+    {% if meta_keywords %}
+    <meta name="keywords" content="{{ meta_keywords }}" />
+    {% endif %}
+    {% if title %}
+    <title>{{ forge_name }}: {{ title }}</title>
+    {% else %}
+    <title>{{ forge_name }}</title>
+    {% endif %}
+    <link rel="icon" type="image/png" href="{{ favicon_url }}" />
+    <link rel="shortcut icon" type="image/png" href="{{ favicon_url }}" />
+
+    {% for f in rssfeeds %}
+    <link rel="alternate" title="{{ f.title }}" href="{{ f.url }}" 
type="application/rss+xml" />
+    {% endfor %}
+
+    <link rel="search" title="{{ forge_name }}" href="{{ search_url }}" 
type="application/opensearchdescription+xml" />
+
+    {% for s in javascripts %}
+    <script type="text/javascript" src="{{ s }}"></script>
+    {% endfor %}
+
+    {% for s in stylesheets %}
+    <link type="text/css" href="{{ s.url }}" {% if m %} media="{{ s.media }}" 
{% endif %} />
+    {% endfor %}
+
+    <meta name="Forge-Identification" content="{{ software_name }}:{{ 
software_version }}" />
+
+    {% for a in alt_representations %}
+    <link type="{{ a.type }}" href="{{ a.href }}" rel="{{ a.rel }}" title="{{ 
a.title }}" />
+    {% endfor %}
+
+  </head>
+  <body>
diff --git a/src/www/themes/funky-wOw/Theme.class.php 
b/src/www/themes/funky-wOw/Theme.class.php
index d4618e4..786d938 100644
--- a/src/www/themes/funky-wOw/Theme.class.php
+++ b/src/www/themes/funky-wOw/Theme.class.php
@@ -374,6 +374,8 @@ class Theme extends Layout {
                        echo "\n".'//]]'."\n";
                        echo html_ac(html_ap() -1);
                }
+               // invoke the 'javascript_file' hook for custom javascript 
addition
+               plugin_hook("javascript_file",$params);
                html_use_storage();
                html_use_coolfieldset();
                html_use_jqueryui();
diff --git a/src/www/themes/funky/Theme.class.php 
b/src/www/themes/funky/Theme.class.php
index e86fd77..86460d1 100644
--- a/src/www/themes/funky/Theme.class.php
+++ b/src/www/themes/funky/Theme.class.php
@@ -373,6 +373,15 @@ class Theme extends Layout {
                        echo "\n".'//]]'."\n";
                        echo html_ac(html_ap() -1);
                }
+
+               // invoke the 'javascript_file' hook for custom javascript 
addition
+               $params = array('return' => array());
+               plugin_hook("javascript_file",$params);
+               $javascript = $params['return'];
+               plugin_hook ("javascript_file");
+               foreach ($params['return'] as $js) {
+                       $this->javascripts[] = $js;
+               }
                html_use_storage();
                html_use_coolfieldset();
                html_use_jqueryui();
diff --git a/tests/buildbot/push-packages-to-repositories.sh 
b/tests/buildbot/push-packages-to-repositories.sh
index 8a1d3ae..8d471ac 100755
--- a/tests/buildbot/push-packages-to-repositories.sh
+++ b/tests/buildbot/push-packages-to-repositories.sh
@@ -41,7 +41,7 @@ case $method in
        rsync -av --delete-after --exclude=/mini-dinstall --exclude=/*.db 
--delete-excluded /var/lib/jenkins/deb/ 
[email protected]:/home/groups/fusionforge/htdocs/deb/
        ;;
     rpm)
-       rpmsign --addsign $WORKSPACE/packages/noarch/*.rpm
+       rpmsign --addsign $WORKSPACE/packages/*/*.rpm
        gpg --detach-sign --armor $WORKSPACE/packages/repodata/repomd.xml
        rsync -av --delete $WORKSPACE/packages/ 
/var/lib/jenkins/rpm/$dist-$branch/
        rsync -av --delete-after  /var/lib/jenkins/rpm/ 
[email protected]:/home/groups/fusionforge/htdocs/rpm/


hooks/post-receive
-- 
FusionForge

_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits

Reply via email to