From 3077b31f3aa1a15e5d1edfc7dcde9b046e8cf33f Mon Sep 17 00:00:00 2001
From: Laurent Laffont <llaffont@afi-sa.fr>
Date: Wed, 18 Jan 2017 11:06:27 +0100
Subject: [PATCH] hotline #51711 remove http:// from NOM_DOMAINE variable and
 build correct sitemap

---
 VERSIONS_HOTLINE/51711                        |  1 +
 VERSIONS_WIP/43485                            |  1 +
 .../admin/views/scripts/index/index.phtml     |  2 +-
 library/Class/AdminVar.php                    |  6 ++++--
 library/Class/Formation/AbstractMail.php      |  2 +-
 library/Class/Url.php                         |  7 +++----
 .../ZendAfi/Controller/Plugin/SetupDomain.php |  2 +-
 tests/library/Class/BatchTest.php             |  2 +-
 .../WebService/WebAnalyticsClientTest.php     | 19 ++++++++++++++++++-
 9 files changed, 31 insertions(+), 11 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/51711
 create mode 100644 VERSIONS_WIP/43485

diff --git a/VERSIONS_HOTLINE/51711 b/VERSIONS_HOTLINE/51711
new file mode 100644
index 00000000000..c209b608ad5
--- /dev/null
+++ b/VERSIONS_HOTLINE/51711
@@ -0,0 +1 @@
+ - ticket #51711 : variable NOM_DOMAINE mal utilisée
\ No newline at end of file
diff --git a/VERSIONS_WIP/43485 b/VERSIONS_WIP/43485
new file mode 100644
index 00000000000..d7588c63fe1
--- /dev/null
+++ b/VERSIONS_WIP/43485
@@ -0,0 +1 @@
+ - ticket #43485 : vérification du format de la variable NOM_DOMAINE
\ No newline at end of file
diff --git a/application/modules/admin/views/scripts/index/index.phtml b/application/modules/admin/views/scripts/index/index.phtml
index bcf809c458b..02a1607cc6f 100644
--- a/application/modules/admin/views/scripts/index/index.phtml
+++ b/application/modules/admin/views/scripts/index/index.phtml
@@ -15,7 +15,7 @@ if ($this->user->isAdmin()) {
 }
 
 echo $this->ligneInfos($this->_('Etat du site'), $this->etat_site . $lien)
- . $this->ligneInfos($this->_('Nom du domaine'), Class_AdminVar::get('NOM_DOMAINE') . $edit_domain_name);
+ . $this->ligneInfos($this->_('Nom du domaine'), Class_AdminVar::getNomDomaine() . $edit_domain_name);
 ?>
 
 <h2><?php echo $this->_('Données en attente de modération');?>&nbsp;:
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 5f2c656d791..3d845076a58 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -753,8 +753,10 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
 
   /** @return string */
   public function getNomDomaine() {
-    $domaine = trim(Class_AdminVar::get('NOM_DOMAINE'));
-    return $domaine ? $domaine : $_SERVER['SERVER_NAME'];
+    return
+      ($domaine = preg_replace('|^.+://|', '' , trim(Class_AdminVar::get('NOM_DOMAINE'))))
+      ?  $domaine
+      :  SERVER['SERVER_NAME'];
   }
 
 
diff --git a/library/Class/Formation/AbstractMail.php b/library/Class/Formation/AbstractMail.php
index cdd0a2c1d99..19bcd98d1f2 100644
--- a/library/Class/Formation/AbstractMail.php
+++ b/library/Class/Formation/AbstractMail.php
@@ -75,7 +75,7 @@ abstract class Class_Formation_AbstractMail {
       $mail->addTo($recipient);
 
     $mail
-      ->setFrom('no-reply@' . Class_AdminVar::get('NOM_DOMAINE'))
+      ->setFrom('no-reply@' . Class_AdminVar::getNomDomaine())
       ->setSubject($subject)
       ->setBodyHtml($body)
       ->send();
diff --git a/library/Class/Url.php b/library/Class/Url.php
index bf43638643b..b5eebd23332 100644
--- a/library/Class/Url.php
+++ b/library/Class/Url.php
@@ -32,7 +32,7 @@ class Class_Url {
       $forbiden_urls = unserialize(FORBIDEN_URLS);
 
     if(!static::$_forbiden_urls)
-      return static::$_forbiden_urls = $forbiden_urls; // php compatibility  define not compatbile with array (until php 5.7) use : defineConstante('NOM_DOMAINE', serialize(array()));
+      return static::$_forbiden_urls = $forbiden_urls; // php compatibility  define not compatible with array (until php 5.7) use : defineConstante('NOM_DOMAINE', serialize(array()));
 
     return static::$_forbiden_urls;
   }
@@ -44,9 +44,8 @@ class Class_Url {
 
 
   public static function siteUrl() {
-    $url = Class_AdminVar::get('NOM_DOMAINE')
-      ? Class_AdminVar::get('NOM_DOMAINE')
-      : self::rootUrl() . self::baseUrl();
+    if (!$url = Class_AdminVar::getNomDomaine())
+      $url = self::rootUrl() . self::baseUrl();
 
     return false === strpos($url, '://')
       ? 'http://' . $url
diff --git a/library/ZendAfi/Controller/Plugin/SetupDomain.php b/library/ZendAfi/Controller/Plugin/SetupDomain.php
index 45cca4824d6..9ff44b089ab 100644
--- a/library/ZendAfi/Controller/Plugin/SetupDomain.php
+++ b/library/ZendAfi/Controller/Plugin/SetupDomain.php
@@ -21,7 +21,7 @@
 
 class ZendAfi_Controller_Plugin_SetupDomain extends Zend_Controller_Plugin_Abstract {
   public function preDispatch(Zend_Controller_Request_Abstract $request) {
-    if(Class_Adminvar::get('NOM_DOMAINE'))
+    if (Class_Adminvar::getNomDomaine())
       return;
 
     $site_url = Class_Url::siteUrl();
diff --git a/tests/library/Class/BatchTest.php b/tests/library/Class/BatchTest.php
index 478d2941a0b..a9a5c284c1d 100644
--- a/tests/library/Class/BatchTest.php
+++ b/tests/library/Class/BatchTest.php
@@ -186,7 +186,7 @@ class BatchBuildSitemapTest extends Storm_Test_ModelTestCase {
 
     $this->fixture('Class_AdminVar', ['id' => 'NOM_DOMAINE',
                                       'clef' => 'NOM_DOMAINE',
-                                      'valeur' => 'http://wiki.bokeh-library-portal.org']);
+                                      'valeur' => 'wiki.bokeh-library-portal.org']);
 
   }
 
diff --git a/tests/library/Class/WebService/WebAnalyticsClientTest.php b/tests/library/Class/WebService/WebAnalyticsClientTest.php
index a546d1b847c..718e05132f5 100644
--- a/tests/library/Class/WebService/WebAnalyticsClientTest.php
+++ b/tests/library/Class/WebService/WebAnalyticsClientTest.php
@@ -81,17 +81,28 @@ class Class_WebService_WebAnalyticsClientInstanciationWithVarGoogleAnalyticsAndD
   public function trackerDomainNameShouldBeMonOpacDotCom() {
     $this->assertEquals('monopac.com', $this->_web_analytics_client->getTrackerDomainName());
   }
+
+
+  /**
+   * @see http://forge.afi-sa.fr/issues/51711
+   * @test
+   */
+  public function schemeInDomainNameShouldBeRemoved() {
+    Class_AdminVar::newInstanceWithId('NOM_DOMAINE', ['valeur' => "http://monopac.com"]);
+    $this->assertEquals('monopac.com', $this->_web_analytics_client->getTrackerDomainName());
+  }
 }
 
 
 
 
 
-class Class_WebService_WebAnalyticsClientInstanciationWithWrongGoogleAnalyticsTest extends Storm_Test_ModelTestCase {
+class Class_WebService_WebAnalyticsClientInstanciationWithWrongGoogleAnalyticsAndDomainNameTest extends Storm_Test_ModelTestCase {
   public function setUp() {
     parent::setUp();
 
     Class_AdminVar::newInstanceWithId('JS_STAT', ['valeur' => "<script> var _gaq = _ga(); </script>"]);
+    Class_AdminVar::newInstanceWithId('NOM_DOMAINE', ['valeur' => "http://monopac.com"]);
     $this->_web_analytics_client = new Class_WebService_Analytics_Client();
   }
 
@@ -107,6 +118,12 @@ class Class_WebService_WebAnalyticsClientInstanciationWithWrongGoogleAnalyticsTe
     $this->assertInstanceOf('Class_WebService_Analytics_NullTracker',
                             $this->_web_analytics_client->getTracker());
   }
+
+
+    /** @test */
+  public function trackerDomainNameShouldBeMonOpacDotCom() {
+    $this->assertEquals('monopac.com', $this->_web_analytics_client->getTrackerDomainName());
+  }
 }
 
 
-- 
GitLab