328 lines
14 KiB
PHP
328 lines
14 KiB
PHP
<?php
|
||
session_start();
|
||
echo $_SESSION['nb_mail_sent'];
|
||
// On teste si la variable de session existe et contient une valeur
|
||
if(empty($_SESSION['login']))
|
||
{
|
||
// Si inexistante ou nulle, on redirige vers le formulaire de login
|
||
header('Location: ../auth.php');
|
||
exit();
|
||
}
|
||
include("config.inc.php");
|
||
include("connect.inc.php");
|
||
include("fonctions.inc.php");
|
||
require("../../inc/PHPMailer/PHPMailerAutoload.php");
|
||
|
||
$year = date('Y');
|
||
$lastyear = date('Y', strtotime(' -1 year'));
|
||
// Time start
|
||
$timestart=microtime(true);
|
||
$new_nb_mail_sent = $_SESSION['nb_mail_sent']+1;
|
||
|
||
if ($_SESSION['nb_mail_sent'] == 0) {
|
||
// On envoie les mails par paquet de 75
|
||
$query = $bdd->prepare("SELECT * FROM clients WHERE vote = 0 AND mailed = ? LIMIT 75");
|
||
$query->execute(array(0));
|
||
// Si tout le monde n'a pas voté, on balance les mails
|
||
$nbs = $query->rowCount();
|
||
if ($query->rowCount() > 0) {
|
||
// On utilise PHPMailer
|
||
while ($results = $query->fetch(PDO::FETCH_OBJ)) {
|
||
$mail = new PHPMailer;
|
||
$mail->isSMTP();
|
||
$mail->CharSet = "UTF-8";
|
||
//Enable SMTP debugging
|
||
// 0 = off (for production use)
|
||
// 1 = client messages
|
||
// 2 = client and server messages
|
||
//$mail->SMTPDebug = 2;
|
||
//Ask for HTML-friendly debug output
|
||
//$mail->Debugoutput = 'html';
|
||
// To load the French version
|
||
$mail->setLanguage('fr', 'PHPMailer/language/');
|
||
$mail->Host = 'smtp.ouvaton.coop';
|
||
$mail->SMTPAuth = true;
|
||
$mail->SMTPKeepAlive = true;
|
||
$mail->Username = '';
|
||
$mail->Password = '';
|
||
$mail->SMTPSecure = 'tls';
|
||
$mail->Port = 587;
|
||
|
||
$mail->From = '';
|
||
$mail->FromName = 'Ouvaton.coop AG '.$year;
|
||
$mail->addAddress($results->email);
|
||
$mail->addReplyTo('');
|
||
|
||
$mail->isHTML(true);
|
||
$mail->Subject = 'Ouvaton AG '.$year.' : convocation et vote en ligne';
|
||
|
||
// On prépare le contenu du mail
|
||
$body = "
|
||
<html>
|
||
<head>
|
||
<title>Ouvaton.coop AG ".$year."</title>
|
||
</head>
|
||
<body>
|
||
<p>Cher Coopérateur/Chère Coopératrice,</p>
|
||
|
||
<p>Vous détenez une ou plusieurs parts sociales de la Coopérative Ouvaton. À ce titre, nous avons le plaisir de vous indiquer que les sociétaires sont convoqués en Assemblée Générale Ordinaire le vendredi 5 juin ".$year." à 21h à Locmaria Guidel, afin de délibérer sur l’ordre du jour suivant :</p>
|
||
|
||
<ul>
|
||
<li>Présentation du rapport moral et financier par la Présidence du Directoire</li>
|
||
<li>Présentation du rapport du Conseil de Surveillance</li>
|
||
<li>Approbation des comptes ".$lastyear."</li>
|
||
<li>Affectation du résultat</li>
|
||
<li>Non-renouvellement du mandat du Commissaire aux Comptes</li>
|
||
<li>Quitus au Directoire et Conseil de Surveillance pour ledit exercice</li>
|
||
<li>Élection des membres du Conseil de Surveillance</li>
|
||
<li>Questions diverses</li>
|
||
<li>Pouvoirs pour formalités</li>
|
||
</ul>
|
||
|
||
<p>Dans l'hypothèse où le quorum ne serait pas atteint suite à cette première convocation, <strong>une deuxième assemblée serait convoquée le samedi 13 juin ".$year.", à 14h</strong>. Les votes émis avant le 5 juin ".$year." à 21h resteront valables pour l'éventuelle assemblée de seconde convocation.</p>
|
||
|
||
<p>Vous trouverez tous les documents relatifs à l'Assemblée Générale ".$year." statuant sur l'exercice ".$lastyear." (documents comptables, rapports, candidatures) sur le site de la
|
||
Coopérative en <a href=\"https://ouvaton.coop/la-cooperative/assemblees-generales/ag-".$year."/\">https://ouvaton.coop/la-cooperative/assemblees-generales/ag-".$year."/</a>.<br />
|
||
Ils peuvent être discutés sur <a href=\"https://forums.ouvaton.coop\">les forums Ouvaton</a>.</p>
|
||
|
||
<p>Conformément à la possibilité ouverte par la résolution n°5 adoptée par l'Assemblée Générale du 4 mai 2013, le vote sur les résolutions s'effectuera par scrutin électronique sécurisé (voir modalités plus bas).</p>
|
||
|
||
<p>Le formulaire de vote en ligne de notre Assemblée Générale est disponible sur <a href=\"https://ag.ouvaton.coop\">https://ag.ouvaton.coop</a>.</p>
|
||
|
||
<p>Il est accessible dès maintenant et le restera jusqu'au jour de l'Assemblée Générale à 15h.<br />
|
||
Nous attirons votre attention sur le fait que vous ne pourrez pas corriger votre vote une fois que vous l'aurez émis.<br />
|
||
Vous pouvez prendre le temps de la réflexion, une nouvelle invitation à voter vous sera envoyée dans deux semaines, puis quelques jours avant l'assemblée de seconde convocation.</p>
|
||
|
||
<p><strong>Voici les instructions pour voter :</strong></p>
|
||
|
||
<p>Quand elles vous seront demandées, saisissez les informations suivantes :</p>
|
||
|
||
<ul>
|
||
<li>Numéro de coopérateur : ".$results->reference."</li>
|
||
<li>Mot de passe : ".$results->password."</li>
|
||
</ul>
|
||
|
||
<p><strong>Le vote se déroule en 4 étapes :</strong></p>
|
||
|
||
<p>1. Vous devez vous identifier en utilisant votre numéro de coopérateur et le code d'accès donné ci-dessus.</p>
|
||
|
||
<p>2. Vous devez compléter le questionnaire avec vos choix.</p>
|
||
|
||
<p>3. Vos choix seront affichés, et il vous sera demandé de les confirmer, ou de retourner à l'étape précédente si vous souhaitez modifier votre vote.</p>
|
||
|
||
<p>4. Après avoir confirmé vos choix, une clé de contrôle unique vous sera donnée, qui vous permettra de vérifier que votre réponse a été correctement enregistrée. Pour assurer l'anonymat, aucun lien ne sera conservé entre cette clé et vos identifiants d'accès, gardez donc précieusement cette clé.<br />
|
||
<strong>Une fois que vous aurez voté, vous ne pourrez plus le faire à nouveau.</strong></p>
|
||
|
||
<p>Merci par avance pour votre participation à ce vote électronique.</p>
|
||
|
||
<p>Coopérativement,<br />
|
||
La Présidence du Directoire</p>
|
||
<p>Ouvaton Coopérative SA à directoire et conseil de surveillance à capital variable Siège Social 16 bis rue d’Odessa 75014 PARIS R.C.S. Paris 438 168 718</p>
|
||
</body>
|
||
</html>
|
||
";
|
||
$mail->msgHTML($body);
|
||
if ($mail->send()) {
|
||
// On fait le ménage dans PHPMailer avant la prochaine boucle
|
||
$mail->clearAddresses();
|
||
$mail->clearAttachments();
|
||
|
||
// On marque que le mail est envoyé pour ce coopérateur
|
||
$sql ="
|
||
UPDATE clients
|
||
SET mailed = :new_nb_mail_sent
|
||
WHERE reference = :reference
|
||
";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':reference', $results->reference);
|
||
$stmt->bindParam(':new_nb_mail_sent', $new_nb_mail_sent);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
} else {echo 'Mailer Error: ' . $mail->ErrorInfo . '<br />';}
|
||
}
|
||
// On regarde combien de coopérateurs n'ont pas encore de mails
|
||
$sql = "SELECT COUNT(*) FROM clients WHERE vote = 0 AND mailed = :nb_mail_sent";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':nb_mail_sent', $_SESSION['nb_mail_sent']);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
$results = $stmt->fetch();
|
||
$nbl = $results[0];
|
||
|
||
// On actualise la date et on incrémente le compteur
|
||
if ($nbl == 0) {
|
||
$nb_mail_sent = 1;
|
||
$sql ="
|
||
UPDATE admin SET option_value =
|
||
CASE
|
||
WHEN option_id = 2 THEN :last_mail_sent
|
||
WHEN option_id = 3 THEN :nb_mail_sent
|
||
ELSE option_value
|
||
END
|
||
WHERE option_id IN (2,3)
|
||
";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':last_mail_sent', date("Y-m-d H:i:s"));
|
||
$stmt->bindParam(':nb_mail_sent', $nb_mail_sent);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
}
|
||
// Time Stop
|
||
$timeend=microtime(true);
|
||
$time=$timeend-$timestart;
|
||
|
||
//Exec Time
|
||
$page_load_time = number_format($time, 3);
|
||
echo "Start : ".date("H:i:s", $timestart);
|
||
echo "<br>Stop: ".date("H:i:s", $timeend);
|
||
echo "<br>Script execute en " . $page_load_time . " sec";
|
||
header('Location: ../index.php?$sent=true&$nbs='.$nbs.'&$nbl='.$nbl.'&$plt='.$page_load_time);
|
||
} else {echo '<p>Aucune données ?</p>';}
|
||
} else {
|
||
// On envoie les mails par paquet de 75
|
||
$query = $bdd->prepare("SELECT * FROM clients WHERE vote = 0 AND mailed = ? LIMIT 75");
|
||
$query->execute(array($_SESSION['nb_mail_sent']));
|
||
// Si tout le monde n'a pas voté, on balance les mails
|
||
$nbs = $query->rowCount();
|
||
if ($query->rowCount() > 0) {
|
||
// On utilise PHPMailer
|
||
while ($results = $query->fetch(PDO::FETCH_OBJ)) {
|
||
$mail = new PHPMailer;
|
||
$mail->isSMTP();
|
||
$mail->CharSet = "UTF-8";
|
||
//Enable SMTP debugging
|
||
// 0 = off (for production use)
|
||
// 1 = client messages
|
||
// 2 = client and server messages
|
||
//$mail->SMTPDebug = 2;
|
||
//Ask for HTML-friendly debug output
|
||
//$mail->Debugoutput = 'html';
|
||
// To load the French version
|
||
$mail->setLanguage('fr', 'PHPMailer/language/');
|
||
$mail->Host = 'smtp.ouvaton.coop';
|
||
$mail->SMTPAuth = true;
|
||
$mail->SMTPKeepAlive = true;
|
||
$mail->Username = '';
|
||
$mail->Password = '';
|
||
$mail->SMTPSecure = 'tls';
|
||
$mail->Port = 587;
|
||
|
||
$mail->From = '';
|
||
$mail->FromName = 'Ouvaton.coop AG '.$year;
|
||
$mail->addAddress($results->email);
|
||
$mail->addReplyTo('');
|
||
|
||
$mail->isHTML(true);
|
||
$mail->Subject = 'Ouvaton AG '.$year.' : quelques minutes pour participer au vote';
|
||
|
||
// On prépare le contenu du mail
|
||
$body = "
|
||
<html>
|
||
<head>
|
||
<title>Ouvaton.coop AG ".$year."</title>
|
||
</head>
|
||
<body>
|
||
<p>Cher Coopérateur/Chère Coopératrice,</p>
|
||
|
||
<p>Plus que quelques semaines pour voter et participer à notre AG ".$year." !</p>
|
||
|
||
<p>Notre AG se déroulera le samedi 13 juin ".$year.", à 14h.</p>
|
||
|
||
<p>Vous trouverez tous les documents relatifs à l'Assemblée Générale ".$year." statuant sur l'exercice ".$lastyear." (documents comptables, rapports, candidatures) sur le site de la Coopérative en <a href=\"https://ouvaton.coop/la-cooperative/assemblees-generales/ag-".$year."/\">https://ouvaton.coop/la-cooperative/assemblees-generales/ag-".$year."/</a>.<br />
|
||
Ils peuvent être discutées sur <a href=\"https://forums.ouvaton.org\">les forums Ouvaton</a>.</p>
|
||
|
||
<p>Le formulaire de vote en ligne de notre Assemblée Générale est disponible sur <a href=\"https://ag.ouvaton.coop\">https://ag.ouvaton.coop</a>.</p>
|
||
|
||
<p>Il est accessible dès maintenant et le restera jusqu'au jour de l'Assemblée Générale à 15h.<br />
|
||
Nous attirons votre attention sur le fait que vous ne pourrez pas corriger votre vote une fois que vous l'aurez émis.</p>
|
||
|
||
<p><strong>Voici les instructions pour voter :</strong></p>
|
||
|
||
<p>Quand elles vous seront demandées saisissez les informations suivantes :</p>
|
||
|
||
<ul>
|
||
<li>Numéro de coopérateur : ".$results->reference."</li>
|
||
<li>Mot de passe : ".$results->password."</li>
|
||
</ul>
|
||
|
||
<p><strong>Le vote se déroule en 4 étapes :</strong></p>
|
||
|
||
<p>1. Vous devez vous identifier en utilisant votre numéro de coopérateur et le code d'accès donné ci-dessus.</p>
|
||
|
||
<p>2. Vous devez compléter le questionnaire avec vos choix.</p>
|
||
|
||
<p>3. Vos choix seront affichés, et il vous sera demandé de les confirmer, ou de retourner à l'étape précédente si vous souhaitez modifier votre vote.</p>
|
||
|
||
<p>4. Après avoir confirmé vos choix, une clé de contrôle unique vous sera donnée, qui vous permettra de vérifier que votre réponse a été correctement enregistrée. Pour assurer l'anonymat, aucun lien ne sera conservé entre cette clé et vos identifiants d'accès, gardez donc précieusement cette clé. Une fois que vous aurez voté, vous ne pourrez plus le faire à nouveau.</p>
|
||
|
||
<p>Merci par avance pour votre participation à ce vote électronique.</p>
|
||
|
||
<p>Coopérativement,<br />
|
||
La Présidence du Directoire</p>
|
||
<p>Ouvaton Coopérative SA à directoire et conseil de surveillance à capital variable Siège Social 16 bis rue d’Odessa 75014 PARIS R.C.S. Paris 438 168 718</p>
|
||
</body>
|
||
</html>
|
||
";
|
||
$mail->msgHTML($body);
|
||
if ($mail->send()) {
|
||
// On fait le ménage dans PHPMailer avant la prochaine boucle
|
||
$mail->clearAddresses();
|
||
$mail->clearAttachments();
|
||
|
||
// On marque que le mail est envoyé pour ce coopérateur
|
||
$sql ="
|
||
UPDATE clients
|
||
SET mailed = :new_nb_mail_sent
|
||
WHERE reference = :reference
|
||
";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':reference', $results->reference);
|
||
$stmt->bindParam(':new_nb_mail_sent', $new_nb_mail_sent);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
} else {echo 'Mailer Error: ' . $mail->ErrorInfo . '<br />';}
|
||
}
|
||
|
||
// On regarde combien de coopérateurs n'ont pas encore de mails
|
||
$sql = "SELECT COUNT(*) FROM clients WHERE vote = 0 AND mailed = :nb_mail_sent";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':nb_mail_sent', $_SESSION['nb_mail_sent']);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
$results = $stmt->fetch();
|
||
$nbl = $results[0];
|
||
|
||
// On actualise la date et on incrémente le compteur
|
||
if ($nbl == 0) {
|
||
$nb_mail_sent = $_SESSION['nb_mail_sent']+1;
|
||
$sql ="
|
||
UPDATE admin SET option_value =
|
||
CASE
|
||
WHEN option_id = 2 THEN :last_mail_sent
|
||
WHEN option_id = 3 THEN :nb_mail_sent
|
||
ELSE option_value
|
||
END
|
||
WHERE option_id IN (2,3)
|
||
";
|
||
$stmt = $bdd->prepare($sql);
|
||
$stmt->bindParam(':last_mail_sent', date("Y-m-d H:i:s"));
|
||
$stmt->bindParam(':nb_mail_sent', $nb_mail_sent);
|
||
// Exécution de la requête
|
||
$stmt->execute();
|
||
}
|
||
//Clore la requête
|
||
$stmt = null;
|
||
|
||
// Time Stop
|
||
$timeend=microtime(true);
|
||
$time=$timeend-$timestart;
|
||
|
||
//Exec Time
|
||
$page_load_time = number_format($time, 3);
|
||
echo "Start : ".date("H:i:s", $timestart);
|
||
echo "<br>Stop: ".date("H:i:s", $timeend);
|
||
echo "<br>Script execute en " . $page_load_time . " sec";
|
||
header('Location: ../index.php?$sent=true&$nbs='.$nbs.'&$nbl='.$nbl.'&$plt='.$page_load_time);
|
||
} else {echo '<p>Aucune données !!</p>';}
|
||
}
|