Sortie de PluXml 5.3
Stéphane
Member, Former PluXml Project Manager
dans Annonces officielles
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bon, ben y'a plus qu'à voir si tout fonctionne correctement...
Merci à l'équipe pour tout ce joli travail,
à plus,
Gzyg
Peut-on faire la mise à jour en conservant un ancien thème sans problème ?
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Je teste la nouvelle version dans les jours qui viennent
Pour ceux qui veulent conserver leurs thèmes, pensez à les enregistrer et à les renommer avant de faire la mise à jour car il y a un nouveau thème sur PluXml 5.3.
J'ai installé la mise à jour 5.3 pour mon site Web et tout s’est bien déroulé.
Aucun problème avec les plugins suivants (dernières versions) :
jquery, plxMyAllArchive, plxMyContact, plxMyPager, plxMyPrivateStatic, plxtoolbar.
UN GROS MERCI À TOUTE L'ÉQUIPE {)
Amicalement Den O:)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Est-ce que je peux effectuer une MAJ de la version 5.1.7 vers la 5.3 en utilisant la même procédure ?
(J'ai eu quelques soucis à vrai dire, heureusement que j'ai fait un backup avant). Est-ce que je dois d'abord passer à la version 5.2 avant de devoir passer à la version 5.3 ?
Edit: Pour donner un peu plus de détails, la mise à jour se fait, le blog fonctionne, mais l'espace administrateur du blog n'affiche rien du tout. Voici un screen shot de ce que j'ai:
Je suis censé avoir plein d'articles, il en est de même pour tous les autres liens du menu administrateur.
Merci !
Voilà c'est fait pour mes deux sites. A-priori pas de problèmes. A vérifier pour l'utiliation des divers plugins.
Juste un petit bug quand meme.
Sur ma ressource ici, les liens pour télécharger ne fonctionnent plus.
Cordialement
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Mise à jour ok pour moi. Tous mes plugins semblent fonctionner nickel. Bravo encore !!!
Attention Stéphane, on s'habitue vite à l'excellence, encore merci pour tout le travail effectué :cool:
MAJ faite sans problème en supprimant tous sauf /data et /theme
Aucun problème avec mes plugins MyPluginDownloader MyContact et plxEditor
Merci pour vos remontées. Si vous rencontrez des erreurs aveec le nouveau thème, n'hésitez pas à les poster sur ce fil.
[del]J'avais précédemment posté un message disant que ça ne fonctionnait pas depuis le constructeur, mais en fait c'est pareil depuis n'importe quelle autre méthode.[/del]
[del]Pourriez-vous éclairer ma lanterne s'il vous plait ?[/del]
Bon, je suis un gros boulet et je vous présente toutes mes confuses. Ça marche nickel. J'ai fait une grosse erreur de syntaxe. Encore toutes mes excuses pour le dérangement... :8 :8 :8
Hum. Marche bien chez moi. Tu peux faire un zip de ton soucis qu'on regarde jerry ?
Autre exemple : dans le plugin adhésion (que je dois revoir je te l'accorde), j'essaie de vérifier que gutuma est activé. Autrefois dans le constructeur, j'appelais une instance de $plxMotor et je vérifiais le tableau des plugins. Et maintenant, plus moyen, même si je déporte le tout dans une autre méthode que le constructeur. Apache me dit que l'objet n'existe pas.
Edit : pour l'url, je l'ai affichée via plxUtils::getRacine(); mais ça ne résout pas le problème de l'appel de $plxShow...
Ci-dessous, le fichier en question et la méthode dans laquelle ça ne fonctionne pas (ligne 160) :
[code]<?php
/**
* Plugin adhesion
*
* @version 1.5
* @date 07/10/2013
* @author Stephane F, Cyril MAGUIRE
**/
class adhesion extends plxPlugin {
public $plxGlob_adherents; # Obj des données concernant les fichiers adhérents
public $plxRecord_adherents; # Obj des données concernant les adhérents
public $oldAdherentsList = array(); # Tableau des données des adhérents, extraites de la liste générée par l'ancienne version du plugin
public $adherentsList = array(); # Tableau des index des adhérents
public $listsDiff = array(); # Tableau des listes de diffusion
public $listDiff = array(); # La liste de diffusion des adhérents
public $msg = FALSE;
public $ok = FALSE;
//Paramètres des listes de diffusion Gutuma
public $isGutumaActivated=false;
public $GutumaListsDir;
private $id;
private $name;
private $private;
private $addresses;
private $size;
// Paramètres de connexion
private $ban = array();
private $session_domain;
/**
* Constructeur de la classe
*
* @param default_lang langue par défaut
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function __construct($default_lang) {
# appel du constructeur de la classe plxPlugin (obligatoire)
parent::__construct($default_lang);
# droits pour accèder à la page config.php du plugin
$this->setConfigProfil(PROFIL_ADMIN);
$this->setAdminProfil(PROFIL_ADMIN, PROFIL_MANAGER);
# déclaration des hooks
$this->addHook('AdminPrepend', 'AdminPrepend');
$this->addHook('AdminTopEndHead', 'AdminTopEndHead');
$this->addHook('AdminTopBottom', 'AdminTopBottom');
$this->addHook('AdhesionUsersTop', 'AdhesionUsersTop');
$this->addHook('AdhesionUsersTopV', 'AdhesionUsersTopV');
$this->addHook('AdhesionUsersFoot', 'AdhesionUsersFoot');
$this->addHook('plxMotorConstructLoadPlugins', 'plxMotorConstructLoadPlugins');
$this->addHook('plxMotorConstruct', 'plxMotorConstruct');
if(plxUtils::checkMail($this->getParam('email'))) {
$this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
$this->addHook('plxShowConstruct', 'plxShowConstruct');
$this->addHook('plxShowStaticListEnd', 'plxShowStaticListEnd');
$this->addHook('plxShowPageTitle', 'plxShowPageTitle');
$this->addHook('ThemeEndHead', 'ThemeEndHead');
$this->addHook('ThemeEndBody', 'ThemeEndBody');
$this->addHook('SitemapStatics', 'SitemapStatics');
# Déclarations des hooks pour sécuriser les articles
$this->addHook('AdminArticleSidebar','AdminArticleSidebar');
$this->addHook('plxAdminEditArticleXml','plxAdminEditArticleXml');
$this->addHook('plxMotorParseArticle','plxMotorParseArticle');
$this->addHook('plxMotorPreChauffageEnd', 'plxMotorPreChauffageEnd');
$this->addHook('plxMotorDemarrageEnd', 'plxMotorDemarrageEnd');
$this->addHook('showIconIfLock','showIconIfLock');
$this->addHook('AdminIndexTop', 'AdminIndexTop');
$this->addHook('AdminIndexFoot', 'AdminIndexFoot');
$this->addHook('plxFeedPreChauffageEnd','plxFeedPreChauffageEnd');
$this->addHook('plxFeedDemarrageEnd','plxFeedDemarrageEnd');
$this->addHook('AdminCategory','AdminCategory');
$this->addHook('plxAdminEditCategoriesUpdate','plxAdminEditCategoriesUpdate');
$this->addHook('plxAdminEditCategoriesXml','plxAdminEditCategoriesXml');
$this->addHook('plxAdminEditCategorie','plxAdminEditCategorie');
$this->addHook('plxMotorGetCategories','plxMotorGetCategories');
$this->addHook('loginLogout','loginLogout');
$this->addHook('AdminCategoriesTop','AdminCategoriesTop');
$this->addHook('AdminCategoriesFoot','AdminCategoriesFoot');
# déclaration des hooks pour sécuriser les pages statiques
$this->addHook('AdminStatic', 'AdminStatic');
$this->addHook('plxAdminEditStatique', 'plxAdminEditStatique');
$this->addHook('plxAdminEditStatiquesXml', 'plxAdminEditStatiquesXml');
$this->addHook('plxMotorGetStatiques', 'plxMotorGetStatiques');
$this->addHook('AdminStaticsTop', 'AdminStaticsTop');
$this->addHook('AdminStaticsFoot', 'AdminStaticsFoot');
$this->addHook('plxShowConstruct', 'plxShowConstructStat');
$this->addHook('plxMotorPreChauffageEnd', 'plxMotorPreChauffageEndStat');
$this->addHook('plxMotorDemarrageEnd', 'plxMotorDemarrageEndStat');
$this->addHook('plxShowPageTitle', 'plxShowPageTitleStat');
$this->addHook('ThemeEndHead', 'ThemeEndHeadStat');
}
//On vérifie que Gutuma soit activée
$this->isGutumaActivated = $this->isGutumaActivated();
# On récupère l'ensemble des adhérents
$this->plxGlob_adherents = plxGlob::getInstance(PLX_ROOT.$this->getParam('adherents').'adhesions',false,true,'arts');
$this->adherentsList = array_flip(array_keys($this->plxGlob_adherents->aFiles));
$htaccess = "Allow from none\n";
$htaccess .= "Deny from all\n";
$htaccess .= "<Files *.php>\n";
$htaccess .= "order allow,deny\n";
$htaccess .= "deny from all\n";
$htaccess .= "</Files>\n";
$htaccess .= "Options -Indexes\n";
if ($this->isGutumaActivated) {
# Emplacement des listes de diffusion de Gutuma
$this->GutumaListsDir = $this->gutumaListDir();
# Récupération des listes des anciennes versions de Gutuma
if (is_dir(PLX_PLUGINS.'gutuma/news/lists')) {
@rename(PLX_PLUGINS.'gutuma/news/lists', $this->GutumaListsDir);
touch($this->GutumaListsDir.'/.htaccess');
file_put_contents($this->GutumaListsDir.'/.htaccess', $htaccess);
}
# Récupération de la config des anciennes versions de Gutuma
if (is_file(PLX_PLUGINS.'gutuma/news/inc/config.php')) {
@mkdir($this->GutumaListsDir.'/inc');
@rename(PLX_PLUGINS.'gutuma/news/inc/config.php', $this->GutumaListsDir.'/inc/config.php');
touch($this->GutumaListsDir.'/inc/.htaccess');
file_put_contents($this->GutumaListsDir.'/inc/.htaccess', $htaccess);
}
# On récupère les paramètres de la liste de diffusion
$list = $this->getAllGutumaLists(TRUE);
$k = 0;
foreach ($list as $key => $value) {
if ($value == 'adherents') {
$k = $key;
}
}
if (isset($list[$k])) {
$this->id = $list[$k];
$this->name = $list[$k];
$this->private = $list[$k];
$this->addresses = $list[$k];
$this->listDiff = $list[$k];
}
}
if ($this->id != ''){
$this->ok = TRUE;
}
}
private function isGutumaActivated() {
$plxMotor = plxMotor::getInstance();echo '<pre style="border: 1px solid #e3af43; background-color: #f8edd5; padding: 10px; overflow: auto;color:#111;">'; print_r($plxMotor);exit('</pre>');
if (isset($plxMotor->plxPlugins->aPlugins))
return $plxMotor->plxPlugins->aPlugins;
else
return false;
}
private function gutumaListDir() {
$plxMotor = plxMotor::getInstance();
if ($plxMotor->plxPlugins->aPlugins->listsDir != null)
return $plxMotor->plxPlugins->aPlugins->listsDir;
else
return '';//PLX_ROOT.'data/gutuma';
}
///////////////////////////////////////////////////////////
//
// Méthodes permettant la mise en place du plugin
//
//////////////////////////////////////////////////////////
public function plxMotorConstructLoadPlugins() {
$string = "
\$this->plxGlob_adherents = plxGlob::getInstance(PLX_ROOT.'".$this->getParam('adherents')."adhesions',false,true,'arts');
\$this->adherentsList = array_flip(array_keys(\$this->plxGlob_adherents->aFiles));";
echo "<?php".$string."?>";
}
public function plxMotorConstruct() {
$string = "
# Récupération des données
\$this->plxPlugins->aPlugins->getAdherents('/^[0-9]{5}.(.[a-z-]+){2}.[0-9]{10}.xml$/');";
echo "<?php".$string."?>";
}
/**
* Méthode qui préconfigure le plugin
*
* @return stdio
* @author Cyril MAGUIRE
**/
public function onActivate() {
$plxAdmin = plxAdmin::getInstance();
#Paramètres par défaut
if(!is_file($this->plug)) {
$this->setParam('adherents', 'data/configuration/', 'cdata');
$this->setParam('mnuName', 'Devenir membre', 'string');
$this->setParam('domaine_asso', plxUtils::strCheck($plxAdmin->aConf), 'string');
$this->saveParams();
}
if (!is_dir(PLX_ROOT.$this->getParam('adherents').'adhesions')) {
@mkdir(PLX_ROOT.$this->getParam('adherents').'adhesions');
}
# Si le fichier unique des adhérents existe (ancienne version), on le découpe
if (is_file(PLX_ROOT.$this->getParam('adherents').'plugin.adhesion.adherents.xml')) {
$this->genNewFilesFormOldData(PLX_ROOT.$this->getParam('adherents').'plugin.adhesion.adherents.xml');
}
if (isset($plxAdmin->plxPlugins->aPlugins["gutuma"])) {
$listeDeDiffusion = plxUtils::strCheck($plxAdmin->aConf);
if ($listeDeDiffusion == '') {
$listeDeDiffusion = 'Newsletters';
}
# On crée la liste de diffusion si elle n'existe pas
if ($this->name != $listeDeDiffusion) {
$this->listDiff = $this->createGutumaList($listeDeDiffusion);
}
}
//Si les plugins lockArticles et plxMyPrivateStatic sont activés, on les désactive
if (isset($plxAdmin->plxPlugins->aPlugins["lockArticles"])) {
$content ='deactivate';
$content = array('lockArticles'=>'on');
$content = 'on';
$plxAdmin->plxPlugins->saveConfig($content);
}
if (isset($plxAdmin->plxPlugins->aPlugins["plxMyPrivateStatic"])) {
$content ='deactivate';
$content = array('plxMyPrivateStatic'=>'on');
$content = 'on';
$plxAdmin->plxPlugins->saveConfig($content);
}
}
/**
* Méthode qui récupère les infos enregistrées dans le fichier data/configuration/plugin.adhesion.adherents.xml
*
* @param $filename ressource le chemin vers le fichier des adhérents
* @return array
*
* @author Cyril MAGUIRE
*/
private function getAdherentsFromOldFile($filename) {
if(!is_file($filename)) return;
# Mise en place du parseur XML
$data = implode('',file($filename));
$parser = xml_parser_create(PLX_CHARSET);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
xml_parse_into_struct($parser,$data,$values,$iTags);
xml_parser_free($parser);
if(isset($iTags) AND isset($iTags)) {
$nb = sizeof($iTags);
$size=ceil(sizeof($iTags)/$nb);
for($i=0;$i<$nb;$i++) {
$attributes = $values[$iTags[$i*$size]];
$number = $attributes;
# Recuperation du nom
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du prenom
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'adresse 1
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'adresse 2
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du code postal
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la ville
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du téléphone
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du mail
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du choix quant à l'adhésion
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du choix pour le mailing
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du statut de l'adhérent
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la date de première adhésion
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la date de validation de l'adhésion
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la chaine salt de l'adhérent
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du mot de passe cripté de l'adhérent
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la clé
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation des chaines aléatoires
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
if ($this->getParam('typeAnnuaire') == 'professionnel') {
# Recuperation de l'activité
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'établissement
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du service
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du poste
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
}
if ($this->getParam('showAnnuaire') == 'on') {
# Recuperation du choix sur le partage des coordonnées
$this->oldAdherentsList[$number]=plxUtils::getValue($values[$iTags[$i]]);
}
}
}
//tri du tableau par ordre alphabétique des noms
$tmp = array();
foreach($this->oldAdherentsList as $id=>$v){
$tmp[$v["nom"]] = array(
'id'=>$id,
'details'=>$v
);}
ksort($tmp);
$this->oldAdherentsList = array();
foreach ($tmp as $nom => $value) {
$this->oldAdherentsList[$value] = $value;
}
return $this->oldAdherentsList;
}
private function genNewFilesFormOldData($filename) {
$this->getAdherentsFromOldFile($filename);
foreach ($this->oldAdherentsList as $id => $adherent) {
$fileName = $id.'.'.plxUtils::title2filename($adherent.'.'.$adherent).'.'.(empty($adherent)? time() : $adherent).'.xml';
# On génére le fichier XML
$xml = "<?xml version=\"1.0\" encoding=\"".PLX_CHARSET."\"?>\n";
$xml .= "<document>\n";
$xml .= "\t<adherent number=\"".$id."\">\n\t\t";
$xml .= "<nom><![CDATA[".plxUtils::cdataCheck($adherent['nom'])."]]></nom>\n\t\t";
$xml .= "<prenom><![CDATA[".plxUtils::cdataCheck($adherent['prenom'])."]]></prenom>\n\t\t";
$xml .= "<adresse1><![CDATA[".plxUtils::cdataCheck($adherent['adresse1'])."]]></adresse1>\n\t\t";
$xml .= "<adresse2><![CDATA[".plxUtils::cdataCheck($adherent['adresse2'])."]]></adresse2>\n\t\t";
$xml .= "<cp><![CDATA[".plxUtils::cdataCheck($adherent['cp'])."]]></cp>\n\t\t";
$xml .= "<ville><![CDATA[".plxUtils::cdataCheck($adherent['ville'])."]]></ville>\n\t\t";
$xml .= "<tel><![CDATA[".plxUtils::cdataCheck($adherent['tel'])."]]></tel>\n\t\t";
$xml .= "<mail><![CDATA[".plxUtils::cdataCheck($adherent['mail'])."]]></mail>\n\t\t";
$xml .= "<choix><![CDATA[".plxUtils::cdataCheck($adherent['choix'])."]]></choix>\n\t\t";
$xml .= "<mailing><![CDATA[".plxUtils::cdataCheck($adherent['mailing'])."]]></mailing>\n\t\t";
$xml .= "<salt><![CDATA[".plxUtils::cdataCheck($adherent['salt'])."]]></salt>\n\t\t";
$xml .= "<password><![CDATA[".plxUtils::cdataCheck($adherent['password'])."]]></password>\n\t\t";
$xml .= "<rand1><![CDATA[".plxUtils::cdataCheck($adherent['rand1'])."]]></rand1>\n\t\t";
$xml .= "<rand2><![CDATA[".plxUtils::cdataCheck($adherent['rand2'])."]]></rand2>\n\t\t";
$xml .= "<cle><![CDATA[".plxUtils::cdataCheck($adherent['cle'])."]]></cle>\n\t\t";
$xml .= "<validation>".plxUtils::cdataCheck($adherent)."</validation>\n\t\t";
$xml .= "<firstDate>".plxUtils::cdataCheck($adherent)."</firstDate>\n\t\t";
$xml .= "<date>".plxUtils::cdataCheck($adherent)."</date>\n\t\t";
if ($this->getParam('typeAnnuaire') == 'professionnel') {
$xml .= "<activite><![CDATA[".plxUtils::cdataCheck($adherent['activite'])."]]></activite>\n\t\t";
$xml .= "<etablissement><![CDATA[".plxUtils::cdataCheck($adherent['etablissement'])."]]></etablissement>\n\t\t";
$xml .= "<service><![CDATA[".plxUtils::cdataCheck($adherent['service'])."]]></service>\n\t\t";
$xml .= "<tel_office><![CDATA[".plxUtils::cdataCheck($adherent['tel_office'])."]]></tel_office>\n\t";
}
if ($this->getParam('showAnnuaire') == 'on') {
$xml .= "\t<coordonnees><![CDATA[".plxUtils::cdataCheck($adherent['coordonnees'])."]]></coordonnees>\n\t";
}
$xml .= "</adherent>\n";
$xml .= "</document>";
# On écrit le fichier
if(!plxUtils::write($xml, PLX_ROOT.$this->getParam('adherents').'adhesions/'.$fileName)) {
$_SESSION = $this->getLang('L_ERR_FILE_ADHERENTS').'<br/>' ;
break;
}
}
}
/**
* Méthode de traitement du hook plxShowConstruct
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function plxShowConstruct() {
# infos sur la page statique
$string = "
if(\$this->plxMotor->mode=='adhesion') {
\$array = array();
\$array[\$this->plxMotor->cible] = array(
'name' => '".$this->getParam('mnuName')."',
'menu' => '',
'url' => 'adhesion.html',
'readable' => 1,
'active' => 1,
'group' => ''
);
\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);
}
if(\$this->plxMotor->mode=='adherer') {
\$array = array();
\$array[\$this->plxMotor->cible] = array(
'name' => '".$this->getParam('mnuAdherer')."',
'menu' => '',
'url' => 'adherer.html',
'readable' => 1,
'active' => 1,
'group' => ''
);
\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);
}
if(\$this->plxMotor->mode=='forgetmypass') {
\$array = array();
\$array[\$this->plxMotor->cible] = array(
'name' => '".$this->getParam('mnuForgetPass')."',
'menu' => '',
'url' => 'forgetmypass.html',
'readable' => 1,
'active' => 1,
'group' => ''
);
\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);
}
if(\$this->plxMotor->mode=='annuaire') {
\$array = array();
\$array[\$this->plxMotor->cible] = array(
'name' => '".$this->getParam('mnuAnnuaire')."',
'menu' => '',
'url' => 'annuaire.html',
'readable' => 1,
'active' => 1,
'group' => ''
);
\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);
}
if(\$this->plxMotor->mode=='myaccount') {
\$array = array();
\$array[\$this->plxMotor->cible] = array(
'name' => '".$this->getParam('mnuMyAccount')."',
'menu' => '',
'url' => 'myaccount.html',
'readable' => 1,
'active' => 1,
'group' => ''
);
\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);
}";
echo "<?php ".$string." ?>";
}
/**
* Méthode de traitement du hook plxMotorPreChauffageBegin
* 1) On met à jour la liste des adhérents, en fonction de la date de leur inscription, dès qu'une page publique est affichée
* 2) On utilise une page statique pour afficher le formulaire d'adhésion
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function plxMotorPreChauffageBegin() {
$content = array();//echo strtotime("20 October 2011");exit();
foreach ($this->plxRecord_adherents->result as $i => $value) {
if ($value == 1) {
if ($this->getParam('annee') == 'civile') {
$datetimeOld = date('Y',$value);
//(60*60*24*365) = 31536000 secondes soit 1 an
$datetimeNew = strtotime('01 January '.($datetimeOld+1).' 00:00:01' );
}
if ($this->getParam('annee') == 'entiere') {
$datetimeOld = $value;
//(60*60*24*365) = 31536000 secondes soit 1 an
$datetimeNew = $datetimeOld+365*24*60*60;
}
if ( $datetimeNew < time() ){
foreach ($value as $key => $v) {
$content[$key.'_'.$value['id']] = $v;
}
$content] = 0;
$content = array($value);
$this->editAdherentslist($content,$value,TRUE);
}
}
}
$template = $this->getParam('template')==''?'static.php':$this->getParam('template');
$string = "
if(\$this->get && preg_match('/^adhesion\/?/',\$this->get)) {
\$this->mode = 'adhesion';
\$this->cible = '../../plugins/adhesion/form';
\$this->template = '".$template."';
return TRUE;
}
if(\$this->get && preg_match('/^adherer\/?/',\$this->get)) {
\$this->mode = 'adherer';
\$this->cible = '../../plugins/adhesion/form';
\$this->template = '".$template."';
return TRUE;
}
if(\$this->get && preg_match('/^myaccount\/?/',\$this->get)) {
\$this->mode = 'myaccount';
\$this->cible = '../../plugins/adhesion/form';
\$this->template = '".$template."';
return TRUE;
}
if(\$this->get && preg_match('/^forgetmypass\/?/',\$this->get)) {
\$this->mode = 'forgetmypass';
\$this->cible = '../../plugins/adhesion/form';
\$this->template = '".$template."';
return TRUE;
}
if(\$this->get && preg_match('/^annuaire\/?/',\$this->get)) {
\$this->mode = 'annuaire';
\$this->cible = '../../plugins/adhesion/form';
\$this->template = '".$template."';
return TRUE;
}
";
echo "<?php ".$string." ?>";
}
/**
* Méthode de traitement du hook plxShowStaticListEnd
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function plxShowStaticListEnd() {
$plxMotor = plxMotor::getInstance();
echo "<?php \$class = (\$this->plxMotor->mode=='adhesion' || \$this->plxMotor->mode=='adherer' || \$this->plxMotor->mode=='annuaire')?'active':'noactive'; ?>";
echo "<?php \$class1 = \$this->plxMotor->mode=='adhesion'?'active':'noactive'; ?>";
echo "<?php \$class2 = \$this->plxMotor->mode=='adherer'?'active':'noactive'; ?>";
echo "<?php \$class3 = \$this->plxMotor->mode=='annuaire'?'active':'noactive'; ?>";
# ajout du menu pour accèder à la page d'adhesion si l'utilisateur n'est pas connecté
if($this->getParam('mnuDisplay') && !isset($_SESSION)) {
echo ($this->getParam('showAnnuaire') == 'on' && $this->getParam('typeAnnuaire') == 'professionnel') ? "<?php \$annuaire = '<li class=\"'.\$class3.'\"><a href=\"'.\$this->plxMotor->urlRewrite('?annuaire.html').'\"><span>".$this->getParam('mnuAnnuaire')."</span></a></li>';?>" : "<?php \$annuaire = '';?>";
echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li class=\"page_item '.\$class.'\"><a href=\"'.\$this->plxMotor->urlRewrite('?adhesion.html').'\">".$this->getParam('mnuName')."</a><ul><li class=\"'.\$class2.'\"><a href=\"'.\$this->plxMotor->urlRewrite('?adherer.html').'\"><span>".$this->getParam('mnuAdherer')."</span></a></li><li class=\"'.\$class1.'\"><a href=\"'.\$this->plxMotor->urlRewrite('?adhesion.html').'\"><span>".$this->getParam('mnuName')."</span></a></li>'.\$annuaire.'</ul></li>'); ?>";
} elseif ($this->getParam('mnuDisplay') && isset($_SESSION)) {//L'utilisateur est connecté
echo ($this->getParam('showAnnuaire') == 'on' && $this->getParam('typeAnnuaire') == 'professionnel') ? "<?php \$annuaire = '<li class=\"'.\$class3.'\"><a href=\"'.\$this->plxMotor->urlRewrite('?annuaire.html').'\"><span>".$this->getParam('mnuAnnuaire')."</span></a></li>';?>" : "<?php \$annuaire = '';?>";
echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, \$annuaire); ?>";
}
}
/**
* Méthode qui ajoute le fichier css dans le fichier header.php du thème
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function ThemeEndHead() {
echo "\t".'<link rel="stylesheet" type="text/css" href="'.PLX_PLUGINS.'adhesion/style.css" media="screen" />'."\n";
echo '
<style type="text/css">
#wall-e {
position:absolute;
left:-99999px;
}
</style>
';
}
/**
* Méthode qui renseigne le titre de la page dans la balise html <title>
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function plxShowPageTitle() {
echo '<?php
if($this->plxMotor->mode == "adhesion") {
echo plxUtils::strCheck($this->plxMotor->aConf["title"]." - '.$this->getParam('mnuName').'");
return TRUE;
}
?>';
}
/**
* Méthode qui référence la page de contact dans le sitemap
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function SitemapStatics() {
echo '<?php
echo "\n";
echo "\t<url>\n";
echo "\t\t<loc>".$plxMotor->urlRewrite("?adhesion")."</loc>\n";
echo "\t\t<changefreq>monthly</changefreq>\n";
echo "\t\t<priority>0.8</priority>\n";
echo "\t</url>\n";
?>';
}
/**
* Méthode permettant l'export de la liste des adhérents
*
* @return void
* @author Cyril MAGUIRE
*/
public function AdminPrepend() {
# Impression de la liste des adhérents
if (isset($_GET)) {
$plxMotor = plxMotor::getInstance();
$this->getAdherents('/^[0-9]{5}.(.[a-z-]+){2}.[0-9]{10}.xml$/');
# Inclusion des librairies de TBS
if (version_compare(PHP_VERSION,'5')<0) {
include_once 'opentbs/tbs_class.php'; // TinyButStrong template engine
} else {
include_once 'opentbs/tbs_class_php5.php'; // TinyButStrong template engine
}
if (($_GET == 'xls') ) {
include_once 'opentbs/tbs_plugin_excel.php'; // Excel plugin
} else {
include_once 'opentbs/tbs_plugin_opentbs.php'; // OpenTBS plugin
}
include_once 'print.php';
exit();
}
}
/**
* Méthode qui affiche la css du plugin dans la partie administration
*
* @author Cyril MAGUIRE, Stephane F
*/
public function AdminTopEndHead() {
echo '<link rel="stylesheet" type="text/css" href="'.PLX_PLUGINS.'adhesion/style.css" media="screen" />';
{?>
<script type="text/javascript">
/* <![CDATA[ */
if (typeof jQuery == 'undefined') {
document.write('<script type="text\/javascript" src="<?php echo PLX_PLUGINS ?>adhesion\/js\/jquery.min.js"><\/script>');
}
/* ]]> */
</script>
<?php
}
}
/**
* Méthode de traitement du hook AdhesionUserTop
*
* @return stdio
* @author Stephane F
**/
public function AdhesionUsersTop() {?>
<p style="text-align:right">
<?php $this->lang('L_LABEL_FIND') ?> :
<input type="text" id="txtFilter" name="txtFilter" />
<img style="display:none" id="imgDeleteFilter" src="<?php echo PLX_PLUGINS ?>adhesion/cancel.gif" alt="<?php $this->lang('L_LABEL_DELETE_FILTER') ?>" title="<?php $this->lang('L_LABEL_DELETE_FILTER') ?>" />
</p>
<?php
}
/**
* Méthode de traitement du hook AdhesionUserTop
*
* @return stdio
* @author Stephane F
**/
public function AdhesionUsersTopV() {?>
<p style="text-align:right">
<?php $this->lang('L_LABEL_FIND') ?> :
<input type="text" id="txtFilterV" name="txtFilterV" />
<img style="display:none" id="imgDeleteFilterV" src="<?php echo PLX_PLUGINS ?>adhesion/cancel.gif" alt="<?php $this->lang('L_LABEL_DELETE_FILTER') ?>" title="<?php $this->lang('L_LABEL_DELETE_FILTER') ?>" />
</p>
<?php
}
/**
* Méthode de traitement du hook AdminUsersFoot
*
* @return stdio
* @author Stephane F
**/
public function AdhesionUsersFoot() {?>
<script type="text/javascript">
/* <![CDATA[ */
$(document).ready(function(){
// reset the search when the cancel image is clicked
$('#imgDeleteFilter').click(function(){
$('#txtFilter').val("").keyup();
$('#imgDeleteFilter').hide();
});
$('#txtFilter').keyup(function(){
$('#imgDeleteFilter').show();
var s = $(this).val().toLowerCase().split(" ");
//show all rows.
$('#table>tbody>tr:hidden').show();
$.each(s, function(){
$("#table>tbody>tr:visible>.indexColumn:not(:contains('" + this + "'))").parent().hide();
});
});
$('#imgDeleteFilterV').click(function(){
$('#txtFilterV').val("").keyup();
$('#imgDeleteFilterV').hide();
});
$('#txtFilterV').keyup(function(){
$('#imgDeleteFilterV').show();
var s = $(this).val().toLowerCase().split(" ");
//show all rows.
$('#tableV>tbody>tr:hidden').show();
$.each(s, function(){
$("#tableV>tbody>tr:visible>.indexColumnV:not(:contains('" + this + "'))").parent().hide();
});
});
$('#table>tbody>tr:has(td)').each(function(){
// recuperation des valeurs des colonnes
if ( $(this).find("td:eq(1)").text() !== undefined ) {
var userid = $(this).find("td:eq(1)").text().substr(0,5);
}
if ( $(this).find("td:eq(2)>input[type='text']").val() !== undefined ) {
var username = $(this).find("td:eq(2)>input[type='text']").val().toLowerCase();
}
// ajout index de recherche
$('<td class="indexColumn"><\/td>').hide().text(userid+username).appendTo(this);
});
$('#tableV>tbody>tr:has(td)').each(function(){
// recuperation des valeurs des colonnes
if ( $(this).find("td:eq(1)").text() !== undefined ) {
var useridV = $(this).find("td:eq(1)").text().substr(0,5);
}
if ( $(this).find("td:eq(2)>input[type='text']").val() !== undefined ) {
var usernameV = $(this).find("td:eq(2)>input[type='text']").val().toLowerCase();
}
// ajout index de recherche
$('<td class="indexColumnV"><\/td>').hide().text(useridV+usernameV).appendTo(this);
});
});
/* ]]> */
</script>
<?php
}
/**
* Méthode qui affiche un message s'il y a un message à afficher
*
* @return stdio
* @author Stephane F, Cyril MAGUIRE
**/
public function AdminTopBottom() {
$string = '
$adhesion = $plxAdmin->plxPlugins->aPlugins["adhesion"];
echo $adhesion->msg;
if($adhesion->msg=="L_ADMIN_UPDATE_ADH") {
echo "<p class=\"success\">Plugin adhesion<br />'.$this->getLang("L_ADMIN_UPDATE_ADH").'</p>";
plxMsg::Display();
}';
if ($this->isGutumaActivated) {
$string .='if(!$adhesion->ok) {
echo "<p class=\"warning\">Plugin adhesion<br />'.$this->getLang("L_ERR_NO_LIST").'</p>";
plxMsg::Display();
}';
}
$string .='
if($adhesion->getParam("email")=="") {
echo "<p class=\"warning\">Plugin adhesion config<br />'.$this->getLang("L_ERR_EMAIL").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("nom_asso")=="") {
echo "<p class=\"warning\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_NAME_ASSO").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("adresse_asso")=="") {
echo "<p class=\"warning\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_ADDRESS_ASSO").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("adherents")=="") {
echo "<p class=\"warning\">Plugin adhesion<br />'.$this->getLang("L_ERR_FILE_ADHERENTS").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("subject")==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_SUBJECT\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_SUBJECT").'</p>";
plxMsg::Display();
}
if(trim(strip_tags(htmlspecialchars_decode($adhesion->getParam("desc_adhesion"))))==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_DESC\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_DESC").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("validation_subject")==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_VAL_SUB\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_VAL_SUBJECT").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("devalidation_subject")==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_DEVAL_SUB\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_DEVAL_SUBJECT").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("thankyou")==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_THANKYOU\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_THANKYOU").'</p>";
plxMsg::Display();
}
if($adhesion->getParam("subject_password")==str_replace("\'","’",$adhesion->getLang(\'L_DEFAULT_SUBJECT_PASS\'))) {
echo "<p class=\"notice\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_PASS").'</p>";
plxMsg::Display();
}
if (!is_dir(PLX_ROOT.$adhesion->getParam("adherents")."adhesions")) {
echo "<p class=\"warning\">Plugin adhesion config<br />'.$this->getLang("L_WARNING_NO_DIRECTORY").'</p>";
plxMsg::Display();
}';
echo '<?php '.$string.' ?>';
}
/**
* Méthode qui inverse la position des lettres composant un email afin d'éviter les spams
*
* @param email string l'email à obfusquer
* @return string
*
* @author Cyril MAGUIRE
*/
public function badEmail($email) {
$longueur = strlen(trim($email));
for ($i=1; $i < $longueur+1 ; $i++) {
$tmp[$i] = $email[$longueur-$i];
}
$email = implode('', $tmp);
return '<span class="baddirection">'.$email.'</span>';
}
/**
* Méthode d'envoi de mail
*
* @param name string Nom de l'expéditeur
* @param from string Email de l'expéditeur
* @param to array/string Adresse(s) du(des) destinataires(s)
* @param subject string Objet du mail
* @param body string Contenu du mail
* @param contentType string Format du mail : txt ou html
* @param cc array Les destinataires en copie
* @param bcc string Les destinataires en copie
* @return boolean renvoie FAUX en cas d'erreur d'envoi
* @author Cyril MAGUIRE
**/
public function sendEmail($name, $from, $to, $subject, $body, $contentType="html", $cc=FALSE, $bcc=FALSE) {
$eBody = "<html><head><title>'.$subject.'</title></head><body style=\"margin:10px;\">".$body;
$eBody .= "
<br />";
$eBody .= $this->getParam('nom_asso')."</body></html>";
if(is_array($to))
$to = implode(', ', $to);
if(is_array($cc))
$cc = implode(', ', $cc);
if(is_array($bcc))
$bcc = implode(', ', $bcc);
$headers = "From: ".$name." <".$this->getParam('email').">\r\n";
$headers .= "Reply-To: no-reply@".$this->getParam('domaine_asso')."\r\n";
$headers .= 'MIME-Version: 1.0'."\r\n";
// Content-Type
if($contentType == 'html')
$headers .= 'Content-type: text/html; charset="'.PLX_CHARSET.'"'."\r\n";
else
$headers .= 'Content-type: text/plain; charset="'.PLX_CHARSET.'"'."\r\n";
$headers .= 'Content-transfer-encoding: 8bit'."\r\n";
if($cc != "")
$headers .= 'Cc: '.$cc."\r\n";
if($bcc != "")
$headers .= 'Bcc: '.$bcc."\r\n";
if (mail($to, $subject, $eBody, $headers) ){
return TRUE;
} else {
return FALSE;
}
}
/**
* Méthode permettant de mettre en forme le mail de notification à l'administrateur
*
* @param $nom string nom de l'adhérent
* @param $prenom string prenom de l'adhérent
* @param $adresse1 string première partie de l'adhérent
* @param $adresse2 string deuxième partie de l'adhérent
* @param $cp numeric code postal de l'adhérent
* @param $ville string ville de l'adhérent
* @param $tel numeric téléphone de l'adhérent
* @param $mail string email de l'adhérent
* @param $choix string choix de l'adhérent quant à l'adhésion
* @param $mailing string choix de l'adhérent quant à l'envoi de mail par l'asso
* @param $pro array ensemble des caractéristiques professionnelles
*
* @return string
* @author Cyril MAGUIRE
*/
public function notification($nom,$prenom,$adresse1,$adresse2,$cp,$ville,$tel,$mail,$choix,$mailing,$pro=array()) {
return '
<table style="border:none;">
<thead>
<tr>
<th style="border:none;text-align:left;">Nom : '.$nom.'</th>
</tr>
<tr>
<th style="border:none;text-align:left;">Prénom : '.$prenom.'</th>
</tr>
</thead>
<tbody>
'.($this->getParam('typeAnnuaire') == 'professionnel' ?
'
<tr>
<td style="border:none;">Activité : '.$pro.'</td>
</tr>
<tr>
<td style="border:none;">Etablissement : '.$pro.'</td>
</tr>
<tr>
<td style="border:none;">Service : '.$pro.'</td>
</tr>
': '').'
<tr>
<td style="border:none;">Adresse : '.$adresse1.'</td>
</tr>
<tr>
<td style="border:none;">'.$adresse2.'</td>
</tr>
<tr>
<td style="border:none;">Code postal : '.$cp.'</td>
</tr>
<tr>
<td style="border:none;">Ville : '.$ville.'</td>
</tr>
<tr>
<td style="border:none;">Téléphone : '.$this->formatFrenchPhoneNumber($tel).'</td>
</tr>
'.($this->getParam('typeAnnuaire') == 'professionnel' ?
'
<tr>
<td style="border:none;">Poste : '.$this->formatFrenchPhoneNumber($pro).'</td>
</tr>
': '').'
<tr>
<td style="border:none;"> </td>
</tr>
<tr>
<td style="border:none;">Email : '.$mail.'</td>
</tr>
<tr>
<td style="border:none;">'.(($choix == 'adhesion') ? 'Souhaite devenir adhérent de l’Association '.$this->getParam('nom_asso') : ($choix == 'renouveler') ? 'Souhaite renouveler son adhésion' : 'Ne souhaite plus être membre de l’Association').'</td>
</tr>
'.($this->getParam('showAnnuaire') == 'on' ?
'
<tr>
<td style="border:none;">'.(($pro == 'rec') ? 'Accepte que ses coordonnées professionnelles figurent sur le site de l’association' : 'Refuse que ses coordonnées professionnelles figurent sur le site de l’association').'</td>
</tr>
': '').'
<tr>
<td style="border:none;">'.(($mailing == 'maillist') ? 'Accepte de recevoir par mail toute information concernant le site de '.$this->getParam('nom_asso') : 'Refuse de recevoir par mail toute information concernant le site de '.$this->getParam('nom_asso')).'</td>
</tr>
<tr>
<td style="border:none;">Envoyé à l’association le '.date('d/m/Y').'</td>
</tr>
</tbody>
</table>
';
}
/**
* Méthode qui affiche un message contenant les instructions à suivre pour régler son adhésion
*
* @return string
* @author Cyril MAGUIRE
*/
public function adresse() {
return '<p>Merci d\'établir votre règlement à l’ordre de : Association '.$this->getParam('nom_asso').' et de le retourner à l\'adresse suivante :</p>
<div style="padding-left:50px;">'.$this->getParam('adresse_asso').'</div>
<p>Dès que l’inscription sera enregistrée par le secrétariat de l\'Association, vous recevrez par E-mail votre confirmation d’inscription.</p>
<p style="font-size:80%"><strong>Si vous ne recevez aucun mail, pensez à vérifier régulièrement votre dossier <em>spam</em>.</strong></p>';
}
///////////////////////////////////////////////////////////
//
// Méthodes permettant la modification des listes de Gutuma
//
//////////////////////////////////////////////////////////
/**
* Checks the ending of the specified string
* @param string $haystack The string to check
* @param string $needle The ending to check for
* @return bool TRUE if the string ends with the given string, else FALSE
*/
public function strEnds($haystack, $needle) {
$ending = substr($haystack, strlen($haystack) - strlen($needle));
return $ending === $needle;
}
/**
* Loads all of the lists
* @param bool $load_addresses TRUE if lists addresses should be loaded (default is FALSE)
* @param bool $inc_private TRUE if private lists should included (default is TRUE)
* @return mixed Array of lists or FALSE if an error occured
*/
public function getAllGutumaLists($load_addresses = FALSE, $inc_private = TRUE){
$lists = array();
if (!$this->isGutumaActivated) return $lists;
if ($dh = @opendir(realpath(rtrim($this->GutumaListsDir,'/')))) {
while (($file = readdir($dh)) !== FALSE) {
if (!is_dir($file) && $this->strEnds($file, '.php')) {
$list = $this->getGutumaList(substr($file, 0, strlen($file - 4)), $load_addresses);
if ($inc_private || !$list->private)
$lists[] = $list;
}
}
closedir($dh);
}
return $lists;
}
/**
* Gets the list with the specified id
* @param int $id The list id
* @param bool $load_addresses TRUE is list addresses should be loaded (default FALSE)
* @return mixed The list or FALSE if an error occured
*/
public function getGutumaList($id, $load_addresses = FALSE){
$time_start = microtime();
$list = array();
if (!$this->isGutumaActivated) return $list;
// Open list file
$lh = @fopen(realpath(rtrim($this->GutumaListsDir,'/').'/'.$id.'.php'), 'r');
if ($lh == FALSE)
return FALSE;
// Read header from first line
$header = explode("|", fgetss($lh));
$list = $header[0];
$list = $header[1];
$list = (bool)$header[2];
$list = (int)$header[3];
// Read all address lines
if ($load_addresses) {
$addresses = array();
while (!feof($lh)) {
$address = trim(fgets($lh));
if (strlen($address) > 0)
$addresses[] = $address;
}
$list = $addresses;
}
fclose($lh);
return $list;
}
/**
* Creates a new address list
* @param string $name The list name
* @param bool $private TRUE if the list should be private (default is FALSE)
* @param array $addresses
* @return mixed The new list if it was successfully created, else FALSE
*/
public function createGutumaList($name, $private = FALSE, $addresses = NULL){
if (!$this->isGutumaActivated) return true;
if ($name == '' || preg_match('[^a-zA-Z0-9 \-]', $name))
return FALSE;
// Demo mode check for number of addresses
if (isset($addresses) && count($addresses) >= 100)
return FALSE;
// Check for duplicate name
$all_lists = $this->listsDiff;
foreach ($all_lists as $l) {
if (strcasecmp($l->name, $name) == 0)
return FALSE;
}
// Demo mode check for number of lists
if (count($all_lists) >= 100)
return FALSE;
$this->id = time();
$this->name = $name;
$this->private = $private;
$this->addresses = isset($addresses) ? $addresses : array();
// Save the list
if (!$this->updateGutumaList()){
return FALSE;
}
return $this;
}
/**
* Adds the specified address to this list
* @param string $address The address to add
* @param bool $update TRUE if list should be updated, else FALSE
* @return bool TRUE if the address was successfully added
*/
public function addAdressInGutumaList($address, $update){
if (!$this->isGutumaActivated) return true;
if (in_array($address, $this->addresses))
return FALSE;
if (strlen($address) > 320)
return FALSE;
if (count($this->addresses) >= 100)
return FALSE;
// Add and then sort addresses alphabetically
$this->addresses[] = $address;
natcasesort($this->addresses);
if ($update) {
if (!$this->updateGutumaList())
return FALSE;
}
return TRUE;
}
/**
* Updates this address list, i.e., saves any changes
* @return bool TRUE if operation was successful, else FALSE
*/
public function updateGutumaList() {
if (!$this->isGutumaActivated) return true;
$lh = @fopen(realpath(rtrim($this->GutumaListsDir,'/')).'/'.$this->id.'.php', 'w');
if ($lh == FALSE)
return FALSE;
fwrite($lh, "<?php die(); ?>".$this->id.'|'.$this->name.'|'.($this->private ? '1' : '0').'|'.count($this->addresses)."\n");
foreach ($this->addresses as $a)
fwrite($lh, $a."\n");
fclose($lh);
return TRUE;
}
/**
* Removes the specified address from this list
* @param string $address The address to remove
* @param bool $update TRUE if list should be updated, else FALSE
* @return bool TRUE if operation was successful, else FALSE
*/
public function removeAdressFromGutumaList($address, $update){
if (!$this->isGutumaActivated) return true;
// Create new address array minus the one being removed
$found = FALSE;
$newaddresses = array();
foreach ($this->addresses as $a) {
if ($address != $a)
$newaddresses[] = $a;
else
$found = TRUE;
}
if (!$found)
return FALSE;
$this->addresses = $newaddresses;
if ($update) {
if (!$this->updateGutumaList())
return FALSE;
}
return TRUE;
}
///////////////////////////////////////////////////////////
//
// Méthodes permettant la gestion des adhérents
//
//////////////////////////////////////////////////////////
/**
* Méthode qui selon le paramètre tri retourne sort ou rsort (tri PHP)
*
* @param tri asc ou desc
* @return string
* @author Stéphane F.
**/
protected function mapTri($tri) {
if($tri=='desc')
return 'rsort';
elseif($tri=='asc')
return 'sort';
elseif($tri=='alpha')
return 'alpha';
else
return 'rsort';
}
/**
* Méthode qui récupere la liste des articles
*
* @param publi before, after ou all => on récupère tous les fichiers (date) ?
* @return boolean vrai si articles trouvés, sinon faux
* @author Stéphane F
**/
public function getAdherents($motif) {
# On fait notre traitement sur notre tri
$ordre = $this->mapTri('asc');
# On recupere nos fichiers (tries) selon le motif, la pagination, la date de publication
if($aFiles = $this->plxGlob_adherents->query($motif,'',$ordre,0,false,'all')) {
# on mémorise le nombre total d'articles trouvés
foreach($aFiles as $k=>$v) # On parcourt tous les fichiers
$array[$k] = $this->parseAdherent(PLX_ROOT.$this->getParam('adherents').'adhesions/'.$v);
# On stocke les enregistrements dans un objet plxRecord
$this->plxRecord_adherents = new plxRecord($array);
return true;
}
else return false;
}
/**
* Méthode qui récupère les infos enregistrées dans le fichier xml d'un adhérent
*
* @param $filename ressource le chemin vers le fichier de l'adhérent
* @return array
*
* @author Cyril MAGUIRE
*/
public function parseAdherent($filename) {
if(!is_file($filename)) return;
# Mise en place du parseur XML
$data = implode('',file($filename));
$parser = xml_parser_create(PLX_CHARSET);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
xml_parse_into_struct($parser,$data,$values,$iTags);
xml_parser_free($parser);
if(isset($iTags) AND isset($iTags)) {
$nb = sizeof($iTags);
$size=ceil(sizeof($iTags)/$nb);
for($i=0;$i<$nb;$i++) {
$attributes = $values[$iTags[$i*$size]];
$adherent = $attributes;
# Recuperation du nom
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du prenom
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'adresse 1
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'adresse 2
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du code postal
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la ville
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du téléphone
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du mail
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du choix quant à l'adhésion
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du choix pour le mailing
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du statut de l'adhérent
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la date de première adhésion
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la date de validation de l'adhésion
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la chaine salt de l'adhérent
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du mot de passe cripté de l'adhérent
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de la clé
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation des chaines aléatoires
$adherent=plxUtils::getValue($values[$iTags[$i]]);
$adherent=plxUtils::getValue($values[$iTags[$i]]);
if ($this->getParam('typeAnnuaire') == 'professionnel') {
# Recuperation de l'activité
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation de l'établissement
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du service
$adherent=plxUtils::getValue($values[$iTags[$i]]);
# Recuperation du poste
$adherent=plxUtils::getValue($values[$iTags[$i]]);
}
if ($this->getParam('showAnnuaire') == 'on') {
# Recuperation du choix sur le partage des coordonnées
$adherent=plxUtils::getValue($values[$iTags[$i]]);
}
}
}
return $adherent;
}
/**
* Méthode permettant de formater un numéro de téléphone au format français ou international
*/
public function formatFrenchPhoneNumber($phoneNumber, $international = FALSE){
//Supprimer tous les caractères qui ne sont pas des chiffres
$phoneNumber = preg_replace('/[^0-9]+/', '', $phoneNumber);
//Garder les 9 derniers chiffres
$phoneNumber = substr($phoneNumber, -9);
//On ajoute +33 si la variable $international vaut TRUE et 0 dans tous les autres cas
$motif = $international ? '+33 (\1) \2 \3 \4 \5' : '0\1 \2 \3 \4 \5';
$phoneNumber = preg_replace('/(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})/', $motif, $phoneNumber);
return $phoneNumber;
}
/**
* Méthode qui retourne le prochain id d'un adhérent
*
* @return string id d'un nouvel adhérent sous la forme 0001
* @author Stephane F.
**/
public function nextIdAdherent() {
# On récupère l'ensemble des adhérents
//$this->adherentsList = $this->getAdherent(PLX_ROOT.$this->getParam('adherents').'plugin.adhesion.adherents.xml');
# On récupère le dernier identifiant
if($aKeys = array_keys($this->plxGlob_adherents->aFiles)) {
rsort($aKeys);
return str_pad($aKeys+1,5, '0', STR_PAD_LEFT);
} else {
return '00001';
}
}
/**
* Méthode permettant de supprimer les adhérents sélectionnés
*
* @param $content array tableau contenant les index des adhérents à supprimer
* @param $mail array tableau optionnel contenant les paramètres des mails à envoyer pour confirmation
*
* @return bool
* @author Cyril MAGUIRE
*/
public function deleteAdherentsList ($content,$mail=array(null)) {
$action = FALSE;
foreach($content as $k=>$id) {
# Vérification de l'intégrité de l'identifiant
if(!preg_match('/^[0-9]{5}$/',$id))
return false;
# Variable d'état
$resDelAd = true;
# Suppression de l'adhérent
if($globAd = $this->plxGlob_adherents->query('/^'.$id.'.(.*).xml$/')) {
unlink(PLX_ROOT.$this->getParam('adherents').'adhesions/'.$globAd);
$resDelAd = !file_exists(PLX_ROOT.$this->getParam('adherents').'adhesions/'.$globArt);
}
$_SESSION = $this->getLang('L_ADMIN_REMOVE_ADH').'<br/>' ;
$action = TRUE;
}
return $action;
}
/**
* Méthode permettant d'ajouter les mentions légales de la cnil aux mails envoyés avec le lien de suppression
*
* @param $id string index de l'adhérent
* @param $mail string mail de l'adhérent
* @param $text string mail au format texte ou html (html par défaut)
*
* @return string
* @author Cyril MAGUIRE
*
*/
public function cnil($id=0,$mail='',$text=FALSE) {
$plxMotor = plxMotor::getInstance();
if ($id == 0 && $mail == '') {
if ($text) {
return 'Merci de ne pas répondre à cet e-mail. Celui-ci ayant été généré automatiquement, nous ne pourrons traiter votre réponse.'."\n".'
Conformément à la Loi Informatique et Libertés du 06/01/1978 et à nos mentions légales vous disposez d\'un droit d\'accès et de rectification sur les données vous concernant.';
} else {
return '<p style="text-align:center;">Merci de ne pas répondre à cet e-mail. Celui-ci ayant été généré automatiquement, nous ne pourrons traiter votre réponse.<br/><hr/>Conformément à la Loi Informatique et Libertés du 06/01/1978 et à nos mentions légales vous disposez d\'un droit d\'accès et de rectification sur les données vous concernant.</p>';
}
} else {
if ($text) {
return 'Merci de ne pas répondre à cet e-mail. Celui-ci ayant été généré automatiquement, nous ne pourrons traiter votre réponse.'."\n".'
Conformément à la Loi Informatique et Libertés du 06/01/1978 et à nos mentions légales vous disposez d\'un droit d\'accès et de rectification sur les données vous concernant.'."\n".'Pour vous désinscrire de la liste de diffusion, recopiez ce lien dans votre navigateur internet : '.$plxMotor->urlRewrite('?adhesion&q='.md5($id.'-'.$mail));
} else {
return '<p style="text-align:center;">Merci de ne pas répondre à cet e-mail. Celui-ci ayant été généré automatiquement, nous ne pourrons traiter votre réponse.<br/><hr/>Conformément à la Loi Informatique et Libertés du 06/01/1978 et à nos mentions légales vous disposez d\'un droit d\'accès et de rectification sur les données vous concernant.<br/><a href="'.$plxMotor->urlRewrite('?adhesion&q='.md5($id.'-'.$mail)).'">Se désinscrire de la liste de diffusion</a></p>';
}
}
}
/**
* Méthode permettant de comparer les données du lien cnil et le cas échéant de supprimer le compte associé des listes de diffusion
*
* @param $value string $value = md5($id-$mail);
*
* @return bool
* @author Cyril MAGUIRE
*/
public function compare($value) {
$content = array();
$mail = array();
foreach ($this->plxRecord_adherents->result as $id => $array) {
if ($value == md5($array.'-'.$array) && $array == 1) {
$content[] = $array;
foreach ($array as $key => $value) {
$content[$key.'_'.$array['id']] = $value;
}
$content] = 'blacklist';
$content[0] ='update';
$addresses = $this->getAllGutumaLists(TRUE);
$this->listDiff = $addresses[0];
$this->editAdherentsList($content,$array,TRUE);
return TRUE;
}
}
return FALSE;
}
/**
* Générateur de chaines de caractères aléatoire
*
* @param $nbLettres integer Nombre de caractères que la chaine contiendra
* @param $nbCaracteres integer Nombre de caracteres exotiques maximum que la chaine contiendra
* @param $caracteresSup array Caracteres exotiques que la chaine ne contiendra pas
* @param $voyellesSup array Voyelles que la chaine ne contiendra pas
* @param $consonnesSupp array Consonnes que la chaine ne contiendra pas
*
* @return string la chaine aléatoire
* @author Cyril MAGUIRE
*/
public function generateurMot($nbLettres = 8,$nbCaracteres = 4,$caracteresSup = array(),$nombresSup = array(),$voyellesSup = array(),$consonnesSupp = array()) {
$choix = array('consonnes','voyelles','caracteres','nombres');
$mot = '';
$consonnes = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z');
$voyelles = array('a','e','i','o','u','y');
$caracteres = array('@','#','?','!','+','=','-','%','&','*');
$nombres = array('0','1','2','3','4','5','6','7','8','9');
if (!empty($consonnesSupp)) {
$consonnes = array_diff($consonnes,$consonnesSupp);
}
if (!empty($voyellesSup)) {
$voyelles = array_diff($voyelles,$voyellesSup);
}
if (!empty($caracteresSup)) {
$caracteres = array_diff($caracteres,$caracteresSup);
}
if (!empty($nombresSup)) {
$nombres = array_diff($nombres,$nombresSup);
}
if (empty($consonnes)) {
$consonnes = array('b');
}
if (empty($voyelles)) {
$voyelles = $consonnes;
}
if (empty($nombres)) {
$nombres = $consonnes;
}
if ($nbCaracteres == 0) {
$caracteres = $consonnes;
}
$j = 0;
for($i=0;$i<$nbLettres;$i++) {
//choix aléatoire entre consonnes et voyelles
$rand = array_rand($choix,1);
if ($rand == 3) {
$j++;
}
if ($nbCaracteres != 0 && $j == ($nbCaracteres-1)) {
$caracteres = $consonnes;
}
$type = $choix[$rand];
$tab = $$type;
//on recherche l'index d'une lettre, au hasard dans le tableau choisi
$lettre = array_rand($$type,1);
//on recherche la dernière lettre du mot généré
if (strlen($mot) > 0) {
$derniereLettre = $mot[strlen($mot)-1];
} else {
$derniereLettre = '';
}
//si la lettre choisie est déjà à la fin du mot généré, on relance la boucle
if ($tab[$lettre] == $derniereLettre || in_array($derniereLettre,$tab)) {
$i--;
} else {//sinon on l'ajoute au mot généré
$maj = mt_rand(0,10);
if ($maj<2) {
$mot .= strtoupper($tab[$lettre]);
} else {
$mot .= $tab[$lettre];
}
}
}
return $mot;
}
/**
* Méthode permettant de définir un mot de passe et une clé lors d'une nouvelle inscription validée
*
* @param $id string index de l'adhérent
*
* @return $password string mot de passe de l'adhérent en clair
* @author Cyril MAGUIRE
*/
public function defPassword($id) {
if (array_key_exists($id, $this->adherentsList)){
$id = $this->adherentsList[$id];
}else {
$id = end($this->adherentsList) + 1;
}
if ($this->plxRecord_adherents->result[$id] == '') {
$this->plxRecord_adherents->result[$id] = time();
}
# controle du mot de passe
$salt = empty($this->plxRecord_adherents->result[$id]) ? plxUtils::charAleatoire(10) : $this->plxRecord_adherents->result[$id];
$this->plxRecord_adherents->result[$id] = $salt;
//Définition du mot de passe
//Définition de la clé
$cle = plxUtils::charAleatoire($this->getParam('cle'));
$rand1 = mt_rand(1,9);
$rand2 = $this->generateurMot(3,1);
$password = $cle.'-'.substr($this->plxRecord_adherents->result[$id],0,-$rand1).$rand2;
//Attribution du mot de passe à l'adhérent
$this->plxRecord_adherents->result[$id] = empty($this->plxRecord_adherents->result[$id]) ? sha1($salt.md5($password)) : $this->plxRecord_adherents->result[$id];
$this->plxRecord_adherents->result[$id] = $rand1;
$this->plxRecord_adherents->result[$id] = $rand2;
$this->plxRecord_adherents->result[$id] = $cle;
return $password;
}
/**
* Méthode qui retourne les informations $output en analysant
* le nom du fichier de l'adhérent $filename
*
* @param filename fichier de l'adhérent à traiter
* @return array information à récupérer
* @author Stephane F
**/
public function adInfoFromFilename($filename) {
# On effectue notre capture d'informations
if(preg_match('/([0-9]{5}).([a-z-]+).([a-z-]+).([0-9]{10}).xml$/',$filename,$capture)) {
return array(
'adId' => $capture[1],
'nom' => $capture[2],
'prenom' => $capture[3],
'firstDate' => $capture[4]
);
}
}
/**
* Méthode permettant de mettre à jour un compte adhérent
*
* @param $content array tableau contenant les informations des comptes à mettre à jour
*
* @return $mail array tableau contenant les paramètres des mails à envoyer aux adhérents
* @author Cyril MAGUIRE
*/
public function updateAdherentsList($content) {
$mail = array();
foreach($content as $key => $id) {
$ad = $this->adherentsList[$id];
//L'adhérent souhaite ne plus faire partie de l'association
if ($content == 'stop') {
//On retire l'email de la liste de diffusion
if (in_array($content,$this->listDiff)) {
$this->removeAdressFromGutumaList($content,TRUE);
$_SESSION = $this->getLang('L_ADMIN_REMOVE_ADD').'<br/>' ;
}
$this->plxRecord_adherents->result[$ad] = $content;
$_SESSION = $this->getLang('L_ADMIN_REMOVE_ADH').'<br/>' ;
$mail[] = array(
'name'=>$this->getParam('nom_asso'),
'from'=>$this->getParam('email'),
'to'=>$content,
'subject'=>$this->getParam('devalidation_subject'),
'body'=>'<p>'.$this->getParam('devalidation_msg').'</p>'.$this->cnil(),
'contentType'=>'html',
'cc'=>FALSE,
'bcc'=>FALSE,
'notification' => array(
'adherent' => $this->plxRecord_adherents->result[$ad],
'sujet' => 'Suppression'
)
);
$this->deleteAdherentsList($content,$mail);
return FALSE;
}
elseif($content!='') {
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = intval($content);
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $this->formatFrenchPhoneNumber($content);
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
if ($this->getParam('typeAnnuaire') == 'professionnel') {
if ($content == 'autre') {
$this->plxRecord_adherents->result[$ad] = $content;
} else {
$this->plxRecord_adherents->result[$ad] = $content;
}
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $content;
$this->plxRecord_adherents->result[$ad] = $this->formatFrenchPhoneNumber($content);
}
if ($this->getParam('showAnnuaire') == 'on') {
$this->plxRecord_adherents->result[$ad] = $content;
}
//On retire l'email de la liste de diffusion si c'est le choix de l'adhérent
if (in_array($content,$this->listDiff) && $content == 'blacklist') {
$this->removeAdressFromGutumaList($content,TRUE);
$_SESSION = $this->getLang('L_ADMIN_REMOVE_ADD').'<br/>' ;
} elseif (!in_array($content,$this->listDiff) && $content != 'blacklist' && ($content[0]=='update' || $content[1]=='update')) {
$this->addAdressInGutumaList($content,TRUE);
$_SESSION = $this->getLang('L_ADMIN_ADD_ADD').'<br/>' ;
}
$this->plxRecord_adherents->result[$ad] = $content;
if ($content[0]!='update' && $content[1]!='update') {
if ($this->plxRecord_adherents->result[$ad] == 1 && $content == 'renouveler') {
$plxMotor = plxMotor::getInstance();
$_SESSION = '<p id="password_error">'.$this->getLang('L_ERR_USER_ALREADY_VALID').'</p>';
header('Location:'.$plxMotor->urlRewrite());
exit();
}
$this->plxRecord_adherents->result[$ad] = intval($content);
//Si l'inscription n'est pas validée
//On supprime l'inscription de l'adhérent mais on conserve ses coordonnées
if ($this->plxRecord_adherents->result[$ad] == 0 && $content != 'renouveler') {
//On retire l'email de la liste de diffusion
if (in_array($content,$this->listDiff)) {
$this->removeAdressFromGutumaList($content['mail_'.$
Parmi les nouveautés, je vois vu ici
Ça veut dire quoi? Je ne comprends pas trop :rolleyes:
Qu'on peut avoir un menu déroulant en "natif"? Si oui, on fait comment, je plane?
Merci
Le nouveau pluxml me plait bien.. et pas de bug pour le moment.
Juste un tout petit détail dans le theme par défaut ( ce qui ne me pose pas pb puisque dans le mien j'ai corrigé), la balise blockquote n'a pas été définie. Et si on va en bas d ela page statique 1, on verra que la citation d eHal n'est pas en italique.
Cordialement
En effet, la balise blockquote est définie dans reset.css, mais elle n'estpas en italique. Un oublie de ma part. Je me le ,ote pour la prochaine version.