| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 | 
							- <?php
 
- //Cette fonction va generer une page quand on clique sur subscribe dans menu
 
- function subscribe_page(){
 
- 	global $_;
 
- 	if(!isset($_['module']) || $_['module'] !='subscribe') return;
 
- 	$page = !isset($_['page']) ? 'subscribe' : $_['page'];
 
- 	$page = str_replace('..','',$page);
 
- 	$file = __DIR__.SLASH.'page.'.$page.'.php';
 
- 	if(!file_exists($file)) throw new Exception("Page ".$page." inexistante");
 
- 	require_once($file);
 
- }
 
- //captcha simple
 
- function subscribe_captcha($code = null){
 
- 	//réponse captcha
 
- 	if(isset($code)){
 
- 		if($code == 'off'){
 
- 			unset($_SESSION['subscribe-captcha']);
 
- 			return;
 
- 		}
 
- 		if(!isset($_SESSION['subscribe-captcha'])) throw new Exception("Question anti-robot non initialisée");
 
- 		if($code != $_SESSION['subscribe-captcha']) throw new Exception("Réponse anti-robot invalide");
 
- 		return;
 
- 	}
 
- 	//question captcha
 
- 	$operators = array('+','-','*');
 
- 	$cssChars = array(
 
- 		'1'=>'<i class="boell"></i>',
 
- 		'un'=>'<i class="boell"></i>',
 
- 		'+'=>'<i class="lecoq"></i>',
 
- 		'plus'=>'<i class="lecoq"></i>',
 
- 		'-'=>'<i class="narboni"></i>',
 
- 		'moins'=>'<i class="narboni"></i>',
 
- 		'5'=>'<i class="carruesco"></i>'
 
- 	);
 
- 	$literalOperators = array('plus','moins','fois');
 
- 	$literalNumbers = array('zero','un','deux','trois','quatre','cinq','six','sept','huit','neuf','dix');
 
- 	$questionBefore = array('Quel est le résultat du calcul suivant : ','Combien font ','Calculer ', 'Trouvez le résultat de ');
 
- 	$first = mt_rand(0,10);
 
- 	$second = mt_rand(0,10);
 
- 	$html = $questionBefore[mt_rand(0,count($questionBefore)-1)];
 
- 	$html .= mt_rand(0,1) ? $literalNumbers[$first] : $first;
 
- 	$operator = $operators[mt_rand(0,2)];
 
- 	$literalOperator = $operator;
 
- 	$literalOperator = mt_rand(0,1) ? str_replace($operators,$literalOperators,$literalOperator) : $literalOperator;
 
- 	$html .= ' '.$literalOperator.' ';
 
- 	$html .= mt_rand(0,1) ? $literalNumbers[$second] : $second;
 
- 	$_SESSION['subscribe-captcha'] = $first;
 
- 	switch ($operator) {
 
- 		case '+': $_SESSION['subscribe-captcha']+= $second; break;
 
- 		case '-': $_SESSION['subscribe-captcha']-= $second; break;
 
- 		case '*': $_SESSION['subscribe-captcha']*= $second; break;
 
- 	}
 
- 	$htmlParts = array();
 
- 	foreach (explode(' ',$html) as $key => $word) {
 
- 		if(is_numeric($word) || strlen($word)<=1) {
 
- 			$htmlParts[] = $word;
 
- 			continue;
 
- 		}
 
- 		$wordParts = str_split($word,strlen($word)/(mt_rand(1,2)));
 
- 		foreach ($wordParts as $key=>$part) {
 
- 			if(mt_rand(0,10) > 7){
 
- 				$wordParts[$key] = str_replace(array_keys($cssChars), array_values($cssChars), $wordParts[$key]);
 
- 				continue;
 
- 			}
 
- 			$wordParts[$key] = subscribe_text_image($wordParts[$key],mt_rand(0,1));
 
- 		}
 
- 		$htmlParts[] = implode($wordParts);
 
- 	}
 
- 	return '<div class="subscribe-captcha-block">'.implode(' ',$htmlParts).'</div>';
 
- }
 
- function subscribe_text_image($text,$svg = false){
 
- 	if($svg){
 
- 		$width = mb_strlen($text)*8;
 
- 		return '<svg height="20" style="margin-top: 1.5px;" width="'.$width.'">
 
- 		  <text id="15 + 5 - 6 * 9" style="margin-top:5px;font-variant:normal;font-weight:normal;font-size:16px;font-family: \'subscribe-captcha\';-inkscape-font-specification:CourierNewPSMT;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" x="0" y="15">'.htmlentities($text).'</text>
 
- 		</svg>';
 
- 	}
 
- 	$width = mb_strlen($text)*8.5;
 
- 	ob_start();
 
- 	// Création de l'image
 
- 	$im = imagecreatetruecolor($width, 30);
 
- 	// Création de quelques couleurs
 
- 	$white = imagecolorallocate($im, 255, 255, 255);
 
- 	$black = imagecolorallocate($im, 33, 37, 41);
 
- 	imagefilledrectangle($im, 0, 0, 399, 29, $white);
 
- 	$font = __DIR__.SLASH.'font'.SLASH.'captcha.ttf';
 
- 	// Ajout du texte
 
- 	imagettftext($im, 13, 0, 0, 17, $black, $font, $text);
 
- 	imagepng($im);
 
- 	imagedestroy($im);
 
- 	$imgstream = ob_get_clean();
 
- 	return '<img style="width:'.$width .'px;height:30px;" src="data:image/png;base64,'.base64_encode($imgstream).'"/>';
 
- }
 
- //Fonction executée lors de l'activation du plugin
 
- function subscribe_install($id){
 
- 	if($id != 'fr.core.subscribe') return;
 
- 	Entity::install(__DIR__);
 
- 	/* LISTE DE VALEUR : Domaines blacklistés */
 
- 	if(!$list = Dictionary::bySlug('subscribe_domain_blacklist')){
 
- 		$list =  new Dictionary;
 
- 		$list->slug = 'subscribe_domain_blacklist';
 
- 		$list->label = "Domaines blacklistés à l'inscription";
 
- 		$list->parent = 0;
 
- 		$list->state = Dictionary::ACTIVE;
 
- 		$list->save();
 
- 	}
 
- 	/* LISTE DE VALEUR : Domaines whitelistés */
 
- 	if(!$list = Dictionary::bySlug('subscribe_domain_whitelist')){
 
- 		$list =  new Dictionary;
 
- 		$list->slug = 'subscribe_domain_whitelist';
 
- 		$list->label = "Domaines whitelistés à l'inscription";
 
- 		$list->parent = 0;
 
- 		$list->state = Dictionary::ACTIVE;
 
- 		$list->save();
 
- 	}
 
- }
 
- //Fonction executée lors de la désactivation du plugin
 
- function subscribe_uninstall($id){
 
- 	if($id != 'fr.core.subscribe') return;
 
- 	Entity::uninstall(__DIR__);
 
- }
 
- //Déclaration des sections de droits du plugin
 
- Right::register("subscribe",array('label'=>"Gestion des droits sur le plugin subscribe"));
 
- //Comprends toutes les actions du plugin qui ne nécessitent pas de vue html
 
- require_once(__DIR__.SLASH.'action.php');
 
- function subscribe_menu_login(&$loginMenu){
 
- 	global $conf;
 
- 	if(!$conf->get('subscribe_login_link')) return;
 
- 	$loginMenu[] = array(
 
- 		'sort' => 1,
 
- 		'icon' => 'fas fa-sign-in-alt',
 
- 		'label' => "S'inscrire",
 
- 		'url' => 'index.php?module=subscribe',
 
- 		'custom' => '<a title="Inscription" class="btn btn-secondary btn-sm" href="index.php?module=subscribe">S\'inscrire</a>'
 
- 	);
 
- }
 
- //Déclaration du menu de réglages
 
- function subscribe_menu_setting(&$settingMenu){
 
- 	global $myUser;
 
- 	if(!$myUser->can('subscribe','configure')) return;
 
- 	$settingMenu[] = array(
 
- 		'sort' =>1,
 
- 		'url' => 'setting.php?section=global.subscribe',
 
- 		'icon' => 'fas fa-angle-right',
 
- 		'label' => 'Inscription'
 
- 	);
 
- }
 
- //Déclaration des pages de réglages
 
- function subscribe_content_setting(){
 
- 	global $_;
 
- 	if(file_exists(__DIR__.SLASH.'setting.'.$_['section'].'.php'))
 
- 		require_once(__DIR__.SLASH.'setting.'.$_['section'].'.php');
 
- }
 
- //Cron réalisé tous les jours pour supprimer
 
- //les comptes n'ayant validé leur inscription
 
- function subscribe_cron($time){
 
- 	global $_,$conf;
 
- 	if(date('H:i', $time)!='00:00' || empty($conf->get('subscribe_registered_expire'))) return;
 
- 	foreach(User::loadAll(array('state'=>'registered')) as $user){
 
- 		if($user->state!='registered' || (time()-$user->created) <= strtotime(intval($conf->get('subscribe_registered_expire')).' days', 0)) continue;
 
- 		User::deleteById($user->id);
 
- 	}
 
- }
 
- //Déclaration des settings de base
 
- Configuration::setting('subscribe',array(
 
-     "Général",
 
-     'subscribe_login_link' => array("label"=>"Lien d'inscription dans l'encart de login", "legend"=>"Afficher le lien d'inscription dans le menu déroulant de connexion","type"=>"boolean"),
 
-     'subscribe_short_login' => array("label"=>"Utiliser les identifiants courts","legend"=>"Tronquer l'email renseigné sans la partie @ pour générer l'identifiant","type"=>"boolean"),
 
-     'subscribe_firm' => array("label"=>"Établissement attribué par défaut","legend"=>"Établissement attribué automatiquement aux utilisateurs validés après inscription","type"=>"firm"),
 
-     'subscribe_rank' => array("label"=>"Rang attribué par défaut","legend"=>"Rang attribué automatiquement aux utilisateurs validés après inscription","type"=>"rank"),
 
-     'subscribe_registered_expire' => array("label"=>"Expiration comptes inscrits non-validés","legend"=>"Délai en jours avant suppression des comptes n'ayant pas confirmé leur inscription","type"=>"integer", "placeholder"=>"eg. 28"),
 
-     "Vérification",
 
-     'subscribe_enable_captcha' => array("label"=>"Activer le captcha","legend"=>"Oblige les utilisateurs à renseigner la validation anti-robot pour s'inscrire","type"=>"boolean"),
 
-     'subscribe_disable_paste' => array("label"=>"Désactiver le copier/coller","legend"=>"Si coché, oblige les utilisateurs à re-taper leur adresse mail pour la confirmation","type"=>"boolean"),
 
-     'subscribe_mail_expire' => array("label"=>"Expiration lien d'inscription","legend"=>"Délai en jours avant expiration du lien d'inscription envoyé par mail (0 pour aucune expiration)","type"=>"integer", "placeholder"=>"eg. 06"),
 
-     'subscribe_reply_mail' => array("label"=>"Adresse mail expéditeur","legend"=>"L'adresse mail indiqué comme expéditeur du mail d'inscription","type"=>"mail", "placeholder"=>"eg. no-reply@core.fr"),
 
-     'subscribe_disable_mail' => array("label"=>"Désactiver la vérification par e-mail","legend"=>"<strong class=\"text-danger\">(Déconseillé)</strong> Si coché, aucun mail de confirmation d'inscription ne sera envoyé","type"=>"boolean"),
 
-     "Gestion des domaines",
 
-     'subscribe_enable_blacklist' => array("label"=>"Activer la liste noire des domaines","legend"=>"Empêche les domaines renseignés à l'inscription","type"=>"boolean"),
 
-     'subscribe_enable_whitelist' => array("label"=>"Activer la liste blanche des domaines","legend"=>"Autorise uniquement les domaines renseignés à l'inscription","type"=>"boolean"),
 
- ));
 
- //Déclation des assets
 
- Plugin::addCss("/css/main.css");
 
- Plugin::addJs("/js/main.js");
 
- //Mapping hook / fonctions
 
- Plugin::addHook("install", "subscribe_install");
 
- Plugin::addHook("uninstall", "subscribe_uninstall");
 
- Plugin::addHook("page", "subscribe_page");
 
- Plugin::addHook("menu_setting", "subscribe_menu_setting");
 
- Plugin::addHook("content_setting", "subscribe_content_setting");
 
- Plugin::addHook("menu_login", "subscribe_menu_login");
 
- Plugin::addHook("content_setting", "subscribe_content_setting");
 
- Plugin::addHook("cron", "subscribe_cron");
 
- ?>
 
 
  |