alias, ATTENTION, les classes valid_* sont à récrire en partie cvs add alias.php...
authorx2000habouzit <x2000habouzit>
Mon, 26 Jan 2004 22:29:01 +0000 (22:29 +0000)
committerx2000habouzit <x2000habouzit>
Mon, 26 Jan 2004 22:29:01 +0000 (22:29 +0000)
12 files changed:
htdocs/alias.php [new file with mode: 0644]
htdocs/css/default.css
include/valid_aliases.inc.php [new file with mode: 0644]
include/valid_emploi.inc.php [new file with mode: 0644]
include/valid_epouses.inc.php [new file with mode: 0644]
include/valid_evts.inc.php [new file with mode: 0644]
include/valid_ml.inc.php [new file with mode: 0644]
include/valid_photos.inc.php [new file with mode: 0644]
include/valid_sondages.inc.php [new file with mode: 0644]
include/validations.inc.php [new file with mode: 0644]
include/xorg.page.inc.php
templates/alias.tpl [new file with mode: 0644]

diff --git a/htdocs/alias.php b/htdocs/alias.php
new file mode 100644 (file)
index 0000000..9d08802
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+require("auto.prepend.inc.php");
+require("validations.inc.php");
+
+new_skinned_page('alias.tpl', AUTH_MDP);
+
+//Si l'utilisateur vient de faire une damande
+if (isset($_REQUEST['alias']) and isset($_REQUEST['raison'])) {
+    $alias = $_REQUEST['alias'];
+    $raison = $_REQUEST['raison'];
+
+    $page->assign('r_alias', $alias);
+    $page->assign('r_raison', $raison);
+
+    //Quelques vérifications sur l'alias (caractères spéciaux)
+    if (!preg_match( "/^[a-zA-Z0-9\-.]{3,20}$/", $alias)) {
+        $page->assign('error', "L'adresse demandée n'est pas valide.
+                                Vérifie qu'elle comporte entre 3 et 20 caractères
+                                et qu'elle ne contient que des lettres non accentuées,
+                                des chiffres ou les caractères - et .");
+        $page->display('error');
+    } else {
+        //vérifier que l'alias n'est pas déja pris
+        $result = mysql_query("SELECT 1 FROM groupex.aliases WHERE id=12 AND domain LIKE '$alias@melix.net'");
+        if (mysql_num_rows($result)>0) {
+            $page->assign('error', "L'alias $alias@melix.net a déja été attribué.
+                                    Tu ne peux donc pas l'obtenir.");
+            $page->display('error');
+        }
+
+        //vérifier que l'alias n'est pas déja en demande
+        $it = new ValidateIterator ();
+        while($req = $it->next()) {
+            if ($req->type == "alias" and $req->alias == $alias) {
+                $page->assign('error', "L'alias $alias@melix.net a déja été demandé.
+                                        Tu ne peux donc pas l'obtenir pour l'instant.");
+                $page->display('error');
+            }
+        }
+
+        //Insertion de la demande dans la base, écrase les requêtes précédente
+        $myalias = new AliasReq($_SESSION['uid'], $alias, $raison);
+        $myalias->submit();
+        $page->assign('success',$alias);
+        $page->display('succes');
+    }
+} else {
+    $page->assign('demande', AliasReq::get_unique_request($_SESSION['uid']));
+
+    //Récupération des alias éventuellement existants
+    $sql = "SELECT domain from groupex.aliases WHERE id=12 AND email like '".$_SESSION['username']."'";
+    if($result = mysql_query($sql)) {
+        list($aliases) = mysql_fetch_row($result);
+        mysql_free_result($result);
+        $page->assign('actuel',$aliases);
+    }
+    $page->display();
+}
+
+?>
index b50ce5a..dc23a70 100644 (file)
@@ -61,29 +61,30 @@ table.bicol {
     width: 98%;
     margin-left: 1%;
 }
-table.bicol tr.impair {}
-table.bicol tr.pair {
+table.tinybicol {
+    background-color: #eeeeee;
+    color: inherit;
+    border: 1px solid #336699;
+    border-collapse: collapse;
+    width: 70%;
+    margin-left: 15%;
+}
+table.tinybicol tr.impair, table.bicol tr.impair {}
+table.tinybicol tr.pair, table.bicol tr.pair {
     background-color: #eeeed0;
     color: inherit;
 }
-table.bicol th {
+table.tinybicol th, table.bicol th {
     background-color: #336699;
     color: #FFFFFF;
     font-weight: bold;
     text-align: center;
     vertical-align: middle;
 }
-table.bicol td {
+table.tinybicol td, table.bicol td {
     color: #000000;
     background-color: inherit;
 }
-table.bicolrech td {font-weight: bold;}
-table.bicol td.bicoltitre,span.bicoltitre {
-    color: #000000;
-    background-color: inherit;
-    font-weight: bold;
-}
-table.bicol td.bouton { text-align: right; }
 
 /*******************************************
 *             CHOIX SKINS                  *
diff --git a/include/valid_aliases.inc.php b/include/valid_aliases.inc.php
new file mode 100644 (file)
index 0000000..d82a8c3
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+class AliasReq extends Validate {
+    var $alias;
+    var $raison;
+
+    var $username;
+    var $prenom;
+    var $nom;
+    var $old;
+    
+    function AliasReq ($_uid, $_alias, $_raison, $_stamp=0) {
+        $this->Validate($_uid, true, 'alias', $_stamp);
+        $this->alias = $_alias;
+        $this->raison = $_raison;
+        
+        $sql = mysql_query("SELECT username,prenom,nom,domain FROM auth_user_md5 as u "
+                        .  "LEFT JOIN groupex.aliases as a ON (a.email = u.username and a.id = 12)    "
+                        .  "WHERE user_id='".$this->uid."'");
+        list($this->username,$this->prenom,$this->nom,$this->old) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+    }
+
+    function get_unique_request($uid) {
+        return parent::get_unique_request($uid,'alias');
+    }
+
+    function echo_formu() {
+        require_once("popwin.inc.php");
+?>
+        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+        <input type="hidden" name="uid" value="<?php echo $this->uid ?>">
+        <input type="hidden" name="type" value="<?php echo $this->type ?>">
+        <input type="hidden" name="stamp" value="<?php echo $this->stamp ?>">
+        <table class="bicol" align="center" cellpadding="4" summary="Demande d'alias">
+        <tr>
+            <td>Demandeur&nbsp;:
+            </td>
+            <td><a href="javascript:x()" onclick="popWin('/x.php?x=<?php echo $this->username; ?>')"><?php
+                    echo $this->prenom." ".$this->nom;?></a>
+                <?php if(isset($this->old)) echo "({$this->old})";?>
+            </td>
+        </tr>
+        <tr>
+            <td>Nouvel&nbsp;alias&nbsp;:</td>
+            <td><?php echo $this->alias;?>@melix.net</td>
+        </tr>
+        <tr>
+            <td>Motif :</td>
+            <td style="border: 1px dotted inherit">
+                <?php echo nl2br($this->raison);?>
+            </td>
+        </tr>
+        <tr>
+            <td align="center" valign="middle">
+                <input type="submit" name="submit" value="Accepter">
+                <br /><br />
+                <input type="submit" name="submit" value="Refuser">
+            </td>
+            <td>
+                <p>Raison du refus:</p>
+                <textarea rows="5" cols="74" name=motif></textarea>
+            </td>
+        </tr>
+        </table>
+        </form>
+<?php
+    }
+
+    function handle_formu () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        if(empty($_REQUEST['submit'])
+                || ($_REQUEST['submit']!="Accepter"    && $_REQUEST['submit']!="Refuser"))
+            return false;
+
+        require_once("mailer.inc.php");
+        $mxnet = $this->alias."@melix.net";
+        $mxorg = $this->alias."@melix.org";
+
+        $mymail = new mailer('Equipe Polytechnique.org <validation+melix@polytechnique.org>', 
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/MELIX] Demande de l'alias $mxnet par ".$this->username,
+                false, "validation+melix@m4x.org");
+
+        $message =
+            "Cher(e) camarade,\n".
+            "\n";
+
+        if($_REQUEST['submit']=="Accepter") {
+            $this->commit();
+            $message .=
+                "  Les adresses e-mail $mxnet et $mxorg que tu avais demandées viennent".
+                " d'être créées, tu peux désormais les utiliser à ta convenance.\n";
+        } else {
+            $message .=
+                "La demande que tu avais faite pour les alias $mxnet et $mxorg a été refusée.\n";
+            if (!empty($_REQUEST["motif"]))
+                $message .= "\nLa raison de ce refus est : \n".
+                    stripslashes($_REQUEST["motif"])."\n";
+        }
+
+        $message .=
+            "\n".
+            "Cordialement,\n".
+            "L'équipe X.org";
+        $message = wordwrap($message,78);  
+        $mymail->setBody($message);
+        $mymail->send();
+        echo "<br />Mail envoyé";
+        //Suppression de la demande
+        $this->clean();
+    }
+
+    function commit () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+
+        mysql_query("DELETE FROM groupex.aliases WHERE id=12 AND email='{$this->username}'");
+        mysql_query("INSERT INTO groupex.aliases SET email='{$this->username}',domain='"
+                    .$this->alias."@melix.net',id=12");
+    }
+}
+
+?>
diff --git a/include/valid_emploi.inc.php b/include/valid_emploi.inc.php
new file mode 100644 (file)
index 0000000..30e20b8
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+class EmploiReq extends Validate {
+    var $entreprise;
+    var $titre;
+    var $mail;
+    var $text;
+
+    function EmploiReq($_entreprise,$_titre,$_mail,$_text,$_stamp=0) {
+        $this->Validate(0, false, 'emploi', $_stamp);
+        $this->entreprise = $_entreprise;
+        $this->titre = $_titre;
+        $this->mail = $_mail;
+        $this->text = wordwrap($_text,78);
+    }
+
+    function get_unique_request($uid) {
+        return false; // non unique
+    }
+
+    function echo_formu() {
+?>
+<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+    <input type="hidden" name="uid" value="<?php echo $this->uid; ?>" />
+    <input type="hidden" name="type" value="<?php echo $this->type; ?>" />
+    <input type="hidden" name="stamp" value="<?php echo $this->stamp; ?>" />
+    <table class="bicol" align="center" cellpadding="4" summary="Annonce emploi">
+        <thead>
+            <tr>
+                <th colspan="2">
+                    Offre d'emploi
+                </th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr>
+                <td>
+                    Demandeur
+                </td>
+                <td>
+                    <?php echo htmlentities($this->entreprise).
+                    " (".htmlentities($this->mail).")";?>
+                </td>
+            </tr>
+            <tr>
+                <td>
+                    Titre du post
+                </td>
+                <td>
+                    <?php echo htmlentities($this->titre);?>
+                </td>
+            </tr>
+            <tr>
+                <td colspan="2">
+                    <pre><?php echo $this->text;?></pre>
+                </td>
+            </tr>
+            <tr>
+                <td class="bouton" colspan="2">
+                    <input type="submit" name="submit" value="Accepter" />
+                    <input type="submit" name="submit" value="Refuser" />
+                </td>
+            </tr>
+        </tbody>
+    </table>
+</form>
+<?php
+    }
+
+    function handle_formu() {
+        if (isset($_POST['submit'])) {
+            require("mailer.inc.php");
+            $mymail = new mailer('Equipe Polytechnique.org '
+                .'<validation+recrutement@polytechnique.org>', 
+                $this->mail,
+                "[Polytechnique.org/EMPLOI] Annonce emploi : ".$this->entreprise,
+                false, "validation+recrutement@m4x.org");
+
+            $message =
+                "Bonjour,\n".
+                "\n";
+
+            if($_REQUEST['submit']=="Accepter") {
+                require("nntp.inc.php");
+                require("poster.inc.php");
+                $post = new poster(
+                  "Annonces recrutement <recrutement@polytechnique.org>", 
+                  "xorg.pa.emploi", 
+                  "[OFFRE PUBLIQUE] {$this->entreprise} : {$this->titre}");
+# Ca c'est pour faire les tests (xorg.test)
+#                $post = new poster(
+#                  "Tests annonces recrutement <support@polytechnique.org>", 
+#                  "xorg.test", 
+#                  "[TEST PUBLIC] {$this->entreprise} : {$this->titre}");
+                $post->setbody($this->text
+                 ."\n\n\n"
+                 ."#############################################################################\n"
+                 ." Ce forum n'est pas accessible à l'entreprise qui a proposé  cette  annonce.\n"
+                 ." Pour  y  répondre,  utilise  les  coordonnées  mentionnées  dans  l'annonce\n"
+                 ." elle-même.\n"
+                 ."#############################################################################\n"
+                 );
+                $post->post();
+                $message .= 
+                "  L'annonce << {$this->titre} >> ".
+                "a été acceptée par les modérateurs. Elle apparaîtra ".
+                "dans le forum emploi du site\n\n".
+                "Nous vous remercions d'avoir proposé cette annonce.";
+            } else {
+                $message .=
+                "  L'annonce << {$this->titre} >> ".
+                "a été refusée par les modérateurs.\n\n";
+            }
+
+            $message .=
+                "\n".
+                "Cordialement,\n".
+                "L'équipe X.org";
+            $message = wordwrap($message,78);  
+            $mymail->setBody($message);
+            $mymail->send();
+            $this->clean();
+        }
+    }
+
+    function commit() {
+    }
+}
+
+?>
diff --git a/include/valid_epouses.inc.php b/include/valid_epouses.inc.php
new file mode 100644 (file)
index 0000000..85a77e7
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+class EpouseReq extends Validate {
+    var $epouse;
+    var $alias;
+    var $username;
+
+    var $oldepouse;
+    var $oldalias;
+    var $prenom;
+    var $nom;
+
+    var $homonyme;
+    
+    function EpouseReq ($_uid, $_username, $_epouse, $_stamp=0) {
+        $this->Validate($_uid, true, 'epouse', $_stamp);
+        $this->epouse = $_epouse;
+        $this->username = $_username;
+        
+        list($prenom) = explode('.',$_username);
+        $this->alias = make_username($prenom,$this->epouse);
+        if(empty($_epouse))
+            $this->alias = "<span class=\"erreur\">suppression</a>";
+        
+        $sql = mysql_query("select u1.alias, u1.epouse, u1.prenom, u1.nom"
+            .", IFNULL(u2.username,u3.username)"
+            ." FROM auth_user_md5 as u1"
+            ." LEFT JOIN auth_user_md5 as u2"
+                ." ON(u2.username = '{$this->alias}' and u2.user_id != u1.user_id)"
+            ." LEFT JOIN auth_user_md5 as u3"
+                ." ON(u3.alias = '{$this->alias}' and u3.user_id != u1.user_id)"
+            ." WHERE u1.user_id = ".$this->uid);
+        list($this->oldalias, $this->oldepouse, $this->prenom, $this->nom, $this->homonyme) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+    }
+
+    function get_unique_request($uid) {
+        return parent::get_unique_request($uid,'epouse');
+    }
+
+    function echo_formu() {
+        require_once("popwin.inc.php");
+?>
+        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+        <input type="hidden" name="uid" value="<?php echo $this->uid ?>">
+        <input type="hidden" name="type" value="<?php echo $this->type ?>">
+        <input type="hidden" name="stamp" value="<?php echo $this->stamp ?>">
+        <table class="bicol" align="center" cellpadding="4" summary="Demande d'alias d'épouse">
+        <tr>
+            <td>Demandeur&nbsp;:</td>
+            <td><a href="javascript:x()" onclick="popWin('/x.php?x=<?php echo $this->username; ?>')">
+                <?php echo $this->prenom." ".$this->nom;?>
+                </a>
+                <?php if($this->oldepouse) echo "({$this->oldepouse} - {$this->oldalias})";?>
+            </td>
+        </tr>
+        <tr>
+            <td>&Eacute;pouse&nbsp;:</td>
+            <td><?php echo $this->epouse;?></td>
+        </tr>
+        <tr>
+            <td>Nouvel&nbsp;alias&nbsp;:</td>
+            <td><?php echo $this->alias;?></td>
+        </tr>
+<?php
+        if (!empty($this->homonyme)) {
+?>
+        <tr>
+            <td colspan="2">
+                <span class="erreur">Probleme d'homonymie !
+                <a href="javascript:x()"  onclick="popWin('/x.php?x=<?php echo $this->homonyme; ?>')">
+                    <?php echo $this->homonyme;?>
+                </a>
+                </span>
+            </td>
+        </tr>
+<?php
+        }
+?>
+        <tr>
+            <td align="center" valign="middle">
+                <input type="submit" name="submit" value="Accepter">
+                <br /><br />
+                <input type="submit" name="submit" value="Refuser">
+            </td>
+            <td>
+                <p>Raison du refus:</p>
+                <textarea rows="5" cols="74" name=motif></textarea>
+            </td>
+        </tr>
+        </table>
+        </form>
+<?php
+    }
+
+    function handle_formu () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        if(empty($_REQUEST['submit'])
+                || ($_REQUEST['submit']!="Accepter"    && $_REQUEST['submit']!="Refuser"))
+            return false;
+            
+        $message = "Chère camarade,\n\n";
+        
+        if($_REQUEST['submit']=="Accepter") {
+            $message .=
+                "  La demande de changement de nom de mariage que tu as demandée vient".
+                " d'être effectuée.\n\n";
+
+            if ($this->oldepouse) {
+                $message .= 
+                    "  Les alias {$this->oldalias}@polytechnique.org et ".
+                    "{$this->oldalias}@m4x.org ont été supprimés.\n\n";
+            }
+
+            if ($this->epouse) {
+                $message .=
+                    "  De plus, les alias ".$this->alias."@polytechnique.org et ".
+                    $this->alias."@m4x.org ont été créés.\n\n";
+            }
+            $this->commit();
+        } else { // c'était donc Refuser
+            $message .=
+                "La demande de changement de nom de mariage que tu avais faite a été refusée.\n";
+            if ($_REQUEST["motif"] != "" )
+                $message .= "\nLa raison de ce refus est : \n".
+                    stripslashes($_REQUEST["motif"])."\n\n";
+        }
+        
+        $message .=
+            "Cordialement,\n".
+            "L'équipe X.org";
+
+        $message = wordwrap($message,78);  
+        require_once("mailer.inc.php");
+        $mymail = new mailer('Equipe Polytechnique.org <validation+epouse@polytechnique.org>',
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/EPOUSE] Changement de nom de mariage de ".$this->username,
+                false, "validation+epouse@m4x.org");
+        $mymail->setBody($message);
+        $mymail->send();
+
+        echo "<br />Mail envoyé";
+        $this->clean();
+    }
+
+    function commit () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        $alias = ($this->epouse ? $this->alias : "");
+        mysql_query("UPDATE auth_user_md5 set epouse='".$this->epouse."',epouse_soundex='".soundex_fr($this->epouse)."',alias='".$this->alias."' WHERE user_id=".$this->uid);
+    }
+}
+
+?>
diff --git a/include/valid_evts.inc.php b/include/valid_evts.inc.php
new file mode 100644 (file)
index 0000000..e8d7d64
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+
+class EvtReq extends Validate {
+    var $evtid;
+    var $titre;
+    var $texte;
+    var $pmin;
+    var $pmax;
+    var $peremption;    
+    var $comment;
+    
+    var $username;
+    var $promo;
+    var $nom;
+    var $prenom;
+
+    function EvtReq($_evtid,$_titre,$_texte,$_pmin,$_pmax,$_peremption,
+      $_comment,$_uid,$_stamp=0) {
+        $this->Validate($_uid, false, 'evts', $_stamp);
+        $this->evtid = $_evtid;
+        $this->titre = $_titre;
+        $this->texte = $_texte;
+        $this->pmin = $_pmin;
+        $this->pmax = $_pmax;
+        $this->peremption = $_peremption;
+        $this->comment = $_comment;
+        $req = mysql_query("SELECT username,promo,nom,prenom FROM "
+          ."auth_user_md5 WHERE user_id='$_uid'");
+        list($this->username,$this->promo,$this->nom,$this->prenom) 
+            = mysql_fetch_row($req);
+        mysql_free_result($req);
+    }
+
+    function get_unique_request($uid) {
+        return false;  //non unique
+    }
+
+    function echo_formu() {
+        require("popwin.inc.php");
+?>
+<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" name="modif">
+  <input type="hidden" name="uid" value="<?php echo $this->uid; ?>" />
+  <input type="hidden" name="type" value="<?php echo $this->type; ?>" />
+  <input type="hidden" name="stamp" value="<?php echo $this->stamp; ?>" />
+  <table class="bicol" width="98%">
+    <thead>
+      <tr>
+        <th colspan="2">
+          Événement
+        </th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>
+          Posté par <?php echo "<a href=\"javascript:x()\"  "
+          ."onclick=\"popWin('../x.php?x={$this->username}')\">"
+          ."{$this->prenom} {$this->nom} (X{$this->promo})</a> "
+          ."[<a href=\"mailto:{$this->username}@polytechnique.org\">lui "
+          ."écrire</a>]"; ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bicoltitre">
+          Titre
+        </td>
+        <td>
+          <?php echo $this->titre; ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bicoltitre">
+          Texte
+        </td>
+        <td>
+          <?php echo $this->texte; ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bicoltitre">
+          Péremption
+        </td>
+        <td>
+          <?php echo $this->peremption ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bicoltitre">
+          Promos
+        </td>
+        <td>
+          <?php echo $this->pmin; ?> - <?php echo $this->pmax; ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bicoltitre">
+          Commentaire
+        </td>
+        <td>
+          <?php echo $this->comment; ?>
+        </td>
+      </tr>
+      <tr>
+        <td class="bouton" colspan="2">
+          <input type="submit" name="action" value="Valider" />
+          <input type="submit" name="action" value="Invalider" />
+          <input type="submit" name="action" value="Supprimer" />
+        </td>
+      </tr>
+    </tbody>
+  </table>
+</form>
+<?php
+    }
+
+    function handle_formu() {
+        if (isset($_POST['action'])) {
+            require("mailer.inc.php");
+            $mymail = new mailer('Equipe Polytechnique.org '
+                .'<validation+recrutement@polytechnique.org>', 
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/EVENEMENTS] Proposition d'événement",
+                false, "validation+evts@m4x.org");
+
+            $message = "Cher(e) camarade,\n\n";
+
+            if($_REQUEST['action']=="Valider") {
+                $req="UPDATE evenements SET creation_date = "
+                ."creation_date, validation_user_id =".$_SESSION['uid']
+                .", validation_date = NULL, flags = CONCAT(flags,"
+                ."',valide')  WHERE id='{$this->evtid}' LIMIT 1";
+                $result = mysql_query ($req);
+                $message .= "L'annonce que tu avais proposée ("
+                    .strip_tags($this->titre).") vient d'être validée.";
+            }
+            if($_REQUEST['action']=="Invalider") {
+                $req="UPDATE evenements SET creation_date = "
+                ."creation_date, validation_user_id =".$_SESSION['uid']
+                .", validation_date = NULL, flags = REPLACE(flags,"
+                ."'valide','')  WHERE id='{$this->evtid}' LIMIT 1";
+                $result = mysql_query ($req);
+                $message .= "L'annonce que tu avais proposée ("
+                    .strip_tags($this->titre).") a été refusée.";
+            }
+            if($_REQUEST['action']=="Supprimer") {
+                $req="DELETE from evenements WHERE id='{$this->evtid}'"
+                ." LIMIT 1";
+                $result = mysql_query ($req);
+            }
+            $message .=
+                "\n".
+                "Cordialement,\n".
+                "L'équipe X.org";
+            $message = wordwrap($message,78);  
+            $mymail->setBody($message);
+            if ($_POST['action']!="Supprimer") 
+                $mymail->send();
+            $this->clean();
+        }
+    }
+
+    function commit() {
+    }
+}
+
+?>
diff --git a/include/valid_ml.inc.php b/include/valid_ml.inc.php
new file mode 100644 (file)
index 0000000..fd3c4e2
--- /dev/null
@@ -0,0 +1,264 @@
+<?php
+
+class MListReq extends Validate {
+    var $alias;
+    var $topic;
+    var $publique;
+    var $libre;
+    var $archive;
+    var $freeins;
+    var $comment;
+    var $moderos;
+    var $membres;
+
+    var $username;
+    var $prenom;
+    var $nom;
+
+    function MListReq ($_uid, $_alias, $_topic, $_publique, $_libre, $_archive, $_freeins,
+            $_comment, $_moderos, $_membres, $_stamp=0) {
+        $this->Validate($_uid, false, 'ml', $_stamp);
+        $this->alias = $_alias;
+        $this->topic = $_topic;
+        $this->publique = $_publique;
+        $this->libre = $_libre;
+        $this->archive = $_archive;
+        $this->freeins = $_freeins;
+        $this->comment = $_comment;
+        $this->moderos = $_moderos;
+        $this->membres = $_membres;
+        
+        $sql = mysql_query("SELECT username,prenom,nom FROM auth_user_md5 WHERE user_id=".$this->uid);
+        list($this->username,$this->prenom,$this->nom) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+    }
+
+    function get_unique_request($uid) {
+        return false; // ben oui, c pas un objet unique !!!
+    }
+
+    function echo_formu() {
+        require_once("popwin.inc.php");
+?>
+        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+        <input type="hidden" name="uid" value="<?php echo $this->uid ?>">
+        <input type="hidden" name="type" value="<?php echo $this->type ?>">
+        <input type="hidden" name="stamp" value="<?php echo $this->stamp ?>">
+        <table class="bicol" align="center">
+        <tr>
+            <td>Demandeur&nbsp;:</td>
+            <td><a href="javascript:x()" onclick="popWin('/x.php?x=<?php echo $this->username; ?>')">
+                <?php echo $this->prenom." ".$this->nom;?>
+                </a>
+            </td>
+        </tr>
+        <tr>
+            <td>Motif :</td>
+            <td><?php echo nl2br($this->comment);?>
+            </td>
+        </tr>
+        <tr>
+            <td style="border-top:1px dotted inherit">
+                Alias :
+            </td>
+            <td style="border-top:1px dotted inherit">
+                <input type="text" name="alias" value="<?php echo $this->alias ?>" />@polytechnique.org
+            </td>
+        </tr>
+        <tr>
+            <td>Topic :</td>
+            <td><input type="text" name="topic" size="60" value="<?php echo $this->topic ?>" />
+            </td>
+        </tr>
+        <tr>
+            <td>Propriétés :</td>
+            <td>
+                <input type="checkbox" name="publique" <?php
+                    echo($this->publique?"checked=\"checked\"":"")
+                ?>/>Publique
+                <input type="checkbox" name="libre" <?php
+                    echo($this->libre?"checked=\"checked\"":"")
+                ?>/>Libre
+                <input type="checkbox" name="freeins" <?php
+                    echo($this->freeins?"checked=\"checked\"":"")
+                ?>/>Freeins
+                <input type="checkbox" name="archive" <?php
+                    echo($this->archive?"checked=\"checked\"":"")
+                ?>/>Archive
+            </td>
+        </tr>
+        <tr>
+            <td style="border-top:1px dotted inherit">
+                Modéros :
+            </td>
+            <td style="border-top:1px dotted inherit">
+<?php
+                $sql = mysql_query("SELECT username FROM auth_user_md5"
+                    ." WHERE user_id IN ({$this->moderos})"
+                    ." ORDER BY nom, prenom");
+                $tab = array();
+                while(list($username) = mysql_fetch_row($sql))
+                    $tab[] = $username;
+                echo implode(', ', $tab);
+                mysql_free_result($sql);
+?>
+            </td>
+        </tr>
+        <tr>
+            <td>Membres :</td>
+            <td><?php
+                $sql = mysql_query("SELECT username FROM auth_user_md5"
+                    ." WHERE user_id IN ({$this->membres})"
+                    ." ORDER BY nom, prenom");
+                $tab = array();
+                while(list($username) = mysql_fetch_row($sql))
+                    $tab[] = $username;
+                echo implode(', ', $tab);
+                mysql_free_result($sql);
+                ?>
+            </td>
+        </tr>
+        <tr>
+            <td align="center" valign="middle" style="border-top:1px dotted inherit">
+                <input type="submit" name="submit" value="Accepter">
+                <br /><br />
+                <input type="submit" name="submit" value="Refuser">
+            </td>
+            <td style="border-top:1px dotted inherit">
+                <p>Explication complémentaire (refus ou changement de config, ...)</p>
+                <textarea rows="5" cols="74" name=motif></textarea>
+            </td>
+        </tr>
+        </table>
+        </form>
+<?php
+    }
+    
+    function handle_formu () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        if(empty($_REQUEST['submit']) || ($_REQUEST['submit']!="Accepter"
+            && $_REQUEST['submit']!="Refuser"))
+            return false;
+
+        $this->alias = $_REQUEST['alias'];
+        $this->topic = $_REQUEST['topic'];
+        $this->publique = isset($_REQUEST['publique']) && $_REQUEST['publique'];
+        $this->libre = isset($_REQUEST['libre']) && $_REQUEST['libre'];
+        $this->archive = isset($_REQUEST['archive']) && $_REQUEST['archive'];
+        $this->freeins = isset($_REQUEST['freeins']) && $_REQUEST['freeins'];
+
+        $this->clean();
+        $this->submit();
+
+        require_once("mailer.inc.php");
+        
+        $mymail = new mailer('Equipe Polytechnique.org <validation+listes@polytechnique.org>', 
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/LISTES] Demande de la liste {$this->alias} par ".$this->username,
+                false, "validation+listes@m4x.org");
+
+        $message =
+            "Cher(e) camarade,\n".
+            "\n";
+
+        if($_REQUEST['submit']=="Accepter") {
+            if($this->commit()) {
+                $message .=
+                    "  La mailing list {$this->alias} que tu avais demandée vient".
+                    " d'être créée\n";
+                if (!empty($_REQUEST["motif"]))
+                    $message .= "\nInformations complémentaires :\n".
+                        stripslashes($_REQUEST["motif"])."\n";
+            } else {
+                echo "<p class=\"erreur\">Aucun mail envoyé, erreur !</p>\n";
+                return false;
+            }
+        } else {
+            $message .=
+                "La demande que tu avais faite pour la mailing list ".
+                $this->alias." a été refusée.\n";
+            if (!empty($_REQUEST["motif"]))
+                $message .= "\nLa raison de ce refus est : \n".
+                    stripslashes($_REQUEST["motif"])."\n";
+            $this->clean();
+        }
+
+        $message .=
+            "\n".
+            "Cordialement,\n".
+            "L'équipe X.org";
+        $message = wordwrap($message,78);  
+        $mymail->setBody($message);
+        $mymail->send();
+        echo "<p class=\"normal\">Mail envoyé</p>";
+        return true;
+    }
+
+    function commit () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        require_once("flagset.inc.php");
+        $type = new flagset();
+        if ($this->libre) $type->addflag('libre');
+        if ($this->publique) $type->addflag('publique');
+        if ($this->archive) $type->addflag('archive');
+        if ($this->freeins) $type->addflag('freeins'); 
+        
+        mysql_query("INSERT INTO listes_def SET type='".$type->value."', topic='{$this->topic}'");
+        echo "<p class=\"normal\">Liste {$this->alias} créée</p>\n";
+    
+        if(!mysql_errno()) {
+            $id = mysql_insert_id();
+            if ($this->archive)
+                mysql_query("replace into listes_ins set idl=$id, idu=0");
+            mysql_query("INSERT INTO aliases (alias,type,id) VALUES".
+                    "('{$this->alias}','liste',$id)".
+                    ",('owner-{$this->alias}','liste-owner',$id)".
+                    ",('sm-{$this->alias}','liste-sans-moderation',$id)".
+                    ",('{$this->alias}-request','liste-request',$id)");
+
+            if (!mysql_errno()) {
+                echo "<p class=\"normal\">Liste {$this->alias} ajoutée aux alias</p>\n";
+                if (isset($this->moderos)) {
+                    $tokens = explode(',',$this->moderos);
+                    $values = array();
+                    foreach ($tokens as $tok) {
+                        $values[] = "($id,$tok)";
+                    }
+                    $values = implode(',', $values);
+                    mysql_query("INSERT INTO listes_mod (idl, idu) VALUES $values");
+                }
+
+                // ajout des membres si précisés
+                if (isset($this->membres)) {
+                    $tokens = explode(',',$this->membres);
+                    $values = array();
+                    foreach ($tokens as $tok) {
+                        $values[] = "($id,$tok)";
+                    }
+                    $values = implode(',', $values);
+                    mysql_query("INSERT INTO listes_ins (idl, idu) VALUES $values");
+                }
+
+                $this->clean();
+                return true;
+            } else { // alias déjà existant ?
+                mysql_query("DELETE FROM aliases WHERE id='$id'");
+                mysql_query("DELETE FROM listes_ins WHERE id='$id'");
+                mysql_query("DELETE FROM listes_def WHERE id='$id'");
+                echo "<p class=\"erreur\">Nom déjà utilisé (owner-{$this->alias} ou {$this->alias}-request)</p>\n";
+                return false;
+            } // if mysql_errno == 0 pour insert dans aliases
+        } else {
+            echo "<p class=\"erreur\">Nom déjà utilisé</p>\n";
+            return false;
+        } // if mysql_errno == 0 pour insert dans liste_def
+
+        return true;
+    }
+}
+
+?>
diff --git a/include/valid_photos.inc.php b/include/valid_photos.inc.php
new file mode 100644 (file)
index 0000000..7e2a09c
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+
+class PhotoReq extends Validate {
+    var $mimetype;
+    var $data;
+    var $x;
+    var $y;
+
+    var $username;
+    var $prenom;
+    var $nom;
+   
+    function PhotoReq ($_uid, $_file, $_stamp=0) {
+        global $erreur;
+
+        $this->Validate($_uid, true, 'photo', $_stamp);
+        $sql = mysql_query("SELECT username, prenom, nom FROM auth_user_md5 WHERE user_id=".$this->uid);
+        list($this->username,$this->prenom,$this->nom) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+        
+        if(!file_exists($_file)) {
+            $erreur = "Fichier inexistant";
+            return false;
+        }
+        // calcul de la taille de l'image
+        $image_infos = getimagesize($_file);
+        if(empty($image_infos)) {
+            $erreur = "Image invalide";
+            return false;
+        }
+        list($this->x, $this->y, $this->mimetype) = $image_infos;
+        // récupération du type de l'image
+        switch($this->mimetype) {
+            case 1: $this->mimetype = "gif"; break;
+            case 2: $this->mimetype = "jpeg"; break;
+            case 3: $this->mimetype = "png"; break;
+            default: $erreur = "Type d'image invalide"; return false;
+        }
+        // lecture du fichier
+        if(!($size = filesize($_file)) or $size > SIZE_MAX) {
+            $erreur = "Image trop grande (max 30ko)";
+            return false;
+        }
+        $fd = fopen($_file, 'r');
+        if (!$fd) return false;
+        $this->data = fread($fd, SIZE_MAX);
+        fclose($fd);
+
+        unset($erreur);
+    }
+
+    function get_unique_request($uid) {
+        return parent::get_unique_request($uid,'photo');
+    }
+
+    function echo_formu() {
+        require_once("popwin.inc.php");
+?>
+        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+        <input type="hidden" name="uid" value="<?php echo $this->uid ?>">
+        <input type="hidden" name="type" value="<?php echo $this->type ?>">
+        <input type="hidden" name="stamp" value="<?php echo $this->stamp ?>">
+        <table class="bicol" align="center" summary="Demande d'alias">
+        <tr>
+            <td>Demandeur&nbsp;:</td>
+            <td><a href="javascript:x()" onclick="popWin('/x.php?x=<?php echo $this->username; ?>')">
+                <?php echo $this->prenom." ".$this->nom;?>
+                </a>
+            </td>
+        </tr>
+        <tr>
+            <td align="center" valign="middle" colspan="2">
+                <img src="<?php echo "../getphoto.php?x=".$this->uid.
+                    (isset($_COOKIE[session_name()]) ?  "" : "&amp;".SID);?>" width=110 alt=" [ PHOTO ] " />
+                <img src="<?php echo "../getphoto.php?x=".$this->uid."&amp;req=true".
+                    (isset($_COOKIE[session_name()]) ?  "" : "&amp;".SID);?>" width=110 alt=" [ PHOTO ] " />
+            </td>
+        </tr>
+        <tr>
+            <td align="center" valign="middle">
+                <input type="submit" name="submit" value="Accepter">
+                <br /><br />
+                <input type="submit" name="submit" value="Refuser">
+            </td>
+            <td>
+                <p>Raison du refus:</p>
+                <textarea rows="5" cols="74" name="motif"></textarea>
+            </td>
+        </tr>
+        </table>
+        </form>
+<?php
+    }
+    
+    function handle_formu () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        if(empty($_REQUEST['submit'])
+                || ($_REQUEST['submit']!="Accepter" && $_REQUEST['submit']!="Refuser"))
+            return false;
+        
+        $message = "Cher(e) camarade,\n\n";
+        
+        if($_REQUEST['submit']=="Accepter") {
+            $sql = mysql_query("SELECT alias FROM auth_user_md5 WHERE user_id=".$this->uid);
+            list($old) = mysql_fetch_row($sql);
+            mysql_free_result($sql);
+
+            $message .=
+                "  La demande de changement de photo que tu as "
+                ."demandée vient d'être effectuée.\n\n";
+
+            $this->commit();
+        } else { // c'était donc Refuser
+            $message .=
+                "La demande de changement de photo que tu avais faite a été refusée.\n";
+            if ($_REQUEST["motif"] != "" )
+                $message .= "\nLa raison de ce refus est : \n".
+                    stripslashes($_REQUEST["motif"])."\n\n";
+        }
+        
+        $message .=
+            "Cordialement,\n".
+            "L'équipe X.org";
+
+        $message = wordwrap($message,78);  
+        require_once("mailer.inc.php");
+        $mymail = new mailer('Equipe Polytechnique.org <validation+trombino@polytechnique.org>',
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/PHOTO] Changement de photo de ".$this->username,
+                false, "validation+trombino@m4x.org");
+        $mymail->setBody($message);
+        $mymail->send();
+
+        echo "<br />Mail envoyé";
+        $this->clean();
+    }
+    
+    function commit () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        
+        mysql_query("REPLACE INTO photo set uid='".$this->uid."', attachmime = '".$this->mimetype."', attach='"
+            .addslashes($this->data)."', x='".$this->x."', y='".$this->y."'");
+    }
+}
+
+?>
diff --git a/include/valid_sondages.inc.php b/include/valid_sondages.inc.php
new file mode 100644 (file)
index 0000000..03dd978
--- /dev/null
@@ -0,0 +1,165 @@
+<?php
+
+class SondageReq extends Validate {
+    var $sid;
+    var $titre;
+    var $alias;
+
+    var $username;
+    var $prenom;
+    var $nom;
+    
+    function SondageReq ($_uid, $_sid, $_stamp) {
+        $this->Validate($_uid, false, 'sondage', $_stamp);
+        $this->sid = $_sid;
+        
+        $sql = mysql_query("SELECT username,prenom,nom FROM auth_user_md5 "
+            .   "WHERE user_id='".$this->uid."'");
+        list($this->username,$this->prenom,$this->nom) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+        $sql = mysql_query("SELECT titre FROM sondage.description_generale "
+            .   "WHERE ids='".$this->sid."'");
+        list($this->titre) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+        $this->alias = substr($this->titre,0,min(15,strlen($this->titre)));
+    }
+
+    function get_request($uid,$stamp) {
+        return parent::get_request($uid,'sondage',$stamp);
+    }
+
+    function echo_formu() {
+        require_once("popwin.inc.php");
+?>
+        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
+        <input type="hidden" name="uid" value="<?php echo $this->uid ?>">
+        <input type="hidden" name="type" value="<?php echo $this->type ?>">
+        <input type="hidden" name="stamp" value="<?php echo $this->stamp ?>">
+        <table class="bicol" align="center" cellpadding="4" summary="Sondage">
+        <tr>
+            <td>Demandeur&nbsp;:
+            </td>
+            <td><a href="javascript:x()" onclick="popWin('/x.php?x=<?php echo $this->username; ?>')"><?php
+                    echo $this->prenom." ".$this->nom;?></a>
+                <?php if(isset($this->old)) echo "({$this->old})";?>
+            </td>
+        </tr>
+           <tr>
+            <td>Titre du sondage&nbsp;:</td>
+            <td><?php echo $this->titre;?></td>
+        </tr>
+        <tr>
+            <td>Prévisualisation du sondage&nbsp;:</td>
+            <td><a href = <?php 
+                global $baseurl; 
+                echo "\"$baseurl/sondage/questionnaire.php?SID=".$this->sid.'"';
+                echo ' target = "_blank">'.$this->titre;
+                ?>
+                </a></td>
+        </tr>
+        <tr>
+            <td>Alias du sondage&nbsp;:</td>
+            <td><input type="text" name="alias" value="<?php echo $this->alias;?>">&nbsp;(ne doit
+            pas contenir le caractère ')</td>
+        </tr>
+        <tr>
+            <td align="center" valign="middle">
+                <input type="submit" name="submit" value="Accepter">
+                <br /><br />
+                <input type="submit" name="submit" value="Refuser">
+            </td>
+            <td>
+                <p>Raison du refus:</p>
+                <textarea rows="5" cols="74" name=motif></textarea>
+            </td>
+        </tr>
+        </table>
+        </form>
+<?php
+    }
+
+    function handle_formu () {
+        global $no_update_bd,$baseurl;
+        if($no_update_bd) return false;
+        
+        if(empty($_REQUEST['submit'])
+                || ($_REQUEST['submit']!="Accepter"    && $_REQUEST['submit']!="Refuser"))
+            return false;
+        
+        if ($_REQUEST['submit']!="Refuser") {
+            $alias = stripslashes($_REQUEST['alias']);
+            if ($alias=="") {
+                echo "<br>Il faut entrer un alias pour valider ce sondage.";
+                return false;
+            }
+            else {
+                if (strlen($alias)>15) {
+                    echo "<br>L'alias est trop long.";
+                    return false;
+                }
+                else if (strpos($alias,"'")) {
+                    echo "<br>L'alias ne doit pas contenir le caractère '";
+                    return false;
+                }
+                else {//on vérifie que l'alias n'existe pas déjà
+                    $resultat = mysql_query("select alias from sondage.description_generale ".
+                    "where alias='$alias'");
+                    if (mysql_num_rows($resultat)>0) {
+                        echo "<br>Cet alias est déjà utilisé.";
+                        return false;
+                    }
+                }
+            }
+            $this->alias=$alias;
+        }
+
+        require_once("mailer.inc.php");
+    
+        $lien = "$baseurl/sondage/questionnaire.php?alias=".urlencode($this->alias);
+           $titre = '"'.str_replace('&#039;',"'",$this->titre).'"';
+
+        $mymail = new mailer('Equipe Polytechnique.org <validation+sondage@polytechnique.org>', 
+                $this->username."@polytechnique.org",
+                "[Polytechnique.org/SONDAGE] Demande de validation du sondage $titre par ".$this->username,
+                false, "validation+sondage@m4x.org");
+
+        $message =
+            "Cher(e) camarade,\n".
+            "\n";
+
+        if($_REQUEST['submit']=="Accepter") {
+            $this->commit();
+            $message .=
+                "  Le sondage $titre que tu as composé vient d'être validé.\n".
+               "Il ne te reste plus qu'à transmettre aux sondés l'adresse".
+                " où ils pourront voter. Cette adresse est : $lien.\n";
+        } else {
+            $message .=
+                "Le sondage $titre que tu avais proposé a été refusé.\n";
+            if (!empty($_REQUEST["motif"]))
+                $message .= "\nLa raison de ce refus est : \n".
+                    stripslashes($_REQUEST["motif"])."\n";
+        }
+
+        $message .=
+            "\n".
+            "Cordialement,\n".
+            "L'équipe X.org";
+        $message = wordwrap($message,78);  
+        $mymail->setBody($message);
+        $mymail->send();
+        echo "<br />Mail envoyé";
+        //Suppression de la demande
+        $this->clean();
+    }
+
+    function commit () {
+        global $no_update_bd;
+        require_once("sondage.requetes.inc.php");
+        if($no_update_bd) return false;
+
+        passer_en_prod($this->sid,$this->alias);
+    }
+}
+
+?>
diff --git a/include/validations.inc.php b/include/validations.inc.php
new file mode 100644 (file)
index 0000000..9d992f4
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+/* vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
+ * $Id: validations.inc.php,v 1.1 2004-01-26 22:29:02 x2000habouzit Exp $
+ *
+ */
+
+define('SIZE_MAX', 32768);
+
+/** classe listant les objets dans la bd */
+class ValidateIterator {
+    /** variable interne qui conserve l'état en cours de la requête */
+    var $sql;
+    
+    /** constructeur */
+    function ValidateIterator () {
+        $this->sql = mysql_query("SELECT data,stamp FROM requests ORDER BY stamp");
+    }
+
+    /** renvoie l'objet suivant, ou false */
+    function next () {
+        if(list($result,$stamp) = mysql_fetch_row($this->sql)) {
+            $result = unserialize($result);
+            $result->stamp = $stamp;
+            return($result);
+        } else {
+            mysql_free_result($this->sql);
+            return(false);
+        }
+    }
+}
+
+/** classe "virtuelle" à dériver pour chaque nouvelle implémentation
+ * XXX attention, dans l'implémentation de la classe, il ne faut jamais faire confiance au timestamp
+ * de l'objet qui sort du BLOB de la BD, on met donc systématiquement le champt $this->stamp depuis
+ * le TIMESTAMP de la BD
+ * Par contre, à la sortie de toute fonction il faut que le stamp soit valide !!! XXX
+ */
+class Validate {
+    /** l'uid de la personne faisant la requête */
+    var $uid;
+    /** le time stamp de la requête */
+    var $stamp;
+    /** indique si la donnée est unique pour un utilisateur donné */
+    var $unique;
+    /** donne le type de l'objet (certes redonant, mais plus pratique) */
+    var $type;
+    
+    /** fonction statique qui renvoie la requête dans le cas d'un objet unique de l'utilisateur d'id $uid
+     * @param   $uid    l'id de l'utilisateur concerné
+     * @param   $type   le type de la requête
+     *
+     * XXX fonction "statique" XXX
+     * XXX à dériver XXX
+     * à utiliser uniquement pour récupérer un objet <br>unique</br>
+     */
+    function get_unique_request($uid,$type) {
+        $sql = mysql_query("SELECT data,stamp FROM requests WHERE user_id='$uid' and type='$type'");
+        if(list($result,$stamp) = mysql_fetch_row($sql)) {
+            $result = unserialize($result);
+            // on ne fait <b>jamais</b> confiance au timestamp de l'objet,
+            $result->stamp = $stamp;
+            if(!$result->unique) // on vérifie que c'est tout de même bien un objet unique
+                $result = false;
+        } else
+            $result = false;
+
+        mysql_free_result($sql);
+        return $result;
+    }
+
+    /** fonction statique qui renvoie la requête de l'utilisateur d'id $uidau timestamp $t
+     * @param   $uid    l'id de l'utilisateur concerné
+     * @param   $type   le type de la requête
+     * @param   $stamp  le timestamp de la requête
+     *
+     * XXX fonction "statique" XXX
+     * à utiliser uniquement pour récupérer un objet dans la BD avec Validate::get_request(...)
+     */
+    function get_request($uid, $type, $stamp) {
+        $sql = mysql_query("SELECT data,stamp"
+            ." FROM requests"
+            ." WHERE user_id='$uid' and type = '$type' and stamp='$stamp'");
+        if(list($result,$stamp) = mysql_fetch_row($sql)) {
+            $result = unserialize($result);
+            // on ne fait <b>jamais</b> confiance au timestamp de l'objet,
+            $result->stamp = $stamp;
+        } else
+            $result = false;
+
+        mysql_free_result($sql);
+        return($result);
+    }
+
+    /** constructeur
+     * @param       $_uid       user id
+     * @param       $_unique    requête pouvant être multiple ou non
+     * @param       $_type      type de la donnée comme dans le champ type de x4dat.requests
+     * @param       $_stamp     stamp de création, 0 si c'estun nouvel objet
+     */
+    function Validate($_uid, $_unique, $_type, $_stamp=0) {
+        $this->uid = $_uid;
+        $this->stamp = $_stamp;
+        $this->unique = $_unique;
+        $this->type = $_type;
+    }
+    
+    /** fonction à utiliser pour envoyer les données à la modération
+     * cette fonction supprimme les doublons sur un couple ($user,$type) si $this->unique est vrai
+     */
+    function submit () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        mysql_query("LOCK requests"); // le lock est obligatoire pour récupérer le dernier stamp !
+        
+        if($this->unique)
+            mysql_query("DELETE FROM requests WHERE user_id='".$this->uid
+                    .   "' AND type='".$this->type."'");
+       
+        mysql_query("INSERT INTO requests SET user_id='".$this->uid."', type='".$this->type
+                .   "', data='".addslashes(serialize($this))."'");
+
+        // au cas où l'objet est réutilisé après un commit, il faut mettre son stamp à jour
+        $sql = mysql_query("SELECT MAX(stamp) FROM requests "
+                .   "WHERE user_id='".$this->uid."' AND type='".$this->type."'");
+        list($this->stamp) = mysql_fetch_row($sql);
+        mysql_free_result($sql);
+
+        mysql_query("UNLOCK requests");
+        return true;
+    }
+    
+    /** fonction à utiliser pour nettoyer l'entrée de la requête dans la table requests
+     * attention, tout est supprimé si c'est un unique
+     */
+    function clean () {
+        global $no_update_bd;
+        if($no_update_bd) return false;
+        return mysql_query("DELETE FROM requests WHERE user_id='".$this->uid."' AND type='".$this->type."'"
+                .($this->unique ? "" : " AND stamp='".$this->stamp."'"));
+    }
+    
+    /** doit afficher le fomulaire de validation de la donnée
+     * XXX la fonction est "virtuelle" XXX
+     * XXX doit définir les variables $uid et $stamp en hidden XXX
+     */
+    function echo_formu() { }
+    /** fonction à réaliser en cas de valistion du formulaire
+     * XXX la fonction est "virtuelle" XXX
+     */
+    function handle_formu () { }
+    /** fonction à utiliser pour insérer les données dans x4dat
+     * XXX la fonction est "virtuelle" XXX
+     */
+    function commit () { }
+}
+
+//***************************************************************************************
+//
+// IMPLEMENTATIONS
+//
+//***************************************************************************************
+
+require("valid_aliases.inc.php");
+require("valid_epouses.inc.php");
+require("valid_photos.inc.php");
+require("valid_ml.inc.php");
+require("valid_sondages.inc.php");
+require("valid_emploi.inc.php");
+require("valid_evts.inc.php");
+
+?>
index 25fd7ac..29ab287 100644 (file)
@@ -6,7 +6,7 @@ function block_dynamic($param, $content, &$smarty) {
         return $content;
 }
 
-function function_dyn($params) { return implode(' ',$params); }
+function function_dyn($params) { return stripslashes(htmlentities(implode(' ',$params))); }
 
 class XorgPage extends DiogenesCorePage {
   var $_page_type;
@@ -41,6 +41,7 @@ class XorgPage extends DiogenesCorePage {
           parent::display('skin/'.$_SESSION['skin_popup'], $id);
       else
           parent::display('skin/'.$_SESSION['skin'], $id);
+      exit;
   }
 
   function make_id() {
diff --git a/templates/alias.tpl b/templates/alias.tpl
new file mode 100644 (file)
index 0000000..d980ce4
--- /dev/null
@@ -0,0 +1,72 @@
+{* $Id: alias.tpl,v 1.1 2004-01-26 22:29:02 x2000habouzit Exp $ *}
+
+{if $success}
+<p class="normal">
+  a demande de création des alias <b>{dyn s=$success}@melix.net</b> et
+  <b>{dyn s=$success}@melix.org</b> a bien été enregistrée. Après
+  vérification, tu recevras un mail te signalant l'ouverture de ces adresses.
+</p>
+<p class="normal">
+  Encore merci de nous faire confiance pour tes e-mails !
+</p>
+{else}
+{if $error}
+<p class="normal">{dyn s=$error}</p>
+{/if}
+
+<div class="rubrique">
+  Adresses e-mail personnalisées
+</div>
+
+<p class="normal">
+  Pour plus de <b>convivialité</b> dans l'utilisation de tes mails, tu peux choisir une adresse
+  e-mail discrète et personnalisée. Ce nouvel e-mail peut par exemple correspondre à ton surnom.
+</p>
+<p>
+  Pour de plus amples informations sur ce service, nous t'invitons à consulter
+  <a href="{"docs/doc_melix.php"|url}">cette documentation</a> qui répondra
+  sans doute à toutes tes questions
+</p>
+
+{dynamic on="0$actuel"}
+<p class='normal'>
+<b>Note : tu as déjà l'alias {$actuel}, or tu ne peux avoir qu'un seul alias à la fois.
+  Si tu effectues une nouvelle demande l'ancien alias sera effacé.</b>
+</p>
+{/dynamic}
+
+{dynamic on="0$demande"}
+<p class='normal'>
+<b>Note : tu as déjà effectué une demande pour {$demande->alias}, dont le traitement est
+  en cours. Si tu souhaites modifier ceci refais une demande, sinon ce n'est pas la peine.</b>
+</p>
+{/dynamic}
+
+<br />
+<form action="{$smarty.server.PHP_SELF}" method="POST" name="alias_dem">
+  <table class="tinybicol" align="center" cellpadding="4" summary="Demande d'alias">
+    <tr>
+      <th colspan="2">Demande d'alias</th>
+    </tr>
+    <tr align="left">
+      <td>Alias demandé :</td>
+    </tr>
+    <tr align="center">
+      <td><input type="text" name="alias" value="{dyn s=$r_alias}">@melix.net et @melix.org</td>
+    </tr>
+    <tr align="left">
+      <td>Brève explication :</td>
+    </tr>
+    <tr align="center">
+      <td><textarea rows="5" cols="50" name="raison">{dyn s=$r_raison}</textarea></td>
+    </tr>
+    <tr align="right">
+      <td><input type="submit" name="submit"
+        value="Envoyer"></td>
+    </tr>
+  </table>
+</form>
+
+{/if}
+
+{* vim:set et sw=2 sts=2 sws=2: *}