Merge branch 'xorg/maint'
authorNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Sun, 1 Jun 2014 19:33:13 +0000 (21:33 +0200)
committerNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Sun, 1 Jun 2014 19:33:13 +0000 (21:33 +0200)
20 files changed:
ChangeLog
bin/newsletter.bounces.processor.py
classes/profile.php
classes/user.php
core
htdocs/images/x.png
include/validations/paiements.inc.php
modules/email.php
modules/fusionax.php
modules/lists/lists.inc.php
modules/survey/survey.inc.php
modules/xnetevents/xnetevents.inc.php
templates/emails/index.tpl
templates/include/form.valid.entreprises.tpl
templates/newsletter/remaining.tpl
templates/platal/preferences.tpl
templates/xnet/recovery.tpl
templates/xnetgrp/mail.tpl
upgrade/1.1.13/01_upgradeAXid.sql [new file with mode: 0644]
upgrade/1.1.13/02_deleteMaster.sql [new file with mode: 0644]

index 00753d0..12dad61 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,7 @@
 ================================================================================
+VERSION 1.1.13                                                       XX XX XXXX
+
+================================================================================
 VERSION 1.1.12                                                       08 03 2014
 
     * NL:
index f315b84..3aaa660 100755 (executable)
@@ -200,6 +200,8 @@ def findAddressInBounce(bounce):
     failure_hints = [
         "insufficient system storage",
         "mailbox full",
+        "mailbox recipient does not have a mailbox database",
+        "over quota",
         "requested action aborted: local error in processing",
         "user unknown",
         ]
index 7065598..6722784 100644 (file)
@@ -372,6 +372,11 @@ class Profile implements PlExportable
         return $this->short_name;
     }
 
+    public function sortName()
+    {
+        return $this->sort_name;
+    }
+
     public function firstName()
     {
         return $this->firstname_ordinary;
@@ -1137,7 +1142,7 @@ class Profile implements PlExportable
                                      IF (ppn.firstname_ordinary = \'\', ppn.firstname_main, ppn.firstname_ordinary) AS firstname_ordinary,
                                      IF (ppn.lastname_ordinary = \'\', ppn.lastname_main, ppn.lastname_ordinary) AS lastname_ordinary,
                                      pd.yourself, pd.promo, pd.short_name, pd.public_name AS full_name,
-                                     pd.directory_name, pd.public_name, pd.private_name,
+                                     pd.directory_name, pd.public_name, pd.private_name, pd.sort_name,
                                      IF (pp.pub >= {?}, pp.display_tel, NULL) AS mobile,
                                      (ph.pub >= {?} AND ph.attach IS NOT NULL) AS has_photo, ph.pub as photo_pub,
                                      ph.x AS photo_width, ph.y AS photo_height,
index e380dac..eb91985 100644 (file)
@@ -165,7 +165,7 @@ class User extends PlUser
                                       IF(ef.email IS NULL, NULL, CONCAT(ef.email, \'@\', df.name)) AS forlife_alternate,
                                       IF(eb.email IS NULL, NULL, CONCAT(eb.email, \'@\', mb.name)) AS bestalias,
                                       (er.redirect IS NULL AND a.state = \'active\' AND FIND_IN_SET(\'mail\', at.perms)) AS lost,
-                                      a.email, a.full_name, a.directory_name, a.display_name, a.sex = \'female\' AS gender,
+                                      a.email, a.full_name, a.directory_name, a.display_name, a.sort_name, a.sex = \'female\' AS gender,
                                       IF(a.state = \'active\', CONCAT(at.perms, \',\', IF(a.user_perms IS NULL, \'\', a.user_perms)), \'\') AS perms,
                                       a.user_perms, a.email_format, a.is_admin, a.state, a.type, at.description AS type_description, a.skin,
                                       FIND_IN_SET(\'watch\', a.flags) AS watch, a.comment,
@@ -352,6 +352,14 @@ class User extends PlUser
         return $this->profile()->directory_name;
     }
 
+    public function sortName()
+    {
+        if (!$this->hasProfile()) {
+            return $this->sort_name;
+        }
+        return $this->profile()->sort_name;
+    }
+
     static public function compareDirectoryName($a, $b)
     {
         return strcasecmp(replace_accent($a->directoryName()), replace_accent($b->directoryName()));
diff --git a/core b/core
index 75b5406..c16ab9c 160000 (submodule)
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 75b5406387c0c362517dd905d561f7b616dddc96
+Subproject commit c16ab9ce3537fad8a05ecba1cdb25268440aec29
index 6a45564..737d94a 100644 (file)
Binary files a/htdocs/images/x.png and b/htdocs/images/x.png differ
index 05b2e31..1b4fc8f 100644 (file)
@@ -41,9 +41,7 @@ class PayReq extends Validate
     public $rib_id;
     public $rib_nom;
 
-    public $rules = "Vérifier que les balises &lt;salutation&gt;, &lt;prenom&gt;, &lt;nom&gt;,  &lt;montant&gt; et &lt;comment&gt; n'ont pas été modifiées.
-Vérifier que le demandeur n'a pas laissé les crochets [].
-Si le télépaiement n'est pas lié à un groupe ou supérieur à 51 euros, laisser la validation à un trésorier";
+    public $rules = "Vérifier la présence d'un montant, de la balise &lt;montant&gt;, et associer le RIB du groupe. Si le groupe n'a pas de RIB &quot;used&quot; ou en a plusieurs, laisser au trésorier.";
     // }}}
     // {{{ constructor
 
index 360c462..b78cfe7 100644 (file)
@@ -867,6 +867,7 @@ class EmailModule extends PLModule
                 sort($broken_list);
 
                 foreach ($broken_list as $email) {
+                    $email = trim($email);
                     $userobj = null;
                     if ($user = mark_broken_email($email, true)) {
                         $userobj = User::getSilentWithUID($user['uid']);
@@ -907,14 +908,23 @@ class EmailModule extends PLModule
                                WHERE  flags = \'active\' AND broken_level = 1
                                       AND DATE_ADD(last, INTERVAL 1 YEAR) < CURDATE()');
 
+                // Sort $broken_user_list with (promo, sortname, pid)
+                $sortable_array = array();
+                foreach ($broken_user_list as $pid => $mails) {
+                    $profile = $broken_user_profiles[$pid];
+                    $sortable_array[$pid] = array($profile->promo(), $profile->sortName(), $pid);
+                }
+                asort($sortable_array);
+
                 // Output the list of users with recently broken addresses,
                 // along with the count of valid redirections.
-                pl_cached_content_headers('text/x-csv', 1);
+                pl_cached_content_headers('text/x-csv', null, 1, 'broken.csv');
 
                 $csv = fopen('php://output', 'w');
                 fputcsv($csv, array('nom', 'promo', 'bounces', 'nbmails', 'url', 'corps', 'job', 'networking'), ';');
                 $corpsList = DirEnum::getOptions(DirEnum::CURRENTCORPS);
-                foreach ($broken_user_list as $pid => $mails) {
+                foreach (array_keys($sortable_array) as $pid) {
+                    $mails = $broken_user_list[$pid];
                     $profile = $broken_user_profiles[$pid];
                     $current_corps = $profile->getCorpsName();
                     $jobs = $profile->getJobs();
index 892b393..fc43d3d 100644 (file)
@@ -89,6 +89,7 @@ class FusionAxModule extends PLModule
     /** Import de l'annuaire de l'AX depuis l'export situé dans le home de jacou */
     function handler_import($page, $action = 'index', $file = '')
     {
+        global $globals;
         if ($action == 'index') {
             $page->changeTpl('fusionax/import.tpl');
             return;
@@ -143,6 +144,11 @@ class FusionAxModule extends PLModule
             if ($file != '') {
                 // récupère le contenu du fichier sql
                 $queries = explode(';', file_get_contents($modulepath . $filesSQL[$file]));
+                $db = mysqli_init();
+                $db->options(MYSQLI_OPT_LOCAL_INFILE, true);
+                $db->real_connect($globals->dbhost, $globals->dbuser, $globals->dbpwd, $globals->dbdb);
+                $db->autocommit(true);
+                $db->set_charset($globals->dbcharset);
                 foreach ($queries as $q) {
                     if (trim($q)) {
                         // coupe le fichier en requêtes individuelles
@@ -153,9 +159,13 @@ class FusionAxModule extends PLModule
                             $report[] = addslashes($l);
                         }
                         // exécute la requête
-                        XDB::execute(str_replace('{?}', $spoolpath, $q));
+                        $res = $db->query(str_replace('{?}', $spoolpath, $q));
+                        if ($res === false) {
+                            throw new XDBException($q, $db->error);
+                        }
                     }
                 }
+                $db->close();
                 // trouve le prochain fichier à exécuter
                 $nextfile = $file + 1;
             } else {
index 4e90b4c..233fc94 100644 (file)
@@ -69,7 +69,7 @@ function list_sort_owners($emails, $tri_promo = true)
             $name = $member['email'];
         } else {
             $category = $member['user']->category();
-            $name = $member['user']->directoryName();
+            $name = $member['user']->sortName();
         }
         if (empty($category)) {
             $category = "AAAAA";
index 296f03b..784dd89 100644 (file)
@@ -315,7 +315,7 @@ class Survey
     // {{{ function checkSyntax() : checks syntax of the questions (currently the root only) before storing the survey in database
     private static $errorMessages = array(
         "datepassed"  => "la date de fin de sondage est déjà dépassée : vous devez préciser une date future",
-        "promoformat" => "les restrictions à certaines promotions sont mal formattées"
+        "promoformat" => "les restrictions à certaines promotions sont mal formatées"
     );
 
     public function checkSyntax()
index 15e8125..3832c2d 100644 (file)
@@ -70,7 +70,7 @@ function get_event(&$eid)
                                          FROM group_events as ge
                                         WHERE eid = {?}',
                                         $eid);
-    if (!is_null($evt['deadline_inscription']) && strtotime($evt['deadline_inscription']) < time()) {
+    if (!is_null($evt['deadline_inscription']) && strtotime($evt['deadline_inscription']) <= time()) {
         $evt['inscr_open'] = false;
     } else {
         $evt['inscr_open'] = true;
index bb1e84e..6a7b7de 100644 (file)
       <dt>Autres adresses (**)</dt>
       <dd>
         {foreach from=$aliases_other item=a}
+        {if strpos($a.email, '@melix.org') === false}
         <label>
           <input type='radio' {if $a.bestalias}checked="checked"{/if} name='best' value='{$a.email}' />
           <strong>{$a.email}</strong>
         </label>
         {if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
-        {if $a.alias}<a href="emails/alias">(changer ou supprimer mon alias melix)</a>{/if}
+        {if $a.alias} et <strong>@melix.org</strong> <a href="emails/alias">(changer ou supprimer mon alias melix)</a>{/if}
         <br />
+        {/if}
         {/foreach}
       </dd>
     {/if}
index f6929b5..229e76a 100644 (file)
@@ -88,7 +88,7 @@
 </tr>
 <tr class="pair">
   <td colspan="2" class="center">
-    <small>Bien remplir tous les champs, en particulier les <a href="http://societe.com/">codes NAF</a> et AX !</small>
+    <small>Remplir tous les champs possibles, en particulier le <a href="http://societe.com/">code NAF</a> et l'adresse du siège social si possible.</small>
   </td>
 </tr>
 
index 7510282..a17df86 100644 (file)
@@ -24,7 +24,7 @@
   {if t($too_long)}
   L'article est trop long.
   {else}
-  Il reste encore {$remaining} {if t($last_line)}caractères{else}lignes{/if}, une fois l'article formatté.
+  Il reste encore {$remaining} {if t($last_line)}caractères{else}lignes{/if}, une fois l'article formaté.
   {/if}
 </small>
 
index ca11bf2..88bfc52 100644 (file)
@@ -53,7 +53,7 @@ $(function() {
     <dt>Format des emails envoyés par le site</dt>
     <dd>
       Lorsque le site t'envoie des emails (lettre mensuelle, carnet, ...) ceux-ci peuvent
-      être soit sous forme de texte brut, soit formattés à l'aide de html.<br />
+      être soit sous forme de texte brut, soit formatés à l'aide de html.<br />
       texte brut <input type="radio" name="email_format" value="text" {if $smarty.session.user->email_format neq 'html'}checked="checked"{/if} />
       <input type="radio" name="email_format" value="html" {if $smarty.session.user->email_format eq 'html'}checked="checked"{/if} /> HTML
     </dd>
index 45206b0..3dd541a 100644 (file)
@@ -33,7 +33,7 @@ Ce certificat permet d'accéder à un formulaire de changement de mot de passe.
 expiration</strong> et utiliser le certificat comme expliqué dans l'email pour changer votre mot de passe.
 </p>
 <p>
-Si vous n'accéder pas à cet email dans les 6 heures, sollicitez un nouveau certificat sur cette page.
+Si vous n'accédez pas à cet email dans les 6 heures, sollicitez un nouveau certificat sur cette page.
 </p>
 
 {else}
index 5354bab..8a5fa83 100644 (file)
@@ -82,11 +82,7 @@ masculin ou féminin, par son prénom, ou son nom.
       </td>
       <td>
         <label><input type="checkbox" name="membres[X]" value="1"  {if $smarty.request.membres.X}checked="checked"{/if} />
-        <em>écrire à tous les X de l'annuaire du groupe</em></label><br />
-        <label><input type="checkbox" name="membres[ext]" value="1"  {if $smarty.request.membres.ext}checked="checked"{/if} />
-        <em>écrire à tous les extérieurs de l'annuaire du groupe</em></label><br />
-        <label><input type="checkbox" name="membres[groupe]" value="1"  {if $smarty.request.membres.groupe}checked="checked"{/if} />
-        <em>écrire à toutes les personnes morales de l'annuaire du groupe</em></label>
+        <em>écrire à tous les membres du groupe</em></label><br />
         <a href="{$platal->ns}annuaire" class='popup'>(voir annuaire)</a><br />
       </td>
     </tr>
diff --git a/upgrade/1.1.13/01_upgradeAXid.sql b/upgrade/1.1.13/01_upgradeAXid.sql
new file mode 100644 (file)
index 0000000..8f9b469
--- /dev/null
@@ -0,0 +1,31 @@
+UPDATE profiles SET ax_id = 19560277 WHERE pid = 48088;
+UPDATE profiles SET ax_id = 19560276 WHERE pid = 48089;
+UPDATE profiles SET ax_id = 19730178 WHERE pid = 48100;
+UPDATE profiles SET ax_id = 19820322 WHERE pid = 48114;
+UPDATE profiles SET ax_id = '2003D045' WHERE pid = 46823;
+UPDATE profiles SET ax_id = '2004D001' WHERE pid = 46824;
+UPDATE profiles SET ax_id = '2007D007' WHERE pid = 46825;
+UPDATE profiles SET ax_id = '2007D016' WHERE pid = 46826;
+UPDATE profiles SET ax_id = '2007D017' WHERE pid = 46827;
+UPDATE profiles SET ax_id = '2007D025' WHERE pid = 46828;
+UPDATE profiles SET ax_id = '2007D030' WHERE pid = 46829;
+UPDATE profiles SET ax_id = '2007D045' WHERE pid = 46830;
+UPDATE profiles SET ax_id = '2007D050' WHERE pid = 46831;
+UPDATE profiles SET ax_id = '2008D063' WHERE pid = 46832;
+UPDATE profiles SET ax_id = '2008D023' WHERE pid = 46833;
+UPDATE profiles SET ax_id = '2008D055' WHERE pid = 46834;
+UPDATE profiles SET ax_id = '2009D506' WHERE pid = 46425;
+UPDATE profiles SET ax_id = '2009D050' WHERE pid = 46836;
+UPDATE profiles SET ax_id = '2009D202' WHERE pid = 46837;
+UPDATE profiles SET ax_id = '2009D378' WHERE pid = 46838;
+UPDATE profiles SET ax_id = '2009D500' WHERE pid = 45980;
+UPDATE profiles SET ax_id = '2009D504' WHERE pid = 46034;
+UPDATE profiles SET ax_id = '2009D503' WHERE pid = 46303;
+UPDATE profiles SET ax_id = '2010D009' WHERE pid = 46311;
+UPDATE profiles SET ax_id = '2012D098' WHERE pid = 46317;
+UPDATE profiles SET ax_id = '2012D099' WHERE pid = 46362;
+UPDATE profiles SET ax_id = '2012D100' WHERE pid = 46365;
+UPDATE profiles SET ax_id = '2010D089' WHERE pid = 46374;
+UPDATE profiles SET ax_id = '2009M142' WHERE pid = 44940;
+UPDATE profiles SET ax_id = '2009M143' WHERE pid = 44942;
+UPDATE profiles SET ax_id = '2009M144' WHERE pid = 44943;
diff --git a/upgrade/1.1.13/02_deleteMaster.sql b/upgrade/1.1.13/02_deleteMaster.sql
new file mode 100644 (file)
index 0000000..2fbb536
--- /dev/null
@@ -0,0 +1,5 @@
+DELETE FROM profile_education WHERE pid = 41787 AND id = 101;
+DELETE FROM profile_education WHERE pid = 41976 AND id = 101;
+DELETE FROM profile_education WHERE pid = 42172 AND id = 101;
+DELETE FROM profile_education WHERE pid = 43002 AND id = 101;
+DELETE FROM profile_education WHERE pid = 42509 AND id = 101;