Cnil.php 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
<?php
/**
 * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved.
 *
 * BOKEH is free software; you can redistribute it and/or modify
 * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
 * the Free Software Foundation.
 *
 * There are special exceptions to the terms and conditions of the AGPL as it
 * is applied to this software (see README file).
 *
 * BOKEH is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
 *
 * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
 * along with BOKEH; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 */


class Class_Cnil {
  use Trait_Translator, Trait_TimeSource;

  protected static $_cookie_jar;

  protected $_key, $_session;


  /** @category testing */
  public static function setCookieJar($cookie_jar) {
    static::$_cookie_jar = $cookie_jar;
  }


  public function __construct() {
    $this->_key = 'cnil' . md5(BASE_URL);
    $this->_session = new Zend_Session_Namespace($this->_key);
    if (isset($_COOKIE[$this->_key]))
      $this->_session->seen = true;
  }


  public function trackConsent() {
    if ($this->_session->seen)
      return;

    $this->_session->seen = true;
    $this->_setConsentCookie();
    $this->_displayMessage();
  }


  protected function _setConsentCookie() {
    $this->_getCookieJar()
         ->setcookie($this->_key,
                     '1',
                     $this->getTimeSource()->time() + (3600 * 24 * 30 *13));
  }


  protected function _displayMessage() {
64 65
    $read_more = Class_Url::absolute(['controller' => 'help',
                                      'action' => 'cookies']);
66
    Class_ScriptLoader::getInstance()
67
      ->notify($this->_('En poursuivant votre navigation sur ce site, vous acceptez l\'utilisation de cookies. <a href="'.$read_more.'">En savoir plus</a>'),
68 69 70 71
               false,
               10,
               'cnil_consent'
      );
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
  }


  protected function _getCookieJar() {
    return static::$_cookie_jar ?
      static::$_cookie_jar : new Class_Cnil_CookieJar();
  }
}



class Class_Cnil_CookieJar {
  public function setcookie() {
    call_user_func_array('setcookie', func_get_args());
  }
}